mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
89 lines
2.8 KiB
Plaintext
89 lines
2.8 KiB
Plaintext
// #target: x64-darwin
|
|
module defer1;
|
|
import std::io;
|
|
|
|
func void test(int x)
|
|
{
|
|
defer io::println();
|
|
defer io::print("A");
|
|
if (x == 1) return;
|
|
{
|
|
defer io::print("B");
|
|
if (x == 0) return;
|
|
}
|
|
io::print("!");
|
|
}
|
|
|
|
func void main()
|
|
{
|
|
test(1); // Prints "A"
|
|
test(0); // Prints "BA"
|
|
test(10); // Prints "B!A"
|
|
}
|
|
|
|
// #expect: defer1.ll
|
|
|
|
define void @defer1.test(i32 %0) #0 {
|
|
entry:
|
|
%x = alloca i32, align 4
|
|
store i32 %0, i32* %x, align 4
|
|
%1 = load i32, i32* %x, align 4
|
|
%eq = icmp eq i32 %1, 1
|
|
br i1 %eq, label %if.then, label %if.exit
|
|
|
|
if.then: ; preds = %entry
|
|
%2 = call i32 @"std::io.print"(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0))
|
|
br label %exit
|
|
|
|
exit: ; preds = %if.then
|
|
%3 = call i32 @"std::io.println"(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.1, i32 0, i32 0)) #1
|
|
br label %exit1
|
|
|
|
exit1: ; preds = %exit
|
|
ret void
|
|
|
|
if.exit: ; preds = %entry
|
|
%4 = load i32, i32* %x, align 4
|
|
%eq2 = icmp eq i32 %4, 0
|
|
br i1 %eq2, label %if.then3, label %if.exit7
|
|
|
|
if.then3: ; preds = %if.exit
|
|
%5 = call i32 @"std::io.print"(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i32 0, i32 0))
|
|
br label %exit4
|
|
|
|
exit4: ; preds = %if.then3
|
|
%6 = call i32 @"std::io.print"(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i32 0, i32 0))
|
|
br label %exit5
|
|
|
|
exit5: ; preds = %exit4
|
|
%7 = call i32 @"std::io.println"(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.4, i32 0, i32 0)) #1
|
|
br label %exit6
|
|
|
|
exit6: ; preds = %exit5
|
|
ret void
|
|
|
|
if.exit7: ; preds = %if.exit
|
|
%8 = call i32 @"std::io.print"(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i32 0, i32 0))
|
|
br label %exit8
|
|
|
|
exit8: ; preds = %if.exit7
|
|
%9 = call i32 @"std::io.print"(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i32 0, i32 0))
|
|
%10 = call i32 @"std::io.print"(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i32 0, i32 0))
|
|
br label %exit9
|
|
|
|
exit9: ; preds = %exit8
|
|
%11 = call i32 @"std::io.println"(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.8, i32 0, i32 0)) #1
|
|
br label %exit10
|
|
|
|
exit10: ; preds = %exit9
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define void @main() #0 {
|
|
entry:
|
|
call void @defer1.test(i32 1)
|
|
call void @defer1.test(i32 0)
|
|
call void @defer1.test(i32 10)
|
|
ret void
|
|
} |