// #target: macos-x64 module test; import std::io; import test2; fn void test(int a = test2::bar(), int b = test2::foo()) { io::printf("%d %d\n", a, b); } module test2; fn int foo() { static int x = 0; return ++x; } macro int bar() { static int x = 0; return ++x; } module test3; import test; import std::io; fn void main() { test::test(1, 2); test::test(a: 3); test::test(1, b: 32); test::test(); test::test(); } /* #expect: test3.ll entry: call void @test.test(i32 1, i32 2) %0 = call i32 @test2.foo() call void @test.test(i32 3, i32 %0) call void @test.test(i32 1, i32 32) %1 = load i32, ptr @main.x, align 4 %add = add i32 %1, 1 store i32 %add, ptr @main.x, align 4 %2 = call i32 @test2.foo() call void @test.test(i32 %add, i32 %2) %3 = load i32, ptr @main.x.1, align 4 %add1 = add i32 %3, 1 store i32 %add1, ptr @main.x.1, align 4 %4 = call i32 @test2.foo() call void @test.test(i32 %add1, i32 %4) ret void }