diff options
| author | Martin Hořeňovský | 2025-07-19 00:18:45 +0200 |
|---|---|---|
| committer | Martin Hořeňovský | 2025-07-20 18:34:21 +0200 |
| commit | 55b14e1b3482e1233f0fbf41dee8dceebee8db1e (patch) | |
| tree | 049e971c06125f07b7babe837f792c98a0d58076 /src/catch2 | |
| parent | ce128f584c293b17362d838a8dc65bc81ffc8dff (diff) | |
| download | catch3-55b14e1b3482e1233f0fbf41dee8dceebee8db1e.tar.gz | |
Update last seen line info in the assertionEnded fast path
This costs us about 1% perf in Debug build and 3% in Release build,
but it is worth it for more precise information during unexpected
exceptions or fatal errors.
Given a simple test case like this
```cpp
TEST_CASE("Hard fail") {
REQUIRE( 1 == 1 );
REQUIRE( 2 == 2 );
throw 1;
REQUIRE( 3 == 3 );
}
```
Catch2 before this change would report the line info from the
`TEST_CASE` macro as the last seen expression before error. With
this change, it will correctly report the line info from the
`REQUIRE(2 == 2)` assertion as the last seen expression before error.
Diffstat (limited to 'src/catch2')
| -rw-r--r-- | src/catch2/internal/catch_run_context.cpp | 6 | ||||
| -rw-r--r-- | src/catch2/internal/catch_run_context.hpp | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/catch2/internal/catch_run_context.cpp b/src/catch2/internal/catch_run_context.cpp index df40d445..02fa3eb8 100644 --- a/src/catch2/internal/catch_run_context.cpp +++ b/src/catch2/internal/catch_run_context.cpp @@ -515,7 +515,8 @@ namespace Catch { return m_lastAssertionPassed; } - void RunContext::assertionPassed() { + void RunContext::assertionPassedFastPath(SourceLineInfo lineInfo) { + m_lastKnownLineInfo = lineInfo; m_lastAssertionPassed = true; ++m_totals.assertions.passed; m_messageScopes.clear(); @@ -603,7 +604,8 @@ namespace Catch { if( result ) { if (!m_includeSuccessfulResults) { - assertionPassed(); + // Fast path if neither user nor reporter asked for passing assertions + assertionPassedFastPath(info.lineInfo); } else { reportExpr(info, ResultWas::Ok, &expr, negated); diff --git a/src/catch2/internal/catch_run_context.hpp b/src/catch2/internal/catch_run_context.hpp index 9626e448..6e9f21f7 100644 --- a/src/catch2/internal/catch_run_context.hpp +++ b/src/catch2/internal/catch_run_context.hpp @@ -108,7 +108,7 @@ namespace Catch { bool lastAssertionPassed() override; - void assertionPassed(); + void assertionPassedFastPath(SourceLineInfo lineInfo); public: // !TBD We need to do this another way! |