Skip to content

Commit a79567b

Browse files
committed
add span to statements
1 parent 999a354 commit a79567b

3 files changed

Lines changed: 98 additions & 73 deletions

File tree

‎compiler/rustc_smir/src/rustc_smir/mod.rs‎

Lines changed: 71 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use rustc_middle::mir::interpret::{alloc_range, AllocId};
1515
use rustc_middle::ty::{self,Ty,TyCtxt,Variance};
1616
use rustc_span::def_id::{CrateNum,DefId,LOCAL_CRATE};
1717
use rustc_target::abi::FieldIdx;
18-
use stable_mir::mir::{CopyNonOverlapping,UserTypeProjection,VariantIdx};
18+
use stable_mir::mir::{CopyNonOverlapping,Statement,UserTypeProjection,VariantIdx};
1919
use stable_mir::ty::{FloatTy,GenericParamDef,IntTy,Movability,RigidTy,Span,TyKind,UintTy};
2020
use stable_mir::{self, opaque,Context};
2121
use tracing::debug;
@@ -231,40 +231,71 @@ impl<'tcx> Stable<'tcx> for mir::Statement<'tcx> {
231231
typeT = stable_mir::mir::Statement;
232232
fnstable(&self,tables:&mutTables<'tcx>) -> Self::T{
233233
use rustc_middle::mir::StatementKind::*;
234+
let span = self.source_info.span.stable(tables);
234235
match&self.kind{
235-
Assign(assign) => {
236-
stable_mir::mir::Statement::Assign(assign.0.stable(tables), assign.1.stable(tables))
237-
}
238-
FakeRead(fake_read_place) => stable_mir::mir::Statement::FakeRead(
239-
fake_read_place.0.stable(tables),
240-
fake_read_place.1.stable(tables),
241-
),
242-
SetDiscriminant{place: plc,variant_index: idx } => {
243-
stable_mir::mir::Statement::SetDiscriminant{
236+
Assign(assign) => Statement{
237+
kind: stable_mir::mir::StatementKind::Assign(
238+
assign.0.stable(tables),
239+
assign.1.stable(tables),
240+
),
241+
span,
242+
},
243+
FakeRead(fake_read_place) => Statement{
244+
kind: stable_mir::mir::StatementKind::FakeRead(
245+
fake_read_place.0.stable(tables),
246+
fake_read_place.1.stable(tables),
247+
),
248+
span,
249+
},
250+
SetDiscriminant{place: plc,variant_index: idx } => Statement{
251+
kind: stable_mir::mir::StatementKind::SetDiscriminant{
244252
place: plc.as_ref().stable(tables),
245253
variant_index: idx.stable(tables),
246-
}
247-
}
248-
Deinit(place) => stable_mir::mir::Statement::Deinit(place.stable(tables)),
249-
StorageLive(place) => stable_mir::mir::Statement::StorageLive(place.stable(tables)),
250-
StorageDead(place) => stable_mir::mir::Statement::StorageDead(place.stable(tables)),
251-
Retag(retag, place) => {
252-
stable_mir::mir::Statement::Retag(retag.stable(tables), place.stable(tables))
253-
}
254-
PlaceMention(place) => stable_mir::mir::Statement::PlaceMention(place.stable(tables)),
255-
AscribeUserType(place_projection, variance) => {
256-
stable_mir::mir::Statement::AscribeUserType{
254+
},
255+
span,
256+
},
257+
Deinit(place) => Statement{
258+
kind: stable_mir::mir::StatementKind::Deinit(place.stable(tables)),
259+
span,
260+
},
261+
StorageLive(place) => Statement{
262+
kind: stable_mir::mir::StatementKind::StorageLive(place.stable(tables)),
263+
span,
264+
},
265+
StorageDead(place) => Statement{
266+
kind: stable_mir::mir::StatementKind::StorageDead(place.stable(tables)),
267+
span,
268+
},
269+
Retag(retag, place) => Statement{
270+
kind: stable_mir::mir::StatementKind::Retag(
271+
retag.stable(tables),
272+
place.stable(tables),
273+
),
274+
span,
275+
},
276+
PlaceMention(place) => Statement{
277+
kind: stable_mir::mir::StatementKind::PlaceMention(place.stable(tables)),
278+
span,
279+
},
280+
AscribeUserType(place_projection, variance) => Statement{
281+
kind: stable_mir::mir::StatementKind::AscribeUserType{
257282
place: place_projection.as_ref().0.stable(tables),
258283
projections: place_projection.as_ref().1.stable(tables),
259284
variance: variance.stable(tables),
260-
}
285+
},
286+
span,
287+
},
288+
Coverage(coverage) => {
289+
Statement{kind: stable_mir::mir::StatementKind::Coverage(opaque(coverage)), span }
261290
}
262-
Coverage(coverage) => stable_mir::mir::Statement::Coverage(opaque(coverage)),
263-
Intrinsic(intrinstic) => {
264-
stable_mir::mir::Statement::Intrinsic(intrinstic.stable(tables))
291+
Intrinsic(intrinstic) => Statement{
292+
kind: stable_mir::mir::StatementKind::Intrinsic(intrinstic.stable(tables)),
293+
span,
294+
},
295+
ConstEvalCounter => {
296+
Statement{kind: stable_mir::mir::StatementKind::ConstEvalCounter, span }
265297
}
266-
ConstEvalCounter => stable_mir::mir::Statement::ConstEvalCounter,
267-
Nop => stable_mir::mir::Statement::Nop,
298+
Nop => Statement{kind: stable_mir::mir::StatementKind::Nop, span },
268299
}
269300
}
270301
}
@@ -816,11 +847,11 @@ impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
816847
use rustc_middle::mir::TerminatorKind::*;
817848
use stable_mir::mir::Terminator;
818849
use stable_mir::mir::TerminatorKind;
850+
let span = self.source_info.span.stable(tables);
819851
match&self.kind{
820-
Goto{ target } => Terminator{
821-
kind:TerminatorKind::Goto{target: target.as_usize()},
822-
span:self.source_info.span.stable(tables),
823-
},
852+
Goto{ target } => {
853+
Terminator{kind:TerminatorKind::Goto{target: target.as_usize()}, span }
854+
}
824855
SwitchInt{ discr, targets } => Terminator{
825856
kind:TerminatorKind::SwitchInt{
826857
discr: discr.stable(tables),
@@ -833,31 +864,19 @@ impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
833864
.collect(),
834865
otherwise: targets.otherwise().as_usize(),
835866
},
836-
span:self.source_info.span.stable(tables),
837-
},
838-
UnwindResume => Terminator{
839-
kind:TerminatorKind::Resume,
840-
span:self.source_info.span.stable(tables),
841-
},
842-
UnwindTerminate(_) => Terminator{
843-
kind:TerminatorKind::Abort,
844-
span:self.source_info.span.stable(tables),
845-
},
846-
Return => Terminator{
847-
kind:TerminatorKind::Return,
848-
span:self.source_info.span.stable(tables),
849-
},
850-
Unreachable => Terminator{
851-
kind:TerminatorKind::Unreachable,
852-
span:self.source_info.span.stable(tables),
867+
span,
853868
},
869+
UnwindResume => Terminator{kind:TerminatorKind::Resume, span },
870+
UnwindTerminate(_) => Terminator{kind:TerminatorKind::Abort, span },
871+
Return => Terminator{kind:TerminatorKind::Return, span },
872+
Unreachable => Terminator{kind:TerminatorKind::Unreachable, span },
854873
Drop{ place, target, unwind,replace: _ } => Terminator{
855874
kind:TerminatorKind::Drop{
856875
place: place.stable(tables),
857876
target: target.as_usize(),
858877
unwind: unwind.stable(tables),
859878
},
860-
span:self.source_info.span.stable(tables),
879+
span,
861880
},
862881
Call{ func, args, destination, target, unwind,call_source: _,fn_span: _ } => {
863882
Terminator{
@@ -868,7 +887,7 @@ impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
868887
target: target.map(|t| t.as_usize()),
869888
unwind: unwind.stable(tables),
870889
},
871-
span:self.source_info.span.stable(tables),
890+
span,
872891
}
873892
}
874893
Assert{ cond, expected, msg, target, unwind } => Terminator{
@@ -879,7 +898,7 @@ impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
879898
target: target.as_usize(),
880899
unwind: unwind.stable(tables),
881900
},
882-
span:self.source_info.span.stable(tables),
901+
span,
883902
},
884903
InlineAsm{ template, operands, options, line_spans, destination, unwind } => {
885904
Terminator{
@@ -891,7 +910,7 @@ impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
891910
destination: destination.map(|d| d.as_usize()),
892911
unwind: unwind.stable(tables),
893912
},
894-
span:self.source_info.span.stable(tables),
913+
span,
895914
}
896915
}
897916
Yield{ .. } | GeneratorDrop | FalseEdge{ .. } | FalseUnwind{ .. } => unreachable!(),

‎compiler/stable_mir/src/mir/body.rs‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,13 @@ pub enum NonDivergingIntrinsic {
191191
}
192192

193193
#[derive(Clone,Debug)]
194-
pubenumStatement{
194+
pubstructStatement{
195+
pubkind:StatementKind,
196+
pubspan:Span,
197+
}
198+
199+
#[derive(Clone,Debug)]
200+
pubenumStatementKind{
195201
Assign(Place,Rvalue),
196202
FakeRead(FakeReadCause,Place),
197203
SetDiscriminant{place:Place,variant_index:VariantIdx},

‎tests/ui-fulldeps/stable-mir/crate-info.rs‎

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
4747
assert_eq!(body.blocks.len(),1);
4848
let block = &body.blocks[0];
4949
assert_eq!(block.statements.len(),1);
50-
match&block.statements[0]{
51-
stable_mir::mir::Statement::Assign(..) => {}
50+
match&block.statements[0].kind{
51+
stable_mir::mir::StatementKind::Assign(..) => {}
5252
other => panic!("{other:?}"),
5353
}
54-
match&block.terminator{
55-
stable_mir::mir::Terminator::Return => {}
54+
match&block.terminator.kind{
55+
stable_mir::mir::TerminatorKind::Return => {}
5656
other => panic!("{other:?}"),
5757
}
5858

@@ -61,36 +61,36 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
6161
assert_eq!(body.locals.len(),7);
6262
assert_eq!(body.blocks.len(),4);
6363
let block = &body.blocks[0];
64-
match&block.terminator{
65-
stable_mir::mir::Terminator::Call{ .. } => {}
64+
match&block.terminator.kind{
65+
stable_mir::mir::TerminatorKind::Call{ .. } => {}
6666
other => panic!("{other:?}"),
6767
}
6868

6969
let types = get_item(&items,(DefKind::Fn,"types")).unwrap();
7070
let body = types.body();
7171
assert_eq!(body.locals.len(),6);
7272
assert_matches!(
73-
body.locals[0].kind(),
73+
body.locals[0].ty.kind(),
7474
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Bool)
7575
);
7676
assert_matches!(
77-
body.locals[1].kind(),
77+
body.locals[1].ty.kind(),
7878
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Bool)
7979
);
8080
assert_matches!(
81-
body.locals[2].kind(),
81+
body.locals[2].ty.kind(),
8282
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Char)
8383
);
8484
assert_matches!(
85-
body.locals[3].kind(),
85+
body.locals[3].ty.kind(),
8686
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Int(stable_mir::ty::IntTy::I32))
8787
);
8888
assert_matches!(
89-
body.locals[4].kind(),
89+
body.locals[4].ty.kind(),
9090
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Uint(stable_mir::ty::UintTy::U64))
9191
);
9292
assert_matches!(
93-
body.locals[5].kind(),
93+
body.locals[5].ty.kind(),
9494
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Float(
9595
stable_mir::ty::FloatTy::F64
9696
))
@@ -100,24 +100,24 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
100100
let body = drop.body();
101101
assert_eq!(body.blocks.len(),2);
102102
let block = &body.blocks[0];
103-
match&block.terminator{
104-
stable_mir::mir::Terminator::Drop{ .. } => {}
103+
match&block.terminator.kind{
104+
stable_mir::mir::TerminatorKind::Drop{ .. } => {}
105105
other => panic!("{other:?}"),
106106
}
107107

108108
let assert = get_item(&items,(DefKind::Fn,"assert")).unwrap();
109109
let body = assert.body();
110110
assert_eq!(body.blocks.len(),2);
111111
let block = &body.blocks[0];
112-
match&block.terminator{
113-
stable_mir::mir::Terminator::Assert{ .. } => {}
112+
match&block.terminator.kind{
113+
stable_mir::mir::TerminatorKind::Assert{ .. } => {}
114114
other => panic!("{other:?}"),
115115
}
116116

117117
let monomorphic = get_item(&items,(DefKind::Fn,"monomorphic")).unwrap();
118118
for block in monomorphic.body().blocks{
119-
match&block.terminator{
120-
stable_mir::mir::Terminator::Call{ func, .. } => match func {
119+
match&block.terminator.kind{
120+
stable_mir::mir::TerminatorKind::Call{ func, .. } => match func {
121121
stable_mir::mir::Operand::Constant(c) => match&c.literal.literal{
122122
stable_mir::ty::ConstantKind::Allocated(alloc) => {
123123
assert!(alloc.bytes.is_empty());
@@ -127,7 +127,7 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
127127
mut args,
128128
)) => {
129129
let func = def.body();
130-
match func.locals[1]
130+
match func.locals[1].ty
131131
.fold(&mut args)
132132
.continue_value()
133133
.unwrap()
@@ -149,7 +149,7 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
149149
},
150150
other => panic!("{other:?}"),
151151
},
152-
stable_mir::mir::Terminator::Return => {}
152+
stable_mir::mir::TerminatorKind::Return => {}
153153
other => panic!("{other:?}"),
154154
}
155155
}

0 commit comments

Comments
 (0)