Check cast safety in base invariant_fallback
#1821
Open
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.
Closes #1782.
In the problematic test, the changed line was casting
4294967295UL
(same after division bysizeof(char)
) to the type of the lvaluen_update
, which isint
. This cast is not safe and caused an incorrect -1 bound to be used.This PR adds a check with
VD.is_dynamically_safe_cast
before doing the cast.This is the very base case of
invariant_fallback
, so the change could have quite an impact. Although lvalues are also refined by HC4'sinv_exp
at the non-fallback level. So I'm not sure how often the fallback case actually gets used.