procedure List.18 (List.145, List.146, List.147): let List.536 : U64 = 0i64; let List.537 : U64 = CallByName List.6 List.145; let List.535 : [C {}, C *self {{}, []}] = CallByName List.86 List.145 List.146 List.147 List.536 List.537; ret List.535; procedure List.6 (#Attr.2): let List.546 : U64 = lowlevel ListLen #Attr.2; ret List.546; procedure List.66 (#Attr.2, #Attr.3): let List.545 : [] = lowlevel ListGetUnsafe #Attr.2 #Attr.3; ret List.545; procedure List.86 (#Derived_gen.13, #Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_gen.17): joinpoint List.538 List.148 List.149 List.150 List.151 List.152: let List.540 : Int1 = CallByName Num.22 List.151 List.152; if List.540 then let List.544 : [] = CallByName List.66 List.148 List.151; let List.153 : [C {}, C *self {{}, []}] = CallByName Test.29 List.149 List.544 List.150; let List.543 : U64 = 1i64; let List.542 : U64 = CallByName Num.51 List.151 List.543; jump List.538 List.148 List.153 List.150 List.542 List.152; else dec List.148; ret List.149; in jump List.538 #Derived_gen.13 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17; procedure Num.22 (#Attr.2, #Attr.3): let Num.293 : Int1 = lowlevel NumLt #Attr.2 #Attr.3; ret Num.293; procedure Num.51 (#Attr.2, #Attr.3): let Num.292 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3; ret Num.292; procedure Test.10 (Test.66, #Attr.12): let Test.9 : {} = UnionAtIndex (Id 0) (Index 0) #Attr.12; let #Derived_gen.20 : Int1 = lowlevel RefCountIsUnique #Attr.12; if #Derived_gen.20 then free #Attr.12; ret Test.9; else decref #Attr.12; ret Test.9; procedure Test.10 (Test.66, #Attr.12): let Test.9 : {} = UnionAtIndex (Id 0) (Index 0) #Attr.12; ret Test.9; procedure Test.14 (Test.45, #Attr.12): let Test.13 : {{}, []} = UnionAtIndex (Id 1) (Index 1) #Attr.12; let Test.12 : [C {}, C *self {{}, []}] = UnionAtIndex (Id 1) (Index 0) #Attr.12; joinpoint #Derived_gen.18: let Test.50 : {} = Struct {}; let Test.51 : U8 = GetTagId Test.12; joinpoint Test.52 Test.15: let Test.16 : [C {}, C []] = CallByName Test.20 Test.15 Test.13; let Test.48 : {} = Struct {}; let Test.49 : U8 = GetTagId Test.16; switch Test.49: case 0: let Test.47 : {} = CallByName Test.10 Test.48 Test.16; ret Test.47; default: let Test.47 : {} = CallByName Test.25 Test.48 Test.16; ret Test.47; in switch Test.51: case 0: let Test.53 : {} = CallByName Test.10 Test.50 Test.12; jump Test.52 Test.53; default: let Test.53 : {} = CallByName Test.14 Test.50 Test.12; jump Test.52 Test.53; in let #Derived_gen.19 : Int1 = lowlevel RefCountIsUnique #Attr.12; if #Derived_gen.19 then free #Attr.12; jump #Derived_gen.18; else inc Test.12; decref #Attr.12; jump #Derived_gen.18; procedure Test.20 (Test.21, Test.18): let Test.23 : [C {}, C []] = CallByName Test.32 Test.21 Test.18; ret Test.23; procedure Test.25 (Test.57, #Attr.12): let Test.24 : [] = UnionAtIndex (Id 1) (Index 0) #Attr.12; let Test.60 : Str = "voided tag constructor is unreachable"; Crash Test.60 procedure Test.29 (Test.30, Test.31, Test.28): let Test.42 : {{}, []} = Struct {Test.28, Test.31}; let Test.41 : [C {}, C *self {{}, []}] = CallByName Test.5 Test.30 Test.42; ret Test.41; procedure Test.3 (Test.9): let Test.65 : [C {}, C *self {{}, []}] = TagId(0) Test.9; ret Test.65; procedure Test.3 (Test.9): let Test.72 : [C {}, C []] = TagId(0) Test.9; ret Test.72; procedure Test.32 (Test.61, #Attr.12): let Test.31 : [] = StructAtIndex 1 #Attr.12; let Test.28 : {} = StructAtIndex 0 #Attr.12; let Test.63 : [C {}, C []] = CallByName Test.33 Test.31; ret Test.63; procedure Test.33 (Test.69): let Test.71 : {} = Struct {}; let Test.70 : [C {}, C []] = CallByName Test.3 Test.71; ret Test.70; procedure Test.4 (Test.12, Test.13): let Test.46 : [C {}, C *self {{}, []}] = TagId(1) Test.12 Test.13; ret Test.46; procedure Test.5 (Test.17, Test.18): let Test.19 : [C {}, C *self {{}, []}] = CallByName Test.4 Test.17 Test.18; ret Test.19; procedure Test.6 (Test.27, Test.28): let Test.64 : {} = Struct {}; let Test.38 : [C {}, C *self {{}, []}] = CallByName Test.3 Test.64; let Test.37 : [C {}, C *self {{}, []}] = CallByName List.18 Test.27 Test.38 Test.28; ret Test.37; procedure Test.76 (Test.77): let Test.78 : {{}, []} = UnionAtIndex (Id 0) (Index 0) Test.77; dec Test.77; let Test.79 : {} = StructAtIndex 0 Test.78; ret Test.79; procedure Test.80 (Test.81): let Test.82 : {{}, []} = UnionAtIndex (Id 0) (Index 0) Test.81; dec Test.81; let Test.83 : [] = StructAtIndex 1 Test.82; ret Test.83; procedure Test.84 (Test.86, #Attr.12): let Test.87 : U8 = GetTagId #Attr.12; switch Test.87: case 0: let Test.85 : {} = CallByName Test.10 Test.86 #Attr.12; ret Test.85; default: let Test.85 : {} = CallByName Test.14 Test.86 #Attr.12; ret Test.85; procedure Test.0 (): let Test.35 : List [] = Array []; let Test.36 : {} = Struct {}; let Test.34 : [C {}, C *self {{}, []}] = CallByName Test.6 Test.35 Test.36; ret Test.34;