// run-pass
#![allow(dead_code)]
// Ensures that destructors are run for expressions of the form "let _ = e;"
// where `e` is a type which requires a destructor.


struct Foo;
struct Bar { x: isize }
struct Baz(isize);
enum FooBar { _Foo(Foo), _Bar(usize) }

static mut NUM_DROPS: usize = 0;

impl Drop for Foo {
    fn drop(&mut self) {
        unsafe { NUM_DROPS += 1; }
    }
}
impl Drop for Bar {
    fn drop(&mut self) {
        unsafe { NUM_DROPS += 1; }
    }
}
impl Drop for Baz {
    fn drop(&mut self) {
        unsafe { NUM_DROPS += 1; }
    }
}
impl Drop for FooBar {
    fn drop(&mut self) {
        unsafe { NUM_DROPS += 1; }
    }
}

fn main() {
    assert_eq!(unsafe { NUM_DROPS }, 0);
    { let _x = Foo; }
    assert_eq!(unsafe { NUM_DROPS }, 1);
    { let _x = Bar { x: 21 }; }
    assert_eq!(unsafe { NUM_DROPS }, 2);
    { let _x = Baz(21); }
    assert_eq!(unsafe { NUM_DROPS }, 3);
    { let _x = FooBar::_Foo(Foo); }
    assert_eq!(unsafe { NUM_DROPS }, 5);
    { let _x = FooBar::_Bar(42); }
    assert_eq!(unsafe { NUM_DROPS }, 6);

    { let _ = Foo; }
    assert_eq!(unsafe { NUM_DROPS }, 7);
    { let _ = Bar { x: 21 }; }
    assert_eq!(unsafe { NUM_DROPS }, 8);
    { let _ = Baz(21); }
    assert_eq!(unsafe { NUM_DROPS }, 9);
    { let _ = FooBar::_Foo(Foo); }
    assert_eq!(unsafe { NUM_DROPS }, 11);
    { let _ = FooBar::_Bar(42); }
    assert_eq!(unsafe { NUM_DROPS }, 12);
}
