From 2ffcbf11f5fd60ee06b2b275fedefc8dbfd9de9c Mon Sep 17 00:00:00 2001 From: Kevin Ballard Date: Sat, 30 Nov 2013 23:55:55 -0800 Subject: [PATCH] Rewrite the issue-10734 rpass file Stop relying on a malloc error to indicate failure and instead use an explicit check. Also ensure that the value is dropped at the correct time (e.g. that the if statement is translated into `{ expr }` instead of `expr`). --- src/test/run-pass/issue-10734.rs | 40 +++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/test/run-pass/issue-10734.rs b/src/test/run-pass/issue-10734.rs index 5123b214b8d..a30cf717328 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); } +}