]> granicus.if.org Git - clang/commitdiff
The type of a definition should not increase its visibility. Fixes PR12221.
authorRafael Espindola <rafael.espindola@gmail.com>
Sat, 10 Mar 2012 13:01:40 +0000 (13:01 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sat, 10 Mar 2012 13:01:40 +0000 (13:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152493 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/Decl.cpp
test/CodeGenCXX/visibility.cpp

index ded507ef8e3b38a0a2e2f99a7c070442e7c39dc6..0e2793490d95147cb3efb11c0d10d88726193c05 100644 (file)
@@ -335,8 +335,8 @@ static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D, LVFlags F) {
       LinkageInfo TypeLV = getLVForType(Var->getType());
       if (TypeLV.linkage() != ExternalLinkage)
         return LinkageInfo::uniqueExternal();
-      if (!LV.visibilityExplicit())
-        LV.mergeVisibility(TypeLV.visibility(), TypeLV.visibilityExplicit());
+      LV.mergeVisibilityWithMin(TypeLV.visibility(),
+                                TypeLV.visibilityExplicit());
     }
 
     if (Var->getStorageClass() == SC_PrivateExtern)
index 961b50844efbac5a23c2ee1b0ec2879eebe986f8..59fd7c26f0d5cf71b28a9ba0c8c250e62b37233e 100644 (file)
@@ -20,6 +20,14 @@ namespace test25 {
   // CHECK-HIDDEN: @_ZN6test251aE = hidden global
 }
 
+namespace test28 {
+  class DEFAULT foo {
+  };
+  foo myvec;
+  // CHECK: @_ZN6test285myvecE = global
+  // CHECK-HIDDEN: @_ZN6test285myvecE = hidden global
+}
+
 // CHECK: @_ZN5Test425VariableInHiddenNamespaceE = hidden global i32 10
 // CHECK: @_ZN5Test71aE = hidden global
 // CHECK: @_ZN5Test71bE = global