Fix wrong native locations in optimized IR AST #15228
Merged
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.
Looks like
nativeSrc
in the Yul AST always matches the unoptimized source, even when the AST represents the structure of the optimized one. It's not surprising since keeping locations updated through optimizations would be pretty inconvenient for very little value, but still, I don't think users are expecting this behavior and I'd consider it a bug. I guess one could argue that the unoptimized location is the truly "native" one, but I don't think this was ever intended and does not seem very useful, since those locations are already available in the unoptimized AST.The fix is to reparse the source again before generating the optimized AST.
Yul parsing is pretty fast so I did not bother optimizing this, but if we wanted to we could switch to not storing the IR AST and generating it on demand instead. It would save some memory too and I think that this feature is rarely used so no point in doing it eagerly.