Auto merge of #116455 - matthiaskrgr:rollup-p226a5u, r=matthiaskrgr · rust-lang/rust@cdca82c
@@ -15,7 +15,7 @@ use rustc_middle::mir::interpret::{alloc_range, AllocId};
1515use rustc_middle::ty::{self, Ty, TyCtxt, Variance};
1616use rustc_span::def_id::{CrateNum, DefId, LOCAL_CRATE};
1717use rustc_target::abi::FieldIdx;
18-use stable_mir::mir::{CopyNonOverlapping, UserTypeProjection, VariantIdx};
18+use stable_mir::mir::{CopyNonOverlapping, Statement, UserTypeProjection, VariantIdx};
1919use stable_mir::ty::{FloatTy, GenericParamDef, IntTy, Movability, RigidTy, Span, TyKind, UintTy};
2020use stable_mir::{self, opaque, Context};
2121use tracing::debug;
@@ -106,7 +106,14 @@ impl<'tcx> Context for Tables<'tcx> {
106106.collect(),
107107})
108108.collect(),
109-locals: mir.local_decls.iter().map(|decl| self.intern_ty(decl.ty)).collect(),
109+locals: mir
110+.local_decls
111+.iter()
112+.map(|decl| stable_mir::mir::LocalDecl {
113+ty: self.intern_ty(decl.ty),
114+span: decl.source_info.span.stable(self),
115+})
116+.collect(),
110117}
111118}
112119@@ -223,41 +230,64 @@ pub(crate) trait Stable<'tcx> {
223230impl<'tcx> Stable<'tcx> for mir::Statement<'tcx> {
224231type T = stable_mir::mir::Statement;
225232fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
226-use rustc_middle::mir::StatementKind::*;
227-match &self.kind {
228-Assign(assign) => {
229- stable_mir::mir::Statement::Assign(assign.0.stable(tables), assign.1.stable(tables))
230-}
231-FakeRead(fake_read_place) => stable_mir::mir::Statement::FakeRead(
232- fake_read_place.0.stable(tables),
233- fake_read_place.1.stable(tables),
233+Statement { kind: self.kind.stable(tables), span: self.source_info.span.stable(tables) }
234+}
235+}
236+237+impl<'tcx> Stable<'tcx> for mir::StatementKind<'tcx> {
238+type T = stable_mir::mir::StatementKind;
239+fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
240+match self {
241+ mir::StatementKind::Assign(assign) => stable_mir::mir::StatementKind::Assign(
242+ assign.0.stable(tables),
243+ assign.1.stable(tables),
234244),
235-SetDiscriminant { place: plc, variant_index: idx } => {
236- stable_mir::mir::Statement::SetDiscriminant {
237-place: plc.as_ref().stable(tables),
238-variant_index: idx.stable(tables),
245+ mir::StatementKind::FakeRead(fake_read_place) => {
246+ stable_mir::mir::StatementKind::FakeRead(
247+ fake_read_place.0.stable(tables),
248+ fake_read_place.1.stable(tables),
249+)
250+}
251+ mir::StatementKind::SetDiscriminant { place, variant_index } => {
252+ stable_mir::mir::StatementKind::SetDiscriminant {
253+place: place.as_ref().stable(tables),
254+variant_index: variant_index.stable(tables),
239255}
240256}
241-Deinit(place) => stable_mir::mir::Statement::Deinit(place.stable(tables)),
242-StorageLive(place) => stable_mir::mir::Statement::StorageLive(place.stable(tables)),
243-StorageDead(place) => stable_mir::mir::Statement::StorageDead(place.stable(tables)),
244-Retag(retag, place) => {
245- stable_mir::mir::Statement::Retag(retag.stable(tables), place.stable(tables))
257+ mir::StatementKind::Deinit(place) => {
258+ stable_mir::mir::StatementKind::Deinit(place.stable(tables))
259+}
260+261+ mir::StatementKind::StorageLive(place) => {
262+ stable_mir::mir::StatementKind::StorageLive(place.stable(tables))
263+}
264+265+ mir::StatementKind::StorageDead(place) => {
266+ stable_mir::mir::StatementKind::StorageDead(place.stable(tables))
267+}
268+ mir::StatementKind::Retag(retag, place) => {
269+ stable_mir::mir::StatementKind::Retag(retag.stable(tables), place.stable(tables))
270+}
271+ mir::StatementKind::PlaceMention(place) => {
272+ stable_mir::mir::StatementKind::PlaceMention(place.stable(tables))
246273}
247-PlaceMention(place) => stable_mir::mir::Statement::PlaceMention(place.stable(tables)),
248-AscribeUserType(place_projection, variance) => {
249- stable_mir::mir::Statement::AscribeUserType {
274+ mir::StatementKind::AscribeUserType(place_projection, variance) => {
275+ stable_mir::mir::StatementKind::AscribeUserType {
250276place: place_projection.as_ref().0.stable(tables),
251277projections: place_projection.as_ref().1.stable(tables),
252278variance: variance.stable(tables),
253279}
254280}
255-Coverage(coverage) => stable_mir::mir::Statement::Coverage(opaque(coverage)),
256-Intrinsic(intrinstic) => {
257- stable_mir::mir::Statement::Intrinsic(intrinstic.stable(tables))
281+ mir::StatementKind::Coverage(coverage) => {
282+ stable_mir::mir::StatementKind::Coverage(opaque(coverage))
283+}
284+ mir::StatementKind::Intrinsic(intrinstic) => {
285+ stable_mir::mir::StatementKind::Intrinsic(intrinstic.stable(tables))
286+}
287+ mir::StatementKind::ConstEvalCounter => {
288+ stable_mir::mir::StatementKind::ConstEvalCounter
258289}
259-ConstEvalCounter => stable_mir::mir::Statement::ConstEvalCounter,
260-Nop => stable_mir::mir::Statement::Nop,
290+ mir::StatementKind::Nop => stable_mir::mir::StatementKind::Nop,
261291}
262292}
263293}
@@ -806,11 +836,20 @@ impl<'tcx> Stable<'tcx> for mir::InlineAsmOperand<'tcx> {
806836impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
807837type T = stable_mir::mir::Terminator;
808838fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
809-use rustc_middle::mir::TerminatorKind::*;
810839use stable_mir::mir::Terminator;
811-match &self.kind {
812-Goto { target } => Terminator::Goto { target: target.as_usize() },
813-SwitchInt { discr, targets } => Terminator::SwitchInt {
840+Terminator { kind: self.kind.stable(tables), span: self.source_info.span.stable(tables) }
841+}
842+}
843+844+impl<'tcx> Stable<'tcx> for mir::TerminatorKind<'tcx> {
845+type T = stable_mir::mir::TerminatorKind;
846+fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
847+use stable_mir::mir::TerminatorKind;
848+match self {
849+ mir::TerminatorKind::Goto { target } => {
850+TerminatorKind::Goto { target: target.as_usize() }
851+}
852+ mir::TerminatorKind::SwitchInt { discr, targets } => TerminatorKind::SwitchInt {
814853discr: discr.stable(tables),
815854targets: targets
816855.iter()
@@ -821,42 +860,60 @@ impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
821860.collect(),
822861otherwise: targets.otherwise().as_usize(),
823862},
824-UnwindResume => Terminator::Resume,
825-UnwindTerminate(_) => Terminator::Abort,
826-Return => Terminator::Return,
827-Unreachable => Terminator::Unreachable,
828-Drop { place, target, unwind, replace: _ } => Terminator::Drop {
829-place: place.stable(tables),
830-target: target.as_usize(),
831-unwind: unwind.stable(tables),
832-},
833-Call { func, args, destination, target, unwind, call_source: _, fn_span: _ } => {
834-Terminator::Call {
835-func: func.stable(tables),
836-args: args.iter().map(|arg| arg.stable(tables)).collect(),
837-destination: destination.stable(tables),
838-target: target.map(|t| t.as_usize()),
863+ mir::TerminatorKind::UnwindResume => TerminatorKind::Resume,
864+ mir::TerminatorKind::UnwindTerminate(_) => TerminatorKind::Abort,
865+ mir::TerminatorKind::Return => TerminatorKind::Return,
866+ mir::TerminatorKind::Unreachable => TerminatorKind::Unreachable,
867+ mir::TerminatorKind::Drop { place, target, unwind, replace: _ } => {
868+TerminatorKind::Drop {
869+place: place.stable(tables),
870+target: target.as_usize(),
839871unwind: unwind.stable(tables),
840872}
841873}
842-Assert { cond, expected, msg, target, unwind } => Terminator::Assert {
843-cond: cond.stable(tables),
844-expected: *expected,
845-msg: msg.stable(tables),
846-target: target.as_usize(),
874+ mir::TerminatorKind::Call {
875+ func,
876+ args,
877+ destination,
878+ target,
879+ unwind,
880+call_source: _,
881+fn_span: _,
882+} => TerminatorKind::Call {
883+func: func.stable(tables),
884+args: args.iter().map(|arg| arg.stable(tables)).collect(),
885+destination: destination.stable(tables),
886+target: target.map(|t| t.as_usize()),
847887unwind: unwind.stable(tables),
848888},
849-InlineAsm { template, operands, options, line_spans, destination, unwind } => {
850-Terminator::InlineAsm {
851-template: format!("{template:?}"),
852-operands: operands.iter().map(|operand| operand.stable(tables)).collect(),
853-options: format!("{options:?}"),
854-line_spans: format!("{line_spans:?}"),
855-destination: destination.map(|d| d.as_usize()),
889+ mir::TerminatorKind::Assert { cond, expected, msg, target, unwind } => {
890+TerminatorKind::Assert {
891+cond: cond.stable(tables),
892+expected: *expected,
893+msg: msg.stable(tables),
894+target: target.as_usize(),
856895unwind: unwind.stable(tables),
857896}
858897}
859-Yield { .. } | GeneratorDrop | FalseEdge { .. } | FalseUnwind { .. } => unreachable!(),
898+ mir::TerminatorKind::InlineAsm {
899+ template,
900+ operands,
901+ options,
902+ line_spans,
903+ destination,
904+ unwind,
905+} => TerminatorKind::InlineAsm {
906+template: format!("{template:?}"),
907+operands: operands.iter().map(|operand| operand.stable(tables)).collect(),
908+options: format!("{options:?}"),
909+line_spans: format!("{line_spans:?}"),
910+destination: destination.map(|d| d.as_usize()),
911+unwind: unwind.stable(tables),
912+},
913+ mir::TerminatorKind::Yield { .. }
914+ | mir::TerminatorKind::GeneratorDrop
915+ | mir::TerminatorKind::FalseEdge { .. }
916+ | mir::TerminatorKind::FalseUnwind { .. } => unreachable!(),
860917}
861918}
862919}