Skip to content

Heap-zones: fixing one variable in a difference row causes the other one to be fixed, too. #131

Open
@viktormalik

Description

@viktormalik

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions