Auto merge of #111007 - JakobDegen:nrvo, r=tmiasko
Disable nrvo mir opt See #111005 and #110902 . The ICE can definitely be hit on stable, the miscompilation I'm not sure about. The pass makes some pretty sketchy assumptions though, and we should not have it on while that's the case. I'm not going to work on actually fixing this, it's probably not excessively difficult though. r? rust-lang/mir-opt
This commit is contained in:
commit
dfe31889e1
20 changed files with 247 additions and 574 deletions
|
@ -34,7 +34,8 @@ pub struct RenameReturnPlace;
|
|||
|
||||
impl<'tcx> MirPass<'tcx> for RenameReturnPlace {
|
||||
fn is_enabled(&self, sess: &rustc_session::Session) -> bool {
|
||||
sess.mir_opt_level() > 0
|
||||
// #111005
|
||||
sess.mir_opt_level() > 0 && sess.opts.unstable_opts.unsound_mir_opts
|
||||
}
|
||||
|
||||
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut mir::Body<'tcx>) {
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
|
||||
#[no_mangle]
|
||||
pub fn sum(x: u32, y: u32) -> u32 {
|
||||
// YES-LABEL: define{{.*}}i32 @sum(i32 noundef %0, i32 noundef %1)
|
||||
// YES-NEXT: %3 = add i32 %1, %0
|
||||
// YES-NEXT: ret i32 %3
|
||||
// YES-LABEL: define{{.*}}i32 @sum(i32 noundef %0, i32 noundef %1)
|
||||
// YES-NEXT: %3 = add i32 %1, %0
|
||||
// YES-NEXT: ret i32 %3
|
||||
|
||||
// NO-LABEL: define{{.*}}i32 @sum(i32 noundef %x, i32 noundef %y)
|
||||
// NO-NEXT: start:
|
||||
// NO-NEXT: %0 = add i32 %y, %x
|
||||
// NO-NEXT: ret i32 %0
|
||||
// NO-LABEL: define{{.*}}i32 @sum(i32 noundef %x, i32 noundef %y)
|
||||
// NO-NEXT: start:
|
||||
// NO-NEXT: %z = add i32 %y, %x
|
||||
// NO-NEXT: ret i32 %z
|
||||
let z = x + y;
|
||||
z
|
||||
}
|
||||
|
|
|
@ -13,7 +13,8 @@ pub struct Big([u64; 7]);
|
|||
pub fn replace_big(dst: &mut Big, src: Big) -> Big {
|
||||
// Back in 1.68, this emitted six `memcpy`s.
|
||||
// `read_via_copy` in 1.69 got that down to three.
|
||||
// `write_via_move` has it down to just the two essential ones.
|
||||
// `write_via_move` it was originally down to the essential two, however
|
||||
// with nrvo disabled it is back at 3
|
||||
std::mem::replace(dst, src)
|
||||
}
|
||||
|
||||
|
@ -22,13 +23,14 @@ pub fn replace_big(dst: &mut Big, src: Big) -> Big {
|
|||
|
||||
// CHECK-NOT: call void @llvm.memcpy
|
||||
|
||||
// For a large type, we expect exactly two `memcpy`s
|
||||
// For a large type, we expect exactly three `memcpy`s
|
||||
// CHECK-LABEL: define internal void @{{.+}}mem{{.+}}replace{{.+}}sret(%Big)
|
||||
// CHECK-NOT: alloca
|
||||
// CHECK-NOT: call void @llvm.memcpy
|
||||
// CHECK: call void @llvm.memcpy.{{.+}}({{i8\*|ptr}} align 8 %0, {{i8\*|ptr}} align 8 %dest, i{{.*}} 56, i1 false)
|
||||
// CHECK-NOT: call void @llvm.memcpy
|
||||
// CHECK: call void @llvm.memcpy.{{.+}}({{i8\*|ptr}} align 8 %dest, {{i8\*|ptr}} align 8 %src, i{{.*}} 56, i1 false)
|
||||
// CHECK-NOT: call void @llvm.memcpy
|
||||
// CHECK-NOT: call void @llvm.memcpy
|
||||
// CHECK: call void @llvm.memcpy.{{.+}}({{i8\*|ptr}} align 8 %result, {{i8\*|ptr}} align 8 %dest, i{{.*}} 56, i1 false)
|
||||
// CHECK-NOT: call void @llvm.memcpy
|
||||
// CHECK: call void @llvm.memcpy.{{.+}}({{i8\*|ptr}} align 8 %dest, {{i8\*|ptr}} align 8 %src, i{{.*}} 56, i1 false)
|
||||
// CHECK-NOT: call void @llvm.memcpy
|
||||
// CHECK: call void @llvm.memcpy.{{.+}}({{i8\*|ptr}} align 8 %0, {{i8\*|ptr}} align 8 %result, i{{.*}} 56, i1 false)
|
||||
// CHECK-NOT: call void @llvm.memcpy
|
||||
|
||||
// CHECK-NOT: call void @llvm.memcpy
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
pub fn nrvo(init: fn(&mut [u8; 4096])) -> [u8; 4096] {
|
||||
// CHECK-LABEL: nrvo
|
||||
// CHECK: @llvm.memset
|
||||
// CHECK-NOT: @llvm.memcpy
|
||||
// FIXME: turn on nrvo then check-not: @llvm.memcpy
|
||||
// CHECK: ret
|
||||
// CHECK-EMPTY
|
||||
let mut buf = [0; 4096];
|
||||
|
|
|
@ -9,7 +9,7 @@ pub fn test(a: u32, b: u32) -> u32 {
|
|||
// CHECK: %c = add i32 %a, %b
|
||||
let d = c;
|
||||
let e = d * a;
|
||||
// CHECK-NEXT: %0 = mul i32 %c, %a
|
||||
// CHECK-NEXT: %e = mul i32 %c, %a
|
||||
e
|
||||
// CHECK-NEXT: ret i32 %0
|
||||
// CHECK-NEXT: ret i32 %e
|
||||
}
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
+ let mut _4: usize; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ let mut _5: usize; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ let mut _6: *mut u8; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ let mut _7: *const std::vec::Vec<u32>; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ let mut _7: std::boxed::Box<std::vec::Vec<u32>>; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ let mut _8: *const std::vec::Vec<u32>; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ scope 4 {
|
||||
+ }
|
||||
+ }
|
||||
|
@ -65,9 +66,12 @@
|
|||
bb3: {
|
||||
- StorageDead(_1); // scope 0 at $DIR/inline_into_box_place.rs:+2:1: +2:2
|
||||
- return; // scope 0 at $DIR/inline_into_box_place.rs:+2:2: +2:2
|
||||
+ _1 = ShallowInitBox(move _6, std::vec::Vec<u32>); // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ _7 = (((_1.0: std::ptr::Unique<std::vec::Vec<u32>>).0: std::ptr::NonNull<std::vec::Vec<u32>>).0: *const std::vec::Vec<u32>); // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ (*_7) = move _2; // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ StorageLive(_7); // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ _7 = ShallowInitBox(move _6, std::vec::Vec<u32>); // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ _8 = (((_7.0: std::ptr::Unique<std::vec::Vec<u32>>).0: std::ptr::NonNull<std::vec::Vec<u32>>).0: *const std::vec::Vec<u32>); // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ (*_8) = move _2; // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ _1 = move _7; // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ StorageDead(_7); // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
+ StorageDead(_2); // scope 0 at $DIR/inline_into_box_place.rs:+1:48: +1:49
|
||||
+ _0 = const (); // scope 0 at $DIR/inline_into_box_place.rs:+0:11: +2:2
|
||||
+ drop(_1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/inline_into_box_place.rs:+2:1: +2:2
|
||||
|
|
|
@ -8,8 +8,9 @@ fn b(_1: &mut Box<T>) -> &mut T {
|
|||
let mut _4: &mut std::boxed::Box<T>; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
scope 1 (inlined <Box<T> as AsMut<T>>::as_mut) { // at $DIR/issue_58867_inline_as_ref_as_mut.rs:8:7: 8:15
|
||||
debug self => _4; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let mut _5: std::boxed::Box<T>; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let mut _6: *const T; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let mut _5: &mut T; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let mut _6: std::boxed::Box<T>; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let mut _7: *const T; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
}
|
||||
|
||||
bb0: {
|
||||
|
@ -17,9 +18,12 @@ fn b(_1: &mut Box<T>) -> &mut T {
|
|||
StorageLive(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
StorageLive(_4); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
_4 = &mut (*_1); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
_5 = deref_copy (*_4); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_6 = (((_5.0: std::ptr::Unique<T>).0: std::ptr::NonNull<T>).0: *const T); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_3 = &mut (*_6); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
StorageLive(_5); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:7: +1:15
|
||||
_6 = deref_copy (*_4); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_7 = (((_6.0: std::ptr::Unique<T>).0: std::ptr::NonNull<T>).0: *const T); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_5 = &mut (*_7); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_3 = _5; // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
StorageDead(_5); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:7: +1:15
|
||||
_2 = &mut (*_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
StorageDead(_4); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:14: +1:15
|
||||
_0 = &mut (*_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
|
|
|
@ -7,17 +7,21 @@ fn d(_1: &Box<T>) -> &T {
|
|||
let mut _3: &std::boxed::Box<T>; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
scope 1 (inlined <Box<T> as AsRef<T>>::as_ref) { // at $DIR/issue_58867_inline_as_ref_as_mut.rs:18:7: 18:15
|
||||
debug self => _3; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let mut _4: std::boxed::Box<T>; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let mut _5: *const T; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let _4: &T; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let mut _5: std::boxed::Box<T>; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
let mut _6: *const T; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
StorageLive(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
_3 = &(*_1); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
_4 = deref_copy (*_3); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_5 = (((_4.0: std::ptr::Unique<T>).0: std::ptr::NonNull<T>).0: *const T); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_2 = &(*_5); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
StorageLive(_4); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_5 = deref_copy (*_3); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_6 = (((_5.0: std::ptr::Unique<T>).0: std::ptr::NonNull<T>).0: *const T); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_4 = &(*_6); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_2 = _4; // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
StorageDead(_4); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
_0 = &(*_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
|
||||
StorageDead(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:14: +1:15
|
||||
StorageDead(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:1: +2:2
|
||||
|
|
|
@ -12,51 +12,7 @@
|
|||
+ debug rhs => _4; // in scope 1 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
+ let mut _5: u16; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ let mut _6: (u32,); // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ let mut _7: u32; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ scope 2 {
|
||||
+ scope 3 (inlined core::num::<impl u16>::unchecked_shl::conv) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ debug x => _7; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ let mut _8: std::option::Option<u16>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ let mut _9: std::result::Result<u16, std::num::TryFromIntError>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ scope 4 {
|
||||
+ scope 5 (inlined <u32 as TryInto<u16>>::try_into) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ debug self => _7; // in scope 5 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||
+ scope 6 (inlined convert::num::<impl TryFrom<u32> for u16>::try_from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||
+ debug u => _7; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ let mut _10: bool; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ let mut _11: u32; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ let mut _12: u16; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ }
|
||||
+ }
|
||||
+ scope 7 (inlined Result::<u16, TryFromIntError>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ debug self => _9; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ let mut _13: isize; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ let _14: u16; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ scope 8 {
|
||||
+ debug x => _14; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+ }
|
||||
+ scope 9 (inlined #[track_caller] Option::<u16>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ debug self => _8; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ let mut _15: &std::option::Option<u16>; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ let mut _16: isize; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ scope 10 {
|
||||
+ debug val => _5; // in scope 10 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ }
|
||||
+ scope 11 {
|
||||
+ scope 13 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ scope 14 {
|
||||
+ scope 15 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ scope 12 (inlined Option::<u16>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ debug self => _15; // in scope 12 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
|
||||
|
@ -66,87 +22,30 @@
|
|||
StorageLive(_4); // scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
|
||||
_4 = _2; // scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
|
||||
- _0 = core::num::<impl u16>::unchecked_shl(move _3, move _4) -> bb1; // scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:23
|
||||
- // mir::Constant
|
||||
- // + span: $DIR/unchecked_shifts.rs:11:7: 11:20
|
||||
- // + literal: Const { ty: unsafe fn(u16, u32) -> u16 {core::num::<impl u16>::unchecked_shl}, val: Value(<ZST>) }
|
||||
+ StorageLive(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _6 = (_4,); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_7); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _7 = move (_6.0: u32); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_8); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_9); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ StorageLive(_11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _11 = const 65535_u32; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _10 = Gt(_7, move _11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ StorageDead(_11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ switchInt(move _10) -> [0: bb3, otherwise: bb2]; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _5 = core::num::<impl u16>::unchecked_shl::conv(move (_6.0: u32)) -> bb1; // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
- // + span: $DIR/unchecked_shifts.rs:11:7: 11:20
|
||||
- // + literal: Const { ty: unsafe fn(u16, u32) -> u16 {core::num::<impl u16>::unchecked_shl}, val: Value(<ZST>) }
|
||||
+ // + span: $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ // + literal: Const { ty: fn(u32) -> u16 {core::num::<impl u16>::unchecked_shl::conv}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
+ StorageDead(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _0 = unchecked_shl::<u16>(_3, move _5) -> [return: bb2, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
+ // mir::Constant
|
||||
+ // + span: $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
+ // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(u16, u16) -> u16 {unchecked_shl::<u16>}, val: Value(<ZST>) }
|
||||
+ }
|
||||
+
|
||||
+ bb2: {
|
||||
+ StorageDead(_5); // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
StorageDead(_4); // scope 0 at $DIR/unchecked_shifts.rs:+1:22: +1:23
|
||||
StorageDead(_3); // scope 0 at $DIR/unchecked_shifts.rs:+1:22: +1:23
|
||||
return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
|
||||
+ }
|
||||
+
|
||||
+ bb2: {
|
||||
+ _9 = Result::<u16, TryFromIntError>::Err(const TryFromIntError(())); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ // mir::Constant
|
||||
+ // + span: no-location
|
||||
+ // + literal: Const { ty: TryFromIntError, val: Value(<ZST>) }
|
||||
+ goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb3: {
|
||||
+ StorageLive(_12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _12 = _7 as u16 (IntToInt); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _9 = Result::<u16, TryFromIntError>::Ok(move _12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ StorageDead(_12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb4: {
|
||||
+ StorageDead(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ StorageLive(_14); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _13 = discriminant(_9); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ switchInt(move _13) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb5: {
|
||||
+ _8 = Option::<u16>::None; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb6: {
|
||||
+ unreachable; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb7: {
|
||||
+ _14 = move ((_9 as Ok).0: u16); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ _8 = Option::<u16>::Some(move _14); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb8: {
|
||||
+ StorageDead(_14); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageDead(_9); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_15); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _16 = discriminant(_8); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ switchInt(move _16) -> [1: bb9, otherwise: bb6]; // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb9: {
|
||||
+ _5 = move ((_8 as Some).0: u16); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ StorageDead(_15); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageDead(_8); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageDead(_7); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageDead(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _0 = unchecked_shl::<u16>(_3, move _5) -> [return: bb1, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
+ // mir::Constant
|
||||
+ // + span: $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
+ // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(u16, u16) -> u16 {unchecked_shl::<u16>}, val: Value(<ZST>) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,51 +9,7 @@ fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
|
|||
debug rhs => _2; // in scope 1 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
let mut _3: u16; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
let mut _4: (u32,); // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
let mut _5: u32; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
scope 2 {
|
||||
scope 3 (inlined core::num::<impl u16>::unchecked_shl::conv) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
debug x => _5; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
let mut _6: std::option::Option<u16>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
let mut _7: std::result::Result<u16, std::num::TryFromIntError>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
scope 4 {
|
||||
scope 5 (inlined <u32 as TryInto<u16>>::try_into) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
debug self => _5; // in scope 5 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||
scope 6 (inlined convert::num::<impl TryFrom<u32> for u16>::try_from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||
debug u => _5; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
let mut _8: bool; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
let mut _9: u32; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
let mut _10: u16; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
}
|
||||
}
|
||||
scope 7 (inlined Result::<u16, TryFromIntError>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
debug self => _7; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
let mut _11: isize; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
let _12: u16; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
scope 8 {
|
||||
debug x => _12; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
}
|
||||
scope 9 (inlined #[track_caller] Option::<u16>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
debug self => _6; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
let mut _13: &std::option::Option<u16>; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
let mut _14: isize; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
scope 10 {
|
||||
debug val => _3; // in scope 10 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
}
|
||||
scope 11 {
|
||||
scope 13 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
scope 14 {
|
||||
scope 15 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scope 12 (inlined Option::<u16>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
debug self => _13; // in scope 12 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,78 +17,22 @@ fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
|
|||
StorageLive(_3); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_4); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_4 = (_2,); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_5 = move (_4.0: u32); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_6); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_7); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_8); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
StorageLive(_9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_9 = const 65535_u32; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_8 = Gt(_5, move _9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
StorageDead(_9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
switchInt(move _8) -> [0: bb3, otherwise: bb2]; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_3 = core::num::<impl u16>::unchecked_shl::conv(move (_4.0: u32)) -> bb1; // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
// + literal: Const { ty: fn(u32) -> u16 {core::num::<impl u16>::unchecked_shl::conv}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_3); // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
|
||||
}
|
||||
|
||||
bb2: {
|
||||
_7 = Result::<u16, TryFromIntError>::Err(const TryFromIntError(())); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: no-location
|
||||
// + literal: Const { ty: TryFromIntError, val: Value(<ZST>) }
|
||||
goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageLive(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_10 = _5 as u16 (IntToInt); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_7 = Result::<u16, TryFromIntError>::Ok(move _10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
StorageDead(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageDead(_8); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
StorageLive(_12); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_11 = discriminant(_7); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
switchInt(move _11) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
bb5: {
|
||||
_6 = Option::<u16>::None; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
bb6: {
|
||||
unreachable; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
bb7: {
|
||||
_12 = move ((_7 as Ok).0: u16); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_6 = Option::<u16>::Some(move _12); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
bb8: {
|
||||
StorageDead(_12); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageDead(_7); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_13); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_14 = discriminant(_6); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
switchInt(move _14) -> [1: bb9, otherwise: bb6]; // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
}
|
||||
|
||||
bb9: {
|
||||
_3 = move ((_6 as Some).0: u16); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
StorageDead(_13); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageDead(_6); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageDead(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageDead(_4); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_0 = unchecked_shl::<u16>(_1, move _3) -> [return: bb1, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
_0 = unchecked_shl::<u16>(_1, move _3) -> [return: bb2, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
// + literal: Const { ty: unsafe extern "rust-intrinsic" fn(u16, u16) -> u16 {unchecked_shl::<u16>}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb2: {
|
||||
StorageDead(_3); // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
|
||||
return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,51 +12,7 @@
|
|||
+ debug rhs => _4; // in scope 1 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
+ let mut _5: i16; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ let mut _6: (u32,); // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ let mut _7: u32; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ scope 2 {
|
||||
+ scope 3 (inlined core::num::<impl i16>::unchecked_shr::conv) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ debug x => _7; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ let mut _8: std::option::Option<i16>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ let mut _9: std::result::Result<i16, std::num::TryFromIntError>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ scope 4 {
|
||||
+ scope 5 (inlined <u32 as TryInto<i16>>::try_into) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ debug self => _7; // in scope 5 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||
+ scope 6 (inlined convert::num::<impl TryFrom<u32> for i16>::try_from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||
+ debug u => _7; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ let mut _10: bool; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ let mut _11: u32; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ let mut _12: i16; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ }
|
||||
+ }
|
||||
+ scope 7 (inlined Result::<i16, TryFromIntError>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ debug self => _9; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ let mut _13: isize; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ let _14: i16; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ scope 8 {
|
||||
+ debug x => _14; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+ }
|
||||
+ scope 9 (inlined #[track_caller] Option::<i16>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ debug self => _8; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ let mut _15: &std::option::Option<i16>; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ let mut _16: isize; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ scope 10 {
|
||||
+ debug val => _5; // in scope 10 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ }
|
||||
+ scope 11 {
|
||||
+ scope 13 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ scope 14 {
|
||||
+ scope 15 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ scope 12 (inlined Option::<i16>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ debug self => _15; // in scope 12 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
|
||||
|
@ -66,87 +22,30 @@
|
|||
StorageLive(_4); // scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
|
||||
_4 = _2; // scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
|
||||
- _0 = core::num::<impl i16>::unchecked_shr(move _3, move _4) -> bb1; // scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:23
|
||||
- // mir::Constant
|
||||
- // + span: $DIR/unchecked_shifts.rs:17:7: 17:20
|
||||
- // + literal: Const { ty: unsafe fn(i16, u32) -> i16 {core::num::<impl i16>::unchecked_shr}, val: Value(<ZST>) }
|
||||
+ StorageLive(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _6 = (_4,); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_7); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _7 = move (_6.0: u32); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_8); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_9); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ StorageLive(_11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _11 = const 32767_u32; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _10 = Gt(_7, move _11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ StorageDead(_11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ switchInt(move _10) -> [0: bb3, otherwise: bb2]; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _5 = core::num::<impl i16>::unchecked_shr::conv(move (_6.0: u32)) -> bb1; // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
- // + span: $DIR/unchecked_shifts.rs:17:7: 17:20
|
||||
- // + literal: Const { ty: unsafe fn(i16, u32) -> i16 {core::num::<impl i16>::unchecked_shr}, val: Value(<ZST>) }
|
||||
+ // + span: $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ // + literal: Const { ty: fn(u32) -> i16 {core::num::<impl i16>::unchecked_shr::conv}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
+ StorageDead(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _0 = unchecked_shr::<i16>(_3, move _5) -> [return: bb2, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
+ // mir::Constant
|
||||
+ // + span: $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
+ // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(i16, i16) -> i16 {unchecked_shr::<i16>}, val: Value(<ZST>) }
|
||||
+ }
|
||||
+
|
||||
+ bb2: {
|
||||
+ StorageDead(_5); // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
StorageDead(_4); // scope 0 at $DIR/unchecked_shifts.rs:+1:22: +1:23
|
||||
StorageDead(_3); // scope 0 at $DIR/unchecked_shifts.rs:+1:22: +1:23
|
||||
return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
|
||||
+ }
|
||||
+
|
||||
+ bb2: {
|
||||
+ _9 = Result::<i16, TryFromIntError>::Err(const TryFromIntError(())); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ // mir::Constant
|
||||
+ // + span: no-location
|
||||
+ // + literal: Const { ty: TryFromIntError, val: Value(<ZST>) }
|
||||
+ goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb3: {
|
||||
+ StorageLive(_12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _12 = _7 as i16 (IntToInt); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ _9 = Result::<i16, TryFromIntError>::Ok(move _12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ StorageDead(_12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb4: {
|
||||
+ StorageDead(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
+ StorageLive(_14); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _13 = discriminant(_9); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ switchInt(move _13) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb5: {
|
||||
+ _8 = Option::<i16>::None; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb6: {
|
||||
+ unreachable; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb7: {
|
||||
+ _14 = move ((_9 as Ok).0: i16); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ _8 = Option::<i16>::Some(move _14); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb8: {
|
||||
+ StorageDead(_14); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageDead(_9); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageLive(_15); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _16 = discriminant(_8); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ switchInt(move _16) -> [1: bb9, otherwise: bb6]; // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ }
|
||||
+
|
||||
+ bb9: {
|
||||
+ _5 = move ((_8 as Some).0: i16); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ StorageDead(_15); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageDead(_8); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageDead(_7); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ StorageDead(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
+ _0 = unchecked_shr::<i16>(_3, move _5) -> [return: bb1, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
+ // mir::Constant
|
||||
+ // + span: $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
+ // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(i16, i16) -> i16 {unchecked_shr::<i16>}, val: Value(<ZST>) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,51 +9,7 @@ fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
|
|||
debug rhs => _2; // in scope 1 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
let mut _3: i16; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
let mut _4: (u32,); // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
let mut _5: u32; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
scope 2 {
|
||||
scope 3 (inlined core::num::<impl i16>::unchecked_shr::conv) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
debug x => _5; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
let mut _6: std::option::Option<i16>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
let mut _7: std::result::Result<i16, std::num::TryFromIntError>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
scope 4 {
|
||||
scope 5 (inlined <u32 as TryInto<i16>>::try_into) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
debug self => _5; // in scope 5 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||
scope 6 (inlined convert::num::<impl TryFrom<u32> for i16>::try_from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||
debug u => _5; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
let mut _8: bool; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
let mut _9: u32; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
let mut _10: i16; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
}
|
||||
}
|
||||
scope 7 (inlined Result::<i16, TryFromIntError>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
debug self => _7; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
let mut _11: isize; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
let _12: i16; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
scope 8 {
|
||||
debug x => _12; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
}
|
||||
scope 9 (inlined #[track_caller] Option::<i16>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
debug self => _6; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
let mut _13: &std::option::Option<i16>; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
let mut _14: isize; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
scope 10 {
|
||||
debug val => _3; // in scope 10 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
}
|
||||
scope 11 {
|
||||
scope 13 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
scope 14 {
|
||||
scope 15 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scope 12 (inlined Option::<i16>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
debug self => _13; // in scope 12 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,78 +17,22 @@ fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
|
|||
StorageLive(_3); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_4); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_4 = (_2,); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_5 = move (_4.0: u32); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_6); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_7); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_8); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
StorageLive(_9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_9 = const 32767_u32; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_8 = Gt(_5, move _9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
StorageDead(_9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
switchInt(move _8) -> [0: bb3, otherwise: bb2]; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_3 = core::num::<impl i16>::unchecked_shr::conv(move (_4.0: u32)) -> bb1; // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
// + literal: Const { ty: fn(u32) -> i16 {core::num::<impl i16>::unchecked_shr::conv}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_3); // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
|
||||
}
|
||||
|
||||
bb2: {
|
||||
_7 = Result::<i16, TryFromIntError>::Err(const TryFromIntError(())); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: no-location
|
||||
// + literal: Const { ty: TryFromIntError, val: Value(<ZST>) }
|
||||
goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageLive(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_10 = _5 as i16 (IntToInt); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
_7 = Result::<i16, TryFromIntError>::Ok(move _10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
StorageDead(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageDead(_8); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
|
||||
StorageLive(_12); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_11 = discriminant(_7); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
switchInt(move _11) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
bb5: {
|
||||
_6 = Option::<i16>::None; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
bb6: {
|
||||
unreachable; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
bb7: {
|
||||
_12 = move ((_7 as Ok).0: i16); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_6 = Option::<i16>::Some(move _12); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
bb8: {
|
||||
StorageDead(_12); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageDead(_7); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageLive(_13); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_14 = discriminant(_6); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
switchInt(move _14) -> [1: bb9, otherwise: bb6]; // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
}
|
||||
|
||||
bb9: {
|
||||
_3 = move ((_6 as Some).0: i16); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
StorageDead(_13); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageDead(_6); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageDead(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
StorageDead(_4); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||
_0 = unchecked_shr::<i16>(_1, move _3) -> [return: bb1, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
_0 = unchecked_shr::<i16>(_1, move _3) -> [return: bb2, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
// + literal: Const { ty: unsafe extern "rust-intrinsic" fn(i16, i16) -> i16 {unchecked_shr::<i16>}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb2: {
|
||||
StorageDead(_3); // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
|
||||
return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,8 +9,9 @@
|
|||
+ debug self => _2; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ let mut _3: &std::option::Option<T>; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ let mut _4: isize; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ let _5: T; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ scope 2 {
|
||||
+ debug val => _0; // in scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ debug val => _5; // in scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ }
|
||||
+ scope 3 {
|
||||
+ scope 5 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
|
@ -46,7 +47,10 @@
|
|||
- bb2 (cleanup): {
|
||||
- resume; // scope 0 at $DIR/unwrap_unchecked.rs:+0:1: +2:2
|
||||
+ bb2: {
|
||||
+ _0 = move ((_2 as Some).0: T); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ StorageLive(_5); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ _5 = move ((_2 as Some).0: T); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ _0 = move _5; // scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ StorageDead(_5); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
+ StorageDead(_3); // scope 0 at $DIR/unwrap_unchecked.rs:+1:9: +1:27
|
||||
+ StorageDead(_2); // scope 0 at $DIR/unwrap_unchecked.rs:+1:26: +1:27
|
||||
+ return; // scope 0 at $DIR/unwrap_unchecked.rs:+2:2: +2:2
|
||||
|
|
|
@ -7,8 +7,9 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
|
|||
debug self => _1; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
let mut _2: &std::option::Option<T>; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
let mut _3: isize; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
let _4: T; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
scope 2 {
|
||||
debug val => _0; // in scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
debug val => _4; // in scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
}
|
||||
scope 3 {
|
||||
scope 5 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
|
@ -34,7 +35,10 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
|
|||
}
|
||||
|
||||
bb2: {
|
||||
_0 = move ((_1 as Some).0: T); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
StorageLive(_4); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
_4 = move ((_1 as Some).0: T); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
_0 = move _4; // scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
StorageDead(_4); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
|
||||
StorageDead(_2); // scope 0 at $DIR/unwrap_unchecked.rs:+1:9: +1:27
|
||||
return; // scope 0 at $DIR/unwrap_unchecked.rs:+2:2: +2:2
|
||||
}
|
||||
|
|
22
tests/mir-opt/nrvo_miscompile_111005.rs
Normal file
22
tests/mir-opt/nrvo_miscompile_111005.rs
Normal file
|
@ -0,0 +1,22 @@
|
|||
// This is a miscompilation, #111005 to track
|
||||
|
||||
// unit-test: RenameReturnPlace
|
||||
|
||||
#![feature(custom_mir, core_intrinsics)]
|
||||
extern crate core;
|
||||
use core::intrinsics::mir::*;
|
||||
|
||||
// EMIT_MIR nrvo_miscompile_111005.wrong.RenameReturnPlace.diff
|
||||
#[custom_mir(dialect = "runtime", phase = "initial")]
|
||||
pub fn wrong(arg: char) -> char {
|
||||
mir!({
|
||||
let temp = arg;
|
||||
RET = temp;
|
||||
temp = 'b';
|
||||
Return()
|
||||
})
|
||||
}
|
||||
|
||||
fn main() {
|
||||
assert_eq!(wrong('a'), 'a');
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
- // MIR for `wrong` before RenameReturnPlace
|
||||
+ // MIR for `wrong` after RenameReturnPlace
|
||||
|
||||
fn wrong(_1: char) -> char {
|
||||
- let mut _0: char; // return place in scope 0 at $DIR/nrvo_miscompile_111005.rs:+0:28: +0:32
|
||||
+ let mut _0: char; // return place in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
|
||||
let mut _2: char; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
|
||||
|
||||
bb0: {
|
||||
- _2 = _1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
|
||||
- _0 = _2; // scope 0 at $DIR/nrvo_miscompile_111005.rs:+3:9: +3:19
|
||||
- _2 = const 'b'; // scope 0 at $DIR/nrvo_miscompile_111005.rs:+4:9: +4:19
|
||||
+ _0 = _1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
|
||||
+ _0 = const 'b'; // scope 0 at $DIR/nrvo_miscompile_111005.rs:+4:9: +4:19
|
||||
return; // scope 0 at $DIR/nrvo_miscompile_111005.rs:+5:9: +5:17
|
||||
}
|
||||
}
|
||||
|
|
@ -3,14 +3,18 @@
|
|||
fn manual_replace(_1: &mut u32, _2: u32) -> u32 {
|
||||
debug r => _1; // in scope 0 at $DIR/mem_replace.rs:+0:23: +0:24
|
||||
debug v => _2; // in scope 0 at $DIR/mem_replace.rs:+0:36: +0:37
|
||||
let mut _0: u32; // return place in scope 0 at $DIR/mem_replace.rs:+1:9: +1:13
|
||||
let mut _0: u32; // return place in scope 0 at $DIR/mem_replace.rs:+0:47: +0:50
|
||||
let _3: u32; // in scope 0 at $DIR/mem_replace.rs:+1:9: +1:13
|
||||
scope 1 {
|
||||
debug temp => _0; // in scope 1 at $DIR/mem_replace.rs:+1:9: +1:13
|
||||
debug temp => _3; // in scope 1 at $DIR/mem_replace.rs:+1:9: +1:13
|
||||
}
|
||||
|
||||
bb0: {
|
||||
_0 = (*_1); // scope 0 at $DIR/mem_replace.rs:+1:16: +1:18
|
||||
StorageLive(_3); // scope 0 at $DIR/mem_replace.rs:+1:9: +1:13
|
||||
_3 = (*_1); // scope 0 at $DIR/mem_replace.rs:+1:16: +1:18
|
||||
(*_1) = _2; // scope 1 at $DIR/mem_replace.rs:+2:5: +2:11
|
||||
_0 = _3; // scope 1 at $DIR/mem_replace.rs:+3:5: +3:9
|
||||
StorageDead(_3); // scope 0 at $DIR/mem_replace.rs:+4:1: +4:2
|
||||
return; // scope 0 at $DIR/mem_replace.rs:+4:2: +4:2
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,28 +7,29 @@ fn mem_replace(_1: &mut u32, _2: u32) -> u32 {
|
|||
scope 1 (inlined std::mem::replace::<u32>) { // at $DIR/mem_replace.rs:16:5: 16:28
|
||||
debug dest => _1; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
debug src => _2; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
let mut _3: *const u32; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
let mut _4: *mut u32; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
let mut _4: *const u32; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
let mut _5: *mut u32; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
scope 2 {
|
||||
let _3: u32; // in scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
scope 3 {
|
||||
debug result => _0; // in scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
debug result => _3; // in scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
scope 7 (inlined std::ptr::write::<u32>) { // at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
debug dst => _4; // in scope 7 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
debug dst => _5; // in scope 7 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
debug src => _2; // in scope 7 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
let mut _6: *mut u32; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
let mut _7: *mut u32; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
scope 8 {
|
||||
scope 9 (inlined std::ptr::write::runtime::<u32>) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
debug dst => _6; // in scope 9 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
debug dst => _7; // in scope 9 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scope 4 (inlined std::ptr::read::<u32>) { // at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
debug src => _3; // in scope 4 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
let mut _5: *const u32; // in scope 4 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
debug src => _4; // in scope 4 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
let mut _6: *const u32; // in scope 4 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
scope 5 {
|
||||
scope 6 (inlined std::ptr::read::runtime::<u32>) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
debug src => _5; // in scope 6 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
debug src => _6; // in scope 6 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -37,17 +38,20 @@ fn mem_replace(_1: &mut u32, _2: u32) -> u32 {
|
|||
|
||||
bb0: {
|
||||
StorageLive(_3); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
_3 = &raw const (*_1); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageLive(_5); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
_0 = (*_3); // scope 5 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
StorageDead(_5); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageLive(_4); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
_4 = &raw const (*_1); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageLive(_6); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
_3 = (*_4); // scope 5 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
StorageDead(_6); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageDead(_4); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageLive(_5); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
_5 = &raw mut (*_1); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageLive(_7); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
(*_5) = _2; // scope 8 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
StorageDead(_7); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageDead(_5); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
_0 = move _3; // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageDead(_3); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageLive(_4); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
_4 = &raw mut (*_1); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageLive(_6); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
(*_4) = _2; // scope 8 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
StorageDead(_6); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
StorageDead(_4); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
return; // scope 0 at $DIR/mem_replace.rs:+2:2: +2:2
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,66 +3,67 @@
|
|||
fn slice_get_unchecked_mut_range(_1: &mut [u32], _2: std::ops::Range<usize>) -> &mut [u32] {
|
||||
debug slice => _1; // in scope 0 at $DIR/slice_index.rs:+0:45: +0:50
|
||||
debug index => _2; // in scope 0 at $DIR/slice_index.rs:+0:64: +0:69
|
||||
let mut _0: &mut [u32]; // return place in scope 0 at $DIR/slice_index.rs:+1:5: +1:35
|
||||
let mut _0: &mut [u32]; // return place in scope 0 at $DIR/slice_index.rs:+0:88: +0:98
|
||||
scope 1 (inlined core::slice::<impl [u32]>::get_unchecked_mut::<std::ops::Range<usize>>) { // at $DIR/slice_index.rs:26:11: 26:35
|
||||
debug self => _1; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
debug index => _2; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
let mut _3: *mut [u32]; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
let mut _3: &mut [u32]; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
let mut _4: *mut [u32]; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
let mut _5: *mut [u32]; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
scope 2 {
|
||||
scope 3 (inlined <std::ops::Range<usize> as SliceIndex<[u32]>>::get_unchecked_mut) { // at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
debug self => _2; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
debug slice => _4; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let _5: std::ops::Range<usize>; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _7: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
debug slice => _5; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let _6: std::ops::Range<usize>; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _8: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _9: *mut u32; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _9: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _10: *mut u32; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _11: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _11: *mut u32; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _12: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _13: std::ops::Range<usize>; // in scope 3 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
let mut _14: *mut [u32]; // in scope 3 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
let mut _13: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let mut _14: std::ops::Range<usize>; // in scope 3 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
let mut _15: *mut [u32]; // in scope 3 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
scope 4 {
|
||||
debug this => _5; // in scope 4 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
debug this => _6; // in scope 4 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
scope 5 {
|
||||
let _6: usize; // in scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let _7: usize; // in scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
scope 6 {
|
||||
debug new_len => _6; // in scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
debug new_len => _7; // in scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
scope 11 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
debug self => _4; // in scope 11 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
debug self => _5; // in scope 11 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
}
|
||||
scope 12 (inlined ptr::mut_ptr::<impl *mut u32>::add) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
debug self => _10; // in scope 12 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
debug count => _11; // in scope 12 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
debug self => _11; // in scope 12 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
debug count => _12; // in scope 12 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
scope 13 {
|
||||
}
|
||||
}
|
||||
scope 14 (inlined slice_from_raw_parts_mut::<u32>) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
debug data => _9; // in scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
debug len => _12; // in scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
let mut _16: *mut (); // in scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
debug data => _10; // in scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
debug len => _13; // in scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
scope 15 (inlined ptr::mut_ptr::<impl *mut u32>::cast::<()>) { // at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
debug self => _9; // in scope 15 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
debug self => _10; // in scope 15 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
let mut _17: *mut (); // in scope 15 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
}
|
||||
scope 16 (inlined std::ptr::from_raw_parts_mut::<[u32]>) { // at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
debug data_address => _16; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
debug metadata => _12; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
let mut _17: std::ptr::metadata::PtrRepr<[u32]>; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
let mut _18: std::ptr::metadata::PtrComponents<[u32]>; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
let mut _19: *const (); // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
debug data_address => _17; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
debug metadata => _13; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
let mut _18: std::ptr::metadata::PtrRepr<[u32]>; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
let mut _19: std::ptr::metadata::PtrComponents<[u32]>; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
let mut _20: *const (); // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
scope 17 {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scope 7 (inlined <std::ops::Range<usize> as SliceIndex<[T]>>::get_unchecked_mut::runtime::<u32>) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
debug this => _13; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
debug slice => _14; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
debug this => _14; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
debug slice => _15; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
|
||||
scope 8 (inlined ptr::mut_ptr::<impl *mut [u32]>::len) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
debug self => _14; // in scope 8 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
let mut _15: *const [u32]; // in scope 8 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
debug self => _15; // in scope 8 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
let mut _16: *const [u32]; // in scope 8 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
scope 9 (inlined std::ptr::metadata::<[u32]>) { // at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
debug ptr => _15; // in scope 9 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
debug ptr => _16; // in scope 9 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
scope 10 {
|
||||
}
|
||||
}
|
||||
|
@ -75,60 +76,61 @@ fn slice_get_unchecked_mut_range(_1: &mut [u32], _2: std::ops::Range<usize>) ->
|
|||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_3); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageLive(_4); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
_4 = &raw mut (*_1); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageLive(_5); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageLive(_13); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
_5 = &raw mut (*_1); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageLive(_6); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageLive(_14); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageLive(_15); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageLive(_6); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageLive(_16); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageLive(_7); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_7 = (_2.1: usize); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageLive(_8); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_8 = (_2.0: usize); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_6 = unchecked_sub::<usize>(move _7, move _8) -> [return: bb1, unwind unreachable]; // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_8 = (_2.1: usize); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageLive(_9); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_9 = (_2.0: usize); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_7 = unchecked_sub::<usize>(move _8, move _9) -> [return: bb1, unwind unreachable]; // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
// + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize, usize) -> usize {unchecked_sub::<usize>}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_9); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_8); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_7); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageLive(_9); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageLive(_10); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_10 = _4 as *mut u32 (PtrToPtr); // scope 11 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
StorageLive(_11); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_11 = (_2.0: usize); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_9 = Offset(_10, _11); // scope 13 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
StorageDead(_11); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_10); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_11 = _5 as *mut u32 (PtrToPtr); // scope 11 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
StorageLive(_12); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_12 = _6; // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageLive(_16); // scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
_16 = _9 as *mut () (PtrToPtr); // scope 15 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
StorageLive(_17); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
_12 = (_2.0: usize); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_10 = Offset(_11, _12); // scope 13 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
StorageDead(_12); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_11); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageLive(_13); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_13 = _7; // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageLive(_17); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_17 = _10 as *mut () (PtrToPtr); // scope 15 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
|
||||
StorageLive(_18); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
StorageLive(_19); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
_19 = _16 as *const () (Pointer(MutToConstPointer)); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
_18 = ptr::metadata::PtrComponents::<[u32]> { data_address: move _19, metadata: _12 }; // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
StorageLive(_20); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
_20 = _17 as *const () (Pointer(MutToConstPointer)); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
_19 = ptr::metadata::PtrComponents::<[u32]> { data_address: move _20, metadata: _13 }; // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
StorageDead(_20); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
_18 = ptr::metadata::PtrRepr::<[u32]> { const_ptr: move _19 }; // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
StorageDead(_19); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
_17 = ptr::metadata::PtrRepr::<[u32]> { const_ptr: move _18 }; // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
StorageDead(_18); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
_3 = (_17.1: *mut [u32]); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
StorageDead(_17); // scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
StorageDead(_16); // scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
StorageDead(_12); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_9); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_6); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_4 = (_18.1: *mut [u32]); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
StorageDead(_18); // scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
|
||||
StorageDead(_17); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_13); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_10); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_7); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_16); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageDead(_15); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageDead(_14); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageDead(_13); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageDead(_6); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageDead(_5); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageDead(_4); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
_0 = &mut (*_3); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageDead(_3); // scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
_3 = &mut (*_4); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
StorageDead(_4); // scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
|
||||
_0 = _3; // scope 0 at $DIR/slice_index.rs:+1:5: +1:35
|
||||
return; // scope 0 at $DIR/slice_index.rs:+2:2: +2:2
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,24 +3,26 @@
|
|||
fn slice_index_range(_1: &[u32], _2: std::ops::Range<usize>) -> &[u32] {
|
||||
debug slice => _1; // in scope 0 at $DIR/slice_index.rs:+0:26: +0:31
|
||||
debug index => _2; // in scope 0 at $DIR/slice_index.rs:+0:41: +0:46
|
||||
let mut _0: &[u32]; // return place in scope 0 at $DIR/slice_index.rs:+1:5: +1:18
|
||||
let mut _0: &[u32]; // return place in scope 0 at $DIR/slice_index.rs:+0:65: +0:71
|
||||
let _3: &[u32]; // in scope 0 at $DIR/slice_index.rs:+1:6: +1:18
|
||||
scope 1 (inlined #[track_caller] core::slice::index::<impl Index<std::ops::Range<usize>> for [u32]>::index) { // at $DIR/slice_index.rs:21:6: 21:18
|
||||
debug self => _1; // in scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
debug index => _2; // in scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
let _4: &[u32]; // in scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_3); // scope 0 at $DIR/slice_index.rs:+1:6: +1:18
|
||||
_3 = <std::ops::Range<usize> as SliceIndex<[u32]>>::index(move _2, _1) -> bb1; // scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageLive(_4); // scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_4 = <std::ops::Range<usize> as SliceIndex<[u32]>>::index(move _2, _1) -> bb1; // scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
// + literal: Const { ty: for<'a> fn(std::ops::Range<usize>, &'a [u32]) -> &'a <std::ops::Range<usize> as SliceIndex<[u32]>>::Output {<std::ops::Range<usize> as SliceIndex<[u32]>>::index}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_3 = _4; // scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
StorageDead(_4); // scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
|
||||
_0 = _3; // scope 0 at $DIR/slice_index.rs:+1:5: +1:18
|
||||
StorageDead(_3); // scope 0 at $DIR/slice_index.rs:+2:1: +2:2
|
||||
return; // scope 0 at $DIR/slice_index.rs:+2:2: +2:2
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue