diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index cae9dd93bc5592..d6ab7b3567b9b0 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1391,6 +1391,10 @@ void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, if (!D) return; + // Set visibility for definitions, and for declarations if requested globally + // or set explicitly. + LinkageInfo LV = D->getLinkageAndVisibility(); + // OpenMP declare target variables must be visible to the host so they can // be registered. We require protected visibility unless the variable has // the DT_nohost modifier and does not need to be registered. @@ -1398,14 +1402,12 @@ void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, Context.getLangOpts().OpenMPIsTargetDevice && isa(D) && D->hasAttr() && D->getAttr()->getDevType() != - OMPDeclareTargetDeclAttr::DT_NoHost) { + OMPDeclareTargetDeclAttr::DT_NoHost && + LV.getVisibility() == HiddenVisibility) { GV->setVisibility(llvm::GlobalValue::ProtectedVisibility); return; } - // Set visibility for definitions, and for declarations if requested globally - // or set explicitly. - LinkageInfo LV = D->getLinkageAndVisibility(); if (GV->hasDLLExportStorageClass() || GV->hasDLLImportStorageClass()) { // Reject incompatible dlllstorage and visibility annotations. if (!LV.isVisibilityExplicit()) diff --git a/clang/test/OpenMP/declare_target_codegen.cpp b/clang/test/OpenMP/declare_target_codegen.cpp index 225695feae9515..71c742198af6bf 100644 --- a/clang/test/OpenMP/declare_target_codegen.cpp +++ b/clang/test/OpenMP/declare_target_codegen.cpp @@ -31,7 +31,7 @@ // CHECK-DAG: @dy = {{protected | }}global i32 0, // CHECK-DAG: @bbb = {{protected | }}global i32 0, // CHECK-DAG: weak constant %struct.__tgt_offload_entry { ptr @bbb, -// CHECK-DAG: @ccc = external {{protected | }}global i32, +// CHECK-DAG: @ccc = external global i32, // CHECK-DAG: @ddd = {{protected | }}global i32 0, // CHECK-DAG: @hhh_decl_tgt_ref_ptr = weak global ptr null // CHECK-DAG: @ggg_decl_tgt_ref_ptr = weak global ptr null diff --git a/clang/test/OpenMP/declare_target_constexpr_codegen.cpp b/clang/test/OpenMP/declare_target_constexpr_codegen.cpp index 2b256cd6a4c7f0..0acd98129394b8 100644 --- a/clang/test/OpenMP/declare_target_constexpr_codegen.cpp +++ b/clang/test/OpenMP/declare_target_constexpr_codegen.cpp @@ -16,7 +16,7 @@ class A { public: static constexpr double pi = 3.141592653589793116; //. -// CHECK: @_ZN1A2piE = linkonce_odr protected constant double 0x400921FB54442D18, comdat, align 8 +// CHECK: @_ZN1A2piE = linkonce_odr constant double 0x400921FB54442D18, comdat, align 8 // CHECK: @_ZL9anotherPi = internal constant double 3.140000e+00, align 8 // CHECK: @llvm.compiler.used = appending global [2 x ptr] [ptr @"__ZN1A2piE$ref", ptr @"__ZL9anotherPi$ref"], section "llvm.metadata" //.