Rollup merge of #116288 - ouz-a:smir_spans, r=spastorino · rust-lang/rust@b301bd4 (original) (raw)
`@@ -15,7 +15,7 @@ use rustc_middle::mir::interpret::{alloc_range, AllocId};
`
15
15
`use rustc_middle::ty::{self, Ty, TyCtxt, Variance};
`
16
16
`use rustc_span::def_id::{CrateNum, DefId, LOCAL_CRATE};
`
17
17
`use rustc_target::abi::FieldIdx;
`
18
``
`-
use stable_mir::mir::{CopyNonOverlapping, UserTypeProjection, VariantIdx};
`
``
18
`+
use stable_mir::mir::{CopyNonOverlapping, Statement, UserTypeProjection, VariantIdx};
`
19
19
`use stable_mir::ty::{FloatTy, GenericParamDef, IntTy, Movability, RigidTy, Span, TyKind, UintTy};
`
20
20
`use stable_mir::{self, opaque, Context};
`
21
21
`use tracing::debug;
`
`@@ -106,7 +106,14 @@ impl<'tcx> Context for Tables<'tcx> {
`
106
106
`.collect(),
`
107
107
`})
`
108
108
`.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(),
`
110
117
`}
`
111
118
`}
`
112
119
``
`@@ -223,41 +230,64 @@ pub(crate) trait Stable<'tcx> {
`
223
230
`impl<'tcx> Stable<'tcx> for mir::Statement<'tcx> {
`
224
231
`type T = stable_mir::mir::Statement;
`
225
232
`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),
`
234
244
`),
`
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),
`
239
255
`}
`
240
256
`}
`
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))
`
246
273
`}
`
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 {
`
250
276
`place: place_projection.as_ref().0.stable(tables),
`
251
277
`projections: place_projection.as_ref().1.stable(tables),
`
252
278
`variance: variance.stable(tables),
`
253
279
`}
`
254
280
`}
`
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
`
258
289
`}
`
259
``
`-
ConstEvalCounter => stable_mir::mir::Statement::ConstEvalCounter,
`
260
``
`-
Nop => stable_mir::mir::Statement::Nop,
`
``
290
`+
mir::StatementKind::Nop => stable_mir::mir::StatementKind::Nop,
`
261
291
`}
`
262
292
`}
`
263
293
`}
`
`@@ -806,11 +836,20 @@ impl<'tcx> Stable<'tcx> for mir::InlineAsmOperand<'tcx> {
`
806
836
`impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
`
807
837
`type T = stable_mir::mir::Terminator;
`
808
838
`fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
`
809
``
`-
use rustc_middle::mir::TerminatorKind::*;
`
810
839
`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 {
`
814
853
`discr: discr.stable(tables),
`
815
854
`targets: targets
`
816
855
`.iter()
`
`@@ -821,42 +860,60 @@ impl<'tcx> Stable<'tcx> for mir::Terminator<'tcx> {
`
821
860
`.collect(),
`
822
861
`otherwise: targets.otherwise().as_usize(),
`
823
862
`},
`
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(),
`
839
871
`unwind: unwind.stable(tables),
`
840
872
`}
`
841
873
`}
`
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()),
`
847
887
`unwind: unwind.stable(tables),
`
848
888
`},
`
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(),
`
856
895
`unwind: unwind.stable(tables),
`
857
896
`}
`
858
897
`}
`
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!(),
`
860
917
`}
`
861
918
`}
`
862
919
`}
`