forked from OSchip/llvm-project
[libc++] Clarify _LIBCPP_NEW_DELETE_VIS for Windows
Replace a stale reference to cxx_EXPORTS with _LIBCPP_BUILDING_LIBRARY, and clarify why the operator new and delete family of functions are marked dllexport when building but *not* dllimport when including the header externally. The new code is identical to the intent of the old code (and would be functionally equivalent were cxx_EXPORTS still defined when building libc++). The overall behavior is not ideal, since Microsoft's operator new and delete functions will get called instead of libc++'s, but I think consistently calling msvcrt's functions is better than either calling msvcrt's or libc++'s functions depending on header inclusion. Differential Revision: https://reviews.llvm.org/D25042 llvm-svn: 282644
This commit is contained in:
parent
40cbc27ff3
commit
3888eb66b0
|
@ -108,6 +108,19 @@ Visibility Macros
|
|||
versioning namespace. This allows throwing and catching some exception types
|
||||
between libc++ and libstdc++.
|
||||
|
||||
**_LIBCPP_NEW_DELETE_VIS**
|
||||
Mark a symbol as being exported by the libc++ library. This macro must be
|
||||
applied to all `operator new` and `operator delete` overloads.
|
||||
|
||||
**Windows Behavior**: When using the Microsoft CRT, all the `operator new` and
|
||||
`operator delete` overloads are defined statically in `msvcrt.lib`. Marking
|
||||
them as `dllimport` in the libc++ `<new>` header is therefore undesirable: if
|
||||
we were to mark them as `dllimport` and then link against libc++, source files
|
||||
which included `<new>` would end up linking against libc++'s `operator new`
|
||||
and `operator delete`, while source files which did not include `<new>` would
|
||||
end up linking against msvcrt's `operator new` and `operator delete`, which
|
||||
would be a confusing and potentially error-prone inconsistency.
|
||||
|
||||
Links
|
||||
=====
|
||||
|
||||
|
|
|
@ -125,8 +125,8 @@ _LIBCPP_FUNC_VIS new_handler get_new_handler() _NOEXCEPT;
|
|||
|
||||
} // std
|
||||
|
||||
#if defined(_WIN32) && !defined(cxx_EXPORTS)
|
||||
# define _LIBCPP_NEW_DELETE_VIS _LIBCPP_FUNC_VIS_ONLY
|
||||
#if defined(_LIBCPP_MSVCRT) && !defined(_LIBCPP_BUILDING_LIBRARY)
|
||||
# define _LIBCPP_NEW_DELETE_VIS
|
||||
#else
|
||||
# define _LIBCPP_NEW_DELETE_VIS _LIBCPP_FUNC_VIS
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue