Files
rust/tests/mir-opt/remove_unneeded_drops.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

59 lines
1.5 KiB
Rust
Raw Normal View History

2025-06-16 15:25:31 +00:00
//@ test-mir-pass: RemoveUnneededDrops
#![feature(custom_mir, core_intrinsics)]
use std::intrinsics::mir::*;
// EMIT_MIR remove_unneeded_drops.opt.RemoveUnneededDrops.diff
2025-06-16 15:25:31 +00:00
#[custom_mir(dialect = "runtime")]
fn opt(x: bool) {
2025-06-16 15:25:31 +00:00
// CHECK-LABEL: fn opt(
// CHECK-NOT: drop(
mir! {
{ Drop(x, ReturnTo(bb1), UnwindUnreachable()) }
bb1 = { Return() }
}
}
// EMIT_MIR remove_unneeded_drops.dont_opt.RemoveUnneededDrops.diff
2025-06-16 15:25:31 +00:00
#[custom_mir(dialect = "runtime")]
fn dont_opt(x: Vec<bool>) {
2025-06-16 15:25:31 +00:00
// CHECK-LABEL: fn dont_opt(
// CHECK: drop(
mir! {
{ Drop(x, ReturnTo(bb1), UnwindUnreachable()) }
bb1 = { Return() }
}
}
// EMIT_MIR remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.diff
2025-06-16 15:25:31 +00:00
#[custom_mir(dialect = "runtime")]
fn opt_generic_copy<T: Copy>(x: T) {
2025-06-16 15:25:31 +00:00
// CHECK-LABEL: fn opt_generic_copy(
// CHECK-NOT: drop(
mir! {
{ Drop(x, ReturnTo(bb1), UnwindUnreachable()) }
bb1 = { Return() }
}
}
// EMIT_MIR remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.diff
// since the pass is not running on monomorphisized code,
// we can't (but probably should) optimize this
2025-06-16 15:25:31 +00:00
#[custom_mir(dialect = "runtime")]
fn cannot_opt_generic<T>(x: T) {
2025-06-16 15:25:31 +00:00
// CHECK-LABEL: fn cannot_opt_generic(
// CHECK: drop(
mir! {
{ Drop(x, ReturnTo(bb1), UnwindUnreachable()) }
bb1 = { Return() }
}
}
fn main() {
2025-06-16 15:25:31 +00:00
// CHECK-LABEL: fn main(
opt(true);
opt_generic_copy(42);
cannot_opt_generic(42);
dont_opt(vec![true]);
}