[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
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 095ed0554f9121a726b306f6ceb5bf3cf65f21e5
diff --git a/src/stdexcept.cpp b/src/stdexcept.cpp
index 6ae35fe..179c250 100644
--- a/src/stdexcept.cpp
+++ b/src/stdexcept.cpp
@@ -43,20 +43,6 @@
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 @@
#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 @@
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