about summary refs log tree commit diff
diff options
context:
space:
mode:
authorScott McMurray <scottmcm@users.noreply.github.com>2025-07-27 21:37:17 -0700
committerScott McMurray <scottmcm@users.noreply.github.com>2025-08-03 22:26:32 -0700
commit9b107bed9f2d2098dbbaade0ddbc363c651cd38b (patch)
tree26fbda9d3a91fd370db0f62d0690bdef56a07ea1
parent07b7dc90ee4df5815dbb91ef8e98cb93571230f5 (diff)
downloadrust-9b107bed9f2d2098dbbaade0ddbc363c651cd38b.tar.gz
rust-9b107bed9f2d2098dbbaade0ddbc363c651cd38b.zip
Add a mir-opt test for an unneeded drop_in_place
-rw-r--r--tests/mir-opt/remove_unneeded_drop_in_place.rs13
-rw-r--r--tests/mir-opt/remove_unneeded_drop_in_place.slice_in_place.RemoveUnneededDrops.diff20
2 files changed, 33 insertions, 0 deletions
diff --git a/tests/mir-opt/remove_unneeded_drop_in_place.rs b/tests/mir-opt/remove_unneeded_drop_in_place.rs
new file mode 100644
index 00000000000..7fb7b1e78de
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drop_in_place.rs
@@ -0,0 +1,13 @@
+//@ test-mir-pass: RemoveUnneededDrops
+//@ needs-unwind
+
+// EMIT_MIR remove_unneeded_drop_in_place.slice_in_place.RemoveUnneededDrops.diff
+unsafe fn slice_in_place(ptr: *mut [char]) {
+    std::ptr::drop_in_place(ptr)
+}
+
+fn main() {
+    // CHECK-LABEL: fn main(
+    let mut a = ['o', 'k'];
+    unsafe { slice_in_place(&raw mut a) };
+}
diff --git a/tests/mir-opt/remove_unneeded_drop_in_place.slice_in_place.RemoveUnneededDrops.diff b/tests/mir-opt/remove_unneeded_drop_in_place.slice_in_place.RemoveUnneededDrops.diff
new file mode 100644
index 00000000000..4068e7940bc
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drop_in_place.slice_in_place.RemoveUnneededDrops.diff
@@ -0,0 +1,20 @@
+- // MIR for `slice_in_place` before RemoveUnneededDrops
++ // MIR for `slice_in_place` after RemoveUnneededDrops
+  
+  fn slice_in_place(_1: *mut [char]) -> () {
+      debug ptr => _1;
+      let mut _0: ();
+      let mut _2: *mut [char];
+  
+      bb0: {
+          StorageLive(_2);
+          _2 = copy _1;
+          _0 = drop_in_place::<[char]>(move _2) -> [return: bb1, unwind continue];
+      }
+  
+      bb1: {
+          StorageDead(_2);
+          return;
+      }
+  }
+