r323361 - Don't create hidden dllimport global values.

Rafael Espindola via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 24 10:58:33 PST 2018


Author: rafael
Date: Wed Jan 24 10:58:32 2018
New Revision: 323361

URL: http://llvm.org/viewvc/llvm-project?rev=323361&view=rev
Log:
Don't create hidden dllimport global values.

Hidden visibility is almost the opposite of dllimport. We were
producing them before (dllimport wins in the existing llvm
implementation), but now the llvm verifier produces an error.

Added:
    cfe/trunk/test/CodeGenCXX/hidden-dllimport.cpp
Modified:
    cfe/trunk/lib/CodeGen/CodeGenModule.cpp

Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=323361&r1=323360&r2=323361&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Wed Jan 24 10:58:32 2018
@@ -694,6 +694,8 @@ llvm::ConstantInt *CodeGenModule::getSiz
 void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
                                         const NamedDecl *D,
                                         ForDefinition_t IsForDefinition) const {
+  if (GV->hasDLLImportStorageClass())
+    return;
   // Internal definitions always have default visibility.
   if (GV->hasLocalLinkage()) {
     GV->setVisibility(llvm::GlobalValue::DefaultVisibility);

Added: cfe/trunk/test/CodeGenCXX/hidden-dllimport.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/hidden-dllimport.cpp?rev=323361&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenCXX/hidden-dllimport.cpp (added)
+++ cfe/trunk/test/CodeGenCXX/hidden-dllimport.cpp Wed Jan 24 10:58:32 2018
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -emit-llvm -fvisibility-inlines-hidden -o - %s | FileCheck %s
+
+// We used to declare this hidden dllimport, which is contradictory.
+
+// CHECK: declare dllimport void @"\01?bar at foo@@QEAAXXZ"(%struct.foo*)
+
+struct __attribute__((dllimport)) foo {
+  void bar() {}
+};
+void zed(foo *p) { p->bar(); }




More information about the cfe-commits mailing list