diff options
| author | Reid Kleckner <rnk@google.com> | 2017-02-13 18:49:21 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2017-02-13 18:49:21 +0000 |
| commit | 9de921470dd8531d9ad7b4b0b4f7c3bec6473185 (patch) | |
| tree | 1d86dbe768daad8bc065a977186cf4bd5a029d21 | |
| parent | 904c5ed558b8e2eafde445730532bfcae18d613d (diff) | |
| download | bcm5719-llvm-9de921470dd8531d9ad7b4b0b4f7c3bec6473185.tar.gz bcm5719-llvm-9de921470dd8531d9ad7b4b0b4f7c3bec6473185.zip | |
[CodeGen] Treat auto-generated __dso_handle symbol as HiddenVisibility
Fixes https://bugs.llvm.org/show_bug.cgi?id=31932
Based on a patch by Roland McGrath
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D29843
llvm-svn: 294978
| -rw-r--r-- | clang/lib/CodeGen/ItaniumCXXABI.cpp | 4 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/global-init.cpp | 2 | ||||
| -rw-r--r-- | clang/test/OpenMP/threadprivate_codegen.cpp | 2 |
3 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index 74aabeb253f..6a5fd1916b9 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -2162,7 +2162,9 @@ static void emitGlobalDtorWithCXAAtExit(CodeGenFunction &CGF, // Create a variable that binds the atexit to this shared object. llvm::Constant *handle = - CGF.CGM.CreateRuntimeVariable(CGF.Int8Ty, "__dso_handle"); + CGF.CGM.CreateRuntimeVariable(CGF.Int8Ty, "__dso_handle"); + auto *GV = cast<llvm::GlobalValue>(handle->stripPointerCasts()); + GV->setVisibility(llvm::GlobalValue::HiddenVisibility); llvm::Value *args[] = { llvm::ConstantExpr::getBitCast(dtor, dtorTy), diff --git a/clang/test/CodeGenCXX/global-init.cpp b/clang/test/CodeGenCXX/global-init.cpp index 291b43cac0a..f96e6032ff5 100644 --- a/clang/test/CodeGenCXX/global-init.cpp +++ b/clang/test/CodeGenCXX/global-init.cpp @@ -15,7 +15,7 @@ struct C { void *field; }; struct D { ~D(); }; -// CHECK: @__dso_handle = external global i8 +// CHECK: @__dso_handle = external hidden global i8 // CHECK: @c = global %struct.C zeroinitializer, align 8 // PR6205: The casts should not require global initializers diff --git a/clang/test/OpenMP/threadprivate_codegen.cpp b/clang/test/OpenMP/threadprivate_codegen.cpp index 318415761ac..3785b70c19b 100644 --- a/clang/test/OpenMP/threadprivate_codegen.cpp +++ b/clang/test/OpenMP/threadprivate_codegen.cpp @@ -176,7 +176,7 @@ struct S5 { // CHECK-TLS-DAG: [[ST_S4_ST:@.+]] = linkonce_odr thread_local global %struct.S4 zeroinitializer // CHECK-TLS-DAG: [[ST_S4_ST_GUARD:@_ZGVN2STI2S4E2stE]] = linkonce_odr thread_local global i64 0 // CHECK-TLS-DAG: @__tls_guard = internal thread_local global i8 0 -// CHECK-TLS-DAG: @__dso_handle = external global i8 +// CHECK-TLS-DAG: @__dso_handle = external hidden global i8 // CHECK-TLS-DAG: [[GS1_TLS_INIT:@_ZTHL3gs1]] = internal alias void (), void ()* @__tls_init // CHECK-TLS-DAG: [[ARR_X_TLS_INIT:@_ZTH5arr_x]] = alias void (), void ()* @__tls_init |

