// MIR for `complicated_match` after ElaborateDrops

fn complicated_match(_1: bool, _2: (bool, bool, std::string::String)) -> i32 {
    debug cond => _1;                    // in scope 0 at $DIR/match-arm-scopes.rs:14:22: 14:26
    debug items => _2;                   // in scope 0 at $DIR/match-arm-scopes.rs:14:34: 14:39
    let mut _0: i32;                     // return place in scope 0 at $DIR/match-arm-scopes.rs:14:66: 14:69
    let mut _3: &bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:15:11: 15:16
    let mut _4: &bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:15:11: 15:16
    let _5: bool;                        // in scope 0 at $DIR/match-arm-scopes.rs:16:17: 16:18
    let _6: &bool;                       // in scope 0 at $DIR/match-arm-scopes.rs:16:17: 16:18
    let _7: std::string::String;         // in scope 0 at $DIR/match-arm-scopes.rs:16:20: 16:21
    let _8: &std::string::String;        // in scope 0 at $DIR/match-arm-scopes.rs:16:20: 16:21
    let mut _9: bool;                    // in scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
    let mut _10: bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:16:45: 16:49
    let mut _11: !;                      // in scope 0 at $DIR/match-arm-scopes.rs:16:52: 16:60
    let mut _12: bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
    let mut _13: bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:16:45: 16:49
    let mut _14: !;                      // in scope 0 at $DIR/match-arm-scopes.rs:16:52: 16:60
    let _15: bool;                       // in scope 0 at $DIR/match-arm-scopes.rs:17:16: 17:17
    let _16: std::string::String;        // in scope 0 at $DIR/match-arm-scopes.rs:17:19: 17:20
    scope 1 {
        debug a => _5;                   // in scope 1 at $DIR/match-arm-scopes.rs:16:17: 16:18
        debug a => _6;                   // in scope 1 at $DIR/match-arm-scopes.rs:16:17: 16:18
        debug s => _7;                   // in scope 1 at $DIR/match-arm-scopes.rs:16:20: 16:21
        debug s => _8;                   // in scope 1 at $DIR/match-arm-scopes.rs:16:20: 16:21
    }
    scope 2 {
        debug b => _15;                  // in scope 2 at $DIR/match-arm-scopes.rs:17:16: 17:17
        debug t => _16;                  // in scope 2 at $DIR/match-arm-scopes.rs:17:19: 17:20
    }

    bb0: {
        switchInt((_2.0: bool)) -> [false: bb6, otherwise: bb2]; // scope 0 at $DIR/match-arm-scopes.rs:16:10: 16:15
    }

    bb1 (cleanup): {
        resume;                          // scope 0 at $DIR/match-arm-scopes.rs:14:1: 19:2
    }

    bb2: {
        switchInt((_2.1: bool)) -> [false: bb14, otherwise: bb3]; // scope 0 at $DIR/match-arm-scopes.rs:16:29: 16:34
    }

    bb3: {
        switchInt((_2.0: bool)) -> [false: bb4, otherwise: bb21]; // scope 0 at $DIR/match-arm-scopes.rs:17:10: 17:14
    }

    bb4: {
        StorageLive(_15);                // scope 0 at $DIR/match-arm-scopes.rs:17:32: 17:33
        _15 = (_2.1: bool);              // scope 0 at $DIR/match-arm-scopes.rs:17:32: 17:33
        StorageLive(_16);                // scope 0 at $DIR/match-arm-scopes.rs:17:35: 17:36
        _16 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:17:35: 17:36
        goto -> bb20;                    // scope 0 at $DIR/match-arm-scopes.rs:15:5: 18:6
    }

    bb5: {
        _0 = const 1_i32;                // scope 1 at $DIR/match-arm-scopes.rs:16:77: 16:78
                                         // ty::Const
                                         // + ty: i32
                                         // + val: Value(Scalar(0x00000001))
                                         // mir::Constant
                                         // + span: $DIR/match-arm-scopes.rs:16:77: 16:78
                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
        drop(_7) -> [return: bb19, unwind: bb10]; // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
    }

    bb6: {
        StorageLive(_6);                 // scope 0 at $DIR/match-arm-scopes.rs:16:17: 16:18
        _6 = &(_2.1: bool);              // scope 0 at $DIR/match-arm-scopes.rs:16:17: 16:18
        StorageLive(_8);                 // scope 0 at $DIR/match-arm-scopes.rs:16:20: 16:21
        _8 = &(_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:16:20: 16:21
        StorageLive(_9);                 // scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
        StorageLive(_10);                // scope 0 at $DIR/match-arm-scopes.rs:16:45: 16:49
        _10 = _1;                        // scope 0 at $DIR/match-arm-scopes.rs:16:45: 16:49
        switchInt(_10) -> [false: bb7, otherwise: bb8]; // scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
    }

    bb7: {
        _9 = (*_6);                      // scope 0 at $DIR/match-arm-scopes.rs:16:70: 16:71
        StorageDead(_10);                // scope 0 at $DIR/match-arm-scopes.rs:16:72: 16:73
        switchInt(move _9) -> [false: bb13, otherwise: bb12]; // scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
    }

    bb8: {
        _0 = const 3_i32;                // scope 0 at $DIR/match-arm-scopes.rs:16:59: 16:60
                                         // ty::Const
                                         // + ty: i32
                                         // + val: Value(Scalar(0x00000003))
                                         // mir::Constant
                                         // + span: $DIR/match-arm-scopes.rs:16:59: 16:60
                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
        StorageDead(_10);                // scope 0 at $DIR/match-arm-scopes.rs:16:72: 16:73
        StorageDead(_9);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_8);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_6);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        goto -> bb11;                    // scope 0 at $DIR/match-arm-scopes.rs:16:52: 16:60
    }

    bb9: {
        return;                          // scope 0 at $DIR/match-arm-scopes.rs:19:2: 19:2
    }

    bb10 (cleanup): {
        goto -> bb25;                    // scope 0 at $DIR/match-arm-scopes.rs:19:1: 19:2
    }

    bb11: {
        drop(_2) -> [return: bb9, unwind: bb1]; // scope 0 at $DIR/match-arm-scopes.rs:19:1: 19:2
    }

    bb12: {
        StorageDead(_9);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageLive(_5);                 // scope 0 at $DIR/match-arm-scopes.rs:16:17: 16:18
        _5 = (_2.1: bool);               // scope 0 at $DIR/match-arm-scopes.rs:16:17: 16:18
        StorageLive(_7);                 // scope 0 at $DIR/match-arm-scopes.rs:16:20: 16:21
        _7 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:16:20: 16:21
        goto -> bb5;                     // scope 0 at $DIR/match-arm-scopes.rs:15:5: 18:6
    }

    bb13: {
        StorageDead(_9);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_8);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_6);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        goto -> bb2;                     // scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
    }

    bb14: {
        StorageLive(_6);                 // scope 0 at $DIR/match-arm-scopes.rs:16:26: 16:27
        _6 = &(_2.0: bool);              // scope 0 at $DIR/match-arm-scopes.rs:16:26: 16:27
        StorageLive(_8);                 // scope 0 at $DIR/match-arm-scopes.rs:16:36: 16:37
        _8 = &(_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:16:36: 16:37
        StorageLive(_12);                // scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
        StorageLive(_13);                // scope 0 at $DIR/match-arm-scopes.rs:16:45: 16:49
        _13 = _1;                        // scope 0 at $DIR/match-arm-scopes.rs:16:45: 16:49
        switchInt(_13) -> [false: bb15, otherwise: bb16]; // scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
    }

    bb15: {
        _12 = (*_6);                     // scope 0 at $DIR/match-arm-scopes.rs:16:70: 16:71
        StorageDead(_13);                // scope 0 at $DIR/match-arm-scopes.rs:16:72: 16:73
        switchInt(move _12) -> [false: bb18, otherwise: bb17]; // scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
    }

    bb16: {
        _0 = const 3_i32;                // scope 0 at $DIR/match-arm-scopes.rs:16:59: 16:60
                                         // ty::Const
                                         // + ty: i32
                                         // + val: Value(Scalar(0x00000003))
                                         // mir::Constant
                                         // + span: $DIR/match-arm-scopes.rs:16:59: 16:60
                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
        StorageDead(_13);                // scope 0 at $DIR/match-arm-scopes.rs:16:72: 16:73
        StorageDead(_12);                // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_8);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_6);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        goto -> bb11;                    // scope 0 at $DIR/match-arm-scopes.rs:16:52: 16:60
    }

    bb17: {
        StorageDead(_12);                // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageLive(_5);                 // scope 0 at $DIR/match-arm-scopes.rs:16:26: 16:27
        _5 = (_2.0: bool);               // scope 0 at $DIR/match-arm-scopes.rs:16:26: 16:27
        StorageLive(_7);                 // scope 0 at $DIR/match-arm-scopes.rs:16:36: 16:37
        _7 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:16:36: 16:37
        goto -> bb5;                     // scope 0 at $DIR/match-arm-scopes.rs:15:5: 18:6
    }

    bb18: {
        StorageDead(_12);                // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_8);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_6);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        goto -> bb3;                     // scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:73
    }

    bb19: {
        StorageDead(_7);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_5);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_8);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        StorageDead(_6);                 // scope 0 at $DIR/match-arm-scopes.rs:16:78: 16:79
        goto -> bb23;                    // scope 0 at $DIR/match-arm-scopes.rs:15:5: 18:6
    }

    bb20: {
        _0 = const 2_i32;                // scope 2 at $DIR/match-arm-scopes.rs:17:41: 17:42
                                         // ty::Const
                                         // + ty: i32
                                         // + val: Value(Scalar(0x00000002))
                                         // mir::Constant
                                         // + span: $DIR/match-arm-scopes.rs:17:41: 17:42
                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
        drop(_16) -> [return: bb22, unwind: bb10]; // scope 0 at $DIR/match-arm-scopes.rs:17:42: 17:43
    }

    bb21: {
        StorageLive(_15);                // scope 0 at $DIR/match-arm-scopes.rs:17:16: 17:17
        _15 = (_2.1: bool);              // scope 0 at $DIR/match-arm-scopes.rs:17:16: 17:17
        StorageLive(_16);                // scope 0 at $DIR/match-arm-scopes.rs:17:19: 17:20
        _16 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:17:19: 17:20
        goto -> bb20;                    // scope 0 at $DIR/match-arm-scopes.rs:15:5: 18:6
    }

    bb22: {
        StorageDead(_16);                // scope 0 at $DIR/match-arm-scopes.rs:17:42: 17:43
        StorageDead(_15);                // scope 0 at $DIR/match-arm-scopes.rs:17:42: 17:43
        goto -> bb23;                    // scope 0 at $DIR/match-arm-scopes.rs:15:5: 18:6
    }

    bb23: {
        goto -> bb29;                    // scope 0 at $DIR/match-arm-scopes.rs:19:1: 19:2
    }

    bb24 (cleanup): {
        goto -> bb1;                     // scope 0 at $DIR/match-arm-scopes.rs:19:1: 19:2
    }

    bb25 (cleanup): {
        goto -> bb24;                    // scope 0 at $DIR/match-arm-scopes.rs:19:1: 19:2
    }

    bb26: {
        goto -> bb9;                     // scope 0 at $DIR/match-arm-scopes.rs:19:1: 19:2
    }

    bb27 (cleanup): {
        goto -> bb1;                     // scope 0 at $DIR/match-arm-scopes.rs:19:1: 19:2
    }

    bb28 (cleanup): {
        goto -> bb27;                    // scope 0 at $DIR/match-arm-scopes.rs:19:1: 19:2
    }

    bb29: {
        goto -> bb26;                    // scope 0 at $DIR/match-arm-scopes.rs:19:1: 19:2
    }
}
