You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If one variable is a standalone variable that occurs in a condition of a loop, and the other variable is a field of a dynamic object, values of all fields of all objects represented by the given abstract dynamic objects may be fixed for the rest of the program.
For example:
while (nondet && !mark) {
x = malloc(...);
mark = nondet ? 1 : 0;
x->val = mark;
}
assert(head->val == 0)
Since mark occurs in the while condition, SSA contains mark==0 for the code after the loop. Also, heap-zones domain computes dynamic_object$0.val - mark == 0, which causes dynamic_object$0.val to be equal to 0 and the assertion is wrongly evaluated as true.
The text was updated successfully, but these errors were encountered:
I suggest we check for variables occurring in conditions of loops (or maybe in conditions in general) and then forbid any difference template rows that use such variables with fields of abstract dynamic objects to be used in the rest of the program.
If one variable is a standalone variable that occurs in a condition of a loop, and the other variable is a field of a dynamic object, values of all fields of all objects represented by the given abstract dynamic objects may be fixed for the rest of the program.
For example:
Since
mark
occurs in the while condition, SSA containsmark==0
for the code after the loop. Also, heap-zones domain computes dynamic_object$0.val - mark == 0, which causes dynamic_object$0.val to be equal to 0 and the assertion is wrongly evaluated as true.The text was updated successfully, but these errors were encountered: