[Unity][Transform] Handle replacement at both var binding and usage #16367
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.
Resolve a bug that caused undefined relax variables in the output of
CanonicalizeBindings
for cases whereVisitVarDef(const Var&)
replaces a variable, andVisitExpr_(const VarNode*)
returns a value with different struct info, both occurring within the sameVarBinding
.The ExprMutator is only allowed to update a variable's struct info if the value bound to it has new struct info. When CanonicalizeBindings replaces a trivial binding, this may provide better struct info as a result.
Prior to this commit,
ExprMutator::ReEmitBinding
defined a remap forbinding->var->vid
, even if the derived class defined a replacement by overridingVisitVarDef
. If the derived class defines a new variable binding by overridingVisitVarDef
, and also causes a variable replacement by overridingVisitExpr
and returning a type with different struct info, thenExprMutator
must check for bothbinding->var->vid
ANDnew_var->vid
. The former may be present in the unmodified graph, and the latter may be produced by the derived class before delegating to the base class.This commit updates
ExprMutator::ReEmitBinding
to define entries for both replacements that may be required.