| ... | ... | @@ -388,6 +388,12 @@ static LLVMCallConv get_llvm_cc(CodeGen *g, CallingConvention cc) { |
| 388 | 388 | zig_unreachable(); |
| 389 | 389 | } |
| 390 | 390 | |
| 391 | static void add_uwtable_attr(CodeGen *g, LLVMValueRef fn_val) { |
| 392 | if (g->zig_target.os == ZigLLVM_Win32) { |
| 393 | addLLVMFnAttr(fn_val, "uwtable"); |
| 394 | } |
| 395 | } |
| 396 | |
| 391 | 397 | static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) { |
| 392 | 398 | if (fn_table_entry->llvm_value) |
| 393 | 399 | return fn_table_entry->llvm_value; |
| ... | ... | @@ -476,6 +482,7 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) { |
| 476 | 482 | } |
| 477 | 483 | |
| 478 | 484 | addLLVMFnAttr(fn_table_entry->llvm_value, "nounwind"); |
| 485 | add_uwtable_attr(g, fn_table_entry->llvm_value); |
| 479 | 486 | addLLVMFnAttr(fn_table_entry->llvm_value, "nobuiltin"); |
| 480 | 487 | if (g->build_mode == BuildModeDebug && fn_table_entry->fn_inline != FnInlineAlways) { |
| 481 | 488 | ZigLLVMAddFunctionAttr(fn_table_entry->llvm_value, "no-frame-pointer-elim", "true"); |
| ... | ... | @@ -885,6 +892,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) { |
| 885 | 892 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); |
| 886 | 893 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); |
| 887 | 894 | addLLVMFnAttr(fn_val, "nounwind"); |
| 895 | add_uwtable_attr(g, fn_val); |
| 888 | 896 | if (g->build_mode == BuildModeDebug) { |
| 889 | 897 | ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true"); |
| 890 | 898 | ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr); |