//! Check that temporaries in the for into-iterable expr are not dropped | |
//! until the end of the for expr. | |
//@ run-pass | |
static mut FLAGS: u64 = 0; | |
struct AddFlags { | |
bits: u64, | |
} | |
impl Drop for AddFlags { | |
fn drop(&mut self) { | |
unsafe { | |
FLAGS += self.bits; | |
} | |
} | |
} | |
fn check_flags(expected: u64) { | |
unsafe { | |
let actual = FLAGS; | |
FLAGS = 0; | |
assert_eq!(actual, expected, "flags {}, expected {}", actual, expected); | |
} | |
} | |
fn main() { | |
for _ in &[AddFlags { bits: 1 }] { | |
check_flags(0); | |
} | |
check_flags(1); | |
} |