diff --git a/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-abort.mir new file mode 100644 index 00000000000..81474306eec --- /dev/null +++ b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-abort.mir @@ -0,0 +1,62 @@ +// MIR for `demo_byte_add_fat` after PreCodegen + +fn demo_byte_add_fat(_1: *const [u32], _2: usize) -> *const [u32] { + debug p => _1; + debug n => _2; + let mut _0: *const [u32]; + scope 1 (inlined std::ptr::const_ptr::::byte_add) { + debug self => _1; + debug count => _2; + let mut _3: *const u8; + let mut _4: *const u8; + scope 2 (inlined std::ptr::const_ptr::::cast::) { + debug self => _1; + } + scope 3 (inlined std::ptr::const_ptr::::add) { + debug self => _3; + debug count => _2; + } + scope 4 (inlined std::ptr::const_ptr::::with_metadata_of::<[u32]>) { + debug self => _4; + debug meta => _1; + let mut _5: *const (); + let mut _7: usize; + scope 5 (inlined std::ptr::metadata::<[u32]>) { + debug ptr => _1; + let mut _6: std::ptr::metadata::PtrRepr<[u32]>; + } + scope 6 (inlined std::ptr::from_raw_parts::<[u32]>) { + debug data_pointer => _5; + debug metadata => _7; + let mut _8: std::ptr::metadata::PtrComponents<[u32]>; + let mut _9: std::ptr::metadata::PtrRepr<[u32]>; + } + } + } + + bb0: { + StorageLive(_4); + StorageLive(_3); + _3 = _1 as *const u8 (PtrToPtr); + _4 = Offset(_3, _2); + StorageDead(_3); + StorageLive(_5); + _5 = _4 as *const () (PtrToPtr); + StorageLive(_7); + StorageLive(_6); + _6 = std::ptr::metadata::PtrRepr::<[u32]> { const_ptr: _1 }; + _7 = ((_6.2: std::ptr::metadata::PtrComponents<[u32]>).1: usize); + StorageDead(_6); + StorageLive(_9); + StorageLive(_8); + _8 = std::ptr::metadata::PtrComponents::<[u32]> { data_pointer: _5, metadata: _7 }; + _9 = std::ptr::metadata::PtrRepr::<[u32]> { const_ptr: move _8 }; + StorageDead(_8); + _0 = (_9.0: *const [u32]); + StorageDead(_9); + StorageDead(_7); + StorageDead(_5); + StorageDead(_4); + return; + } +} diff --git a/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-unwind.mir new file mode 100644 index 00000000000..81474306eec --- /dev/null +++ b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-unwind.mir @@ -0,0 +1,62 @@ +// MIR for `demo_byte_add_fat` after PreCodegen + +fn demo_byte_add_fat(_1: *const [u32], _2: usize) -> *const [u32] { + debug p => _1; + debug n => _2; + let mut _0: *const [u32]; + scope 1 (inlined std::ptr::const_ptr::::byte_add) { + debug self => _1; + debug count => _2; + let mut _3: *const u8; + let mut _4: *const u8; + scope 2 (inlined std::ptr::const_ptr::::cast::) { + debug self => _1; + } + scope 3 (inlined std::ptr::const_ptr::::add) { + debug self => _3; + debug count => _2; + } + scope 4 (inlined std::ptr::const_ptr::::with_metadata_of::<[u32]>) { + debug self => _4; + debug meta => _1; + let mut _5: *const (); + let mut _7: usize; + scope 5 (inlined std::ptr::metadata::<[u32]>) { + debug ptr => _1; + let mut _6: std::ptr::metadata::PtrRepr<[u32]>; + } + scope 6 (inlined std::ptr::from_raw_parts::<[u32]>) { + debug data_pointer => _5; + debug metadata => _7; + let mut _8: std::ptr::metadata::PtrComponents<[u32]>; + let mut _9: std::ptr::metadata::PtrRepr<[u32]>; + } + } + } + + bb0: { + StorageLive(_4); + StorageLive(_3); + _3 = _1 as *const u8 (PtrToPtr); + _4 = Offset(_3, _2); + StorageDead(_3); + StorageLive(_5); + _5 = _4 as *const () (PtrToPtr); + StorageLive(_7); + StorageLive(_6); + _6 = std::ptr::metadata::PtrRepr::<[u32]> { const_ptr: _1 }; + _7 = ((_6.2: std::ptr::metadata::PtrComponents<[u32]>).1: usize); + StorageDead(_6); + StorageLive(_9); + StorageLive(_8); + _8 = std::ptr::metadata::PtrComponents::<[u32]> { data_pointer: _5, metadata: _7 }; + _9 = std::ptr::metadata::PtrRepr::<[u32]> { const_ptr: move _8 }; + StorageDead(_8); + _0 = (_9.0: *const [u32]); + StorageDead(_9); + StorageDead(_7); + StorageDead(_5); + StorageDead(_4); + return; + } +} diff --git a/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-abort.mir new file mode 100644 index 00000000000..d86f2d1106a --- /dev/null +++ b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-abort.mir @@ -0,0 +1,54 @@ +// MIR for `demo_byte_add_thin` after PreCodegen + +fn demo_byte_add_thin(_1: *const u32, _2: usize) -> *const u32 { + debug p => _1; + debug n => _2; + let mut _0: *const u32; + scope 1 (inlined std::ptr::const_ptr::::byte_add) { + debug self => _1; + debug count => _2; + let mut _3: *const u8; + let mut _4: *const u8; + scope 2 (inlined std::ptr::const_ptr::::cast::) { + debug self => _1; + } + scope 3 (inlined std::ptr::const_ptr::::add) { + debug self => _3; + debug count => _2; + } + scope 4 (inlined std::ptr::const_ptr::::with_metadata_of::) { + debug self => _4; + debug meta => _1; + let mut _5: *const (); + scope 5 (inlined std::ptr::metadata::) { + debug ptr => _1; + } + scope 6 (inlined std::ptr::from_raw_parts::) { + debug data_pointer => _5; + debug metadata => const (); + let mut _6: std::ptr::metadata::PtrComponents; + let mut _7: std::ptr::metadata::PtrRepr; + } + } + } + + bb0: { + StorageLive(_4); + StorageLive(_3); + _3 = _1 as *const u8 (PtrToPtr); + _4 = Offset(_3, _2); + StorageDead(_3); + StorageLive(_5); + _5 = _4 as *const () (PtrToPtr); + StorageLive(_7); + StorageLive(_6); + _6 = std::ptr::metadata::PtrComponents:: { data_pointer: _5, metadata: const () }; + _7 = std::ptr::metadata::PtrRepr:: { const_ptr: move _6 }; + StorageDead(_6); + _0 = (_7.0: *const u32); + StorageDead(_7); + StorageDead(_5); + StorageDead(_4); + return; + } +} diff --git a/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-unwind.mir new file mode 100644 index 00000000000..d86f2d1106a --- /dev/null +++ b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-unwind.mir @@ -0,0 +1,54 @@ +// MIR for `demo_byte_add_thin` after PreCodegen + +fn demo_byte_add_thin(_1: *const u32, _2: usize) -> *const u32 { + debug p => _1; + debug n => _2; + let mut _0: *const u32; + scope 1 (inlined std::ptr::const_ptr::::byte_add) { + debug self => _1; + debug count => _2; + let mut _3: *const u8; + let mut _4: *const u8; + scope 2 (inlined std::ptr::const_ptr::::cast::) { + debug self => _1; + } + scope 3 (inlined std::ptr::const_ptr::::add) { + debug self => _3; + debug count => _2; + } + scope 4 (inlined std::ptr::const_ptr::::with_metadata_of::) { + debug self => _4; + debug meta => _1; + let mut _5: *const (); + scope 5 (inlined std::ptr::metadata::) { + debug ptr => _1; + } + scope 6 (inlined std::ptr::from_raw_parts::) { + debug data_pointer => _5; + debug metadata => const (); + let mut _6: std::ptr::metadata::PtrComponents; + let mut _7: std::ptr::metadata::PtrRepr; + } + } + } + + bb0: { + StorageLive(_4); + StorageLive(_3); + _3 = _1 as *const u8 (PtrToPtr); + _4 = Offset(_3, _2); + StorageDead(_3); + StorageLive(_5); + _5 = _4 as *const () (PtrToPtr); + StorageLive(_7); + StorageLive(_6); + _6 = std::ptr::metadata::PtrComponents:: { data_pointer: _5, metadata: const () }; + _7 = std::ptr::metadata::PtrRepr:: { const_ptr: move _6 }; + StorageDead(_6); + _0 = (_7.0: *const u32); + StorageDead(_7); + StorageDead(_5); + StorageDead(_4); + return; + } +} diff --git a/tests/mir-opt/pre-codegen/ptr_offset.rs b/tests/mir-opt/pre-codegen/ptr_offset.rs new file mode 100644 index 00000000000..88ee00296a0 --- /dev/null +++ b/tests/mir-opt/pre-codegen/ptr_offset.rs @@ -0,0 +1,16 @@ +// skip-filecheck +//@ compile-flags: -O -C debuginfo=0 -Zmir-opt-level=2 -Zinline-mir +//@ ignore-debug: precondition checks are under cfg(debug_assertions) +// EMIT_MIR_FOR_EACH_PANIC_STRATEGY + +#![crate_type = "lib"] + +// EMIT_MIR ptr_offset.demo_byte_add_thin.PreCodegen.after.mir +pub unsafe fn demo_byte_add_thin(p: *const u32, n: usize) -> *const u32 { + p.byte_add(n) +} + +// EMIT_MIR ptr_offset.demo_byte_add_fat.PreCodegen.after.mir +pub unsafe fn demo_byte_add_fat(p: *const [u32], n: usize) -> *const [u32] { + p.byte_add(n) +}