Open michael-schwarz opened 1 month ago
Currently the meet of an unknown string pointer and a known string pointer is the unknown string pointer.
{"string"} \sqcap {(unknown string)} = {(unknown string)}
The problem seems to be in the address domain, as the actual meet in the string domain which is defined to return the known pointer
https://github.com/goblint/analyzer/blob/bffc5e3cbb1f43bd5c9483a6545802cfba5d3d76/src/cdomain/value/cdomains/stringDomain.ml#L99-L108
is never actually called.
The call propagates until ProjectiveSetPairwiseMeet
ProjectiveSetPairwiseMeet
https://github.com/goblint/analyzer/blob/bffc5e3cbb1f43bd5c9483a6545802cfba5d3d76/src/domain/disjointDomain.ml#L190-L205
where B.may_be_equal delegates to
B.may_be_equal
https://github.com/goblint/analyzer/blob/bffc5e3cbb1f43bd5c9483a6545802cfba5d3d76/src/cdomain/value/cdomains/addressDomain.ml#L180
Addr.semantic_equal given by
Addr.semantic_equal
https://github.com/goblint/analyzer/blob/bffc5e3cbb1f43bd5c9483a6545802cfba5d3d76/src/cdomain/value/cdomains/addressDomain.ml#L102-L111
which calls SD.sematic_equal
SD.sematic_equal
https://github.com/goblint/analyzer/blob/bffc5e3cbb1f43bd5c9483a6545802cfba5d3d76/src/cdomain/value/cdomains/stringDomain.ml#L77-L81
Currently the meet of an unknown string pointer and a known string pointer is the unknown string pointer.
The problem seems to be in the address domain, as the actual meet in the string domain which is defined to return the known pointer
https://github.com/goblint/analyzer/blob/bffc5e3cbb1f43bd5c9483a6545802cfba5d3d76/src/cdomain/value/cdomains/stringDomain.ml#L99-L108
is never actually called.