1- // MIR for `identity` before SeparateConstSwitch 2+ // MIR for `identity` after SeparateConstSwitch 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: bb6, 1_isize: bb4, otherwise: bb5]; // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 61+ switchInt(move _10) -> [0_isize: bb5, 1_isize: bb3, otherwise: bb4]; // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 62 } 63 64 bb1: { 65- StorageDead(_10); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 66- StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 67- _5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 68- switchInt(move _5) -> [0_isize: bb2, otherwise: bb3]; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 69- } 70- 71- bb2: { 72 StorageLive(_9); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 73 _9 = ((_3 as Continue).0: i32); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 74 _2 = _9; // scope 4 at $DIR/separate_const_switch.rs:29:8: 29:10 75 StorageDead(_9); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 76 ((_0 as Ok).0: i32) = move _2; // scope 0 at $DIR/separate_const_switch.rs:29:5: 29:11 77 discriminant(_0) = 0; // scope 0 at $DIR/separate_const_switch.rs:29:5: 29:11 78 StorageDead(_2); // scope 0 at $DIR/separate_const_switch.rs:29:10: 29:11 79 StorageDead(_3); // scope 0 at $DIR/separate_const_switch.rs:30:1: 30:2 80 return; // scope 0 at $DIR/separate_const_switch.rs:30:2: 30:2 81 } 82 83- bb3: { 84+ bb2: { 85 StorageLive(_6); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 86 _6 = ((_3 as Break).0: std::result::Result<std::convert::Infallible, i32>); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 87 StorageLive(_8); // scope 2 at $DIR/separate_const_switch.rs:29:9: 29:10 88 _8 = _6; // scope 2 at $DIR/separate_const_switch.rs:29:9: 29:10 89 StorageLive(_16); // scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 90 _16 = move ((_8 as Err).0: i32); // scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 91 StorageLive(_17); // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 92 StorageLive(_18); // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 93 _18 = move _16; // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 94 _17 = move _18; // scope 10 at $DIR/separate_const_switch.rs:29:8: 29:10 95 StorageDead(_18); // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 96 ((_0 as Err).0: i32) = move _17; // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 97 discriminant(_0) = 1; // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 98 StorageDead(_17); // scope 9 at $DIR/separate_const_switch.rs:29:8: 29:10 99 StorageDead(_16); // scope 8 at $DIR/separate_const_switch.rs:29:8: 29:10 100 StorageDead(_8); // scope 2 at $DIR/separate_const_switch.rs:29:9: 29:10 101 StorageDead(_6); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 102 StorageDead(_2); // scope 0 at $DIR/separate_const_switch.rs:29:10: 29:11 103 StorageDead(_3); // scope 0 at $DIR/separate_const_switch.rs:30:1: 30:2 104 return; // scope 0 at $DIR/separate_const_switch.rs:30:2: 30:2 105 } 106 107- bb4: { 108+ bb3: { 109 StorageLive(_13); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 110 _13 = move ((_4 as Err).0: i32); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 111 StorageLive(_14); // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 112 StorageLive(_15); // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 113 _15 = move _13; // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 114 ((_14 as Err).0: i32) = move _15; // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 115 discriminant(_14) = 1; // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 116 StorageDead(_15); // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 117 ((_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 118 discriminant(_3) = 1; // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 119 StorageDead(_14); // scope 7 at $DIR/separate_const_switch.rs:29:8: 29:10 120 StorageDead(_13); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 121- goto -> bb1; // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 122+ StorageDead(_10); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 123+ StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 124+ _5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 125+ switchInt(move _5) -> [0_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 126 } 127 128- bb5: { 129+ bb4: { 130 unreachable; // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 131 } 132 133- bb6: { 134+ bb5: { 135 StorageLive(_11); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 136 _11 = move ((_4 as Ok).0: i32); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 137 StorageLive(_12); // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 138 _12 = move _11; // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 139 ((_3 as Continue).0: i32) = move _12; // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 140 discriminant(_3) = 0; // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 141 StorageDead(_12); // scope 6 at $DIR/separate_const_switch.rs:29:8: 29:10 142 StorageDead(_11); // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 143- goto -> bb1; // scope 5 at $DIR/separate_const_switch.rs:29:8: 29:10 144+ StorageDead(_10); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 145+ StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:29:9: 29:10 146+ _5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 147+ switchInt(move _5) -> [0_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:29:8: 29:10 148 } 149 } 150 151