xref: /llvm-project/libcxx/src/support/runtime/stdexcept_default.ipp (revision 9783f28cbb155e4a8d49c12e1c60ce14dcfaf0c7)
1eb8650a7SLouis Dionne//===----------------------------------------------------------------------===//
22710d8e1SEric Fiselier//
32710d8e1SEric Fiselier// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42710d8e1SEric Fiselier// See https://llvm.org/LICENSE.txt for license information.
52710d8e1SEric Fiselier// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62710d8e1SEric Fiselier//
72710d8e1SEric Fiselier//===----------------------------------------------------------------------===//
82710d8e1SEric Fiselier
92710d8e1SEric Fiselier#include "../../include/refstring.h"
102710d8e1SEric Fiselier
112710d8e1SEric Fiselier/* For _LIBCPPABI_VERSION */
12*9783f28cSLouis Dionne#if !defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY) && (defined(LIBCXX_BUILDING_LIBCXXABI) || defined(LIBCXXRT))
132710d8e1SEric Fiselier#  include <cxxabi.h>
142710d8e1SEric Fiselier#endif
152710d8e1SEric Fiselier
162710d8e1SEric Fiselierstatic_assert(sizeof(std::__libcpp_refstring) == sizeof(const char*), "");
172710d8e1SEric Fiselier
182710d8e1SEric Fiseliernamespace std // purposefully not using versioning namespace
192710d8e1SEric Fiselier{
202710d8e1SEric Fiselier
212710d8e1SEric Fiselierlogic_error::logic_error(const string& msg) : __imp_(msg.c_str()) {}
222710d8e1SEric Fiselier
232710d8e1SEric Fiselierlogic_error::logic_error(const char* msg) : __imp_(msg) {}
242710d8e1SEric Fiselier
255601305fSLouis Dionnelogic_error::logic_error(const logic_error& le) noexcept : __imp_(le.__imp_) {}
262710d8e1SEric Fiselier
275601305fSLouis Dionnelogic_error& logic_error::operator=(const logic_error& le) noexcept {
282710d8e1SEric Fiselier  __imp_ = le.__imp_;
292710d8e1SEric Fiselier  return *this;
302710d8e1SEric Fiselier}
312710d8e1SEric Fiselier
322710d8e1SEric Fiselierruntime_error::runtime_error(const string& msg) : __imp_(msg.c_str()) {}
332710d8e1SEric Fiselier
342710d8e1SEric Fiselierruntime_error::runtime_error(const char* msg) : __imp_(msg) {}
352710d8e1SEric Fiselier
36*9783f28cSLouis Dionneruntime_error::runtime_error(const runtime_error& re) noexcept : __imp_(re.__imp_) {}
372710d8e1SEric Fiselier
385601305fSLouis Dionneruntime_error& runtime_error::operator=(const runtime_error& re) noexcept {
392710d8e1SEric Fiselier  __imp_ = re.__imp_;
402710d8e1SEric Fiselier  return *this;
412710d8e1SEric Fiselier}
422710d8e1SEric Fiselier
432710d8e1SEric Fiselier#if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX)
442710d8e1SEric Fiselier
455601305fSLouis Dionneconst char* logic_error::what() const noexcept { return __imp_.c_str(); }
462710d8e1SEric Fiselier
475601305fSLouis Dionneconst char* runtime_error::what() const noexcept { return __imp_.c_str(); }
482710d8e1SEric Fiselier
495601305fSLouis Dionnelogic_error::~logic_error() noexcept {}
505601305fSLouis Dionnedomain_error::~domain_error() noexcept {}
515601305fSLouis Dionneinvalid_argument::~invalid_argument() noexcept {}
525601305fSLouis Dionnelength_error::~length_error() noexcept {}
535601305fSLouis Dionneout_of_range::~out_of_range() noexcept {}
542710d8e1SEric Fiselier
555601305fSLouis Dionneruntime_error::~runtime_error() noexcept {}
565601305fSLouis Dionnerange_error::~range_error() noexcept {}
575601305fSLouis Dionneoverflow_error::~overflow_error() noexcept {}
585601305fSLouis Dionneunderflow_error::~underflow_error() noexcept {}
592710d8e1SEric Fiselier
602710d8e1SEric Fiselier#endif
612710d8e1SEric Fiselier
622710d8e1SEric Fiselier} // namespace std
63