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

`}

`