]> granicus.if.org Git - clang/commitdiff
Consider visibility attributes in namespaces as being explicit. I.e., they
authorRafael Espindola <rafael.espindola@gmail.com>
Sun, 1 Jan 2012 18:06:40 +0000 (18:06 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sun, 1 Jan 2012 18:06:40 +0000 (18:06 +0000)
take precedence over command line options. Fixes PR10113.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147405 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 842ce0f7804616de06dd4ab0fb8cb5654fbf65d1..b4a4eb1d13e3063b1c10763aef568d0c7e205d4b 100644 (file)
@@ -300,7 +300,7 @@ static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D, LVFlags F) {
         const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(DC);
         if (!ND) continue;
         if (llvm::Optional<Visibility> Vis = ND->getExplicitVisibility()) {
-          LV.setVisibility(*Vis, false);
+          LV.setVisibility(*Vis, true);
           F.ConsiderGlobalVisibility = false;
           break;
         }
index 0da55c63d63db13c859d7efdf2726d1c2b8c1128..ce1e8fd9d98b2df9b7c967cbaf4638543e39b881 100644 (file)
@@ -454,3 +454,15 @@ namespace test22 {
   // CHECK-HIDDEN: declare void @_ZN6test221BINS_2A2EE3fooEv()
   // CHECK-HIDDEN: define linkonce_odr hidden void @_ZN6test221BINS_2A2EE3barEv()
 }
+
+namespace PR10113 {
+  namespace foo __attribute__ ((__visibility__ ("default"))) {
+    template<typename T>
+      class bar {
+      void zed() {}
+    };
+  }
+  template class foo::bar<char>;
+  // CHECK: define weak_odr void @_ZN7PR101133foo3barIcE3zedEv
+  // CHECK-HIDDEN: define weak_odr void @_ZN7PR101133foo3barIcE3zedEv
+}