-
Notifications
You must be signed in to change notification settings - Fork 34
Fixes around pc freshness and reachability #737
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
Conversation
| hd :: tl -> begin | ||
let pc_to_check = List.fold_left Symbolic_value.Bool.and_ hd tl in | ||
let pc_to_check = | ||
Symbolic_path_condition.slice (Thread.pc thread) pc_to_check |
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.
A call to slice
can only be done if there was a call to Symbolic_path_condition.add
before.
false | ||
in | ||
let* () = check_reachability in |
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 understand the purpose one this check
@@ -484,18 +495,22 @@ module Make (Thread : Thread_intf.S) = struct | |||
in | |||
let this_val_branch = | |||
let* () = add_breadcrumb (Int32.to_int i) in | |||
let+ () = add_pc this_value_cond in | |||
let* () = add_pc this_value_cond in | |||
let+ () = modify_thread Thread.mark_pending_pc_done in |
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.
So this is adding something to the pending PC and then emptying the pending PC immediately?
I decided to merge #739 instead. It makes reasoning easier, as eager pruning of infeasible path is much more easier to explain and maintain as an invariant. I think it may makes sense to explore lazy pruning in the future, but I'd prefer to start with the easier version for now. |
Fix: #566 (both reproducing examples)