Skip to content

Commit a0cb292

Browse files
committed
Add a mir-opt test for an unneeded drop_in_place
1 parent d093acb commit a0cb292

3 files changed

+47
-0
lines changed

tests/mir-opt/remove_unneeded_drops.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,16 @@ fn cannot_opt_generic<T>(x: T) {
2222
drop(x);
2323
}
2424

25+
// EMIT_MIR remove_unneeded_drops.slice_in_place.RemoveUnneededDrops.diff
26+
unsafe fn slice_in_place(ptr: *mut [char]) {
27+
std::ptr::drop_in_place(ptr)
28+
}
29+
2530
fn main() {
2631
opt(true);
2732
opt_generic_copy(42);
2833
cannot_opt_generic(42);
2934
dont_opt(vec![true]);
35+
let mut a = ['o', 'k'];
36+
unsafe { slice_in_place(&raw mut a) };
3037
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
- // MIR for `slice_in_place` before RemoveUnneededDrops
2+
+ // MIR for `slice_in_place` after RemoveUnneededDrops
3+
4+
fn slice_in_place(_1: *mut [char]) -> () {
5+
debug ptr => _1;
6+
let mut _0: ();
7+
let mut _2: *mut [char];
8+
9+
bb0: {
10+
StorageLive(_2);
11+
_2 = copy _1;
12+
_0 = drop_in_place::<[char]>(move _2) -> [return: bb1, unwind unreachable];
13+
}
14+
15+
bb1: {
16+
StorageDead(_2);
17+
return;
18+
}
19+
}
20+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
- // MIR for `slice_in_place` before RemoveUnneededDrops
2+
+ // MIR for `slice_in_place` after RemoveUnneededDrops
3+
4+
fn slice_in_place(_1: *mut [char]) -> () {
5+
debug ptr => _1;
6+
let mut _0: ();
7+
let mut _2: *mut [char];
8+
9+
bb0: {
10+
StorageLive(_2);
11+
_2 = copy _1;
12+
_0 = drop_in_place::<[char]>(move _2) -> [return: bb1, unwind continue];
13+
}
14+
15+
bb1: {
16+
StorageDead(_2);
17+
return;
18+
}
19+
}
20+

0 commit comments

Comments
 (0)