diff options
author | Thomas Anderson <thomasanderson@google.com> | 2019-01-30 19:07:30 +0000 |
---|---|---|
committer | Thomas Anderson <thomasanderson@google.com> | 2019-01-30 19:07:30 +0000 |
commit | 095ed0554f9121a726b306f6ceb5bf3cf65f21e5 (patch) | |
tree | bfa2e4bce9897379adba1e8f94c6449017481eb5 /libcxx/src/stdexcept.cpp | |
parent | 89e4dcb4be63ae71c533abac0a05fec284898a56 (diff) | |
download | llvm-095ed0554f9121a726b306f6ceb5bf3cf65f21e5.zip llvm-095ed0554f9121a726b306f6ceb5bf3cf65f21e5.tar.gz llvm-095ed0554f9121a726b306f6ceb5bf3cf65f21e5.tar.bz2 |
[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
Diffstat (limited to 'libcxx/src/stdexcept.cpp')
-rw-r--r-- | libcxx/src/stdexcept.cpp | 23 |
1 files changed, 8 insertions, 15 deletions
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 |