Skip to content

Commit

Permalink
[libc++] Don't define exception destructors when using vcruntime
Browse files Browse the repository at this point in the history
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
  • Loading branch information
tanderson-google committed Jan 30, 2019
1 parent 89e4dcb commit 095ed05
Showing 1 changed file with 8 additions and 15 deletions.
23 changes: 8 additions & 15 deletions libcxx/src/stdexcept.cpp
Expand Up @@ -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())
{
}
Expand All @@ -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*
Expand All @@ -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

0 comments on commit 095ed05

Please sign in to comment.