| ... | ... | @@ -292,13 +292,14 @@ static void add_uwtable_attr(CodeGen *g, LLVMValueRef fn_val) { |
| 292 | 292 | } |
| 293 | 293 | } |
| 294 | 294 | |
| 295 | | static LLVMLinkage to_llvm_linkage(GlobalLinkageId id) { |
| 295 | static LLVMLinkage to_llvm_linkage(GlobalLinkageId id, bool is_extern) { |
| 296 | 296 | switch (id) { |
| 297 | 297 | case GlobalLinkageIdInternal: |
| 298 | 298 | return LLVMInternalLinkage; |
| 299 | 299 | case GlobalLinkageIdStrong: |
| 300 | 300 | return LLVMExternalLinkage; |
| 301 | 301 | case GlobalLinkageIdWeak: |
| 302 | if (is_extern) return LLVMExternalWeakLinkage; |
| 302 | 303 | return LLVMWeakODRLinkage; |
| 303 | 304 | case GlobalLinkageIdLinkOnce: |
| 304 | 305 | return LLVMLinkOnceODRLinkage; |
| ... | ... | @@ -521,7 +522,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) { |
| 521 | 522 | } |
| 522 | 523 | |
| 523 | 524 | |
| 524 | | LLVMSetLinkage(llvm_fn, to_llvm_linkage(linkage)); |
| 525 | LLVMSetLinkage(llvm_fn, to_llvm_linkage(linkage, fn->body_node == nullptr)); |
| 525 | 526 | |
| 526 | 527 | if (linkage == GlobalLinkageIdInternal) { |
| 527 | 528 | LLVMSetUnnamedAddr(llvm_fn, true); |
| ... | ... | @@ -7962,7 +7963,7 @@ static void do_code_gen(CodeGen *g) { |
| 7962 | 7963 | global_value = LLVMAddGlobal(g->module, get_llvm_type(g, var->var_type), symbol_name); |
| 7963 | 7964 | // TODO debug info for the extern variable |
| 7964 | 7965 | |
| 7965 | | LLVMSetLinkage(global_value, to_llvm_linkage(linkage)); |
| 7966 | LLVMSetLinkage(global_value, to_llvm_linkage(linkage, true)); |
| 7966 | 7967 | maybe_import_dll(g, global_value, GlobalLinkageIdStrong); |
| 7967 | 7968 | LLVMSetAlignment(global_value, var->align_bytes); |
| 7968 | 7969 | LLVMSetGlobalConstant(global_value, var->gen_is_const); |
| ... | ... | @@ -7975,7 +7976,7 @@ static void do_code_gen(CodeGen *g) { |
| 7975 | 7976 | global_value = var->const_value->llvm_global; |
| 7976 | 7977 | |
| 7977 | 7978 | if (exported) { |
| 7978 | | LLVMSetLinkage(global_value, to_llvm_linkage(linkage)); |
| 7979 | LLVMSetLinkage(global_value, to_llvm_linkage(linkage, false)); |
| 7979 | 7980 | maybe_export_dll(g, global_value, GlobalLinkageIdStrong); |
| 7980 | 7981 | } |
| 7981 | 7982 | if (var->section_name) { |