Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMartin Hořeňovský2025-07-19 00:18:45 +0200
committerMartin Hořeňovský2025-07-20 18:34:21 +0200
commit55b14e1b3482e1233f0fbf41dee8dceebee8db1e (patch)
tree049e971c06125f07b7babe837f792c98a0d58076
parentce128f584c293b17362d838a8dc65bc81ffc8dff (diff)
downloadcatch3-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.
-rw-r--r--src/catch2/internal/catch_run_context.cpp6
-rw-r--r--src/catch2/internal/catch_run_context.hpp2
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!