authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-03-12 21:41:53+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-16 00:09:00-07:00
log2583be7585d66ff6962434c7861db9b50aa64154
tree6ea71c46cef634f1f9fe1c92e5dde5241bcb1a28
parent394252c9db6ae82a2cddf49b986a4e6b72cadb70

stage2 llvm: fix `@extern`


1 files changed, 20 insertions(+), 1 deletions(-)

src/codegen/llvm.zig+20-1
...@@ -898,7 +898,7 @@ pub const DeclGen = struct {...@@ -898,7 +898,7 @@ pub const DeclGen = struct {
898 const llvm_fn = dg.llvmModule().addFunctionInAddressSpace(fqn, fn_type, llvm_addrspace);898 const llvm_fn = dg.llvmModule().addFunctionInAddressSpace(fqn, fn_type, llvm_addrspace);
899 gop.value_ptr.* = llvm_fn;899 gop.value_ptr.* = llvm_fn;
900900
901 const is_extern = decl.val.tag() == .extern_fn;901 const is_extern = decl.isExtern();
902 if (!is_extern) {902 if (!is_extern) {
903 llvm_fn.setLinkage(.Internal);903 llvm_fn.setLinkage(.Internal);
904 llvm_fn.setUnnamedAddr(.True);904 llvm_fn.setUnnamedAddr(.True);
...@@ -997,6 +997,25 @@ pub const DeclGen = struct {...@@ -997,6 +997,25 @@ pub const DeclGen = struct {
997 const llvm_global = dg.object.llvm_module.addGlobalInAddressSpace(llvm_type, fqn, llvm_addrspace);997 const llvm_global = dg.object.llvm_module.addGlobalInAddressSpace(llvm_type, fqn, llvm_addrspace);
998 gop.value_ptr.* = llvm_global;998 gop.value_ptr.* = llvm_global;
999999
1000 // This is needed for declarations created by `@extern`.
1001 if (decl.isExtern()) {
1002 llvm_global.setValueName(decl.name);
1003 llvm_global.setUnnamedAddr(.False);
1004 llvm_global.setLinkage(.External);
1005 if (decl.val.castTag(.variable)) |variable| {
1006 const single_threaded = dg.module.comp.bin_file.options.single_threaded;
1007 if (variable.data.is_threadlocal and !single_threaded) {
1008 llvm_global.setThreadLocalMode(.GeneralDynamicTLSModel);
1009 } else {
1010 llvm_global.setThreadLocalMode(.NotThreadLocal);
1011 }
1012 if (variable.data.is_weak_linkage) llvm_global.setLinkage(.ExternalWeak);
1013 }
1014 } else {
1015 llvm_global.setLinkage(.Internal);
1016 llvm_global.setUnnamedAddr(.True);
1017 }
1018
1000 return llvm_global;1019 return llvm_global;
1001 }1020 }
10021021