2023-10-16 12:36:39 -05:00
|
|
|
// skip-filecheck
|
2023-05-20 04:14:16 -05:00
|
|
|
//@ 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() {
|
2024-06-02 19:18:33 -05:00
|
|
|
if let E::A(_) = E::f()
|
|
|
|
&& ((always_true() && Droppy(0).0 > 0) || Droppy(1).0 > 1)
|
|
|
|
{}
|
2023-05-20 04:14:16 -05:00
|
|
|
|
2024-06-02 19:18:33 -05:00
|
|
|
if !always_true()
|
|
|
|
&& let E::B = E::f()
|
|
|
|
{}
|
2023-05-20 04:14:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
test_or();
|
|
|
|
}
|