After chatting with @cmr, it might actually be nice to assert that it's dropping at all, just to kill two birds with one stone (i.e. define this test as checking that it drops the correct number of times, rather than checking that it hasn't dropped too many times).

    static mut drop_count: uint = 0;

    #[unsafe_no_drop_flag]
    struct Foo {
        dropped: bool
    }

    impl Drop for Foo {
        fn drop(&mut self) {
            assert!(!self.dropped);
            self.dropped = true;
            unsafe { drop_count += 1; }
        }
    }

    fn main() {
        if true {
            let _a = Foo{ dropped: false };
        }
        unsafe { assert!(drop_count == 1); }

        if false {
            fail!();
        } else {
            let _a = Foo{ dropped: false };
        }
        unsafe { assert!(drop_count == 2); }
    }