-
Notifications
You must be signed in to change notification settings - Fork 277
Create SSA-level 2 names for individual fields #4545
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
Create SSA-level 2 names for individual fields #4545
Conversation
src/goto-symex/symex_decl.cpp
Outdated
{ | ||
ssa_exprt field_ssa = to_ssa_expr(l1_symbol); | ||
std::size_t field_generation = | ||
state.increase_generation(l1_symbol.get_identifier(), field_ssa); |
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.
This is surely either-or -- if we're doing this we should not create the non-canonical symbol l1_identifier
. So I'd say remove the if(fields != ssa)
and the increase_generation
call directly above it.
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.
Done.
During symex, a declaration introduces non-deterministic values for the declared symbol by creating a fresh L2 name without assigning any value to it. With field-sensitive SSA, the same must be done for each field (just like we already did the inverse for objects going out of scope via a DEAD instruction).
fbd06ba
to
24f4674
Compare
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.
This PR failed Diffblue compatibility checks (cbmc commit: fbd06ba).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/108692125
Status will be re-evaluated on next push.
Common spurious failures include: the cbmc commit has disappeared in the mean time (e.g. in a force-push); the author is not in the list of contributors (e.g. first-time contributors); compatibility was already broken by an earlier merge.
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.
This PR failed Diffblue compatibility checks (cbmc commit: 24f4674).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/108697316
Status will be re-evaluated on next push.
Common spurious failures include: the cbmc commit has disappeared in the mean time (e.g. in a force-push); the author is not in the list of contributors (e.g. first-time contributors); compatibility was already broken by an earlier merge.
During symex, a declaration introduces non-deterministic values for the
declared symbol by creating a fresh L2 name without assigning any value
to it. With field-sensitive SSA, the same must be done for each field
(just like we already did the inverse for objects going out of scope via
a DEAD instruction).