diff --git a/src/test/run-pass/issue-10734.rs b/src/test/run-pass/issue-10734.rs index 5123b214b8d43..a30cf71732851 100644 --- a/src/test/run-pass/issue-10734.rs +++ b/src/test/run-pass/issue-10734.rs @@ -8,13 +8,37 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +static mut drop_count: uint = 0; + +#[unsafe_no_drop_flag] +struct Foo { + dropped: bool +} + +impl Drop for Foo { + fn drop(&mut self) { + // Test to make sure we haven't dropped already + assert!(!self.dropped); + self.dropped = true; + // And record the fact that we dropped for verification later + unsafe { drop_count += 1; } + } +} + pub fn main() { + // An `if true { expr }` statement should compile the same as `{ expr }`. if true { - let _a = ~3; + let _a = Foo{ dropped: false }; } + // Check that we dropped already (as expected from a `{ expr }`). + unsafe { assert!(drop_count == 1); } + + // An `if false {} else { expr }` statement should compile the same as `{ expr }`. if false { - fail!() + fail!(); } else { - let _a = ~3; + let _a = Foo{ dropped: false }; } + // Check that we dropped already (as expected from a `{ expr }`). + unsafe { assert!(drop_count == 2); } }