Closed ghost closed 4 years ago
Yes, CfaProductState.equals asserts location name uniqueness. This bug can cause the abstractor to believe an unvisited state has already been visited, missing a possible counterexample. I believe this discussion should be moved to theta as this means there is currently no way of distinguishing between two locations of the same name.
Location instances and CFA Locations (as an abstract entity) have a one-to-one mapping, thus loc.getName().equals(other.loc.getName())
could be changed loc == other.loc
or loc.equals(other.loc)
and it will work.
Ok
If you define an edge with multiple stmts, the CFA is split in
CfaEdgeDefinition.java
, but the intermediate generated locations all have a name of empty string. This can collide later as something asserts that location names are unique. I've found the bug using this project, but maybe the error is not here.I have a test that fails without this patch, but runs fine when applied:
Do you know anything in this lib that asserts location name uniqueness? @mondokm If not, I'll move the discussion to the theta :)