Skip to content

Commit

Permalink
Handle active Sections for fatal errors
Browse files Browse the repository at this point in the history
Closes #1210

When a signal is caught, the destructors of Sections will not be called.
Thus, we must call `sectionEndedEarly` manually for those Sections.

Example test case:
```
TEST_CASE("broken") {
   SECTION("section") {
      /// Use illegal cpu instruction
      __asm__ __volatile__("ud2" : : : "memory");
   }
}
```
  • Loading branch information
hbirler committed Apr 15, 2024
1 parent 029fe3b commit e1741f6
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/catch2/internal/catch_run_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,13 @@ namespace Catch {
assertionEnded(CATCH_MOVE(result) );
resetAssertionInfo();

// Best effort cleanup for sections that have not been destructed yet
// Since this is a fatal error, we have not had and won't have the opportunity to destruct them properly
while (!m_activeSections.empty()) {
auto nl = m_activeSections.back()->nameAndLocation();
SectionEndInfo endInfo{ SectionInfo(CATCH_MOVE(nl.location), CATCH_MOVE(nl.name)), {}, 0.0 };
sectionEndedEarly(CATCH_MOVE(endInfo));
}

Check warning on line 459 in src/catch2/internal/catch_run_context.cpp

View check run for this annotation

Codecov / codecov/patch

src/catch2/internal/catch_run_context.cpp#L455-L459

Added lines #L455 - L459 were not covered by tests
handleUnfinishedSections();

// Recreate section for test case (as we will lose the one that was in scope)
Expand Down

0 comments on commit e1741f6

Please sign in to comment.