Set paths-symex-explore-all when unwinding-assertions defaults to true#8861
Set paths-symex-explore-all when unwinding-assertions defaults to true#8861tautschnig wants to merge 1 commit intodiffblue:developfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR fixes a bug where --paths lifo mode could miss dynamically generated assertions (like "no body for callee") when unwinding-assertions was enabled by default via set_default_analysis_flags. The root cause was that paths-symex-explore-all was only set when --unwinding-assertions was passed explicitly on the command line, not when it was enabled by the default analysis flags.
Changes:
- Set
paths-symex-explore-allalongsideunwinding-assertionsin the default analysis flags path incbmc_parse_options.cpp. - Remove the
paths-lifo-expected-failuretag from 17 regression test.descfiles that now pass with--paths lifo. - Remove the
paths-lifo-expected-failureexclusion fromregression/cbmc/Makefileandregression/cbmc/CMakeLists.txt.
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/cbmc/cbmc_parse_options.cpp | Core fix: set paths-symex-explore-all when unwinding-assertions defaults on |
| regression/cbmc/Makefile | Remove -X paths-lifo-expected-failure exclusion from test-paths-lifo target |
| regression/cbmc/CMakeLists.txt | Remove paths-lifo-expected-failure exclusion from cbmc-paths-lifo test profile |
| 17 × regression/cbmc//test.desc | Remove paths-lifo-expected-failure tag, now tagged as plain CORE |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
When unwinding-assertions is enabled by default (via set_default_analysis_flags), paths-symex-explore-all must also be enabled. Otherwise, the single-path symex checker's has_finished_exploration check can return true before any path is explored, because dynamically generated properties (like 'no body for callee') don't exist in the initial properties map. The explicit --unwinding-assertions flag already set paths-symex-explore-all (line 192), but the default enablement path did not, causing --paths lifo to miss no-body assertions. Also fix two pre-existing bugs exposed by the exploration fix: - --outfile with an invalid path was silently ignored in --paths mode because the solver (and thus the file) was never created when all VCCs were simplified away. Add early outfile validation. - --sat-solver with an invalid name was silently ignored for the same reason. Add early solver name validation in parse_sat_options. Five tests previously tagged paths-lifo-expected-failure now pass with --paths lifo, so remove the tag from those. Co-authored-by: Kiro <kiro-agent@users.noreply.github.com>
bc8cdc9 to
2760b9b
Compare
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #8861 +/- ##
===========================================
- Coverage 80.01% 80.00% -0.01%
===========================================
Files 1703 1703
Lines 188396 188415 +19
Branches 73 73
===========================================
+ Hits 150738 150746 +8
- Misses 37658 37669 +11 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
When unwinding-assertions is enabled by default (via set_default_analysis_flags), paths-symex-explore-all must also be enabled. Otherwise, the single-path symex checker's has_finished_exploration check can return true before any path is explored, because dynamically generated properties (like 'no body for callee') don't exist in the initial properties map.
The explicit --unwinding-assertions flag already set paths-symex-explore-all (line 192), but the default enablement path did not, causing --paths lifo to miss no-body assertions.
Co-authored-by: Kiro kiro-agent@users.noreply.github.com
All tests previously tagged paths-lifo-expected-failure now pass, so remove the tag and the corresponding exclusion from the Makefile and CMakeLists.txt.