1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
//@ build-pass
//@ compile-flags: -Z mir-opt-level=4
#![crate_type = "lib"]
#![feature(lang_items)]
#![no_std]
struct NonNull<T: ?Sized>(*const T);
struct Unique<T: ?Sized>(NonNull<T>);
#[lang = "owned_box"]
pub struct Box<T: ?Sized>(Unique<T>);
impl<T: ?Sized> Drop for Box<T> {
#[inline(always)]
fn drop(&mut self) {
dealloc(self.0.0.0)
}
}
#[inline(never)]
fn dealloc<T: ?Sized>(_: *const T) {}
pub struct Foo<T>(T);
pub fn foo(a: Option<Box<Foo<usize>>>) -> usize {
let f = match a {
None => Foo(0),
Some(vec) => *vec,
};
f.0
}
|