-
Notifications
You must be signed in to change notification settings - Fork 80
Relational: Use same invalidation strategy as base #1646
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
Open
michael-schwarz
wants to merge
6
commits into
master
Choose a base branch
from
issue_1535
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
508d7e2
Use same invalidation strategy as base (References #1535)
michael-schwarz 406ad22
Make name unique?
michael-schwarz 563a5b1
Support for `threadenter` for unknown function
michael-schwarz 79df614
Merge branch 'master' into issue_1535
michael-schwarz e03a6f7
Update comment
michael-schwarz bb534ff
Simplify invalidation
michael-schwarz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
// SKIP PARAM: --set ana.activated[+] apron --set sem.int.signed_overflow assume_none | ||
#include <pthread.h> | ||
#include <goblint.h> | ||
#include <stdio.h> | ||
|
||
int debug; | ||
int other; | ||
|
||
int main() { | ||
int top; | ||
|
||
// Needed so Base & DefExc doesn't find this information because it invalidates less | ||
if(top) { | ||
debug = 3; | ||
} | ||
|
||
fscanf(stdin, "%d", &other); | ||
|
||
// Use to fail as debug was invalidated | ||
__goblint_check(debug <= 3); | ||
return 0; | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Why is this moved out? Base only does it for non-unknown thread functions.
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.
The logic of why it is needed is the same here as it is for the case where a known thread is created: One should not go into multi-threaded mode without notifying the privatization that this switch happened to ensure everything that should be published is published.
Maybe base has some reason this can be avoided, but I'm not really sure why that should be the case. We may want to make an issue to investigate this.
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.
Also see the last few comments in #1551
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.
#1551 (comment)
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.
The one test in this PR doesn't cover this, does it?
I tried the very simple thing of creating a thread from unknown function pointer and that seems to work with base. That's because threadflag analysis emits the
EnterMultiThreaded
event which is handled by base (and relational).The comment for this hack is about the globals values that get used when analyzing the created thread. For an unknown function pointer, there's no thread body to analyze anyway, so it's not clear to me when it would make a difference.
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.
The test covers it in some sense. We mean to invalidate
e
and outputBut this invalidation does not take and we still claim to be able to prove things about
e
.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.
Edit: That case is listed in the linked issue.
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.
Do you mean this?
Where or what are we claiming to prove about
e
? There aren't any assertions. Can you add it as a test?I traced
sol
andsol2
on it and what this changes is that we no longer have-e+2147483647.>=0
,e+2147483648.>=0
and all derived octagon constraints from that. But these are just type bounds, so they shouldn't be unsound to begin with.The point of this PR is to unify logic between base and relation analyses, but this move introduces a new difference. If the old place is really wrong, then we should also fix it in base.
I want to avoid another issue like #1535 down the line where the inconsistency comes up and there's no understanding of why they're different.
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.
Sure, I guess I should have linked to this comment: #1551 (comment)
These invariants exploit that
e
is supposedly0
, even thoughe
andf
have been invalidated.