Merged to the 8.0 branch in r351533. Please let me know if there are any further commits for this issue.
Thanks, Hans On Thu, Jan 17, 2019 at 6:57 PM Vlad Tsyrklevich via cfe-commits <cfe-commits@lists.llvm.org> wrote: > > Author: vlad.tsyrklevich > Date: Thu Jan 17 09:53:45 2019 > New Revision: 351457 > > URL: http://llvm.org/viewvc/llvm-project?rev=351457&view=rev > Log: > TLS: Respect visibility for thread_local variables on Darwin (PR40327) > > Summary: > Teach clang to mark thread wrappers for thread_local variables with > hidden visibility when the original variable is marked with hidden > visibility. This is necessary on Darwin which exposes the thread wrapper > instead of the thread variable. The thread wrapper would previously > always be created with default visibility unless it had > linkonce*/weak_odr linkage. > > Reviewers: rjmccall > > Reviewed By: rjmccall > > Differential Revision: https://reviews.llvm.org/D56818 > > Added: > cfe/trunk/test/CodeGenCXX/cxx11-thread-local-visibility.cpp > Modified: > cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp > cfe/trunk/test/CodeGenCXX/cxx11-thread-local.cpp > > Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=351457&r1=351456&r2=351457&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original) > +++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Thu Jan 17 09:53:45 2019 > @@ -2463,10 +2463,12 @@ ItaniumCXXABI::getOrCreateThreadLocalWra > CGM.SetLLVMFunctionAttributesForDefinition(nullptr, Wrapper); > > // Always resolve references to the wrapper at link time. > - if (!Wrapper->hasLocalLinkage() && !(isThreadWrapperReplaceable(VD, CGM) && > - !llvm::GlobalVariable::isLinkOnceLinkage(Wrapper->getLinkage()) && > - !llvm::GlobalVariable::isWeakODRLinkage(Wrapper->getLinkage()))) > - Wrapper->setVisibility(llvm::GlobalValue::HiddenVisibility); > + if (!Wrapper->hasLocalLinkage()) > + if (!isThreadWrapperReplaceable(VD, CGM) || > + llvm::GlobalVariable::isLinkOnceLinkage(Wrapper->getLinkage()) || > + llvm::GlobalVariable::isWeakODRLinkage(Wrapper->getLinkage()) || > + VD->getVisibility() == HiddenVisibility) > + Wrapper->setVisibility(llvm::GlobalValue::HiddenVisibility); > > if (isThreadWrapperReplaceable(VD, CGM)) { > Wrapper->setCallingConv(llvm::CallingConv::CXX_FAST_TLS); > > Added: cfe/trunk/test/CodeGenCXX/cxx11-thread-local-visibility.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx11-thread-local-visibility.cpp?rev=351457&view=auto > ============================================================================== > --- cfe/trunk/test/CodeGenCXX/cxx11-thread-local-visibility.cpp (added) > +++ cfe/trunk/test/CodeGenCXX/cxx11-thread-local-visibility.cpp Thu Jan 17 > 09:53:45 2019 > @@ -0,0 +1,17 @@ > +// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple x86_64-linux-gnu | > FileCheck --check-prefix=LINUX %s > +// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple > x86_64-apple-darwin12 | FileCheck --check-prefix=DARWIN %s > + > +// Regression test for PR40327 > + > +// LINUX: @default_tls = thread_local global i32 > +// LINUX: @hidden_tls = hidden thread_local global i32 > +// LINUX: define weak_odr hidden i32* @_ZTW11default_tls() > +// LINUX: define weak_odr hidden i32* @_ZTW10hidden_tls() > +// > +// DARWIN: @default_tls = internal thread_local global i32 > +// DARWIN: @hidden_tls = internal thread_local global i32 > +// DARWIN: define cxx_fast_tlscc i32* @_ZTW11default_tls() > +// DARWIN: define hidden cxx_fast_tlscc i32* @_ZTW10hidden_tls() > + > +__attribute__((visibility("default"))) thread_local int default_tls; > +__attribute__((visibility("hidden"))) thread_local int hidden_tls; > > Modified: cfe/trunk/test/CodeGenCXX/cxx11-thread-local.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx11-thread-local.cpp?rev=351457&r1=351456&r2=351457&view=diff > ============================================================================== > --- cfe/trunk/test/CodeGenCXX/cxx11-thread-local.cpp (original) > +++ cfe/trunk/test/CodeGenCXX/cxx11-thread-local.cpp Thu Jan 17 09:53:45 2019 > @@ -318,7 +318,7 @@ void set_anon_i() { > // CHECK-NOT: call void @[[V_M_INIT]]() > > > -// LIUNX: define weak_odr hidden i32* @_ZTW1a() { > +// LINUX: define weak_odr hidden i32* @_ZTW1a() > // DARWIN: define cxx_fast_tlscc i32* @_ZTW1a() > // LINUX: call void @_ZTH1a() > // DARWIN: call cxx_fast_tlscc void @_ZTH1a() > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits