[libc++] Introduce _LIBCPP_EXTERN_VIS to fix __libcpp_debug_function link errors

Summary: 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.

Reviewers: compnerd, smeenai, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D28728

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292158 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Fiselier
2017-01-16 21:01:00 +00:00
parent bde2871b62
commit dae39608bb
3 changed files with 12 additions and 1 deletions

View File

@@ -22,6 +22,12 @@ Visibility Macros
Mark a symbol as being exported by the libc++ library. This attribute must 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. 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** **_LIBCPP_OVERRIDABLE_FUNC_VIS**
Mark a symbol as being exported by the libc++ library, but allow it to be 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`. overridden locally. On non-Windows, this is equivalent to `_LIBCPP_FUNC_VIS`.

View File

@@ -583,6 +583,7 @@ namespace std {
#define _LIBCPP_TYPE_VIS _LIBCPP_DLL_VIS #define _LIBCPP_TYPE_VIS _LIBCPP_DLL_VIS
#define _LIBCPP_FUNC_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_EXCEPTION_ABI _LIBCPP_DLL_VIS
#define _LIBCPP_HIDDEN #define _LIBCPP_HIDDEN
#define _LIBCPP_TEMPLATE_VIS #define _LIBCPP_TEMPLATE_VIS
@@ -636,6 +637,10 @@ namespace std {
# define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS # define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS
#endif #endif
#ifndef _LIBCPP_EXTERN_VIS
# define _LIBCPP_EXTERN_VIS
#endif
#ifndef _LIBCPP_OVERRIDABLE_FUNC_VIS #ifndef _LIBCPP_OVERRIDABLE_FUNC_VIS
# define _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_FUNC_VIS # define _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_FUNC_VIS
#endif #endif

View File

@@ -74,7 +74,7 @@ typedef void(*__libcpp_debug_function_type)(__libcpp_debug_info const&);
/// __libcpp_debug_function - The handler function called when a _LIBCPP_ASSERT /// __libcpp_debug_function - The handler function called when a _LIBCPP_ASSERT
/// fails. /// 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_abort_debug_function - A debug handler that aborts when called.
_LIBCPP_NORETURN _LIBCPP_FUNC_VIS _LIBCPP_NORETURN _LIBCPP_FUNC_VIS