@@ -376,6 +376,7 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
376
376
}
377
377
fn_table_entry->llvm_name = LLVMGetValueName (fn_table_entry->llvm_value );
378
378
379
+ // TODO this is for testing windows DLL stuff
379
380
// if (buf_eql_str(&fn_table_entry->symbol_name, "ExitProcess") ||
380
381
// buf_eql_str(&fn_table_entry->symbol_name, "GetConsoleMode") ||
381
382
// buf_eql_str(&fn_table_entry->symbol_name, "GetStdHandle") ||
@@ -448,6 +449,12 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
448
449
}
449
450
if (fn_table_entry->alignment ) {
450
451
LLVMSetAlignment (fn_table_entry->llvm_value , (unsigned )fn_table_entry->alignment );
452
+ } else if (external_linkage) {
453
+ LLVMSetAlignment (fn_table_entry->llvm_value ,
454
+ LLVMABIAlignmentOfType (g->target_data_ref , fn_table_entry->type_entry ->data .fn .raw_type_ref ));
455
+ } else {
456
+ LLVMSetAlignment (fn_table_entry->llvm_value ,
457
+ LLVMPreferredAlignmentOfType (g->target_data_ref , fn_table_entry->type_entry ->data .fn .raw_type_ref ));
451
458
}
452
459
453
460
return fn_table_entry->llvm_value ;
@@ -596,6 +603,7 @@ static LLVMValueRef get_floor_ceil_fn(CodeGen *g, TypeTableEntry *type_entry, Zi
596
603
sprintf (fn_name, " llvm.%s.f%" ZIG_PRI_usize " " , name, type_entry->data .floating .bit_count );
597
604
LLVMTypeRef fn_type = LLVMFunctionType (type_entry->type_ref , &type_entry->type_ref , 1 , false );
598
605
LLVMValueRef fn_val = LLVMAddFunction (g->module , fn_name, fn_type);
606
+ assert (LLVMGetIntrinsicID (fn_val));
599
607
600
608
g->llvm_fn_table .put (key, fn_val);
601
609
return fn_val;
@@ -830,6 +838,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
830
838
ZigLLVMAddFunctionAttr (fn_val, " no-frame-pointer-elim" , " true" );
831
839
ZigLLVMAddFunctionAttr (fn_val, " no-frame-pointer-elim-non-leaf" , nullptr );
832
840
}
841
+ LLVMSetAlignment (fn_val, LLVMPreferredAlignmentOfType (g->target_data_ref , fn_type_ref));
833
842
834
843
LLVMBasicBlockRef entry_block = LLVMAppendBasicBlock (fn_val, " Entry" );
835
844
LLVMBasicBlockRef prev_block = LLVMGetInsertBlock (g->builder );
@@ -2478,6 +2487,7 @@ static LLVMValueRef get_int_builtin_fn(CodeGen *g, TypeTableEntry *int_type, Bui
2478
2487
};
2479
2488
LLVMTypeRef fn_type = LLVMFunctionType (int_type->type_ref , param_types, 2 , false );
2480
2489
LLVMValueRef fn_val = LLVMAddFunction (g->module , llvm_name, fn_type);
2490
+ assert (LLVMGetIntrinsicID (fn_val));
2481
2491
2482
2492
g->llvm_fn_table .put (key, fn_val);
2483
2493
0 commit comments