Skip to content

Commit a6632f1

Browse files
committed
Implement Stable for AssertMessage
1 parent 0ba1e0f commit a6632f1

File tree

1 file changed

+37
-30
lines changed
  • compiler/rustc_smir/src/rustc_smir

1 file changed

+37
-30
lines changed

compiler/rustc_smir/src/rustc_smir/mod.rs

+37-30
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,11 @@ fn smir_crate(tcx: TyCtxt<'_>, crate_num: CrateNum) -> stable_mir::Crate {
119119
stable_mir::Crate { id: crate_num.into(), name: crate_name, is_local }
120120
}
121121

122-
pub trait Stable {
122+
/// Trait used to convert between an internal MIR type to a Stable MIR type.
123+
pub(crate) trait Stable {
124+
/// The stable representation of the type implementing Stable.
123125
type T;
126+
/// Converts an object to the equivalent Stable MIR representation.
124127
fn stable(&self) -> Self::T;
125128
}
126129

@@ -211,34 +214,38 @@ impl Stable for mir::UnwindAction {
211214
}
212215
}
213216

214-
fn rustc_assert_msg_to_msg<'tcx>(
215-
assert_message: &rustc_middle::mir::AssertMessage<'tcx>,
216-
) -> stable_mir::mir::AssertMessage {
217-
use rustc_middle::mir::AssertKind;
218-
match assert_message {
219-
AssertKind::BoundsCheck { len, index } => {
220-
stable_mir::mir::AssertMessage::BoundsCheck { len: len.stable(), index: index.stable() }
221-
}
222-
AssertKind::Overflow(bin_op, op1, op2) => {
223-
stable_mir::mir::AssertMessage::Overflow(bin_op.stable(), op1.stable(), op2.stable())
224-
}
225-
AssertKind::OverflowNeg(op) => stable_mir::mir::AssertMessage::OverflowNeg(op.stable()),
226-
AssertKind::DivisionByZero(op) => {
227-
stable_mir::mir::AssertMessage::DivisionByZero(op.stable())
228-
}
229-
AssertKind::RemainderByZero(op) => {
230-
stable_mir::mir::AssertMessage::RemainderByZero(op.stable())
231-
}
232-
AssertKind::ResumedAfterReturn(generator) => {
233-
stable_mir::mir::AssertMessage::ResumedAfterReturn(generator.stable())
234-
}
235-
AssertKind::ResumedAfterPanic(generator) => {
236-
stable_mir::mir::AssertMessage::ResumedAfterPanic(generator.stable())
237-
}
238-
AssertKind::MisalignedPointerDereference { required, found } => {
239-
stable_mir::mir::AssertMessage::MisalignedPointerDereference {
240-
required: required.stable(),
241-
found: found.stable(),
217+
impl<'tcx> Stable for mir::AssertMessage<'tcx> {
218+
type T = stable_mir::mir::AssertMessage;
219+
fn stable(&self) -> Self::T {
220+
use rustc_middle::mir::AssertKind;
221+
match self {
222+
AssertKind::BoundsCheck { len, index } => stable_mir::mir::AssertMessage::BoundsCheck {
223+
len: len.stable(),
224+
index: index.stable(),
225+
},
226+
AssertKind::Overflow(bin_op, op1, op2) => stable_mir::mir::AssertMessage::Overflow(
227+
bin_op.stable(),
228+
op1.stable(),
229+
op2.stable(),
230+
),
231+
AssertKind::OverflowNeg(op) => stable_mir::mir::AssertMessage::OverflowNeg(op.stable()),
232+
AssertKind::DivisionByZero(op) => {
233+
stable_mir::mir::AssertMessage::DivisionByZero(op.stable())
234+
}
235+
AssertKind::RemainderByZero(op) => {
236+
stable_mir::mir::AssertMessage::RemainderByZero(op.stable())
237+
}
238+
AssertKind::ResumedAfterReturn(generator) => {
239+
stable_mir::mir::AssertMessage::ResumedAfterReturn(generator.stable())
240+
}
241+
AssertKind::ResumedAfterPanic(generator) => {
242+
stable_mir::mir::AssertMessage::ResumedAfterPanic(generator.stable())
243+
}
244+
AssertKind::MisalignedPointerDereference { required, found } => {
245+
stable_mir::mir::AssertMessage::MisalignedPointerDereference {
246+
required: required.stable(),
247+
found: found.stable(),
248+
}
242249
}
243250
}
244251
}
@@ -363,7 +370,7 @@ impl<'tcx> Stable for mir::Terminator<'tcx> {
363370
Assert { cond, expected, msg, target, unwind } => Terminator::Assert {
364371
cond: cond.stable(),
365372
expected: *expected,
366-
msg: rustc_assert_msg_to_msg(msg),
373+
msg: msg.stable(),
367374
target: target.as_usize(),
368375
unwind: unwind.stable(),
369376
},

0 commit comments

Comments
 (0)