Skip to content

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

@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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions