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