@@ -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 );
0 commit comments