// 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, AllocError> { Global.allocate(layout) } unsafe fn deallocate(&self, ptr: NonNull, 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); } }