@@ -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 > {
224231 type T = stable_mir:: mir:: Statement ;
225232 fn 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 {
250276 place : place_projection. as_ref ( ) . 0 . stable ( tables) ,
251277 projections : place_projection. as_ref ( ) . 1 . stable ( tables) ,
252278 variance : 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 > {
807837 type T = stable_mir:: mir:: Terminator ;
808838 fn stable ( & self , tables : & mut Tables < ' tcx > ) -> Self :: T {
809- use rustc_middle:: mir:: TerminatorKind :: * ;
810839 use 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 {
814853 discr : discr. stable ( tables) ,
815854 targets : targets
816855 . iter ( )
@@ -821,42 +860,60 @@ impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
821860 . collect ( ) ,
822861 otherwise : 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 ( ) ,
839871 unwind : 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 ( ) ) ,
847887 unwind : 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 ( ) ,
856895 unwind : 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}
0 commit comments