[cfe-commits] r155102 - in /cfe/trunk: include/clang/AST/Decl.h test/CodeGenCXX/visibility.cpp

Rafael Espindola rafael.espindola at gmail.com
Wed Apr 18 22:34:51 PDT 2012


Author: rafael
Date: Thu Apr 19 00:34:51 2012
New Revision: 155102

URL: http://llvm.org/viewvc/llvm-project?rev=155102&view=rev
Log:
In mergeVisibilityWithMin, let an implicit hidden symbol take precedence over
an explicit default one. This means that with -fvisibility hidden we
now produce a hidden symbol for

template <typename T>
class DEFAULT foo {
  void bar() {}
};
class zed {};
template class foo<zed>;

This matches the behaviour of gcc 4.7.

Modified:
    cfe/trunk/include/clang/AST/Decl.h
    cfe/trunk/test/CodeGenCXX/visibility.cpp

Modified: cfe/trunk/include/clang/AST/Decl.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=155102&r1=155101&r2=155102&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Decl.h (original)
+++ cfe/trunk/include/clang/AST/Decl.h Thu Apr 19 00:34:51 2012
@@ -281,9 +281,10 @@
       if (visibility() < V)
         return;
 
-      // If this visibility is explicit, keep it.
-      if (visibilityExplicit() && !E)
+      // Don't lose the explicit bit for nothing
+      if (visibility() == V && visibilityExplicit())
         return;
+
       setVisibility(V, E);
     }
     void mergeVisibility(LinkageInfo Other) {

Modified: cfe/trunk/test/CodeGenCXX/visibility.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/visibility.cpp?rev=155102&r1=155101&r2=155102&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/visibility.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/visibility.cpp Thu Apr 19 00:34:51 2012
@@ -510,7 +510,7 @@
   };
   template class foo::bar<zed>;
   // CHECK: define weak_odr void @_ZN7PR101133foo3barINS_3zedEE3zedEv
-  // CHECK-HIDDEN: define weak_odr void @_ZN7PR101133foo3barINS_3zedEE3zedEv
+  // CHECK-HIDDEN: define weak_odr hidden void @_ZN7PR101133foo3barINS_3zedEE3zedEv
 }
 
 namespace PR11690 {
@@ -541,7 +541,7 @@
   };
   template class foo::zed<baz>;
   // CHECK: define weak_odr void @_ZN9PR11690_23foo3zedINS_3bazENS0_3barEE3barEv
-  // CHECK-HIDDEN: define weak_odr void @_ZN9PR11690_23foo3zedINS_3bazENS0_3barEE3barEv
+  // CHECK-HIDDEN: define weak_odr hidden void @_ZN9PR11690_23foo3zedINS_3bazENS0_3barEE3barEv
 }
 
 namespace test23 {





More information about the cfe-commits mailing list