authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-08-25 03:55:32-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-08-25 03:55:59-04:00
log02f5a9fa62cc54835467e36b7015a6bcb642583d
treed055b64c39ec3d544499256103f555a7f7005fd3
parentb95ff12f2fb4aa5c20aecb789a91396557662287

fix handling multiple extern vars with the same name


1 files changed, 9 insertions(+), 5 deletions(-)

src/codegen.cpp+9-5
......@@ -5812,12 +5812,16 @@ static void do_code_gen(CodeGen *g) {
58125812
58135813 LLVMValueRef global_value;
58145814 if (var->linkage == VarLinkageExternal) {
5815 global_value = LLVMAddGlobal(g->module, var->value->type->type_ref, buf_ptr(&var->name));
5816
5817 // TODO debug info for the extern variable
5815 LLVMValueRef existing_llvm_var = LLVMGetNamedGlobal(g->module, buf_ptr(&var->name));
5816 if (existing_llvm_var) {
5817 global_value = LLVMConstBitCast(existing_llvm_var, LLVMPointerType(var->value->type->type_ref, 0));
5818 } else {
5819 global_value = LLVMAddGlobal(g->module, var->value->type->type_ref, buf_ptr(&var->name));
5820 // TODO debug info for the extern variable
58185821
5819 LLVMSetLinkage(global_value, LLVMExternalLinkage);
5820 LLVMSetAlignment(global_value, var->align_bytes);
5822 LLVMSetLinkage(global_value, LLVMExternalLinkage);
5823 LLVMSetAlignment(global_value, var->align_bytes);
5824 }
58215825 } else {
58225826 bool exported = (var->linkage == VarLinkageExport);
58235827 const char *mangled_name = buf_ptr(get_mangled_name(g, &var->name, exported));