blob: 29c965d7ff5310c9ae592762082f3c2a3d7d77df [file] [log] [blame]
// run-pass
#![allow(dead_code)]
// Ensures that destructors are run for expressions of the form "e;" where
// `e` is a type which requires a destructor.
#![allow(path_statements)]
struct A { n: isize }
struct B;
static mut NUM_DROPS: usize = 0;
impl Drop for A {
fn drop(&mut self) {
unsafe { NUM_DROPS += 1; }
}
}
impl Drop for B {
fn drop(&mut self) {
unsafe { NUM_DROPS += 1; }
}
}
fn main() {
assert_eq!(unsafe { NUM_DROPS }, 0);
{ let _a = A { n: 1 }; }
assert_eq!(unsafe { NUM_DROPS }, 1);
{ A { n: 3 }; }
assert_eq!(unsafe { NUM_DROPS }, 2);
{ let _b = B; }
assert_eq!(unsafe { NUM_DROPS }, 3);
{ B; }
assert_eq!(unsafe { NUM_DROPS }, 4);
}