[WIP][C++ BoundsSafety] Experimental change of how we substitute and compare expressions #11148
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.
The basic idea is to create a wrapper class that owns a container holding AST nodes. With that, substitution can be done by manipulating the container. This implementation uses a list to hold sequentialized
Expr
s.With extra handling of
DRE
s representingMemExprs
, the implementation guarantees that if two expressions are equivalent, their sequentialized representation will have the same number of elements. Then the comparison can be done element-wise.Examples of sequentialized expressions:
x + y
->| + | x | y |
, where+
denotes a binary plus operationx[4].f
->| .f | [] | x | 4 |
, where.f
denotes a member field access;[]
denotes array subscript;