From 095ed0554f9121a726b306f6ceb5bf3cf65f21e5 Mon Sep 17 00:00:00 2001 From: Thomas Anderson Date: Wed, 30 Jan 2019 19:07:30 +0000 Subject: [libc++] Don't define exception destructors when using vcruntime Exception destructors are provided by vcruntime. Fixes link errors like: lld-link: error: duplicate symbol: "public: virtual __cdecl std::invalid_argument::~invalid_argument(void)" (??1invalid_argument@std@@UEAA@XZ) in stdexcept.obj and in libcpmt.lib(xthrow.obj) lld-link: error: duplicate symbol: "public: virtual __cdecl std::length_error::~length_error(void)" (??1length_error@std@@UEAA@XZ) in stdexcept.obj and in libcpmt.lib(xthrow.obj) lld-link: error: duplicate symbol: "public: virtual __cdecl std::out_of_range::~out_of_range(void)" (??1out_of_range@std@@UEAA@XZ) in stdexcept.obj and in libcpmt.lib(xthrow.obj) lld-link: error: duplicate symbol: "public: virtual __cdecl std::overflow_error::~overflow_error(void)" (??1overflow_error@std@@UEAA@XZ) in stdexcept.obj and in libcpmt.lib(xthrow.obj) Differential Revision: https://reviews.llvm.org/D57425 llvm-svn: 352646 --- libcxx/src/stdexcept.cpp | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) (limited to 'libcxx/src/stdexcept.cpp') diff --git a/libcxx/src/stdexcept.cpp b/libcxx/src/stdexcept.cpp index 6ae35fe..179c250 100644 --- a/libcxx/src/stdexcept.cpp +++ b/libcxx/src/stdexcept.cpp @@ -43,20 +43,6 @@ logic_error::operator=(const logic_error& le) _NOEXCEPT return *this; } -#if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX) - -logic_error::~logic_error() _NOEXCEPT -{ -} - -const char* -logic_error::what() const _NOEXCEPT -{ - return __imp_.c_str(); -} - -#endif - runtime_error::runtime_error(const string& msg) : __imp_(msg.c_str()) { } @@ -79,8 +65,10 @@ runtime_error::operator=(const runtime_error& le) _NOEXCEPT #if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX) -runtime_error::~runtime_error() _NOEXCEPT +const char* +logic_error::what() const _NOEXCEPT { + return __imp_.c_str(); } const char* @@ -89,15 +77,20 @@ runtime_error::what() const _NOEXCEPT return __imp_.c_str(); } +#if !defined(_LIBCPP_ABI_MICROSOFT) || defined(_LIBCPP_NO_VCRUNTIME) + +logic_error::~logic_error() _NOEXCEPT {} domain_error::~domain_error() _NOEXCEPT {} invalid_argument::~invalid_argument() _NOEXCEPT {} length_error::~length_error() _NOEXCEPT {} out_of_range::~out_of_range() _NOEXCEPT {} +runtime_error::~runtime_error() _NOEXCEPT {} range_error::~range_error() _NOEXCEPT {} overflow_error::~overflow_error() _NOEXCEPT {} underflow_error::~underflow_error() _NOEXCEPT {} #endif +#endif } // std -- cgit v1.1