// #target: macos-x64
module examples;
import libc;
import std::io;

fn void example_for()
{
    // the for-loop is the same as C99.
    for (int i = 0; i < 10; i++)
    {
        libc::printf("%d\n", i);
    }

    // also equal
    for (;;)
    {
        // ..
    }
}

enum Height : uint
{
    LOW,
    MEDIUM,
    HIGH,
}

fn void demo_enum(Height h)
{
    switch (h)
    {
        case LOW:
        case MEDIUM:
            io::printn("Not high");
            // Implicit break.
        case HIGH:
            io::printn("High");
    }

    // This also works
    switch (h)
    {
        case LOW:
        case MEDIUM:
            io::printn("Not high");
            // Implicit break.
        case Height.HIGH:
            io::printn("High");
    }

    // Completely empty cases are not allowed.
    switch (h)
    {
        case LOW:
            break; // Explicit break required, since switches can't be empty.
        case MEDIUM:
            io::printn("Medium");
        case HIGH:
            break;
    }

    // special checking of switching on enum types
    switch (h)
    {
        case LOW:
        case MEDIUM:
        case HIGH:
            break;
        default:    // warning: default label in switch which covers all enumeration value
            break;
    }

    // Using "nextcase" will fallthrough to the next case statement,
    // and each case statement starts its own scope.
    switch (h)
    {
        case LOW:
            int a = 1;
            io::printn("A");
            nextcase;
        case MEDIUM:
            int a = 2;
            io::printn("B");
            nextcase;
        case HIGH:
            // a is not defined here
            io::printn("C");
    }
}
/* #expect: examples.ll

define void @examples.example_for() #0 {
entry:
  %i = alloca i32, align 4
  store i32 0, ptr %i, align 4
  br label %loop.cond

loop.cond:                                        ; preds = %loop.body, %entry
  %0 = load i32, ptr %i, align 4
  %lt = icmp slt i32 %0, 10
  br i1 %lt, label %loop.body, label %loop.exit

loop.body:                                        ; preds = %loop.cond
  %1 = load i32, ptr %i, align 4
  %2 = call i32 (ptr, ...) @printf(ptr @.str, i32 %1)
  %3 = load i32, ptr %i, align 4
  %add = add i32 %3, 1
  store i32 %add, ptr %i, align 4
  br label %loop.cond

loop.exit:                                        ; preds = %loop.cond
  %4 = load ptr, ptr @std.core.builtin.panic, align 8
  call void %4(ptr @.panic_msg, i64 19, ptr @.file, i64 21, ptr @.func, i64 11, i32 14)
  unreachable
}


define void @examples.demo_enum(i32 %0) #0 {
entry:
  %switch = alloca i32, align 4
  %len = alloca i64, align 8
  %error_var = alloca i64, align 8
  %retparam = alloca i64, align 8
  %error_var2 = alloca i64, align 8
  %error_var8 = alloca i64, align 8
  %len15 = alloca i64, align 8
  %error_var16 = alloca i64, align 8
  %retparam18 = alloca i64, align 8
  %error_var24 = alloca i64, align 8
  %error_var30 = alloca i64, align 8
  %switch38 = alloca i32, align 4
  %len41 = alloca i64, align 8
  %error_var42 = alloca i64, align 8
  %retparam44 = alloca i64, align 8
  %error_var50 = alloca i64, align 8
  %error_var56 = alloca i64, align 8
  %len65 = alloca i64, align 8
  %error_var66 = alloca i64, align 8
  %retparam68 = alloca i64, align 8
  %error_var74 = alloca i64, align 8
  %error_var80 = alloca i64, align 8
  %switch89 = alloca i32, align 4
  %len93 = alloca i64, align 8
  %error_var94 = alloca i64, align 8
  %retparam96 = alloca i64, align 8
  %error_var102 = alloca i64, align 8
  %error_var108 = alloca i64, align 8
  %switch118 = alloca i32, align 4
  %switch122 = alloca i32, align 4
  %a = alloca i32, align 4
  %len125 = alloca i64, align 8
  %error_var126 = alloca i64, align 8
  %retparam128 = alloca i64, align 8
  %error_var134 = alloca i64, align 8
  %error_var140 = alloca i64, align 8
  %a149 = alloca i32, align 4
  %len150 = alloca i64, align 8
  %error_var151 = alloca i64, align 8
  %retparam153 = alloca i64, align 8
  %error_var159 = alloca i64, align 8
  %error_var165 = alloca i64, align 8
  %len174 = alloca i64, align 8
  %error_var175 = alloca i64, align 8
  %retparam177 = alloca i64, align 8
  %error_var183 = alloca i64, align 8
  %error_var189 = alloca i64, align 8
  store i32 %0, ptr %switch, align 4
  br label %switch.entry

switch.entry:                                     ; preds = %entry
  %1 = load i32, ptr %switch, align 4
  switch i32 %1, label %switch.exit [
    i32 0, label %switch.case
    i32 1, label %switch.case
    i32 2, label %switch.case14
  ]

switch.case:                                      ; preds = %switch.entry, %switch.entry
  %2 = call ptr @std.io.stdout()
  %3 = call i64 @std.io.File.write(ptr %retparam, ptr %2, ptr @.str.1, i64 8)
  %not_err = icmp eq i64 %3, 0
  %4 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
  br i1 %4, label %after_check, label %assign_optional

assign_optional:                                  ; preds = %switch.case
  store i64 %3, ptr %error_var, align 8
  br label %guard_block

after_check:                                      ; preds = %switch.case
  br label %noerr_block

guard_block:                                      ; preds = %assign_optional
  br label %voiderr

noerr_block:                                      ; preds = %after_check
  %5 = load i64, ptr %retparam, align 8
  store i64 %5, ptr %len, align 8
  %6 = call i64 @std.io.File.write_byte(ptr %2, i8 zeroext 10)
  %not_err3 = icmp eq i64 %6, 0
  %7 = call i1 @llvm.expect.i1(i1 %not_err3, i1 true)
  br i1 %7, label %after_check5, label %assign_optional4

assign_optional4:                                 ; preds = %noerr_block
  store i64 %6, ptr %error_var2, align 8
  br label %guard_block6

after_check5:                                     ; preds = %noerr_block
  br label %noerr_block7

guard_block6:                                     ; preds = %assign_optional4
  br label %voiderr

noerr_block7:                                     ; preds = %after_check5
  %8 = call i64 @std.io.File.flush(ptr %2)
  %not_err9 = icmp eq i64 %8, 0
  %9 = call i1 @llvm.expect.i1(i1 %not_err9, i1 true)
  br i1 %9, label %after_check11, label %assign_optional10

assign_optional10:                                ; preds = %noerr_block7
  store i64 %8, ptr %error_var8, align 8
  br label %guard_block12

after_check11:                                    ; preds = %noerr_block7
  br label %noerr_block13

guard_block12:                                    ; preds = %assign_optional10
  br label %voiderr

noerr_block13:                                    ; preds = %after_check11
  %10 = load i64, ptr %len, align 8
  %add = add i64 %10, 1
  br label %voiderr

voiderr:                                          ; preds = %noerr_block13, %guard_block12, %guard_block6, %guard_block
  br label %switch.exit

switch.case14:                                    ; preds = %switch.entry
  %11 = call ptr @std.io.stdout()
  %12 = call i64 @std.io.File.write(ptr %retparam18, ptr %11, ptr @.str.2, i64 4)
  %not_err19 = icmp eq i64 %12, 0
  %13 = call i1 @llvm.expect.i1(i1 %not_err19, i1 true)
  br i1 %13, label %after_check21, label %assign_optional20

assign_optional20:                                ; preds = %switch.case14
  store i64 %12, ptr %error_var16, align 8
  br label %guard_block22

after_check21:                                    ; preds = %switch.case14
  br label %noerr_block23

guard_block22:                                    ; preds = %assign_optional20
  br label %voiderr37

noerr_block23:                                    ; preds = %after_check21
  %14 = load i64, ptr %retparam18, align 8
  store i64 %14, ptr %len15, align 8
  %15 = call i64 @std.io.File.write_byte(ptr %11, i8 zeroext 10)
  %not_err25 = icmp eq i64 %15, 0
  %16 = call i1 @llvm.expect.i1(i1 %not_err25, i1 true)
  br i1 %16, label %after_check27, label %assign_optional26

assign_optional26:                                ; preds = %noerr_block23
  store i64 %15, ptr %error_var24, align 8
  br label %guard_block28

after_check27:                                    ; preds = %noerr_block23
  br label %noerr_block29

guard_block28:                                    ; preds = %assign_optional26
  br label %voiderr37

noerr_block29:                                    ; preds = %after_check27
  %17 = call i64 @std.io.File.flush(ptr %11)
  %not_err31 = icmp eq i64 %17, 0
  %18 = call i1 @llvm.expect.i1(i1 %not_err31, i1 true)
  br i1 %18, label %after_check33, label %assign_optional32

assign_optional32:                                ; preds = %noerr_block29
  store i64 %17, ptr %error_var30, align 8
  br label %guard_block34

after_check33:                                    ; preds = %noerr_block29
  br label %noerr_block35

guard_block34:                                    ; preds = %assign_optional32
  br label %voiderr37

noerr_block35:                                    ; preds = %after_check33
  %19 = load i64, ptr %len15, align 8
  %add36 = add i64 %19, 1
  br label %voiderr37

voiderr37:                                        ; preds = %noerr_block35, %guard_block34, %guard_block28, %guard_block22
  br label %switch.exit

switch.exit:                                      ; preds = %voiderr37, %voiderr, %switch.entry
  store i32 %0, ptr %switch38, align 4
  br label %switch.entry39

switch.entry39:                                   ; preds = %switch.exit
  %20 = load i32, ptr %switch38, align 4
  switch i32 %20, label %switch.exit88 [
    i32 0, label %switch.case40
    i32 1, label %switch.case40
    i32 2, label %switch.case64
  ]

switch.case40:                                    ; preds = %switch.entry39, %switch.entry39
  %21 = call ptr @std.io.stdout()
  %22 = call i64 @std.io.File.write(ptr %retparam44, ptr %21, ptr @.str.3, i64 8)
  %not_err45 = icmp eq i64 %22, 0
  %23 = call i1 @llvm.expect.i1(i1 %not_err45, i1 true)
  br i1 %23, label %after_check47, label %assign_optional46

assign_optional46:                                ; preds = %switch.case40
  store i64 %22, ptr %error_var42, align 8
  br label %guard_block48

after_check47:                                    ; preds = %switch.case40
  br label %noerr_block49

guard_block48:                                    ; preds = %assign_optional46
  br label %voiderr63

noerr_block49:                                    ; preds = %after_check47
  %24 = load i64, ptr %retparam44, align 8
  store i64 %24, ptr %len41, align 8
  %25 = call i64 @std.io.File.write_byte(ptr %21, i8 zeroext 10)
  %not_err51 = icmp eq i64 %25, 0
  %26 = call i1 @llvm.expect.i1(i1 %not_err51, i1 true)
  br i1 %26, label %after_check53, label %assign_optional52

assign_optional52:                                ; preds = %noerr_block49
  store i64 %25, ptr %error_var50, align 8
  br label %guard_block54

after_check53:                                    ; preds = %noerr_block49
  br label %noerr_block55

guard_block54:                                    ; preds = %assign_optional52
  br label %voiderr63

noerr_block55:                                    ; preds = %after_check53
  %27 = call i64 @std.io.File.flush(ptr %21)
  %not_err57 = icmp eq i64 %27, 0
  %28 = call i1 @llvm.expect.i1(i1 %not_err57, i1 true)
  br i1 %28, label %after_check59, label %assign_optional58

assign_optional58:                                ; preds = %noerr_block55
  store i64 %27, ptr %error_var56, align 8
  br label %guard_block60

after_check59:                                    ; preds = %noerr_block55
  br label %noerr_block61

guard_block60:                                    ; preds = %assign_optional58
  br label %voiderr63

noerr_block61:                                    ; preds = %after_check59
  %29 = load i64, ptr %len41, align 8
  %add62 = add i64 %29, 1
  br label %voiderr63

voiderr63:                                        ; preds = %noerr_block61, %guard_block60, %guard_block54, %guard_block48
  br label %switch.exit88

switch.case64:                                    ; preds = %switch.entry39
  %30 = call ptr @std.io.stdout()
  %31 = call i64 @std.io.File.write(ptr %retparam68, ptr %30, ptr @.str.4, i64 4)
  %not_err69 = icmp eq i64 %31, 0
  %32 = call i1 @llvm.expect.i1(i1 %not_err69, i1 true)
  br i1 %32, label %after_check71, label %assign_optional70

assign_optional70:                                ; preds = %switch.case64
  store i64 %31, ptr %error_var66, align 8
  br label %guard_block72

after_check71:                                    ; preds = %switch.case64
  br label %noerr_block73

guard_block72:                                    ; preds = %assign_optional70
  br label %voiderr87

noerr_block73:                                    ; preds = %after_check71
  %33 = load i64, ptr %retparam68, align 8
  store i64 %33, ptr %len65, align 8
  %34 = call i64 @std.io.File.write_byte(ptr %30, i8 zeroext 10)
  %not_err75 = icmp eq i64 %34, 0
  %35 = call i1 @llvm.expect.i1(i1 %not_err75, i1 true)
  br i1 %35, label %after_check77, label %assign_optional76

assign_optional76:                                ; preds = %noerr_block73
  store i64 %34, ptr %error_var74, align 8
  br label %guard_block78

after_check77:                                    ; preds = %noerr_block73
  br label %noerr_block79

guard_block78:                                    ; preds = %assign_optional76
  br label %voiderr87

noerr_block79:                                    ; preds = %after_check77
  %36 = call i64 @std.io.File.flush(ptr %30)
  %not_err81 = icmp eq i64 %36, 0
  %37 = call i1 @llvm.expect.i1(i1 %not_err81, i1 true)
  br i1 %37, label %after_check83, label %assign_optional82

assign_optional82:                                ; preds = %noerr_block79
  store i64 %36, ptr %error_var80, align 8
  br label %guard_block84

after_check83:                                    ; preds = %noerr_block79
  br label %noerr_block85

guard_block84:                                    ; preds = %assign_optional82
  br label %voiderr87

noerr_block85:                                    ; preds = %after_check83
  %38 = load i64, ptr %len65, align 8
  %add86 = add i64 %38, 1
  br label %voiderr87

voiderr87:                                        ; preds = %noerr_block85, %guard_block84, %guard_block78, %guard_block72
  br label %switch.exit88

switch.exit88:                                    ; preds = %voiderr87, %voiderr63, %switch.entry39
  store i32 %0, ptr %switch89, align 4
  br label %switch.entry90

switch.entry90:                                   ; preds = %switch.exit88
  %39 = load i32, ptr %switch89, align 4
  switch i32 %39, label %switch.exit117 [
    i32 0, label %switch.case91
    i32 1, label %switch.case92
    i32 2, label %switch.case116
  ]

switch.case91:                                    ; preds = %switch.entry90
  br label %switch.exit117

switch.case92:                                    ; preds = %switch.entry90
  %40 = call ptr @std.io.stdout()
  %41 = call i64 @std.io.File.write(ptr %retparam96, ptr %40, ptr @.str.5, i64 6)
  %not_err97 = icmp eq i64 %41, 0
  %42 = call i1 @llvm.expect.i1(i1 %not_err97, i1 true)
  br i1 %42, label %after_check99, label %assign_optional98

assign_optional98:                                ; preds = %switch.case92
  store i64 %41, ptr %error_var94, align 8
  br label %guard_block100

after_check99:                                    ; preds = %switch.case92
  br label %noerr_block101

guard_block100:                                   ; preds = %assign_optional98
  br label %voiderr115

noerr_block101:                                   ; preds = %after_check99
  %43 = load i64, ptr %retparam96, align 8
  store i64 %43, ptr %len93, align 8
  %44 = call i64 @std.io.File.write_byte(ptr %40, i8 zeroext 10)
  %not_err103 = icmp eq i64 %44, 0
  %45 = call i1 @llvm.expect.i1(i1 %not_err103, i1 true)
  br i1 %45, label %after_check105, label %assign_optional104

assign_optional104:                               ; preds = %noerr_block101
  store i64 %44, ptr %error_var102, align 8
  br label %guard_block106

after_check105:                                   ; preds = %noerr_block101
  br label %noerr_block107

guard_block106:                                   ; preds = %assign_optional104
  br label %voiderr115

noerr_block107:                                   ; preds = %after_check105
  %46 = call i64 @std.io.File.flush(ptr %40)
  %not_err109 = icmp eq i64 %46, 0
  %47 = call i1 @llvm.expect.i1(i1 %not_err109, i1 true)
  br i1 %47, label %after_check111, label %assign_optional110

assign_optional110:                               ; preds = %noerr_block107
  store i64 %46, ptr %error_var108, align 8
  br label %guard_block112

after_check111:                                   ; preds = %noerr_block107
  br label %noerr_block113

guard_block112:                                   ; preds = %assign_optional110
  br label %voiderr115

noerr_block113:                                   ; preds = %after_check111
  %48 = load i64, ptr %len93, align 8
  %add114 = add i64 %48, 1
  br label %voiderr115

voiderr115:                                       ; preds = %noerr_block113, %guard_block112, %guard_block106, %guard_block100
  br label %switch.exit117

switch.case116:                                   ; preds = %switch.entry90
  br label %switch.exit117

switch.exit117:                                   ; preds = %switch.case116, %voiderr115, %switch.case91, %switch.entry90
  store i32 %0, ptr %switch118, align 4
  br label %switch.entry119

switch.entry119:                                  ; preds = %switch.exit117
  %49 = load i32, ptr %switch118, align 4
  switch i32 %49, label %switch.default [
    i32 0, label %switch.case120
    i32 1, label %switch.case120
    i32 2, label %switch.case120
  ]

switch.case120:                                   ; preds = %switch.entry119, %switch.entry119, %switch.entry119
  br label %switch.exit121

switch.default:                                   ; preds = %switch.entry119
  br label %switch.exit121

switch.exit121:                                   ; preds = %switch.default, %switch.case120
  store i32 %0, ptr %switch122, align 4
  br label %switch.entry123

switch.entry123:                                  ; preds = %switch.exit121
  %50 = load i32, ptr %switch122, align 4
  switch i32 %50, label %switch.exit197 [
    i32 0, label %switch.case124
    i32 1, label %switch.case148
    i32 2, label %switch.case173
  ]

switch.case124:                                   ; preds = %switch.entry123
  store i32 1, ptr %a, align 4
  %51 = call ptr @std.io.stdout()
  %52 = call i64 @std.io.File.write(ptr %retparam128, ptr %51, ptr @.str.6, i64 1)
  %not_err129 = icmp eq i64 %52, 0
  %53 = call i1 @llvm.expect.i1(i1 %not_err129, i1 true)
  br i1 %53, label %after_check131, label %assign_optional130

assign_optional130:                               ; preds = %switch.case124
  store i64 %52, ptr %error_var126, align 8
  br label %guard_block132

after_check131:                                   ; preds = %switch.case124
  br label %noerr_block133

guard_block132:                                   ; preds = %assign_optional130
  br label %voiderr147

noerr_block133:                                   ; preds = %after_check131
  %54 = load i64, ptr %retparam128, align 8
  store i64 %54, ptr %len125, align 8
  %55 = call i64 @std.io.File.write_byte(ptr %51, i8 zeroext 10)
  %not_err135 = icmp eq i64 %55, 0
  %56 = call i1 @llvm.expect.i1(i1 %not_err135, i1 true)
  br i1 %56, label %after_check137, label %assign_optional136

assign_optional136:                               ; preds = %noerr_block133
  store i64 %55, ptr %error_var134, align 8
  br label %guard_block138

after_check137:                                   ; preds = %noerr_block133
  br label %noerr_block139

guard_block138:                                   ; preds = %assign_optional136
  br label %voiderr147

noerr_block139:                                   ; preds = %after_check137
  %57 = call i64 @std.io.File.flush(ptr %51)
  %not_err141 = icmp eq i64 %57, 0
  %58 = call i1 @llvm.expect.i1(i1 %not_err141, i1 true)
  br i1 %58, label %after_check143, label %assign_optional142

assign_optional142:                               ; preds = %noerr_block139
  store i64 %57, ptr %error_var140, align 8
  br label %guard_block144

after_check143:                                   ; preds = %noerr_block139
  br label %noerr_block145

guard_block144:                                   ; preds = %assign_optional142
  br label %voiderr147

noerr_block145:                                   ; preds = %after_check143
  %59 = load i64, ptr %len125, align 8
  %add146 = add i64 %59, 1
  br label %voiderr147

voiderr147:                                       ; preds = %noerr_block145, %guard_block144, %guard_block138, %guard_block132
  br label %switch.case148

switch.case148:                                   ; preds = %switch.entry123, %voiderr147
  store i32 2, ptr %a149, align 4
  %60 = call ptr @std.io.stdout()
  %61 = call i64 @std.io.File.write(ptr %retparam153, ptr %60, ptr @.str.7, i64 1)
  %not_err154 = icmp eq i64 %61, 0
  %62 = call i1 @llvm.expect.i1(i1 %not_err154, i1 true)
  br i1 %62, label %after_check156, label %assign_optional155

assign_optional155:                               ; preds = %switch.case148
  store i64 %61, ptr %error_var151, align 8
  br label %guard_block157

after_check156:                                   ; preds = %switch.case148
  br label %noerr_block158

guard_block157:                                   ; preds = %assign_optional155
  br label %voiderr172

noerr_block158:                                   ; preds = %after_check156
  %63 = load i64, ptr %retparam153, align 8
  store i64 %63, ptr %len150, align 8
  %64 = call i64 @std.io.File.write_byte(ptr %60, i8 zeroext 10)
  %not_err160 = icmp eq i64 %64, 0
  %65 = call i1 @llvm.expect.i1(i1 %not_err160, i1 true)
  br i1 %65, label %after_check162, label %assign_optional161

assign_optional161:                               ; preds = %noerr_block158
  store i64 %64, ptr %error_var159, align 8
  br label %guard_block163

after_check162:                                   ; preds = %noerr_block158
  br label %noerr_block164

guard_block163:                                   ; preds = %assign_optional161
  br label %voiderr172

noerr_block164:                                   ; preds = %after_check162
  %66 = call i64 @std.io.File.flush(ptr %60)
  %not_err166 = icmp eq i64 %66, 0
  %67 = call i1 @llvm.expect.i1(i1 %not_err166, i1 true)
  br i1 %67, label %after_check168, label %assign_optional167

assign_optional167:                               ; preds = %noerr_block164
  store i64 %66, ptr %error_var165, align 8
  br label %guard_block169

after_check168:                                   ; preds = %noerr_block164
  br label %noerr_block170

guard_block169:                                   ; preds = %assign_optional167
  br label %voiderr172

noerr_block170:                                   ; preds = %after_check168
  %68 = load i64, ptr %len150, align 8
  %add171 = add i64 %68, 1
  br label %voiderr172

voiderr172:                                       ; preds = %noerr_block170, %guard_block169, %guard_block163, %guard_block157
  br label %switch.case173

switch.case173:                                   ; preds = %switch.entry123, %voiderr172
  %69 = call ptr @std.io.stdout()
  %70 = call i64 @std.io.File.write(ptr %retparam177, ptr %69, ptr @.str.8, i64 1)
  %not_err178 = icmp eq i64 %70, 0
  %71 = call i1 @llvm.expect.i1(i1 %not_err178, i1 true)
  br i1 %71, label %after_check180, label %assign_optional179

assign_optional179:                               ; preds = %switch.case173
  store i64 %70, ptr %error_var175, align 8
  br label %guard_block181

after_check180:                                   ; preds = %switch.case173
  br label %noerr_block182

guard_block181:                                   ; preds = %assign_optional179
  br label %voiderr196

noerr_block182:                                   ; preds = %after_check180
  %72 = load i64, ptr %retparam177, align 8
  store i64 %72, ptr %len174, align 8
  %73 = call i64 @std.io.File.write_byte(ptr %69, i8 zeroext 10)
  %not_err184 = icmp eq i64 %73, 0
  %74 = call i1 @llvm.expect.i1(i1 %not_err184, i1 true)
  br i1 %74, label %after_check186, label %assign_optional185

assign_optional185:                               ; preds = %noerr_block182
  store i64 %73, ptr %error_var183, align 8
  br label %guard_block187

after_check186:                                   ; preds = %noerr_block182
  br label %noerr_block188

guard_block187:                                   ; preds = %assign_optional185
  br label %voiderr196

noerr_block188:                                   ; preds = %after_check186
  %75 = call i64 @std.io.File.flush(ptr %69)
  %not_err190 = icmp eq i64 %75, 0
  %76 = call i1 @llvm.expect.i1(i1 %not_err190, i1 true)
  br i1 %76, label %after_check192, label %assign_optional191

assign_optional191:                               ; preds = %noerr_block188
  store i64 %75, ptr %error_var189, align 8
  br label %guard_block193

after_check192:                                   ; preds = %noerr_block188
  br label %noerr_block194

guard_block193:                                   ; preds = %assign_optional191
  br label %voiderr196

noerr_block194:                                   ; preds = %after_check192
  %77 = load i64, ptr %len174, align 8
  %add195 = add i64 %77, 1
  br label %voiderr196

voiderr196:                                       ; preds = %noerr_block194, %guard_block193, %guard_block187, %guard_block181
  br label %switch.exit197

switch.exit197:                                   ; preds = %voiderr196, %switch.entry123
  ret void
}