Make sure symbols in annotation trees are fresh before pickling #22002
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 a nutshell: when mapping annotated types, we can currently end up with the same symbol being declared in distinct trees, which crashes the pickler as it expects each symbol to be declared in a single place. See #19957 (comment) and #19957 (comment) for more context.
This PR ensures that all symbols in annotation trees are different by creating fresh symbols for all symbols in annotation tree during
PostTyper
.In my previous attempt which was discussed on #19957, I did it in
Annotations.mapWith
. Here, it's only done once inPostTyper
, so this is more lightweight.Fixes #17939, fixes #19846 and fixes (partially?) #20272.