teak-llvm/clang/test/CodeGenCXX/cxx11-thread-local-visibility.cpp
Vlad Tsyrklevich c93390b5c5 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

llvm-svn: 351457
2019-01-17 17:53:45 +00:00

18 lines
861 B
C++

// 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;