-
Notifications
You must be signed in to change notification settings - Fork 283
Multi-path symex-only checker [blocks: 3795] #3794
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
Multi-path symex-only checker [blocks: 3795] #3794
Conversation
b322f1e
to
8253fa4
Compare
get_memory_model(options, ns); | ||
memory_model->set_message_handler(ui_message_handler); | ||
(*memory_model)(equation); | ||
} |
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.
I don't think this is of any use for this checker?
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.
It won't have any impact on the property status, but I'd like still want to see the entire 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.
Yes, but doing unnecessary work should at least be explicitly documented via comments.
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.
✔️
Passed Diffblue compatibility checks (cbmc commit: 8253fa4).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/97176111
8253fa4
to
b197d35
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.
✔️
Passed Diffblue compatibility checks (cbmc commit: b197d35).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/97179981
b197d35
to
ac60c6c
Compare
The depended-on PRs have been merged, this needs a rebase and possibly further work to make CI pass. |
a6bb072
to
92f74e4
Compare
1f510d2
to
7bf4d12
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.
✔️
Passed Diffblue compatibility checks (cbmc commit: 7bf4d12).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/97960133
7bf4d12
to
2061df5
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.
✔️
Passed Diffblue compatibility checks (cbmc commit: 2061df5).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/97972656
src/goto-checker/bmc_util.cpp
Outdated
} | ||
else | ||
{ | ||
property_infot &property_info = properties.at(property_id); |
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.
Repeated lookup should probably be replaced with
auto emplace_result = properties.emplace(
property_id, property_infot{step.source.pc, step.comment, status});
if(emplace_result.second)
{
...
}
else
{
property_infot &property_info = emplace_result.first->second;
...
}
|
||
for(auto &property_pair : properties) | ||
{ | ||
if(property_pair.second.status == property_statust::NOT_CHECKED) |
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.
Is there a chance the status was PASS
before the loop above changed it to NOT_CHECKED
, and therefore we might spuriously note it as changed? I think that can't happen because it's hard to imagine that |=
result with either UNKNOWN
or PASS
on the RHS would turn PASS
-> NOT_CHECKED
, but just want to check I've understood.
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.
No, cannot happen. |=
is supposed to be monotonic, i.e. once you have a PASS
, you cannot go back to something undetermined anymore.
src/goto-checker/bmc_util.h
Outdated
const optionst &, | ||
ui_message_handlert &); | ||
|
||
/// Sets property status to PASS or FAIL for properties whose |
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.
Does it? It appears to only set properties to PASS
: multi_path_symex_only_checkert(options, ui_message_handler, goto_model) | ||
{ | ||
// unwinds <clinit> loops to number of enum elements | ||
if(options.get_bool_option("java-unwind-enum-static")) |
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.
Maybe factor this code with the identical code in jbmc?
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.
Factored out into separate file. The instance of the code in jbmc_parse_options will disappear with the do_language_agnostic_bmc
call.
2061df5
to
ad11373
Compare
They are not inlined using goto_partial_inline anymore.
Updates the property infos with properties created by goto-symex and sets the status of already determined properies.
multi_path_symex_only_checkert is a bounded model checking algorithm that determines the status of properties through symbolic execution and constant propagation. I.e. it doesn't call the SAT solver. If desired CBMC could expose this to support a symex-only BMC algorithm. For now, this is used to implement show-vcc and program-only (which are rather orthogonal to the BMC algorithm used, but currently assume symex-only).
ad11373
to
3809454
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: 3809454).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/98183898
Status will be re-evaluated on next push.
Please contact @peterschrammel, @thk123, or @allredj for support.
Common spurious failures:
- 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).
The incompatibility may have been introduced by an earlier PR. In that case merging this
PR should be avoided unless it fixes the current incompatibility.
Based on #3585, only review last 4 commits