Rollup merge of #143096 - RalfJung:tag_for_variant, r=compiler-errors
tag_for_variant: properly pass TypingEnv Hard-coding `fully_monomorphized` here does not seem right... This came up [on Zulip](https://rust-lang.zulipchat.com/#narrow/channel/182449-t-compiler.2Fhelp/topic/.E2.9C.94.20VariantId.3DDiscriminant.20when.20tag.20is.20niche.20encoded.3F/with/526103956).
This commit is contained in:
@@ -66,18 +66,13 @@ pub(crate) fn try_destructure_mir_constant_for_user_output<'tcx>(
|
||||
#[instrument(skip(tcx), level = "debug")]
|
||||
pub fn tag_for_variant_provider<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
(ty, variant_index): (Ty<'tcx>, VariantIdx),
|
||||
key: ty::PseudoCanonicalInput<'tcx, (Ty<'tcx>, VariantIdx)>,
|
||||
) -> Option<ty::ScalarInt> {
|
||||
let (ty, variant_index) = key.value;
|
||||
assert!(ty.is_enum());
|
||||
|
||||
// FIXME: This uses an empty `TypingEnv` even though
|
||||
// it may be used by a generic CTFE.
|
||||
let ecx = InterpCx::new(
|
||||
tcx,
|
||||
ty.default_span(tcx),
|
||||
ty::TypingEnv::fully_monomorphized(),
|
||||
crate::const_eval::DummyMachine,
|
||||
);
|
||||
let ecx =
|
||||
InterpCx::new(tcx, ty.default_span(tcx), key.typing_env, crate::const_eval::DummyMachine);
|
||||
|
||||
let layout = ecx.layout_of(ty).unwrap();
|
||||
ecx.tag_for_variant(layout, variant_index).unwrap().map(|(tag, _tag_field)| tag)
|
||||
|
||||
Reference in New Issue
Block a user