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