| ... | @@ -204,15 +204,14 @@ static bool is_symbol_available(CodeGen *g, const char *name) { | ... | @@ -204,15 +204,14 @@ static bool is_symbol_available(CodeGen *g, const char *name) { |
| 204 | Buf *buf_name = buf_create_from_str(name); | 204 | Buf *buf_name = buf_create_from_str(name); |
| 205 | bool result = | 205 | bool result = |
| 206 | g->exported_symbol_names.maybe_get(buf_name) == nullptr && | 206 | g->exported_symbol_names.maybe_get(buf_name) == nullptr && |
| 207 | g->external_prototypes.maybe_get(buf_name) == nullptr; | 207 | g->external_symbol_names.maybe_get(buf_name) == nullptr; |
| 208 | buf_destroy(buf_name); | 208 | buf_destroy(buf_name); |
| 209 | return result; | 209 | return result; |
| 210 | } | 210 | } |
| 211 | | 211 | |
| 212 | static const char *get_mangled_name(CodeGen *g, const char *original_name, bool external_linkage) { | 212 | static const char *get_mangled_name(CodeGen *g, const char *original_name) { |
| 213 | if (external_linkage || is_symbol_available(g, original_name)) { | 213 | if (is_symbol_available(g, original_name)) |
| 214 | return original_name; | 214 | return original_name; |
| 215 | } | | |
| 216 | | 215 | |
| 217 | int n = 0; | 216 | int n = 0; |
| 218 | for (;; n += 1) { | 217 | for (;; n += 1) { |
| ... | @@ -437,7 +436,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) { | ... | @@ -437,7 +436,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) { |
| 437 | symbol_name = unmangled_name; | 436 | symbol_name = unmangled_name; |
| 438 | linkage = GlobalLinkageIdStrong; | 437 | linkage = GlobalLinkageIdStrong; |
| 439 | } else if (fn->export_list.length == 0) { | 438 | } else if (fn->export_list.length == 0) { |
| 440 | symbol_name = get_mangled_name(g, unmangled_name, false); | 439 | symbol_name = get_mangled_name(g, unmangled_name); |
| 441 | linkage = GlobalLinkageIdInternal; | 440 | linkage = GlobalLinkageIdInternal; |
| 442 | } else { | 441 | } else { |
| 443 | GlobalExport *fn_export = &fn->export_list.items[0]; | 442 | GlobalExport *fn_export = &fn->export_list.items[0]; |
| ... | @@ -1115,7 +1114,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) { | ... | @@ -1115,7 +1114,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) { |
| 1115 | }; | 1114 | }; |
| 1116 | LLVMTypeRef fn_type_ref = LLVMFunctionType(LLVMVoidType(), arg_types, 2, false); | 1115 | LLVMTypeRef fn_type_ref = LLVMFunctionType(LLVMVoidType(), arg_types, 2, false); |
| 1117 | | 1116 | |
| 1118 | const char *fn_name = get_mangled_name(g, "__zig_add_err_ret_trace_addr", false); | 1117 | const char *fn_name = get_mangled_name(g, "__zig_add_err_ret_trace_addr"); |
| 1119 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); | 1118 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); |
| 1120 | addLLVMFnAttr(fn_val, "alwaysinline"); | 1119 | addLLVMFnAttr(fn_val, "alwaysinline"); |
| 1121 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); | 1120 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); |
| ... | @@ -1194,7 +1193,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) { | ... | @@ -1194,7 +1193,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) { |
| 1194 | }; | 1193 | }; |
| 1195 | LLVMTypeRef fn_type_ref = LLVMFunctionType(LLVMVoidType(), arg_types, 1, false); | 1194 | LLVMTypeRef fn_type_ref = LLVMFunctionType(LLVMVoidType(), arg_types, 1, false); |
| 1196 | | 1195 | |
| 1197 | const char *fn_name = get_mangled_name(g, "__zig_return_error", false); | 1196 | const char *fn_name = get_mangled_name(g, "__zig_return_error"); |
| 1198 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); | 1197 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); |
| 1199 | addLLVMFnAttr(fn_val, "noinline"); // so that we can look at return address | 1198 | addLLVMFnAttr(fn_val, "noinline"); // so that we can look at return address |
| 1200 | addLLVMFnAttr(fn_val, "cold"); | 1199 | addLLVMFnAttr(fn_val, "cold"); |
| ... | @@ -1264,7 +1263,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) { | ... | @@ -1264,7 +1263,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) { |
| 1264 | LLVMSetLinkage(msg_prefix, LLVMPrivateLinkage); | 1263 | LLVMSetLinkage(msg_prefix, LLVMPrivateLinkage); |
| 1265 | LLVMSetGlobalConstant(msg_prefix, true); | 1264 | LLVMSetGlobalConstant(msg_prefix, true); |
| 1266 | | 1265 | |
| 1267 | const char *fn_name = get_mangled_name(g, "__zig_fail_unwrap", false); | 1266 | const char *fn_name = get_mangled_name(g, "__zig_fail_unwrap"); |
| 1268 | LLVMTypeRef fn_type_ref; | 1267 | LLVMTypeRef fn_type_ref; |
| 1269 | if (g->have_err_ret_tracing) { | 1268 | if (g->have_err_ret_tracing) { |
| 1270 | LLVMTypeRef arg_types[] = { | 1269 | LLVMTypeRef arg_types[] = { |
| ... | @@ -2174,7 +2173,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) { | ... | @@ -2174,7 +2173,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) { |
| 2174 | }; | 2173 | }; |
| 2175 | LLVMTypeRef fn_type_ref = LLVMFunctionType(LLVMVoidType(), param_types, 2, false); | 2174 | LLVMTypeRef fn_type_ref = LLVMFunctionType(LLVMVoidType(), param_types, 2, false); |
| 2176 | | 2175 | |
| 2177 | const char *fn_name = get_mangled_name(g, "__zig_merge_error_return_traces", false); | 2176 | const char *fn_name = get_mangled_name(g, "__zig_merge_error_return_traces"); |
| 2178 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); | 2177 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); |
| 2179 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); | 2178 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); |
| 2180 | ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | 2179 | ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); |
| ... | @@ -5099,7 +5098,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) { | ... | @@ -5099,7 +5098,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) { |
| 5099 | &tag_int_llvm_type, 1, false); | 5098 | &tag_int_llvm_type, 1, false); |
| 5100 | | 5099 | |
| 5101 | const char *fn_name = get_mangled_name(g, | 5100 | const char *fn_name = get_mangled_name(g, |
| 5102 | buf_ptr(buf_sprintf("__zig_tag_name_%s", buf_ptr(&enum_type->name))), false); | 5101 | buf_ptr(buf_sprintf("__zig_tag_name_%s", buf_ptr(&enum_type->name)))); |
| 5103 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); | 5102 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); |
| 5104 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); | 5103 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); |
| 5105 | ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | 5104 | ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); |
| ... | @@ -7588,7 +7587,7 @@ static void generate_error_name_table(CodeGen *g) { | ... | @@ -7588,7 +7587,7 @@ static void generate_error_name_table(CodeGen *g) { |
| 7588 | LLVMValueRef err_name_table_init = LLVMConstArray(get_llvm_type(g, str_type), values, (unsigned)g->errors_by_index.length); | 7587 | LLVMValueRef err_name_table_init = LLVMConstArray(get_llvm_type(g, str_type), values, (unsigned)g->errors_by_index.length); |
| 7589 | | 7588 | |
| 7590 | g->err_name_table = LLVMAddGlobal(g->module, LLVMTypeOf(err_name_table_init), | 7589 | g->err_name_table = LLVMAddGlobal(g->module, LLVMTypeOf(err_name_table_init), |
| 7591 | get_mangled_name(g, buf_ptr(buf_create_from_str("__zig_err_name_table")), false)); | 7590 | get_mangled_name(g, buf_ptr(buf_create_from_str("__zig_err_name_table")))); |
| 7592 | LLVMSetInitializer(g->err_name_table, err_name_table_init); | 7591 | LLVMSetInitializer(g->err_name_table, err_name_table_init); |
| 7593 | LLVMSetLinkage(g->err_name_table, LLVMPrivateLinkage); | 7592 | LLVMSetLinkage(g->err_name_table, LLVMPrivateLinkage); |
| 7594 | LLVMSetGlobalConstant(g->err_name_table, true); | 7593 | LLVMSetGlobalConstant(g->err_name_table, true); |
| ... | @@ -7719,7 +7718,7 @@ static void do_code_gen(CodeGen *g) { | ... | @@ -7719,7 +7718,7 @@ static void do_code_gen(CodeGen *g) { |
| 7719 | symbol_name = unmangled_name; | 7718 | symbol_name = unmangled_name; |
| 7720 | linkage = GlobalLinkageIdStrong; | 7719 | linkage = GlobalLinkageIdStrong; |
| 7721 | } else { | 7720 | } else { |
| 7722 | symbol_name = get_mangled_name(g, unmangled_name, false); | 7721 | symbol_name = get_mangled_name(g, unmangled_name); |
| 7723 | linkage = GlobalLinkageIdInternal; | 7722 | linkage = GlobalLinkageIdInternal; |
| 7724 | } | 7723 | } |
| 7725 | } else { | 7724 | } else { |
| ... | @@ -10954,7 +10953,7 @@ CodeGen *codegen_create(Buf *main_pkg_path, Buf *root_src_path, const ZigTarget | ... | @@ -10954,7 +10953,7 @@ CodeGen *codegen_create(Buf *main_pkg_path, Buf *root_src_path, const ZigTarget |
| 10954 | g->llvm_fn_table.init(16); | 10953 | g->llvm_fn_table.init(16); |
| 10955 | g->memoized_fn_eval_table.init(16); | 10954 | g->memoized_fn_eval_table.init(16); |
| 10956 | g->exported_symbol_names.init(8); | 10955 | g->exported_symbol_names.init(8); |
| 10957 | g->external_prototypes.init(8); | 10956 | g->external_symbol_names.init(8); |
| 10958 | g->string_literals_table.init(16); | 10957 | g->string_literals_table.init(16); |
| 10959 | g->type_info_cache.init(32); | 10958 | g->type_info_cache.init(32); |
| 10960 | g->one_possible_values.init(32); | 10959 | g->one_possible_values.init(32); |
| ... | @@ -10964,7 +10963,7 @@ CodeGen *codegen_create(Buf *main_pkg_path, Buf *root_src_path, const ZigTarget | ... | @@ -10964,7 +10963,7 @@ CodeGen *codegen_create(Buf *main_pkg_path, Buf *root_src_path, const ZigTarget |
| 10964 | buf_resize(&g->global_asm, 0); | 10963 | buf_resize(&g->global_asm, 0); |
| 10965 | | 10964 | |
| 10966 | for (size_t i = 0; i < array_length(symbols_that_llvm_depends_on); i += 1) { | 10965 | for (size_t i = 0; i < array_length(symbols_that_llvm_depends_on); i += 1) { |
| 10967 | g->external_prototypes.put(buf_create_from_str(symbols_that_llvm_depends_on[i]), nullptr); | 10966 | g->external_symbol_names.put(buf_create_from_str(symbols_that_llvm_depends_on[i]), nullptr); |
| 10968 | } | 10967 | } |
| 10969 | | 10968 | |
| 10970 | if (root_src_path) { | 10969 | if (root_src_path) { |