Files
c3c/test/test_suite/macros/macro_defer_with_body.c3t

52 lines
1.1 KiB
Plaintext

module foo;
macro int @cofefe(a; @body(x))
{
@body(a);
@body(a);
return 1;
}
extern fn int printf(char *, ...);
fn void main()
{
int x = 0;
@cofefe(1; int y)
{
defer printf("defer: %d\n", x++);
printf("%d\n", x++);
};
printf("Done!\n");
}
/* #expect: foo.ll
define void @foo.main() #0 {
entry:
%x = alloca i32, align 4
%y = alloca i32, align 4
store i32 0, ptr %x, align 4
store i32 1, ptr %y, align 4
%0 = load i32, ptr %x, align 4
%add = add i32 %0, 1
store i32 %add, ptr %x, align 4
%1 = call i32 (ptr, ...) @printf(ptr @.str, i32 %0)
%2 = load i32, ptr %x, align 4
%add1 = add i32 %2, 1
store i32 %add1, ptr %x, align 4
%3 = call i32 (ptr, ...) @printf(ptr @.str.1, i32 %2)
store i32 1, ptr %y, align 4
%4 = load i32, ptr %x, align 4
%add2 = add i32 %4, 1
store i32 %add2, ptr %x, align 4
%5 = call i32 (ptr, ...) @printf(ptr @.str.2, i32 %4)
%6 = load i32, ptr %x, align 4
%add3 = add i32 %6, 1
store i32 %add3, ptr %x, align 4
%7 = call i32 (ptr, ...) @printf(ptr @.str.3, i32 %6)
%8 = call i32 (ptr, ...) @printf(ptr @.str.4)
ret void
}