// skip-filecheck // compile-flags: -Z validate-mir #![feature(let_chains)] struct Droppy(u8); impl Drop for Droppy { fn drop(&mut self) { println!("drop {}", self.0); } } enum E { A(u8), B, } impl E { fn f() -> Self { Self::A(1) } } fn always_true() -> bool { true } // EMIT_MIR logical_or_in_conditional.test_or.built.after.mir fn test_or() { if Droppy(0).0 > 0 || Droppy(1).0 > 1 {} } // EMIT_MIR logical_or_in_conditional.test_complex.built.after.mir fn test_complex() { if let E::A(_) = E::f() && ((always_true() && Droppy(0).0 > 0) || Droppy(1).0 > 1) {} if !always_true() && let E::B = E::f() {} } fn main() { test_or(); }