rust/tests/mir-opt/box_conditional_drop_allocator.rs
2025-07-25 13:42:45 -07:00

40 lines
906 B
Rust

// skip-filecheck
//@ test-mir-pass: ElaborateDrops
//@ needs-unwind
#![feature(allocator_api)]
// Regression test for #131082.
// Testing that the allocator of a Box is dropped in conditional drops
use std::alloc::{AllocError, Allocator, Global, Layout};
use std::ptr::NonNull;
struct DropAllocator;
unsafe impl Allocator for DropAllocator {
fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {
Global.allocate(layout)
}
unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {
Global.deallocate(ptr, layout);
}
}
impl Drop for DropAllocator {
fn drop(&mut self) {}
}
struct HasDrop;
impl Drop for HasDrop {
fn drop(&mut self) {}
}
// EMIT_MIR box_conditional_drop_allocator.main.ElaborateDrops.diff
fn main() {
let b = Box::new_in(HasDrop, DropAllocator);
if true {
drop(*b);
} else {
drop(b);
}
}