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