// #target: macos-aarch64
// #safe: yes
module test;
alias TestFn = fn void();

fn int main()
{
  TestFn foo;
  foo();
  return 0;
}

/* #expect: test.ll


define i32 @main() #0 {
entry:
  %foo = alloca ptr, align 8
  %taddr = alloca %"char[]", align 8
  %taddr1 = alloca %"char[]", align 8
  %taddr2 = alloca %"char[]", align 8
  store ptr null, ptr %foo, align 8
  %0 = load ptr, ptr %foo, align 8
  %checknull = icmp eq ptr %0, null
  %1 = call i1 @llvm.expect.i1(i1 %checknull, i1 false)
  br i1 %1, label %panic, label %checkok

checkok:                                          ; preds = %entry
  call void %0()
  ret i32 0

panic:                                            ; preds = %entry
  store %"char[]" { ptr @.panic_msg, i64 46 }, ptr %taddr, align 8
  %2 = load [2 x i64], ptr %taddr, align 8
  store %"char[]" { ptr @.file, i64 22 }, ptr %taddr1, align 8
  %3 = load [2 x i64], ptr %taddr1, align 8
  store %"char[]" { ptr @.func, i64 4 }, ptr %taddr2, align 8
  %4 = load [2 x i64], ptr %taddr2, align 8
  %5 = load ptr, ptr @std.core.builtin.panic, align 8
  call void %5([2 x i64] %2, [2 x i64] %3, [2 x i64] %4, i32 7)
  unreachable
}

