-
Notifications
You must be signed in to change notification settings - Fork 274
Track deallocated/dead in an array #6506
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
c7f7af4
to
0feca11
Compare
be59b58
to
1a0c9da
Compare
Codecov ReportBase: 77.92% // Head: 77.96% // Increases project coverage by
Additional details and impacted files@@ Coverage Diff @@
## develop #6506 +/- ##
===========================================
+ Coverage 77.92% 77.96% +0.03%
===========================================
Files 1616 1616
Lines 186814 186798 -16
===========================================
+ Hits 145580 145628 +48
+ Misses 41234 41170 -64
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. ☔ View full report at Codecov. |
The above scatter plot shows current develop (y axis) vs this proposed change (x axis) on SV-COMP's MemSafety-Heap category. This one is the benchmark set with the strongest negative signal I have found so far (several others show no significant difference, some even an improvement): on this benchmark set, CBMC is now only able to solve 140 instead of 145 tasks within the resource limits. Three of those that can no longer be solved now run out of memory, two trigger a bug (fixed in #6772). This is perhaps to be expected for we end up making use of the array theory, which may generate a lot of extra constraints. Despite this data, I'd like to see this change being considered for inclusion as it would alleviate subtle usage limitations of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What are the special characteristics of the benchmark that is such an outlier?
I'd say: a lot of objects to track where constant propagation might be unable to pick out one specific object each time there's a read to the array newly introduced in this PR. Two trouble makers are https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/main/c/list-ext-properties/test-0217_1.c and https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/main/c/memsafety/test-0235-3.c. There are also two tests that appear to cause an invariant failure that may point to a bug elsewhere. |
This bug is now addressed by #6772. The more frequent use of this code via this PR just made it visible. |
3a35dfd
to
1689495
Compare
We always allocated fresh objects, it is impossible for the condition in these assignments to be true.
This enables tracking of all deallocations and all dead objects, and thereby use of deallocated/dead_object predicates within assumptions.
1689495
to
5be34fb
Compare
This enables tracking of all deallocations and all dead objects, and
thereby use of deallocated/dead_object predicates within assumptions.
This requires performance evaluation.