[libcxx] r283620 - Fix PR30642 - libc++ leaks always-visible symbols into programs

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 7 16:08:00 PDT 2016


Author: ericwf
Date: Fri Oct  7 18:07:59 2016
New Revision: 283620

URL: http://llvm.org/viewvc/llvm-project?rev=283620&view=rev
Log:
Fix PR30642 -  libc++ leaks always-visible symbols into programs

This was caused by r281673, specifically changing `_LIBCPP_EXTERN_TEMPLATE_TYPE_VIS`
from `__attribute__((__type_visibility__("default")))` to
`__attribute__((__visibility("default")))`.

I made that change because I thought the external instantiations needed
their members to have default visibility. However since libc++ never builds
with -fvisibility=hidden this appears not to be needed. Instead this change
caused previously hidden inline methods to become un-hidden, which is a regression.

This patch reverts the problematic change and fixes PR30642.

Modified:
    libcxx/trunk/include/__config

Modified: libcxx/trunk/include/__config
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=283620&r1=283619&r2=283620&view=diff
==============================================================================
--- libcxx/trunk/include/__config (original)
+++ libcxx/trunk/include/__config Fri Oct  7 18:07:59 2016
@@ -589,7 +589,7 @@ namespace std {
 
 #ifndef _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS
 #  if __has_attribute(__type_visibility__)
-#    define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __attribute__ ((__visibility__("default")))
+#    define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __attribute__ ((__type_visibility__("default")))
 #  else
 #    define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS
 #  endif




More information about the cfe-commits mailing list