mstorsjo created this revision. mstorsjo added reviewers: rnk, smeenai, rsmith. Herald added a project: clang.
Since 6bf108d77a3c, we try to not mark extern_weak symbols as dso_local, to allow using COFF stubs for references to those symbols (as the symbol may be missing, resolving to an absolute address zero, outside of the current DSO). Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D71716 Files: clang/lib/CodeGen/ItaniumCXXABI.cpp clang/test/CodeGenCXX/mingw-thread-local.cpp Index: clang/test/CodeGenCXX/mingw-thread-local.cpp =================================================================== --- /dev/null +++ clang/test/CodeGenCXX/mingw-thread-local.cpp @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple x86_64-w64-mingw32 | FileCheck %s + +extern thread_local int var; + +int get() { + return var; +} + +// CHECK: declare extern_weak void @_ZTH3var() Index: clang/lib/CodeGen/ItaniumCXXABI.cpp =================================================================== --- clang/lib/CodeGen/ItaniumCXXABI.cpp +++ clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -2690,7 +2690,9 @@ if (Init) { Init->setVisibility(Var->getVisibility()); - Init->setDSOLocal(Var->isDSOLocal()); + // Don't mark an extern_weak function DSO local on windows. + if (!CGM.getTriple().isOSWindows() || !Init->hasExternalWeakLinkage()) + Init->setDSOLocal(Var->isDSOLocal()); } llvm::LLVMContext &Context = CGM.getModule().getContext();
Index: clang/test/CodeGenCXX/mingw-thread-local.cpp =================================================================== --- /dev/null +++ clang/test/CodeGenCXX/mingw-thread-local.cpp @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple x86_64-w64-mingw32 | FileCheck %s + +extern thread_local int var; + +int get() { + return var; +} + +// CHECK: declare extern_weak void @_ZTH3var() Index: clang/lib/CodeGen/ItaniumCXXABI.cpp =================================================================== --- clang/lib/CodeGen/ItaniumCXXABI.cpp +++ clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -2690,7 +2690,9 @@ if (Init) { Init->setVisibility(Var->getVisibility()); - Init->setDSOLocal(Var->isDSOLocal()); + // Don't mark an extern_weak function DSO local on windows. + if (!CGM.getTriple().isOSWindows() || !Init->hasExternalWeakLinkage()) + Init->setDSOLocal(Var->isDSOLocal()); } llvm::LLVMContext &Context = CGM.getModule().getContext();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits