[PATCH] D35388: [libc++] Give extern templates default visibility on gcc
Shoaib Meenai via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 13 15:06:31 PDT 2017
smeenai created this revision.
Contrary to the current visibility macro documentation, it appears that
gcc does handle visibility attribute on extern templates correctly, e.g.
https://godbolt.org/g/EejuV7. We need this so that extern template
instantiations of classes not marked _LIBCPP_TEMPLATE_VIS (e.g.
__vector_base_common) are correctly exported with gcc when building with
hidden visibility.
https://reviews.llvm.org/D35388
Files:
docs/DesignDocs/VisibilityMacros.rst
include/__config
Index: include/__config
===================================================================
--- include/__config
+++ include/__config
@@ -708,7 +708,7 @@
#endif
#ifndef _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS
-# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) && __has_attribute(__type_visibility__)
+# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS)
# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __attribute__ ((__visibility__("default")))
# else
# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS
Index: docs/DesignDocs/VisibilityMacros.rst
===================================================================
--- docs/DesignDocs/VisibilityMacros.rst
+++ docs/DesignDocs/VisibilityMacros.rst
@@ -83,12 +83,6 @@
specified on the primary template and to export the member functions produced
by the explicit instantiation in the dylib.
- **GCC Behavior**: GCC ignores visibility attributes applied the type in
- extern template declarations and applying an attribute results in a warning.
- However since `_LIBCPP_TEMPLATE_VIS` is the same as
- `__attribute__((visibility("default"))` the visibility is already correct.
- The macro has an empty definition with GCC.
-
**Windows Behavior**: `extern template` and `dllexport` are fundamentally
incompatible *on a class template* on Windows; the former suppresses
instantiation, while the latter forces it. Specifying both on the same
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D35388.106545.patch
Type: text/x-patch
Size: 1406 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170713/ee4fe204/attachment.bin>
More information about the cfe-commits
mailing list