1- // MIR for `identity` before ConstProp 2+ // MIR for `identity` after ConstProp 3 4 fn identity(_1: Result<i32, i32>) -> Result<i32, i32> { 5 debug x => _1; // in scope 0 at $DIR/separate_const_switch.rs:28:13: 28:14 6 let mut _0: std::result::Result<i32, i32>; // return place in scope 0 at $DIR/separate_const_switch.rs:28:37: 28:53 7 let mut _2: i32; // in scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 8 let mut _3: std::ops::ControlFlow<std::result::Result<std::convert::Infallible, i32>, i32>; // in scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 9 let mut _4: std::result::Result<i32, i32>; // in scope 0 at $DIR/separate_const_switch.rs:29:8: 29:9 10 let mut _5: isize; // in scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 11 let _6: std::result::Result<std::convert::Infallible, i32>; // in scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 12 let mut _7: !; // in scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 13 let mut _8: std::result::Result<std::convert::Infallible, i32>; // in scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 14 let _9: i32; // in scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 15 scope 1 { 16 debug residual => _6; // in scope 1 at $DIR/separate_const_switch.rs:29:9: 29:10 17 scope 2 { 18 scope 8 (inlined <Result<i32, i32> as FromResidual<Result<Infallible, i32>>>::from_residual) { // at $DIR/separate_const_switch.rs:29:8: 29:10 19 debug residual => _8; // in scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 20 let _16: i32; // in scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 21 let mut _17: i32; // in scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 22 let mut _18: i32; // in scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 23 scope 9 { 24 debug e => _16; // in scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 25 scope 10 (inlined <i32 as From<i32>>::from) { // at $DIR/separate_const_switch.rs:29:8: 29:10 26 debug t => _18; // in scope 10 at $DIR/separate_const_switch.rs:29:8: 29:10 27 } 28 } 29 } 30 } 31 } 32 scope 3 { 33 debug val => _9; // in scope 3 at $DIR/separate_const_switch.rs:29:8: 29:10 34 scope 4 { 35 } 36 } 37 scope 5 (inlined <Result<i32, i32> as Try>::branch) { // at $DIR/separate_const_switch.rs:29:8: 29:10 38 debug self => _4; // in scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 39 let mut _10: isize; // in scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 40 let _11: i32; // in scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 41 let mut _12: i32; // in scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 42 let _13: i32; // in scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 43 let mut _14: std::result::Result<std::convert::Infallible, i32>; // in scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 44 let mut _15: i32; // in scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 45 scope 6 { 46 debug v => _11; // in scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 47 } 48 scope 7 { 49 debug e => _13; // in scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 50 } 51 } 52 53 bb0: { 54 StorageLive(_2); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 55 StorageLive(_3); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 56 StorageLive(_4); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:9 57 _4 = _1; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:9 58 StorageLive(_10); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 59 _10 = discriminant(_4); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 60 switchInt(move _10) -> [0_isize: bb5, 1_isize: bb3, otherwise: bb4]; // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 61 } 62 63 bb1: { 64 StorageLive(_9); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 65 _9 = ((_3 as Continue).0: i32); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 66 _2 = _9; // scope 4 at $DIR/separate_const_switch.rs:29:8: 29:10 67 StorageDead(_9); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 68 ((_0 as Ok).0: i32) = move _2; // scope 0 at $DIR/separate_const_switch.rs:29:5: 29:11 69 discriminant(_0) = 0; // scope 0 at $DIR/separate_const_switch.rs:29:5: 29:11 70 StorageDead(_2); // scope 0 at $DIR/separate_const_switch.rs:29:10: 29:11 71 StorageDead(_3); // scope 0 at $DIR/separate_const_switch.rs:30:1: 30:2 72 return; // scope 0 at $DIR/separate_const_switch.rs:30:2: 30:2 73 } 74 75 bb2: { 76 StorageLive(_6); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 77 _6 = ((_3 as Break).0: std::result::Result<std::convert::Infallible, i32>); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 78 StorageLive(_8); // scope 2 at $DIR/separate_const_switch.rs:29:9: 29:10 79 _8 = _6; // scope 2 at $DIR/separate_const_switch.rs:29:9: 29:10 80 StorageLive(_16); // scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 81 _16 = move ((_8 as Err).0: i32); // scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 82 StorageLive(_17); // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 83 StorageLive(_18); // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 84 _18 = move _16; // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 85 _17 = move _18; // scope 10 at $DIR/separate_const_switch.rs:29:8: 29:10 86 StorageDead(_18); // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 87 ((_0 as Err).0: i32) = move _17; // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 88 discriminant(_0) = 1; // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 89 StorageDead(_17); // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 90 StorageDead(_16); // scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 91 StorageDead(_8); // scope 2 at $DIR/separate_const_switch.rs:29:9: 29:10 92 StorageDead(_6); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 93 StorageDead(_2); // scope 0 at $DIR/separate_const_switch.rs:29:10: 29:11 94 StorageDead(_3); // scope 0 at $DIR/separate_const_switch.rs:30:1: 30:2 95 return; // scope 0 at $DIR/separate_const_switch.rs:30:2: 30:2 96 } 97 98 bb3: { 99 StorageLive(_13); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 100 _13 = move ((_4 as Err).0: i32); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 101 StorageLive(_14); // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 102 StorageLive(_15); // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 103 _15 = move _13; // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 104 ((_14 as Err).0: i32) = move _15; // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 105 discriminant(_14) = 1; // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 106 StorageDead(_15); // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 107 ((_3 as Break).0: std::result::Result<std::convert::Infallible, i32>) = move _14; // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 108 discriminant(_3) = 1; // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 109 StorageDead(_14); // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 110 StorageDead(_13); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 111 StorageDead(_10); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 112 StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 113- _5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 114- switchInt(move _5) -> [0_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 115+ _5 = const 1_isize; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 116+ switchInt(const 1_isize) -> [0_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 117 } 118 119 bb4: { 120 unreachable; // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 121 } 122 123 bb5: { 124 StorageLive(_11); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 125 _11 = move ((_4 as Ok).0: i32); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 126 StorageLive(_12); // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 127 _12 = move _11; // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 128 ((_3 as Continue).0: i32) = move _12; // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 129 discriminant(_3) = 0; // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 130 StorageDead(_12); // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 131 StorageDead(_11); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 132 StorageDead(_10); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 133 StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 134- _5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 135- switchInt(move _5) -> [0_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 136+ _5 = const 0_isize; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 137+ switchInt(const 0_isize) -> [0_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 138 } 139 } 140 141