1*eb8650a7SLouis 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 */
122710d8e1SEric Fiselier#if !defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY) &&                           \
13d524fe5bSLouis Dionne    (defined(LIBCXX_BUILDING_LIBCXXABI) || defined(LIBCXXRT))
142710d8e1SEric Fiselier#include <cxxabi.h>
152710d8e1SEric Fiselier#endif
162710d8e1SEric Fiselier
172710d8e1SEric Fiselierstatic_assert(sizeof(std::__libcpp_refstring) == sizeof(const char*), "");
182710d8e1SEric Fiselier
192710d8e1SEric Fiseliernamespace std // purposefully not using versioning namespace
202710d8e1SEric Fiselier{
212710d8e1SEric Fiselier
222710d8e1SEric Fiselierlogic_error::logic_error(const string& msg) : __imp_(msg.c_str()) {}
232710d8e1SEric Fiselier
242710d8e1SEric Fiselierlogic_error::logic_error(const char* msg) : __imp_(msg) {}
252710d8e1SEric Fiselier
265601305fSLouis Dionnelogic_error::logic_error(const logic_error& le) noexcept : __imp_(le.__imp_) {}
272710d8e1SEric Fiselier
285601305fSLouis Dionnelogic_error& logic_error::operator=(const logic_error& le) noexcept {
292710d8e1SEric Fiselier  __imp_ = le.__imp_;
302710d8e1SEric Fiselier  return *this;
312710d8e1SEric Fiselier}
322710d8e1SEric Fiselier
332710d8e1SEric Fiselierruntime_error::runtime_error(const string& msg) : __imp_(msg.c_str()) {}
342710d8e1SEric Fiselier
352710d8e1SEric Fiselierruntime_error::runtime_error(const char* msg) : __imp_(msg) {}
362710d8e1SEric Fiselier
375601305fSLouis Dionneruntime_error::runtime_error(const runtime_error& re) noexcept
382710d8e1SEric Fiselier    : __imp_(re.__imp_) {}
392710d8e1SEric Fiselier
405601305fSLouis Dionneruntime_error& runtime_error::operator=(const runtime_error& re) noexcept {
412710d8e1SEric Fiselier  __imp_ = re.__imp_;
422710d8e1SEric Fiselier  return *this;
432710d8e1SEric Fiselier}
442710d8e1SEric Fiselier
452710d8e1SEric Fiselier#if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX)
462710d8e1SEric Fiselier
475601305fSLouis Dionneconst char* logic_error::what() const noexcept { return __imp_.c_str(); }
482710d8e1SEric Fiselier
495601305fSLouis Dionneconst char* runtime_error::what() const noexcept { return __imp_.c_str(); }
502710d8e1SEric Fiselier
515601305fSLouis Dionnelogic_error::~logic_error() noexcept {}
525601305fSLouis Dionnedomain_error::~domain_error() noexcept {}
535601305fSLouis Dionneinvalid_argument::~invalid_argument() noexcept {}
545601305fSLouis Dionnelength_error::~length_error() noexcept {}
555601305fSLouis Dionneout_of_range::~out_of_range() noexcept {}
562710d8e1SEric Fiselier
575601305fSLouis Dionneruntime_error::~runtime_error() noexcept {}
585601305fSLouis Dionnerange_error::~range_error() noexcept {}
595601305fSLouis Dionneoverflow_error::~overflow_error() noexcept {}
605601305fSLouis Dionneunderflow_error::~underflow_error() noexcept {}
612710d8e1SEric Fiselier
622710d8e1SEric Fiselier#endif
632710d8e1SEric Fiselier
642710d8e1SEric Fiselier} // namespace std
65