diff options
| author | bors <bors@rust-lang.org> | 2023-09-12 13:27:29 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-09-12 13:27:29 +0000 |
| commit | e5fedceabf4e0564231db592b6d1f35e1ca27908 (patch) | |
| tree | ca0dd018cb205988cdb51154eda5432a93402bb0 /compiler/rustc_codegen_ssa | |
| parent | 5f6ee65f594f59f64c7957dcad90edc0b8830284 (diff) | |
| parent | 3ec0165f5f53e349e7eb564b2b692a8b8032b18f (diff) | |
| download | rust-e5fedceabf4e0564231db592b6d1f35e1ca27908.tar.gz rust-e5fedceabf4e0564231db592b6d1f35e1ca27908.zip | |
Auto merge of #115215 - ouz-a:mir_issue, r=lcnr
Remove assert that checks type equality https://github.com/rust-lang/rust/pull/112307 although this prevented `unsound` issues it also seems to introduce regressions https://github.com/rust-lang/rust/issues/114858 is example of this regression. I locally tested this https://github.com/rust-lang/rust/issues/114858#issuecomment-1686502262 issue and failing assert is [this](https://www.diffchecker.com/cjb7jSQm/). This is also related to https://github.com/rust-lang/rust/pull/115025
Diffstat (limited to 'compiler/rustc_codegen_ssa')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/mir/locals.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/compiler/rustc_codegen_ssa/src/mir/locals.rs b/compiler/rustc_codegen_ssa/src/mir/locals.rs index da8bf5e7916..378c5401322 100644 --- a/compiler/rustc_codegen_ssa/src/mir/locals.rs +++ b/compiler/rustc_codegen_ssa/src/mir/locals.rs @@ -7,7 +7,6 @@ use rustc_index::IndexVec; use rustc_middle::mir; use rustc_middle::ty::print::with_no_trimmed_paths; use std::ops::{Index, IndexMut}; - pub(super) struct Locals<'tcx, V> { values: IndexVec<mir::Local, LocalRef<'tcx, V>>, } @@ -36,17 +35,18 @@ impl<'tcx, V> Locals<'tcx, V> { impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { pub(super) fn initialize_locals(&mut self, values: Vec<LocalRef<'tcx, Bx::Value>>) { assert!(self.locals.values.is_empty()); - + // FIXME(#115215): After #115025 get's merged this might not be necessary for (local, value) in values.into_iter().enumerate() { match value { LocalRef::Place(_) | LocalRef::UnsizedPlace(_) | LocalRef::PendingOperand => (), LocalRef::Operand(op) => { let local = mir::Local::from_usize(local); let expected_ty = self.monomorphize(self.mir.local_decls[local].ty); - assert_eq!(expected_ty, op.layout.ty, "unexpected initial operand type"); + if expected_ty != op.layout.ty { + warn!("Unexpected initial operand type. See the issues/114858"); + } } } - self.locals.values.push(value); } } |
