-
Notifications
You must be signed in to change notification settings - Fork 273
is_invalid_pointer is now defined as a bi-implication #6366
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
base: develop
Are you sure you want to change the base?
Conversation
a6542e7
to
afd2d09
Compare
Codecov Report
@@ Coverage Diff @@
## develop #6366 +/- ##
========================================
Coverage 75.97% 75.97%
========================================
Files 1523 1523
Lines 164191 164196 +5
========================================
+ Hits 124748 124754 +6
+ Misses 39443 39442 -1
Continue to review full report at Codecov.
|
ff64c00
to
ea71734
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.
Is there any data on how much slower things get in practice?
main.c | ||
--pointer-check | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFUL$ | ||
-- | ||
^warning: ignoring |
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 pattern being removed?
main.c | ||
--pointer-check --no-simplify --no-propagation | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFUL$ | ||
-- | ||
^warning: ignoring |
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 pattern being removed?
main.c | ||
--pointer-check | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFUL$ | ||
-- | ||
^warning: ignoring |
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 pattern being removed?
main.c | ||
--pointer-check --no-simplify --no-propagation | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFUL$ | ||
-- | ||
^warning: ignoring |
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 pattern being removed?
^SIGNAL=0$ | ||
-- | ||
^warning: ignoring |
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 pattern being removed?
The previous encoding of is_invalid_pointer is an implication, which means that constraints that a pointer is not an invalid pointer have no meaning. This commit changes the encoding to be a bi-implication, using the numerical range of the valid pointers.
ea71734
to
c9a22ab
Compare
Returning to this after some time. A bunch of thoughts:
|
@tautschnig suggests above
Does that take us back to being an implication rather than an equivalence, and were we trying to get away from that? Also, if this is an equivalence, can we please invert the sense and change the name to "is_valid_pointer". It's confusing to have to say that a pointer is valid by saying that it is not invalid. |
It should be noted that the existing implementation (prior to the changes proposed in this PR) was a bi-implication on the object that is singled out as the "invalid" object. Therefore, "is invalid object" (at present) has to be read as "is the invalid object," and not "is not a valid object." It may well be that we should ...
... keep the current |
Agree about calling the proposed thing "is_valid_object" (not "is_valid_pointer") for sure. What would keeping the current "is_invalid_object" do? Would it still track a single distinguished invalid object? Or would it be the negation of "is_valid_object". Is the motivation to keep it to avoid breaking existing code or is there another reason to have "is_invalid_object" kept around? |
I think we need a proper 'object factory' facility! |
Revoking my approval as the solution likely is not the right one to address the user request.
Some notes as @kroening and myself discussed this out of band: the proposed approach may have a substantial performance penalty. This may be fixed by making improvements to post-processing, but even then |
This one doesn't seem like the way to go. Should we close it to declutter? |
|
The previous encoding of is_invalid_pointer is an implication,
which means that constraints that a pointer is not an invalid
pointer have no meaning.
This commit changes the encoding to be a bi-implication, using
the numerical range of the valid pointers.