41 lines
698 B
Rust
41 lines
698 B
Rust
// 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();
|
|
}
|