HomePhabricator

[libc++] Don't define operator new/delete when using vcruntime

Authored by thomasanderson on Jan 30 2019, 11:08 AM.

Description

[libc++] Don't define operator new/delete when using vcruntime

Fixes build errors on Windows without libc++abi of the form:

new(173,36):  error: redeclaration of 'operator delete' cannot add 'dllexport' attribute
_LIBCPP_OVERRIDABLE_FUNC_VIS void  operator delete(void* __p) _NOEXCEPT;
vcruntime_new.h(87,16):  note: previous declaration is here
void __CRTDECL operator delete(
new(205,70):  error: redefinition of 'operator new'
_LIBCPP_NODISCARD_AFTER_CXX17 inline _LIBCPP_INLINE_VISIBILITY void* operator new  (std::size_t, void* __p) _NOEXCEPT {return __p;}
vcruntime_new.h(184,28):  note: previous definition is here
    inline void* __CRTDECL operator new(size_t _Size, _Writable_bytes_(_Size) void* _Where) noexcept
new(206,70):  error: redefinition of 'operator new[]'
_LIBCPP_NODISCARD_AFTER_CXX17 inline _LIBCPP_INLINE_VISIBILITY void* operator new[](std::size_t, void* __p) _NOEXCEPT {return __p;}
vcruntime_new.h(199,28):  note: previous definition is here
    inline void* __CRTDECL operator new[](size_t _Size,
new(207,40):  error: redefinition of 'operator delete'
inline _LIBCPP_INLINE_VISIBILITY void  operator delete  (void*, void*) _NOEXCEPT {}
vcruntime_new.h(190,27):  note: previous definition is here
    inline void __CRTDECL operator delete(void*, void*) noexcept
new(208,40):  error: redefinition of 'operator delete[]'
inline _LIBCPP_INLINE_VISIBILITY void  operator delete[](void*, void*) _NOEXCEPT {}
vcruntime_new.h(206,27):  note: previous definition is here
    inline void __CRTDECL operator delete[](void*, void*) noexcept

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

llvm-svn: 352647