diff --git a/src/test/run-pass/issue-10734.rs b/src/test/run-pass/issue-10734.rs index 5123b214b8d4..a30cf7173285 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. -pub fn main() { - if true { - let _a = ~3; - } - if false { - fail!() - } else { - let _a = ~3; +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 = 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!(); + } else { + let _a = Foo{ dropped: false }; + } + // Check that we dropped already (as expected from a `{ expr }`). + unsafe { assert!(drop_count == 2); } +}