summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/docs/DesignDocs/VisibilityMacros.rst11
-rw-r--r--libcxx/include/__config6
-rw-r--r--libcxx/test/std/strings/basic.string/string.cons/dtor_noexcept.pass.cpp5
3 files changed, 11 insertions, 11 deletions
diff --git a/libcxx/docs/DesignDocs/VisibilityMacros.rst b/libcxx/docs/DesignDocs/VisibilityMacros.rst
index 67886e392ae..861cc04ac45 100644
--- a/libcxx/docs/DesignDocs/VisibilityMacros.rst
+++ b/libcxx/docs/DesignDocs/VisibilityMacros.rst
@@ -92,14 +92,13 @@ Visibility Macros
On all other platforms, this macro has an empty definition.
**_LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY**
- Mark a member function of a class template as hidden and inline except when
- building the libc++ library where it marks the symbol as being exported by
- the library.
+ Mark a member function of a class template as visible and always inline. This
+ macro should only be applied to member functions of class templates that are
+ externally instantiated. It is important that these symbols are not marked
+ as hidden as that will prevent the dylib definition from being found.
This macro is used to maintain ABI compatibility for symbols that have been
- historically exported by the libc++ library but are now marked inline. It
- should only be applied to member functions of class templates that are
- externally instantiated.
+ historically exported by the libc++ library but are now marked inline.
**_LIBCPP_EXCEPTION_ABI**
Mark the member functions, typeinfo, and vtable of the type as being exported
diff --git a/libcxx/include/__config b/libcxx/include/__config
index 5b3c6947c5d..572b01520c7 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -609,11 +609,7 @@ namespace std {
#endif
#ifndef _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
-# ifdef _LIBCPP_BUILDING_LIBRARY
-# define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __attribute__((__visibility__("default"), __always_inline__))
-# else
-# define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
-# endif
+# define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __attribute__((__visibility__("default"), __always_inline__))
#endif
#ifndef _LIBCPP_PREFERRED_OVERLOAD
diff --git a/libcxx/test/std/strings/basic.string/string.cons/dtor_noexcept.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/dtor_noexcept.pass.cpp
index 011fd54f95b..0c6362d9686 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/dtor_noexcept.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/dtor_noexcept.pass.cpp
@@ -27,6 +27,11 @@ struct some_alloc
~some_alloc() noexcept(false);
};
+// Test that it's possible to take the address of basic_string's destructors
+// by creating globals which will register their destructors with cxa_atexit.
+std::string s;
+std::wstring ws;
+
int main()
{
{
OpenPOWER on IntegriCloud