C++: Simplify the definition of SemExpr for range analysis
#14697
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.
In C/C++ there are many implicit conversions which must be handled as part of range analysis. For example, in the following:
there's a short-to-int conversion on
s. Previously, we made the new range analysis library handle this by wrapping the definition of a C/C++SemExprinside anEquivalenceClassso that the expression(int)sand the expressionswas identical.However, @aschackmull made me aware that the range analysis library already has support for "this expression reads this variable" to handle stuff like
+n < 5in Java. So we can get equivalent functionality by simply making these "safe conversions" copy-value expressions, and the range analysis library will ensure that a bound on(int)sin the example above is correctly identified as a bound ons.cc @aschackmull what do you think of this? I know there are other changes you'd like to see to make your library sharing easier, but I think this is a good first step 😅.