Support unevaluated constants in specs #1332
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.
Fix #1268.
Constant encoding is a bit of a mess. There are some functions in
Enconder
to specifically handle scalar constants, there isencode_snapshot_constant
, and there is theConstantsEncoderInterface
(@vakaras) which is a copy of theEncoder
version but without using theencode_snapshot_constant
…Anyway, this PR adds support for unevaluated constants (for example, a reference to a constant) in the pure function encoder. In the MIR these are represented as "promoted" items, i.e. sub-bodies of MIR bodies identified by a pair the owner
DefId
and aPromoted
index. We can run such bodies through the pure function encoder to get a snapshot encoding of the "execution" of such a constant. Since #1304 this works for enums too, thanks to rust-lang/rust#107267.