//@ test-mir-pass: UnreachablePropagation // EMIT_MIR_FOR_EACH_PANIC_STRATEGY enum Empty {} fn empty() -> Option { None } // EMIT_MIR unreachable.if_let.UnreachablePropagation.diff fn if_let() { // CHECK-LABEL: fn if_let( // CHECK: bb0: { // CHECK: {{_.*}} = empty() // CHECK: bb1: { // CHECK: [[ne:_.*]] = Ne({{.*}}, const 1_isize); // CHECK-NEXT: assume(move [[ne]]); // CHECK-NEXT: goto -> bb6; // CHECK: bb2: { // CHECK-NEXT: unreachable; // CHECK: bb3: { // CHECK-NEXT: unreachable; // CHECK: bb4: { // CHECK-NEXT: unreachable; // CHECK: bb5: { // CHECK-NEXT: unreachable; // CHECK: bb6: { // CHECK: return; if let Some(_x) = empty() { let mut _y; if true { _y = 21; } else { _y = 42; } match _x {} } } // EMIT_MIR unreachable.as_match.UnreachablePropagation.diff fn as_match() { // CHECK-LABEL: fn as_match( // CHECK: bb0: { // CHECK: {{_.*}} = empty() // CHECK: bb1: { // CHECK: [[eq:_.*]] = Ne({{.*}}, const 1_isize); // CHECK-NEXT: assume(move [[eq]]); // CHECK-NEXT: goto -> bb2; // CHECK: bb2: { // CHECK: return; // CHECK: bb3: { // CHECK-NEXT: unreachable; match empty() { Some(_x) => match _x {}, None => {} } } fn main() { if_let(); as_match(); }