Files
c3c/test/test_suite/defer/defer_and_expr_block.c3t

41 lines
1.1 KiB
C

// #target: macos-x64
module foo;
extern fn void printf(char*,...);
fn void main()
{
defer printf("On exit\n");
{|
defer printf("Baz\n");
defer {|
defer printf("Hello!\n");
defer printf("1\n");
if (true) return 12;
defer printf("2\n");
return 34;
|};
|};
defer printf("On 2\n");
}
/* #expect: foo.ll
define void @foo.main() #0 {
entry:
%blockret = alloca i32, align 4
br label %if.then
if.then: ; preds = %entry
call void (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0))
call void (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i32 0, i32 0))
store i32 12, i32* %blockret, align 4
br label %expr_block.exit
expr_block.exit: ; preds = %if.then
call void (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i32 0, i32 0))
call void (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i32 0, i32 0))
call void (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i32 0, i32 0))
ret void
}