fix ICE due to untranslated inner items in unreachable code #16452
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.
This code produces an ICE:
(playpen)
The error is "encode_symbol: id not found 18", where 18 is the
NodeId
of the declaration ofMAGIC
. The problem is thatrustc
tries to emit metadata forMAGIC
, but some of the information is missing becauseMAGIC
never gets translated bytrans_item
- the entire body of thematch
gets skipped because thematch
itself is unreachable.This branch simplifies the handling of inner items by always processing them using the
trans_item
visitor, instead of sometimes using the visitor and sometimes waiting untiltrans_stmt
encounters the item. This fixes the ICE by making the translation of the item no longer depend on the declaration being reachable code. This branch also reverts #16059 and #16359, since the new change to item translation fixes the same problems as those but is simpler.