| ... | @@ -5812,12 +5812,16 @@ static void do_code_gen(CodeGen *g) { | ... | @@ -5812,12 +5812,16 @@ static void do_code_gen(CodeGen *g) { |
| 5812 | | 5812 | |
| 5813 | LLVMValueRef global_value; | 5813 | LLVMValueRef global_value; |
| 5814 | if (var->linkage == VarLinkageExternal) { | 5814 | if (var->linkage == VarLinkageExternal) { |
| 5815 | global_value = LLVMAddGlobal(g->module, var->value->type->type_ref, buf_ptr(&var->name)); | 5815 | LLVMValueRef existing_llvm_var = LLVMGetNamedGlobal(g->module, buf_ptr(&var->name)); |
| 5816 | | 5816 | if (existing_llvm_var) { |
| 5817 | // TODO debug info for the extern variable | 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 |
| 5818 | | 5821 | |
| 5819 | LLVMSetLinkage(global_value, LLVMExternalLinkage); | 5822 | LLVMSetLinkage(global_value, LLVMExternalLinkage); |
| 5820 | LLVMSetAlignment(global_value, var->align_bytes); | 5823 | LLVMSetAlignment(global_value, var->align_bytes); |
| | 5824 | } |
| 5821 | } else { | 5825 | } else { |
| 5822 | bool exported = (var->linkage == VarLinkageExport); | 5826 | bool exported = (var->linkage == VarLinkageExport); |
| 5823 | const char *mangled_name = buf_ptr(get_mangled_name(g, &var->name, exported)); | 5827 | const char *mangled_name = buf_ptr(get_mangled_name(g, &var->name, exported)); |