Author: rafael
Date: Sun Apr 22 10:31:59 2012
New Revision: 155316

URL: http://llvm.org/viewvc/llvm-project?rev=155316&view=rev
Log:
An attribute in a explicit template installation should take precedence over
the tempale arguments in deciding the visibility.

This agrees with gcc 4.7.

Found by trying to build chrome with component=shared_library with 155314
reverted.

Modified:
    cfe/trunk/lib/AST/Decl.cpp
    cfe/trunk/test/CodeGenCXX/visibility.cpp

Modified: cfe/trunk/lib/AST/Decl.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=155316&r1=155315&r2=155316&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Decl.cpp (original)
+++ cfe/trunk/lib/AST/Decl.cpp Sun Apr 22 10:31:59 2012
@@ -407,8 +407,8 @@
 
         // The arguments at which the template was instantiated.
         const TemplateArgumentList &TemplateArgs = spec->getTemplateArgs();
-        LV.mergeWithMin(getLVForTemplateArgumentList(TemplateArgs,
-                                                     OnlyTemplate));
+        LV.merge(getLVForTemplateArgumentList(TemplateArgs,
+                                              OnlyTemplate));
       }
     }
 

Modified: cfe/trunk/test/CodeGenCXX/visibility.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/visibility.cpp?rev=155316&r1=155315&r2=155316&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/visibility.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/visibility.cpp Sun Apr 22 10:31:59 2012
@@ -660,3 +660,16 @@
   // CHECK: define void @_ZN6test321A1B3bazEv
   // CHECK-HIDDEN: define void @_ZN6test321A1B3bazEv
 }
+
+namespace test33 {
+  template<typename T>
+  class foo {
+    void bar() {}
+    int a;
+  };
+  struct __attribute__((visibility("hidden"))) zed {
+  };
+  template class __attribute__((visibility("default"))) foo<zed>;
+  // CHECK: define weak_odr void @_ZN6test333fooINS_3zedEE3barEv
+  // CHECK-HIDDEN: define weak_odr void @_ZN6test333fooINS_3zedEE3barEv
+}


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to