-
Notifications
You must be signed in to change notification settings - Fork 76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix address set meet #924
Fix address set meet #924
Conversation
The representative should not keep any information about the values of the index offset. Previously, the top() offset led to offsets being kept apart (i.e. the corresponding addresses in different buckets) in the case that different integer domains were active in the index offset. Co-authored-by: Michael Schwarz <michael.schwarz93@gmail.com> Co-authored-by: Sarah Tilscher <66023521+stilscher@users.noreply.github.com>
I'll start a run of this together with #911. |
But that is already the case: Lines 389 to 399 in 00bfa7f
Isn't this just another instance of #822? |
The issue is |
… value for index offsets is introduced.
Rename the variants in NormalLatRepr, and the NormalLatRepr.Offset module.
That seems like a problem in itself because it's supposed to be a real top, not Also, this is the index domain, which is a separate thing from the intdomain that's actually used for integer values.
It still seems to me that something deeper is wrong here that such situation can arise at all. Aren't the intdomain projections that are used for converting integer abstractions between different precisions supposed to ensure that we don't have such mixture? |
@michael-schwarz started a run with a version of this PR, so I would suggest that if the results for that run are well, we merge this hot-fix PR for the sv-comp version. We would implement a follow-up PR that addresses your remark, @sim642, to be merged after submission for sv-comp. |
Co-authored-by: Michael Schwarz <michael.schwarz93@gmail.com>
Revert changes to lval.ml from #924 to allow for cleaner implementation. Revert "Rename ReprMyStrPtr to ReprStrPtr." This reverts commit a754b7d. Revert "Rename NormalLatRepr variants and inner Offset module" This reverts commit 0c02495. Revert "Add comment explaining why separate type for offsets without abstract value for index offsets is introduced." This reverts commit 18ebb35. Revert "Imporve Lval.R.show output for strings." This reverts commit a0f48e6. Revert "Lval.R: Implement show and related print functions." This reverts commit d5bdc96. Revert "Rename type to r" This reverts commit 21bd2cd. Revert "Addressets: Remove index-offset information from representative." This reverts commit d35bc54.
The meet of addresses is currently unsound when different integer domains may be activated within an analysis run. This is demonstrated by this example. Here, the abstract representation of the address pointed to by
slotvec0.val
contains an offset where all int domains are active, as all int domains are activated for global variables with theannotation.int.enabled
setting. At the point of the comparison however, onlydef_exc
is active. Therefore the abstract addresses are kept in different buckets and the meet that is performed yieldsbottom
.This issue also appears on sv-comp when the congruence auto-tuning is enabled, and for some functions the congruence domain is activated, and for others not.
This PR fixes this issue by not keeping the
index
information in the representative that is used to split address sets.(Closes #925)