// #target: macos-x64 module example; import std::io; macro foo(a, b) { return a(b); } fn int square(int x) { return x * x; } fn int test() { int a = 2; int b = 3; return foo(&square, 2) + a + b; // 9 // return foo(square, 2) + a + b; // Error the symbol "square" cannot be used as an argument. } /* #expect: example.ll define i32 @example.square(i32 %0) #0 { entry: %mul = mul i32 %0, %0 ret i32 %mul } define i32 @example.test() #0 { entry: %a = alloca i32, align 4 %b = alloca i32, align 4 store i32 2, ptr %a, align 4 store i32 3, ptr %b, align 4 %0 = call i32 @example.square(i32 2) %1 = load i32, ptr %a, align 4 %add = add i32 %0, %1 %2 = load i32, ptr %b, align 4 %add1 = add i32 %add, %2 ret i32 %add1 }