diff options
| author | Ralf Jung <post@ralfj.de> | 2022-02-22 19:09:11 -0500 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2022-02-22 19:09:11 -0500 |
| commit | d0192e62914f3ca48314f5f04a1a9e9c486e8f3e (patch) | |
| tree | 3a510182a6b4b0ee345b63ca3c125e1dacf6f5b6 | |
| parent | 68369a041cea809a87e5bd80701da90e0e0a4799 (diff) | |
| download | rust-d0192e62914f3ca48314f5f04a1a9e9c486e8f3e.tar.gz rust-d0192e62914f3ca48314f5f04a1a9e9c486e8f3e.zip | |
Miri: extend comments on downcast operation
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/operand.rs | 4 | ||||
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/place.rs | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/operand.rs b/compiler/rustc_const_eval/src/interpret/operand.rs index bc4dca4c146..cd147b03bca 100644 --- a/compiler/rustc_const_eval/src/interpret/operand.rs +++ b/compiler/rustc_const_eval/src/interpret/operand.rs @@ -405,10 +405,12 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { op: &OpTy<'tcx, M::PointerTag>, variant: VariantIdx, ) -> InterpResult<'tcx, OpTy<'tcx, M::PointerTag>> { - // Downcasts only change the layout Ok(match op.try_as_mplace() { Ok(ref mplace) => self.mplace_downcast(mplace, variant)?.into(), Err(..) => { + // Downcasts only change the layout. + // (In particular, no check about whether this is even the active variant -- that's by design, + // see https://github.com/rust-lang/rust/issues/93688#issuecomment-1032929496.) let layout = op.layout.for_variant(self, variant); OpTy { layout, ..*op } } diff --git a/compiler/rustc_const_eval/src/interpret/place.rs b/compiler/rustc_const_eval/src/interpret/place.rs index e9b2df53a33..b1784b12c65 100644 --- a/compiler/rustc_const_eval/src/interpret/place.rs +++ b/compiler/rustc_const_eval/src/interpret/place.rs @@ -479,7 +479,9 @@ where base: &MPlaceTy<'tcx, M::PointerTag>, variant: VariantIdx, ) -> InterpResult<'tcx, MPlaceTy<'tcx, M::PointerTag>> { - // Downcasts only change the layout + // Downcasts only change the layout. + // (In particular, no check about whether this is even the active variant -- that's by design, + // see https://github.com/rust-lang/rust/issues/93688#issuecomment-1032929496.) assert!(!base.meta.has_meta()); Ok(MPlaceTy { layout: base.layout.for_variant(self, variant), ..*base }) } |
