Initializing a zero-length array leaks the initializer · Issue #74836 · rust-lang/rust (original) (raw)

This bug was reported on StackOverflow today. Filipe Rodrigues noticed that the initializer of a zero-length array is leaked:

#[derive(PartialEq, Debug)] struct A;

impl Drop for A { fn drop(&mut self) { println!("Dropping A"); } }

fn main() { let vec: Vec = vec![]; let a = A; assert_eq!(vec, [a; 0]); }

The code above does not run drop() for a, while I'd expect that it should. According to a comment by @mcarton, this regression occurred between Rust 1.11.0 and 1.12.0, i.e. when MIR code generation was enabled by default.