diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2017-04-10 02:30:56 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2017-04-10 02:32:11 -0400 |
| commit | 0e77b0ac8936b0f09deb23733fe5a772869a64e6 (patch) | |
| tree | d1c7d103a6060f1f79ece0d377241d99bf2ea822 /src/codegen.cpp | |
| parent | 095591f0b0f0d09bb1589fc404c2e7fdeac4bee4 (diff) | |
| download | zig-0e77b0ac8936b0f09deb23733fe5a772869a64e6.tar.gz zig-0e77b0ac8936b0f09deb23733fe5a772869a64e6.zip | |
fix mangling exported global variables
closes #316
Diffstat (limited to 'src/codegen.cpp')
| -rw-r--r-- | src/codegen.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp index 575010c9d6..b70f2217a6 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -3408,7 +3408,8 @@ static void generate_error_name_table(CodeGen *g) { LLVMValueRef err_name_table_init = LLVMConstArray(str_type->type_ref, values, g->error_decls.length); - g->err_name_table = LLVMAddGlobal(g->module, LLVMTypeOf(err_name_table_init), "err_name_table"); + g->err_name_table = LLVMAddGlobal(g->module, LLVMTypeOf(err_name_table_init), + buf_ptr(get_mangled_name(g, buf_create_from_str("err_name_table"), false))); LLVMSetInitializer(g->err_name_table, err_name_table_init); LLVMSetLinkage(g->err_name_table, LLVMPrivateLinkage); LLVMSetGlobalConstant(g->err_name_table, true); @@ -3445,7 +3446,7 @@ static void generate_enum_name_tables(CodeGen *g) { LLVMValueRef name_table_init = LLVMConstArray(str_type->type_ref, values, field_count); - Buf *table_name = buf_sprintf("%s_name_table", buf_ptr(&enum_type->name)); + Buf *table_name = get_mangled_name(g, buf_sprintf("%s_name_table", buf_ptr(&enum_type->name)), false); LLVMValueRef name_table = LLVMAddGlobal(g->module, LLVMTypeOf(name_table_init), buf_ptr(table_name)); LLVMSetInitializer(name_table, name_table_init); LLVMSetLinkage(name_table, LLVMPrivateLinkage); @@ -3535,11 +3536,12 @@ static void do_code_gen(CodeGen *g) { LLVMSetLinkage(global_value, LLVMExternalLinkage); } else { + bool exported = (var->linkage == VarLinkageExport); render_const_val(g, var->value); - render_const_val_global(g, var->value, buf_ptr(get_mangled_name(g, &var->name, false))); + render_const_val_global(g, var->value, buf_ptr(get_mangled_name(g, &var->name, exported))); global_value = var->value->llvm_global; - if (var->linkage == VarLinkageExport) { + if (exported) { LLVMSetLinkage(global_value, LLVMExternalLinkage); } if (tld_var->section_name) { |
