-
Notifications
You must be signed in to change notification settings - Fork 42
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
llvm: Fix validity predicate for memory reads with symbolic block numbers #1238
Conversation
I tried to create a regression test, but I'm having trouble triggering this case. Here's what I tried:
But it looks like this wasn't good enough to both (1) avoid the |
For what it's worth, I do have a test-case for a downstream project that this fixes. |
If it makes you feel better, some of the |
…bers Previously, this case returned the concretely-true predicate. This is incorrect, as `isAllocatedGeneric` takes an argument `inAlloc`, which is supposed to be applied to the `AllocInfo` of the allocation with the matching block number, as it is in the other branch. Mea culpa, looks like I introduced this bug long ago. re: UC-Crux tests. It looks to me like what's happening is that UC-Crux previously found certain errors in each of these test cases that were adequately handled by its heuristics. Fixing this predicate introduces a new kind of error, and the heuristics aren't sophisticated enough to deal with this one. UC-Crux then gives up, saying it's not sure how to avoid these errors with a new precondition (leaving them "unclassified"). This is unfortunate, but UC-Crux already can't abduce preconditions for a wide variety of programs, so I don't consider this a blocker.
It looks to me like what's happening is that UC-Crux previously found certain errors in each of these test cases that were adequately handled by its heuristics. Fixing this predicate introduces a new kind of error, and the heuristics aren't sophisticated enough to deal with this one. UC-Crux then gives up, saying it's not sure how to avoid these errors with a new precondition (leaving them "unclassified"). This is unfortunate, but UC-Crux already can't abduce preconditions for a wide variety of programs, so I don't consider this a blocker. |
b9988b8
to
4c5b904
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do wonder if this will cause other proof goals to shift in downstream projects (e.g., SAW). That being said, this code is clearly more correct than it was before, so I'm in support of landing it.
Previously, this case returned the concretely-true predicate. This is incorrect, as
isAllocatedGeneric
takes an argumentinAlloc
, which is supposed to be applied to theAllocInfo
of the allocation with the matching block number, as it is in the other branch.Mea culpa, looks like I introduced this bug long ago.