[PATCH] D28728: [libc++] Introduce _LIBCPP_EXTERN_VIS to fix __libcpp_debug_function link errors
Eric Fiselier via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Jan 14 03:04:53 PST 2017
EricWF created this revision.
EricWF added reviewers: smeenai, compnerd.
EricWF added a subscriber: cfe-commits.
On Windows tests that use `_LIBCPP_ASSERT` fail to link because the assertion handler function isn't correctly exported from the libc++ dylib. This patch fixes the dll import/export issues by introducing a new visibility macro `_LIBCPP_EXTERN_VIS` for use on external variables.
https://reviews.llvm.org/D28728
Files:
docs/DesignDocs/VisibilityMacros.rst
include/__config
include/__debug
Index: include/__debug
===================================================================
--- include/__debug
+++ include/__debug
@@ -74,7 +74,7 @@
/// __libcpp_debug_function - The handler function called when a _LIBCPP_ASSERT
/// fails.
-extern __libcpp_debug_function_type __libcpp_debug_function;
+extern _LIBCPP_EXTERN_VIS __libcpp_debug_function_type __libcpp_debug_function;
/// __libcpp_abort_debug_function - A debug handler that aborts when called.
_LIBCPP_NORETURN _LIBCPP_FUNC_VIS
Index: include/__config
===================================================================
--- include/__config
+++ include/__config
@@ -583,6 +583,7 @@
#define _LIBCPP_TYPE_VIS _LIBCPP_DLL_VIS
#define _LIBCPP_FUNC_VIS _LIBCPP_DLL_VIS
+#define _LIBCPP_EXTERN_VIS _LIBCPP_DLL_VIS
#define _LIBCPP_EXCEPTION_ABI _LIBCPP_DLL_VIS
#define _LIBCPP_HIDDEN
#define _LIBCPP_TEMPLATE_VIS
@@ -636,6 +637,10 @@
# define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS
#endif
+#ifndef _LIBCPP_EXTERN_VIS
+# define _LIBCPP_EXTERN_VIS
+#endif
+
#ifndef _LIBCPP_OVERRIDABLE_FUNC_VIS
# define _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_FUNC_VIS
#endif
Index: docs/DesignDocs/VisibilityMacros.rst
===================================================================
--- docs/DesignDocs/VisibilityMacros.rst
+++ docs/DesignDocs/VisibilityMacros.rst
@@ -22,6 +22,12 @@
Mark a symbol as being exported by the libc++ library. This attribute must
be applied to the declaration of all functions exported by the libc++ dylib.
+**_LIBCPP_EXTERN_VIS**
+ Mark a symbol as being exported by the libc++ library. This attribute may
+ only be applied to objects defined in the libc++ library. On Windows this
+ macro applies `dllimport`/`dllexport` to the symbol. On all other platforms
+ this macro has no effect.
+
**_LIBCPP_OVERRIDABLE_FUNC_VIS**
Mark a symbol as being exported by the libc++ library, but allow it to be
overridden locally. On non-Windows, this is equivalent to `_LIBCPP_FUNC_VIS`.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28728.84444.patch
Type: text/x-patch
Size: 2029 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170114/66b13978/attachment-0001.bin>
More information about the cfe-commits
mailing list