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};

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;

@@ -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> {

223230

impl<'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> {

806836

impl<'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

}