Files
c3c/test/test_suite7/macro_methods/macro_method_different_args.c3t
2025-02-23 13:53:04 +01:00

49 lines
1.3 KiB
Plaintext

// #target: macos-x64
module foo;
extern fn void printf(char* fmt, ...);
struct Foo
{
int x;
}
macro void Foo.@hello(Foo* &this) { this.x = 3; printf("-%d\n", this.x); }
macro void Foo.hello(Foo* this) { this.x = 4; printf("-%d\n", this.x); }
macro void Foo.hello2(Foo this) { this.x = 5; printf("-%d\n", this.x); }
fn void main()
{
Foo a;
a.@hello();
printf("%d\n", a.x);
a.hello();
printf("%d\n", a.x);
a.hello2();
printf("%d\n", a.x);
}
/* #expect: foo.ll
define void @foo.main() #0 {
entry:
%a = alloca %Foo, align 4
%this = alloca %Foo, align 4
store i32 0, ptr %a, align 4
store i32 3, ptr %a, align 4
%0 = load i32, ptr %a, align 4
call void (ptr, ...) @printf(ptr @.str, i32 %0)
%1 = load i32, ptr %a, align 4
call void (ptr, ...) @printf(ptr @.str.1, i32 %1)
store i32 4, ptr %a, align 4
%2 = load i32, ptr %a, align 4
call void (ptr, ...) @printf(ptr @.str.2, i32 %2)
%3 = load i32, ptr %a, align 4
call void (ptr, ...) @printf(ptr @.str.3, i32 %3)
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %this, ptr align 4 %a, i32 4, i1 false)
store i32 5, ptr %this, align 4
%4 = load i32, ptr %this, align 4
call void (ptr, ...) @printf(ptr @.str.4, i32 %4)
%5 = load i32, ptr %a, align 4
call void (ptr, ...) @printf(ptr @.str.5, i32 %5)
ret void
}