Files
c3c/test/test_suite2/errors/failable_chained_init.c3t
Christoffer Lerno 44df6eb75b Cleanup.
2022-08-12 18:13:24 +02:00

673 lines
28 KiB
C

// #target: macos-x64
module test;
import std::io;
fault Test { FOO }
fn void test1()
{
int! a = 1;
int! b = a = Test.FOO!;
if (catch err = a) io::printfln("A err was: %s", err);
if (catch err = b) io::printfln("B err was: %s", err);
io::printfln("A was: %s", a);
io::printfln("B was: %s", b);
}
fn void test2()
{
int! x = Test.FOO!;
int! a = 1;
int! b = a = x;
if (catch err = a) io::printfln("A err was: %s", err);
if (catch err = b) io::printfln("B err was: %s", err);
io::printfln("A was: %s", a);
io::printfln("B was: %s", b);
}
fn void test3()
{
int! x = 23;
int! a = 1;
int! b = a = x;
if (catch err = a) io::printfln("A err was: %s", err);
if (catch err = b) io::printfln("B err was: %s", err);
io::printfln("A was: %s", a);
io::printfln("B was: %s", b);
}
fn void main()
{
test1();
test2();
test3();
}
/* #expect: test.ll
define void @test_test1() #0 {
entry:
%a = alloca i32, align 4
%a.f = alloca i64, align 8
%b = alloca i32, align 4
%b.f = alloca i64, align 8
%err = alloca i64, align 8
%retparam = alloca i64, align 8
%taddr = alloca %"char[]", align 8
%vararg = alloca %"variant[]", align 8
%varargslots = alloca [1 x %variant], align 16
%err5 = alloca i64, align 8
%retparam14 = alloca i64, align 8
%taddr15 = alloca %"char[]", align 8
%vararg18 = alloca %"variant[]", align 8
%varargslots19 = alloca [1 x %variant], align 16
%retparam26 = alloca i64, align 8
%taddr27 = alloca %"char[]", align 8
%vararg30 = alloca %"variant[]", align 8
%varargslots31 = alloca [1 x %variant], align 16
%retparam40 = alloca i64, align 8
%taddr41 = alloca %"char[]", align 8
%vararg44 = alloca %"variant[]", align 8
%varargslots45 = alloca [1 x %variant], align 16
store i32 1, ptr %a, align 4
store i64 0, ptr %a.f, align 8
store i64 ptrtoint (ptr @"test_Test$FOO" to i64), ptr %a.f, align 8
store i64 ptrtoint (ptr @"test_Test$FOO" to i64), ptr %b.f, align 8
br label %after_assign
after_assign: ; preds = %entry
br label %testblock
testblock: ; preds = %after_assign
%optval = load i64, ptr %a.f, align 8
%not_err = icmp eq i64 %optval, 0
br i1 %not_err, label %after_check, label %assign_optional
assign_optional: ; preds = %testblock
store i64 %optval, ptr %err, align 8
br label %end_block
after_check: ; preds = %testblock
store i64 0, ptr %err, align 8
br label %end_block
end_block: ; preds = %after_check, %assign_optional
%0 = load i64, ptr %err, align 8
%neq = icmp ne i64 %0, 0
br i1 %neq, label %if.then, label %if.exit
if.then: ; preds = %end_block
store %"char[]" { ptr @.str, i64 13 }, ptr %taddr, align 8
%1 = getelementptr inbounds { ptr, i64 }, ptr %taddr, i32 0, i32 0
%lo = load ptr, ptr %1, align 8
%2 = getelementptr inbounds { ptr, i64 }, ptr %taddr, i32 0, i32 1
%hi = load i64, ptr %2, align 8
%3 = insertvalue %variant undef, ptr %err, 0
%4 = insertvalue %variant %3, i64 ptrtoint (ptr @"ct$anyerr" to i64), 1
%5 = getelementptr inbounds [1 x %variant], ptr %varargslots, i64 0, i64 0
store %variant %4, ptr %5, align 16
%6 = getelementptr inbounds %"variant[]", ptr %vararg, i32 0, i32 1
store i64 1, ptr %6, align 8
%7 = getelementptr inbounds %"variant[]", ptr %vararg, i32 0, i32 0
store ptr %varargslots, ptr %7, align 8
%8 = getelementptr inbounds { ptr, i64 }, ptr %vararg, i32 0, i32 0
%lo1 = load ptr, ptr %8, align 8
%9 = getelementptr inbounds { ptr, i64 }, ptr %vararg, i32 0, i32 1
%hi2 = load i64, ptr %9, align 8
%10 = call i64 @std_io_printfln(ptr %retparam, ptr %lo, i64 %hi, ptr %lo1, i64 %hi2)
%not_err3 = icmp eq i64 %10, 0
br i1 %not_err3, label %after_check4, label %voiderr
after_check4: ; preds = %if.then
br label %voiderr
voiderr: ; preds = %after_check4, %if.then
br label %if.exit
if.exit: ; preds = %voiderr, %end_block
br label %testblock6
testblock6: ; preds = %if.exit
%optval7 = load i64, ptr %b.f, align 8
%not_err8 = icmp eq i64 %optval7, 0
br i1 %not_err8, label %after_check10, label %assign_optional9
assign_optional9: ; preds = %testblock6
store i64 %optval7, ptr %err5, align 8
br label %end_block11
after_check10: ; preds = %testblock6
store i64 0, ptr %err5, align 8
br label %end_block11
end_block11: ; preds = %after_check10, %assign_optional9
%11 = load i64, ptr %err5, align 8
%neq12 = icmp ne i64 %11, 0
br i1 %neq12, label %if.then13, label %if.exit25
if.then13: ; preds = %end_block11
store %"char[]" { ptr @.str.1, i64 13 }, ptr %taddr15, align 8
%12 = getelementptr inbounds { ptr, i64 }, ptr %taddr15, i32 0, i32 0
%lo16 = load ptr, ptr %12, align 8
%13 = getelementptr inbounds { ptr, i64 }, ptr %taddr15, i32 0, i32 1
%hi17 = load i64, ptr %13, align 8
%14 = insertvalue %variant undef, ptr %err5, 0
%15 = insertvalue %variant %14, i64 ptrtoint (ptr @"ct$anyerr" to i64), 1
%16 = getelementptr inbounds [1 x %variant], ptr %varargslots19, i64 0, i64 0
store %variant %15, ptr %16, align 16
%17 = getelementptr inbounds %"variant[]", ptr %vararg18, i32 0, i32 1
store i64 1, ptr %17, align 8
%18 = getelementptr inbounds %"variant[]", ptr %vararg18, i32 0, i32 0
store ptr %varargslots19, ptr %18, align 8
%19 = getelementptr inbounds { ptr, i64 }, ptr %vararg18, i32 0, i32 0
%lo20 = load ptr, ptr %19, align 8
%20 = getelementptr inbounds { ptr, i64 }, ptr %vararg18, i32 0, i32 1
%hi21 = load i64, ptr %20, align 8
%21 = call i64 @std_io_printfln(ptr %retparam14, ptr %lo16, i64 %hi17, ptr %lo20, i64 %hi21)
%not_err22 = icmp eq i64 %21, 0
br i1 %not_err22, label %after_check23, label %voiderr24
after_check23: ; preds = %if.then13
br label %voiderr24
voiderr24: ; preds = %after_check23, %if.then13
br label %if.exit25
if.exit25: ; preds = %voiderr24, %end_block11
store %"char[]" { ptr @.str.2, i64 9 }, ptr %taddr27, align 8
%22 = getelementptr inbounds { ptr, i64 }, ptr %taddr27, i32 0, i32 0
%lo28 = load ptr, ptr %22, align 8
%23 = getelementptr inbounds { ptr, i64 }, ptr %taddr27, i32 0, i32 1
%hi29 = load i64, ptr %23, align 8
%optval32 = load i64, ptr %a.f, align 8
%not_err33 = icmp eq i64 %optval32, 0
br i1 %not_err33, label %after_check34, label %voiderr39
after_check34: ; preds = %if.exit25
%24 = insertvalue %variant undef, ptr %a, 0
%25 = insertvalue %variant %24, i64 ptrtoint (ptr @"ct$int" to i64), 1
%26 = getelementptr inbounds [1 x %variant], ptr %varargslots31, i64 0, i64 0
store %variant %25, ptr %26, align 16
%27 = getelementptr inbounds %"variant[]", ptr %vararg30, i32 0, i32 1
store i64 1, ptr %27, align 8
%28 = getelementptr inbounds %"variant[]", ptr %vararg30, i32 0, i32 0
store ptr %varargslots31, ptr %28, align 8
%29 = getelementptr inbounds { ptr, i64 }, ptr %vararg30, i32 0, i32 0
%lo35 = load ptr, ptr %29, align 8
%30 = getelementptr inbounds { ptr, i64 }, ptr %vararg30, i32 0, i32 1
%hi36 = load i64, ptr %30, align 8
%31 = call i64 @std_io_printfln(ptr %retparam26, ptr %lo28, i64 %hi29, ptr %lo35, i64 %hi36)
%not_err37 = icmp eq i64 %31, 0
br i1 %not_err37, label %after_check38, label %voiderr39
after_check38: ; preds = %after_check34
br label %voiderr39
voiderr39: ; preds = %after_check38, %after_check34, %if.exit25
store %"char[]" { ptr @.str.3, i64 9 }, ptr %taddr41, align 8
%32 = getelementptr inbounds { ptr, i64 }, ptr %taddr41, i32 0, i32 0
%lo42 = load ptr, ptr %32, align 8
%33 = getelementptr inbounds { ptr, i64 }, ptr %taddr41, i32 0, i32 1
%hi43 = load i64, ptr %33, align 8
%optval46 = load i64, ptr %b.f, align 8
%not_err47 = icmp eq i64 %optval46, 0
br i1 %not_err47, label %after_check48, label %voiderr53
after_check48: ; preds = %voiderr39
%34 = insertvalue %variant undef, ptr %b, 0
%35 = insertvalue %variant %34, i64 ptrtoint (ptr @"ct$int" to i64), 1
%36 = getelementptr inbounds [1 x %variant], ptr %varargslots45, i64 0, i64 0
store %variant %35, ptr %36, align 16
%37 = getelementptr inbounds %"variant[]", ptr %vararg44, i32 0, i32 1
store i64 1, ptr %37, align 8
%38 = getelementptr inbounds %"variant[]", ptr %vararg44, i32 0, i32 0
store ptr %varargslots45, ptr %38, align 8
%39 = getelementptr inbounds { ptr, i64 }, ptr %vararg44, i32 0, i32 0
%lo49 = load ptr, ptr %39, align 8
%40 = getelementptr inbounds { ptr, i64 }, ptr %vararg44, i32 0, i32 1
%hi50 = load i64, ptr %40, align 8
%41 = call i64 @std_io_printfln(ptr %retparam40, ptr %lo42, i64 %hi43, ptr %lo49, i64 %hi50)
%not_err51 = icmp eq i64 %41, 0
br i1 %not_err51, label %after_check52, label %voiderr53
after_check52: ; preds = %after_check48
br label %voiderr53
voiderr53: ; preds = %after_check52, %after_check48, %voiderr39
ret void
}
; Function Attrs: nounwind
define void @test_test2() #0 {
entry:
%x = alloca i32, align 4
%x.f = alloca i64, align 8
%a = alloca i32, align 4
%a.f = alloca i64, align 8
%b = alloca i32, align 4
%b.f = alloca i64, align 8
%err = alloca i64, align 8
%retparam = alloca i64, align 8
%taddr = alloca %"char[]", align 8
%vararg = alloca %"variant[]", align 8
%varargslots = alloca [1 x %variant], align 16
%err10 = alloca i64, align 8
%retparam19 = alloca i64, align 8
%taddr20 = alloca %"char[]", align 8
%vararg23 = alloca %"variant[]", align 8
%varargslots24 = alloca [1 x %variant], align 16
%retparam31 = alloca i64, align 8
%taddr32 = alloca %"char[]", align 8
%vararg35 = alloca %"variant[]", align 8
%varargslots36 = alloca [1 x %variant], align 16
%retparam45 = alloca i64, align 8
%taddr46 = alloca %"char[]", align 8
%vararg49 = alloca %"variant[]", align 8
%varargslots50 = alloca [1 x %variant], align 16
store i64 ptrtoint (ptr @"test_Test$FOO" to i64), ptr %x.f, align 8
store i32 1, ptr %a, align 4
store i64 0, ptr %a.f, align 8
%optval = load i64, ptr %x.f, align 8
%not_err = icmp eq i64 %optval, 0
br i1 %not_err, label %after_check, label %assign_optional
assign_optional: ; preds = %entry
store i64 %optval, ptr %a.f, align 8
br label %optional_assign_jump
after_check: ; preds = %entry
%0 = load i32, ptr %x, align 4
store i32 %0, ptr %a, align 4
store i64 0, ptr %a.f, align 8
br label %after_assign
optional_assign_jump: ; preds = %assign_optional
%reload_err = load i64, ptr %a.f, align 8
store i64 %reload_err, ptr %b.f, align 8
br label %after_assign1
after_assign: ; preds = %after_check
store i32 %0, ptr %b, align 4
store i64 0, ptr %b.f, align 8
br label %after_assign1
after_assign1: ; preds = %after_assign, %optional_assign_jump
br label %testblock
testblock: ; preds = %after_assign1
%optval2 = load i64, ptr %a.f, align 8
%not_err3 = icmp eq i64 %optval2, 0
br i1 %not_err3, label %after_check5, label %assign_optional4
assign_optional4: ; preds = %testblock
store i64 %optval2, ptr %err, align 8
br label %end_block
after_check5: ; preds = %testblock
store i64 0, ptr %err, align 8
br label %end_block
end_block: ; preds = %after_check5, %assign_optional4
%1 = load i64, ptr %err, align 8
%neq = icmp ne i64 %1, 0
br i1 %neq, label %if.then, label %if.exit
if.then: ; preds = %end_block
store %"char[]" { ptr @.str.4, i64 13 }, ptr %taddr, align 8
%2 = getelementptr inbounds { ptr, i64 }, ptr %taddr, i32 0, i32 0
%lo = load ptr, ptr %2, align 8
%3 = getelementptr inbounds { ptr, i64 }, ptr %taddr, i32 0, i32 1
%hi = load i64, ptr %3, align 8
%4 = insertvalue %variant undef, ptr %err, 0
%5 = insertvalue %variant %4, i64 ptrtoint (ptr @"ct$anyerr" to i64), 1
%6 = getelementptr inbounds [1 x %variant], ptr %varargslots, i64 0, i64 0
store %variant %5, ptr %6, align 16
%7 = getelementptr inbounds %"variant[]", ptr %vararg, i32 0, i32 1
store i64 1, ptr %7, align 8
%8 = getelementptr inbounds %"variant[]", ptr %vararg, i32 0, i32 0
store ptr %varargslots, ptr %8, align 8
%9 = getelementptr inbounds { ptr, i64 }, ptr %vararg, i32 0, i32 0
%lo6 = load ptr, ptr %9, align 8
%10 = getelementptr inbounds { ptr, i64 }, ptr %vararg, i32 0, i32 1
%hi7 = load i64, ptr %10, align 8
%11 = call i64 @std_io_printfln(ptr %retparam, ptr %lo, i64 %hi, ptr %lo6, i64 %hi7)
%not_err8 = icmp eq i64 %11, 0
br i1 %not_err8, label %after_check9, label %voiderr
after_check9: ; preds = %if.then
br label %voiderr
voiderr: ; preds = %after_check9, %if.then
br label %if.exit
if.exit: ; preds = %voiderr, %end_block
br label %testblock11
testblock11: ; preds = %if.exit
%optval12 = load i64, ptr %b.f, align 8
%not_err13 = icmp eq i64 %optval12, 0
br i1 %not_err13, label %after_check15, label %assign_optional14
assign_optional14: ; preds = %testblock11
store i64 %optval12, ptr %err10, align 8
br label %end_block16
after_check15: ; preds = %testblock11
store i64 0, ptr %err10, align 8
br label %end_block16
end_block16: ; preds = %after_check15, %assign_optional14
%12 = load i64, ptr %err10, align 8
%neq17 = icmp ne i64 %12, 0
br i1 %neq17, label %if.then18, label %if.exit30
if.then18: ; preds = %end_block16
store %"char[]" { ptr @.str.5, i64 13 }, ptr %taddr20, align 8
%13 = getelementptr inbounds { ptr, i64 }, ptr %taddr20, i32 0, i32 0
%lo21 = load ptr, ptr %13, align 8
%14 = getelementptr inbounds { ptr, i64 }, ptr %taddr20, i32 0, i32 1
%hi22 = load i64, ptr %14, align 8
%15 = insertvalue %variant undef, ptr %err10, 0
%16 = insertvalue %variant %15, i64 ptrtoint (ptr @"ct$anyerr" to i64), 1
%17 = getelementptr inbounds [1 x %variant], ptr %varargslots24, i64 0, i64 0
store %variant %16, ptr %17, align 16
%18 = getelementptr inbounds %"variant[]", ptr %vararg23, i32 0, i32 1
store i64 1, ptr %18, align 8
%19 = getelementptr inbounds %"variant[]", ptr %vararg23, i32 0, i32 0
store ptr %varargslots24, ptr %19, align 8
%20 = getelementptr inbounds { ptr, i64 }, ptr %vararg23, i32 0, i32 0
%lo25 = load ptr, ptr %20, align 8
%21 = getelementptr inbounds { ptr, i64 }, ptr %vararg23, i32 0, i32 1
%hi26 = load i64, ptr %21, align 8
%22 = call i64 @std_io_printfln(ptr %retparam19, ptr %lo21, i64 %hi22, ptr %lo25, i64 %hi26)
%not_err27 = icmp eq i64 %22, 0
br i1 %not_err27, label %after_check28, label %voiderr29
after_check28: ; preds = %if.then18
br label %voiderr29
voiderr29: ; preds = %after_check28, %if.then18
br label %if.exit30
if.exit30: ; preds = %voiderr29, %end_block16
store %"char[]" { ptr @.str.6, i64 9 }, ptr %taddr32, align 8
%23 = getelementptr inbounds { ptr, i64 }, ptr %taddr32, i32 0, i32 0
%lo33 = load ptr, ptr %23, align 8
%24 = getelementptr inbounds { ptr, i64 }, ptr %taddr32, i32 0, i32 1
%hi34 = load i64, ptr %24, align 8
%optval37 = load i64, ptr %a.f, align 8
%not_err38 = icmp eq i64 %optval37, 0
br i1 %not_err38, label %after_check39, label %voiderr44
after_check39: ; preds = %if.exit30
%25 = insertvalue %variant undef, ptr %a, 0
%26 = insertvalue %variant %25, i64 ptrtoint (ptr @"ct$int" to i64), 1
%27 = getelementptr inbounds [1 x %variant], ptr %varargslots36, i64 0, i64 0
store %variant %26, ptr %27, align 16
%28 = getelementptr inbounds %"variant[]", ptr %vararg35, i32 0, i32 1
store i64 1, ptr %28, align 8
%29 = getelementptr inbounds %"variant[]", ptr %vararg35, i32 0, i32 0
store ptr %varargslots36, ptr %29, align 8
%30 = getelementptr inbounds { ptr, i64 }, ptr %vararg35, i32 0, i32 0
%lo40 = load ptr, ptr %30, align 8
%31 = getelementptr inbounds { ptr, i64 }, ptr %vararg35, i32 0, i32 1
%hi41 = load i64, ptr %31, align 8
%32 = call i64 @std_io_printfln(ptr %retparam31, ptr %lo33, i64 %hi34, ptr %lo40, i64 %hi41)
%not_err42 = icmp eq i64 %32, 0
br i1 %not_err42, label %after_check43, label %voiderr44
after_check43: ; preds = %after_check39
br label %voiderr44
voiderr44: ; preds = %after_check43, %after_check39, %if.exit30
store %"char[]" { ptr @.str.7, i64 9 }, ptr %taddr46, align 8
%33 = getelementptr inbounds { ptr, i64 }, ptr %taddr46, i32 0, i32 0
%lo47 = load ptr, ptr %33, align 8
%34 = getelementptr inbounds { ptr, i64 }, ptr %taddr46, i32 0, i32 1
%hi48 = load i64, ptr %34, align 8
%optval51 = load i64, ptr %b.f, align 8
%not_err52 = icmp eq i64 %optval51, 0
br i1 %not_err52, label %after_check53, label %voiderr58
after_check53: ; preds = %voiderr44
%35 = insertvalue %variant undef, ptr %b, 0
%36 = insertvalue %variant %35, i64 ptrtoint (ptr @"ct$int" to i64), 1
%37 = getelementptr inbounds [1 x %variant], ptr %varargslots50, i64 0, i64 0
store %variant %36, ptr %37, align 16
%38 = getelementptr inbounds %"variant[]", ptr %vararg49, i32 0, i32 1
store i64 1, ptr %38, align 8
%39 = getelementptr inbounds %"variant[]", ptr %vararg49, i32 0, i32 0
store ptr %varargslots50, ptr %39, align 8
%40 = getelementptr inbounds { ptr, i64 }, ptr %vararg49, i32 0, i32 0
%lo54 = load ptr, ptr %40, align 8
%41 = getelementptr inbounds { ptr, i64 }, ptr %vararg49, i32 0, i32 1
%hi55 = load i64, ptr %41, align 8
%42 = call i64 @std_io_printfln(ptr %retparam45, ptr %lo47, i64 %hi48, ptr %lo54, i64 %hi55)
%not_err56 = icmp eq i64 %42, 0
br i1 %not_err56, label %after_check57, label %voiderr58
after_check57: ; preds = %after_check53
br label %voiderr58
voiderr58: ; preds = %after_check57, %after_check53, %voiderr44
ret void
}
; Function Attrs: nounwind
define void @test_test3() #0 {
entry:
%x = alloca i32, align 4
%x.f = alloca i64, align 8
%a = alloca i32, align 4
%a.f = alloca i64, align 8
%b = alloca i32, align 4
%b.f = alloca i64, align 8
%err = alloca i64, align 8
%retparam = alloca i64, align 8
%taddr = alloca %"char[]", align 8
%vararg = alloca %"variant[]", align 8
%varargslots = alloca [1 x %variant], align 16
%err10 = alloca i64, align 8
%retparam19 = alloca i64, align 8
%taddr20 = alloca %"char[]", align 8
%vararg23 = alloca %"variant[]", align 8
%varargslots24 = alloca [1 x %variant], align 16
%retparam31 = alloca i64, align 8
%taddr32 = alloca %"char[]", align 8
%vararg35 = alloca %"variant[]", align 8
%varargslots36 = alloca [1 x %variant], align 16
%retparam45 = alloca i64, align 8
%taddr46 = alloca %"char[]", align 8
%vararg49 = alloca %"variant[]", align 8
%varargslots50 = alloca [1 x %variant], align 16
store i32 23, ptr %x, align 4
store i64 0, ptr %x.f, align 8
store i32 1, ptr %a, align 4
store i64 0, ptr %a.f, align 8
%optval = load i64, ptr %x.f, align 8
%not_err = icmp eq i64 %optval, 0
br i1 %not_err, label %after_check, label %assign_optional
assign_optional: ; preds = %entry
store i64 %optval, ptr %a.f, align 8
br label %optional_assign_jump
after_check: ; preds = %entry
%0 = load i32, ptr %x, align 4
store i32 %0, ptr %a, align 4
store i64 0, ptr %a.f, align 8
br label %after_assign
optional_assign_jump: ; preds = %assign_optional
%reload_err = load i64, ptr %a.f, align 8
store i64 %reload_err, ptr %b.f, align 8
br label %after_assign1
after_assign: ; preds = %after_check
store i32 %0, ptr %b, align 4
store i64 0, ptr %b.f, align 8
br label %after_assign1
after_assign1: ; preds = %after_assign, %optional_assign_jump
br label %testblock
testblock: ; preds = %after_assign1
%optval2 = load i64, ptr %a.f, align 8
%not_err3 = icmp eq i64 %optval2, 0
br i1 %not_err3, label %after_check5, label %assign_optional4
assign_optional4: ; preds = %testblock
store i64 %optval2, ptr %err, align 8
br label %end_block
after_check5: ; preds = %testblock
store i64 0, ptr %err, align 8
br label %end_block
end_block: ; preds = %after_check5, %assign_optional4
%1 = load i64, ptr %err, align 8
%neq = icmp ne i64 %1, 0
br i1 %neq, label %if.then, label %if.exit
if.then: ; preds = %end_block
store %"char[]" { ptr @.str.8, i64 13 }, ptr %taddr, align 8
%2 = getelementptr inbounds { ptr, i64 }, ptr %taddr, i32 0, i32 0
%lo = load ptr, ptr %2, align 8
%3 = getelementptr inbounds { ptr, i64 }, ptr %taddr, i32 0, i32 1
%hi = load i64, ptr %3, align 8
%4 = insertvalue %variant undef, ptr %err, 0
%5 = insertvalue %variant %4, i64 ptrtoint (ptr @"ct$anyerr" to i64), 1
%6 = getelementptr inbounds [1 x %variant], ptr %varargslots, i64 0, i64 0
store %variant %5, ptr %6, align 16
%7 = getelementptr inbounds %"variant[]", ptr %vararg, i32 0, i32 1
store i64 1, ptr %7, align 8
%8 = getelementptr inbounds %"variant[]", ptr %vararg, i32 0, i32 0
store ptr %varargslots, ptr %8, align 8
%9 = getelementptr inbounds { ptr, i64 }, ptr %vararg, i32 0, i32 0
%lo6 = load ptr, ptr %9, align 8
%10 = getelementptr inbounds { ptr, i64 }, ptr %vararg, i32 0, i32 1
%hi7 = load i64, ptr %10, align 8
%11 = call i64 @std_io_printfln(ptr %retparam, ptr %lo, i64 %hi, ptr %lo6, i64 %hi7)
%not_err8 = icmp eq i64 %11, 0
br i1 %not_err8, label %after_check9, label %voiderr
after_check9: ; preds = %if.then
br label %voiderr
voiderr: ; preds = %after_check9, %if.then
br label %if.exit
if.exit: ; preds = %voiderr, %end_block
br label %testblock11
testblock11: ; preds = %if.exit
%optval12 = load i64, ptr %b.f, align 8
%not_err13 = icmp eq i64 %optval12, 0
br i1 %not_err13, label %after_check15, label %assign_optional14
assign_optional14: ; preds = %testblock11
store i64 %optval12, ptr %err10, align 8
br label %end_block16
after_check15: ; preds = %testblock11
store i64 0, ptr %err10, align 8
br label %end_block16
end_block16: ; preds = %after_check15, %assign_optional14
%12 = load i64, ptr %err10, align 8
%neq17 = icmp ne i64 %12, 0
br i1 %neq17, label %if.then18, label %if.exit30
if.then18: ; preds = %end_block16
store %"char[]" { ptr @.str.9, i64 13 }, ptr %taddr20, align 8
%13 = getelementptr inbounds { ptr, i64 }, ptr %taddr20, i32 0, i32 0
%lo21 = load ptr, ptr %13, align 8
%14 = getelementptr inbounds { ptr, i64 }, ptr %taddr20, i32 0, i32 1
%hi22 = load i64, ptr %14, align 8
%15 = insertvalue %variant undef, ptr %err10, 0
%16 = insertvalue %variant %15, i64 ptrtoint (ptr @"ct$anyerr" to i64), 1
%17 = getelementptr inbounds [1 x %variant], ptr %varargslots24, i64 0, i64 0
store %variant %16, ptr %17, align 16
%18 = getelementptr inbounds %"variant[]", ptr %vararg23, i32 0, i32 1
store i64 1, ptr %18, align 8
%19 = getelementptr inbounds %"variant[]", ptr %vararg23, i32 0, i32 0
store ptr %varargslots24, ptr %19, align 8
%20 = getelementptr inbounds { ptr, i64 }, ptr %vararg23, i32 0, i32 0
%lo25 = load ptr, ptr %20, align 8
%21 = getelementptr inbounds { ptr, i64 }, ptr %vararg23, i32 0, i32 1
%hi26 = load i64, ptr %21, align 8
%22 = call i64 @std_io_printfln(ptr %retparam19, ptr %lo21, i64 %hi22, ptr %lo25, i64 %hi26)
%not_err27 = icmp eq i64 %22, 0
br i1 %not_err27, label %after_check28, label %voiderr29
after_check28: ; preds = %if.then18
br label %voiderr29
voiderr29: ; preds = %after_check28, %if.then18
br label %if.exit30
if.exit30: ; preds = %voiderr29, %end_block16
store %"char[]" { ptr @.str.10, i64 9 }, ptr %taddr32, align 8
%23 = getelementptr inbounds { ptr, i64 }, ptr %taddr32, i32 0, i32 0
%lo33 = load ptr, ptr %23, align 8
%24 = getelementptr inbounds { ptr, i64 }, ptr %taddr32, i32 0, i32 1
%hi34 = load i64, ptr %24, align 8
%optval37 = load i64, ptr %a.f, align 8
%not_err38 = icmp eq i64 %optval37, 0
br i1 %not_err38, label %after_check39, label %voiderr44
after_check39: ; preds = %if.exit30
%25 = insertvalue %variant undef, ptr %a, 0
%26 = insertvalue %variant %25, i64 ptrtoint (ptr @"ct$int" to i64), 1
%27 = getelementptr inbounds [1 x %variant], ptr %varargslots36, i64 0, i64 0
store %variant %26, ptr %27, align 16
%28 = getelementptr inbounds %"variant[]", ptr %vararg35, i32 0, i32 1
store i64 1, ptr %28, align 8
%29 = getelementptr inbounds %"variant[]", ptr %vararg35, i32 0, i32 0
store ptr %varargslots36, ptr %29, align 8
%30 = getelementptr inbounds { ptr, i64 }, ptr %vararg35, i32 0, i32 0
%lo40 = load ptr, ptr %30, align 8
%31 = getelementptr inbounds { ptr, i64 }, ptr %vararg35, i32 0, i32 1
%hi41 = load i64, ptr %31, align 8
%32 = call i64 @std_io_printfln(ptr %retparam31, ptr %lo33, i64 %hi34, ptr %lo40, i64 %hi41)
%not_err42 = icmp eq i64 %32, 0
br i1 %not_err42, label %after_check43, label %voiderr44
after_check43: ; preds = %after_check39
br label %voiderr44
voiderr44: ; preds = %after_check43, %after_check39, %if.exit30
store %"char[]" { ptr @.str.11, i64 9 }, ptr %taddr46, align 8
%33 = getelementptr inbounds { ptr, i64 }, ptr %taddr46, i32 0, i32 0
%lo47 = load ptr, ptr %33, align 8
%34 = getelementptr inbounds { ptr, i64 }, ptr %taddr46, i32 0, i32 1
%hi48 = load i64, ptr %34, align 8
%optval51 = load i64, ptr %b.f, align 8
%not_err52 = icmp eq i64 %optval51, 0
br i1 %not_err52, label %after_check53, label %voiderr58
after_check53: ; preds = %voiderr44
%35 = insertvalue %variant undef, ptr %b, 0
%36 = insertvalue %variant %35, i64 ptrtoint (ptr @"ct$int" to i64), 1
%37 = getelementptr inbounds [1 x %variant], ptr %varargslots50, i64 0, i64 0
store %variant %36, ptr %37, align 16
%38 = getelementptr inbounds %"variant[]", ptr %vararg49, i32 0, i32 1
store i64 1, ptr %38, align 8
%39 = getelementptr inbounds %"variant[]", ptr %vararg49, i32 0, i32 0
store ptr %varargslots50, ptr %39, align 8
%40 = getelementptr inbounds { ptr, i64 }, ptr %vararg49, i32 0, i32 0
%lo54 = load ptr, ptr %40, align 8
%41 = getelementptr inbounds { ptr, i64 }, ptr %vararg49, i32 0, i32 1
%hi55 = load i64, ptr %41, align 8
%42 = call i64 @std_io_printfln(ptr %retparam45, ptr %lo47, i64 %hi48, ptr %lo54, i64 %hi55)
%not_err56 = icmp eq i64 %42, 0
br i1 %not_err56, label %after_check57, label %voiderr58
after_check57: ; preds = %after_check53
br label %voiderr58
voiderr58: ; preds = %after_check57, %after_check53, %voiderr44
ret void
}