Although, come to think about it, this is not quite right as it's making a (probably bad) assumption about where the drops occur. It should probably be something like this instead:

    pub fn main() {
        {
            if true {
                let _a = Foo{ dropped: false };
            }

            if false {
                fail!();
            } else {
                let _a = Foo{ dropped: false };
            }
        }
        unsafe { assert!(drop_count == 2); }
    }