1e78f53d1SNikolas Klauser// -*- C++ -*- 2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 3e78f53d1SNikolas Klauser// 4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information. 6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7e78f53d1SNikolas Klauser// 8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 9e78f53d1SNikolas Klauser 10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_STDEXCEPT 11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_STDEXCEPT 12e78f53d1SNikolas Klauser 13e78f53d1SNikolas Klauser/* 14e78f53d1SNikolas Klauser stdexcept synopsis 15e78f53d1SNikolas Klauser 16e78f53d1SNikolas Klausernamespace std 17e78f53d1SNikolas Klauser{ 18e78f53d1SNikolas Klauser 19e78f53d1SNikolas Klauserclass logic_error; 20e78f53d1SNikolas Klauserclass domain_error; 21e78f53d1SNikolas Klauserclass invalid_argument; 22e78f53d1SNikolas Klauserclass length_error; 23e78f53d1SNikolas Klauserclass out_of_range; 24e78f53d1SNikolas Klauserclass runtime_error; 25e78f53d1SNikolas Klauserclass range_error; 26e78f53d1SNikolas Klauserclass overflow_error; 27e78f53d1SNikolas Klauserclass underflow_error; 28e78f53d1SNikolas Klauser 29e78f53d1SNikolas Klauserfor each class xxx_error: 30e78f53d1SNikolas Klauser 31e78f53d1SNikolas Klauserclass xxx_error : public exception // at least indirectly 32e78f53d1SNikolas Klauser{ 33e78f53d1SNikolas Klauserpublic: 34e78f53d1SNikolas Klauser explicit xxx_error(const string& what_arg); 35e78f53d1SNikolas Klauser explicit xxx_error(const char* what_arg); 36e78f53d1SNikolas Klauser 37e78f53d1SNikolas Klauser virtual const char* what() const noexcept // returns what_arg 38e78f53d1SNikolas Klauser}; 39e78f53d1SNikolas Klauser 40e78f53d1SNikolas Klauser} // std 41e78f53d1SNikolas Klauser 42e78f53d1SNikolas Klauser*/ 43e78f53d1SNikolas Klauser 4473fbae83SNikolas Klauser#include <__cxx03/__config> 4573fbae83SNikolas Klauser#include <__cxx03/__exception/exception.h> 4673fbae83SNikolas Klauser#include <__cxx03/__fwd/string.h> 4773fbae83SNikolas Klauser#include <__cxx03/__verbose_abort> 48e78f53d1SNikolas Klauser 49e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 50e78f53d1SNikolas Klauser# pragma GCC system_header 51e78f53d1SNikolas Klauser#endif 52e78f53d1SNikolas Klauser 53e78f53d1SNikolas Klauser_LIBCPP_BEGIN_NAMESPACE_STD 54e78f53d1SNikolas Klauser 55e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 56e78f53d1SNikolas Klauserclass _LIBCPP_HIDDEN __libcpp_refstring { 57e78f53d1SNikolas Klauser const char* __imp_; 58e78f53d1SNikolas Klauser 59e78f53d1SNikolas Klauser bool __uses_refcount() const; 60e78f53d1SNikolas Klauser 61e78f53d1SNikolas Klauserpublic: 62e78f53d1SNikolas Klauser explicit __libcpp_refstring(const char* __msg); 63e78f53d1SNikolas Klauser __libcpp_refstring(const __libcpp_refstring& __s) _NOEXCEPT; 64e78f53d1SNikolas Klauser __libcpp_refstring& operator=(const __libcpp_refstring& __s) _NOEXCEPT; 65e78f53d1SNikolas Klauser ~__libcpp_refstring(); 66e78f53d1SNikolas Klauser 67e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI const char* c_str() const _NOEXCEPT { return __imp_; } 68e78f53d1SNikolas Klauser}; 69e78f53d1SNikolas Klauser#endif // !_LIBCPP_ABI_VCRUNTIME 70e78f53d1SNikolas Klauser 71e78f53d1SNikolas Klauser_LIBCPP_END_NAMESPACE_STD 72e78f53d1SNikolas Klauser 73e78f53d1SNikolas Klausernamespace std // purposefully not using versioning namespace 74e78f53d1SNikolas Klauser{ 75e78f53d1SNikolas Klauser 76e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI logic_error : public exception { 77e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 78e78f53d1SNikolas Klauser 79e78f53d1SNikolas Klauserprivate: 80e78f53d1SNikolas Klauser std::__libcpp_refstring __imp_; 81e78f53d1SNikolas Klauser 82e78f53d1SNikolas Klauserpublic: 83e78f53d1SNikolas Klauser explicit logic_error(const string&); 84e78f53d1SNikolas Klauser explicit logic_error(const char*); 85e78f53d1SNikolas Klauser 86e78f53d1SNikolas Klauser logic_error(const logic_error&) _NOEXCEPT; 87e78f53d1SNikolas Klauser logic_error& operator=(const logic_error&) _NOEXCEPT; 88e78f53d1SNikolas Klauser 89e78f53d1SNikolas Klauser ~logic_error() _NOEXCEPT override; 90e78f53d1SNikolas Klauser 91e78f53d1SNikolas Klauser const char* what() const _NOEXCEPT override; 92e78f53d1SNikolas Klauser#else 93e78f53d1SNikolas Klauser 94e78f53d1SNikolas Klauserpublic: 95e78f53d1SNikolas Klauser explicit logic_error(const std::string&); // Symbol uses versioned std::string 96e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit logic_error(const char* __s) : exception(__s) {} 97e78f53d1SNikolas Klauser#endif 98e78f53d1SNikolas Klauser}; 99e78f53d1SNikolas Klauser 100e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI runtime_error : public exception { 101e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 102e78f53d1SNikolas Klauser 103e78f53d1SNikolas Klauserprivate: 104e78f53d1SNikolas Klauser std::__libcpp_refstring __imp_; 105e78f53d1SNikolas Klauser 106e78f53d1SNikolas Klauserpublic: 107e78f53d1SNikolas Klauser explicit runtime_error(const string&); 108e78f53d1SNikolas Klauser explicit runtime_error(const char*); 109e78f53d1SNikolas Klauser 110e78f53d1SNikolas Klauser runtime_error(const runtime_error&) _NOEXCEPT; 111e78f53d1SNikolas Klauser runtime_error& operator=(const runtime_error&) _NOEXCEPT; 112e78f53d1SNikolas Klauser 113e78f53d1SNikolas Klauser ~runtime_error() _NOEXCEPT override; 114e78f53d1SNikolas Klauser 115e78f53d1SNikolas Klauser const char* what() const _NOEXCEPT override; 116e78f53d1SNikolas Klauser#else 117e78f53d1SNikolas Klauser 118e78f53d1SNikolas Klauserpublic: 119e78f53d1SNikolas Klauser explicit runtime_error(const std::string&); // Symbol uses versioned std::string 120e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit runtime_error(const char* __s) : exception(__s) {} 121e78f53d1SNikolas Klauser#endif // _LIBCPP_ABI_VCRUNTIME 122e78f53d1SNikolas Klauser}; 123e78f53d1SNikolas Klauser 124e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI domain_error : public logic_error { 125e78f53d1SNikolas Klauserpublic: 126e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit domain_error(const string& __s) : logic_error(__s) {} 127e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit domain_error(const char* __s) : logic_error(__s) {} 128e78f53d1SNikolas Klauser 129e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 130e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI domain_error(const domain_error&) _NOEXCEPT = default; 131e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI domain_error& operator=(const domain_error&) _NOEXCEPT = default; 132e78f53d1SNikolas Klauser ~domain_error() _NOEXCEPT override; 133e78f53d1SNikolas Klauser#endif 134e78f53d1SNikolas Klauser}; 135e78f53d1SNikolas Klauser 136e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI invalid_argument : public logic_error { 137e78f53d1SNikolas Klauserpublic: 138e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit invalid_argument(const string& __s) : logic_error(__s) {} 139e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit invalid_argument(const char* __s) : logic_error(__s) {} 140e78f53d1SNikolas Klauser 141e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 142e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI invalid_argument(const invalid_argument&) _NOEXCEPT = default; 143e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI invalid_argument& operator=(const invalid_argument&) _NOEXCEPT = default; 144e78f53d1SNikolas Klauser ~invalid_argument() _NOEXCEPT override; 145e78f53d1SNikolas Klauser#endif 146e78f53d1SNikolas Klauser}; 147e78f53d1SNikolas Klauser 148e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI length_error : public logic_error { 149e78f53d1SNikolas Klauserpublic: 150e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit length_error(const string& __s) : logic_error(__s) {} 151e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit length_error(const char* __s) : logic_error(__s) {} 152e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 153e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI length_error(const length_error&) _NOEXCEPT = default; 154e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI length_error& operator=(const length_error&) _NOEXCEPT = default; 155e78f53d1SNikolas Klauser ~length_error() _NOEXCEPT override; 156e78f53d1SNikolas Klauser#endif 157e78f53d1SNikolas Klauser}; 158e78f53d1SNikolas Klauser 159e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI out_of_range : public logic_error { 160e78f53d1SNikolas Klauserpublic: 161e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit out_of_range(const string& __s) : logic_error(__s) {} 162e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit out_of_range(const char* __s) : logic_error(__s) {} 163e78f53d1SNikolas Klauser 164e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 165e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI out_of_range(const out_of_range&) _NOEXCEPT = default; 166e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI out_of_range& operator=(const out_of_range&) _NOEXCEPT = default; 167e78f53d1SNikolas Klauser ~out_of_range() _NOEXCEPT override; 168e78f53d1SNikolas Klauser#endif 169e78f53d1SNikolas Klauser}; 170e78f53d1SNikolas Klauser 171e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI range_error : public runtime_error { 172e78f53d1SNikolas Klauserpublic: 173e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit range_error(const string& __s) : runtime_error(__s) {} 174e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit range_error(const char* __s) : runtime_error(__s) {} 175e78f53d1SNikolas Klauser 176e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 177e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI range_error(const range_error&) _NOEXCEPT = default; 178e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI range_error& operator=(const range_error&) _NOEXCEPT = default; 179e78f53d1SNikolas Klauser ~range_error() _NOEXCEPT override; 180e78f53d1SNikolas Klauser#endif 181e78f53d1SNikolas Klauser}; 182e78f53d1SNikolas Klauser 183e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI overflow_error : public runtime_error { 184e78f53d1SNikolas Klauserpublic: 185e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit overflow_error(const string& __s) : runtime_error(__s) {} 186e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit overflow_error(const char* __s) : runtime_error(__s) {} 187e78f53d1SNikolas Klauser 188e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 189e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI overflow_error(const overflow_error&) _NOEXCEPT = default; 190e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI overflow_error& operator=(const overflow_error&) _NOEXCEPT = default; 191e78f53d1SNikolas Klauser ~overflow_error() _NOEXCEPT override; 192e78f53d1SNikolas Klauser#endif 193e78f53d1SNikolas Klauser}; 194e78f53d1SNikolas Klauser 195e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI underflow_error : public runtime_error { 196e78f53d1SNikolas Klauserpublic: 197e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit underflow_error(const string& __s) : runtime_error(__s) {} 198e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit underflow_error(const char* __s) : runtime_error(__s) {} 199e78f53d1SNikolas Klauser 200e78f53d1SNikolas Klauser#ifndef _LIBCPP_ABI_VCRUNTIME 201e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI underflow_error(const underflow_error&) _NOEXCEPT = default; 202e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI underflow_error& operator=(const underflow_error&) _NOEXCEPT = default; 203e78f53d1SNikolas Klauser ~underflow_error() _NOEXCEPT override; 204e78f53d1SNikolas Klauser#endif 205e78f53d1SNikolas Klauser}; 206e78f53d1SNikolas Klauser 207e78f53d1SNikolas Klauser} // namespace std 208e78f53d1SNikolas Klauser 209e78f53d1SNikolas Klauser_LIBCPP_BEGIN_NAMESPACE_STD 210e78f53d1SNikolas Klauser 211e78f53d1SNikolas Klauser// in the dylib 212e78f53d1SNikolas Klauser_LIBCPP_NORETURN _LIBCPP_EXPORTED_FROM_ABI void __throw_runtime_error(const char*); 213e78f53d1SNikolas Klauser 214e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_logic_error(const char* __msg) { 215e78f53d1SNikolas Klauser#ifndef _LIBCPP_HAS_NO_EXCEPTIONS 216e78f53d1SNikolas Klauser throw logic_error(__msg); 217e78f53d1SNikolas Klauser#else 218e78f53d1SNikolas Klauser _LIBCPP_VERBOSE_ABORT("logic_error was thrown in -fno-exceptions mode with message \"%s\"", __msg); 219e78f53d1SNikolas Klauser#endif 220e78f53d1SNikolas Klauser} 221e78f53d1SNikolas Klauser 222e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_domain_error(const char* __msg) { 223e78f53d1SNikolas Klauser#ifndef _LIBCPP_HAS_NO_EXCEPTIONS 224e78f53d1SNikolas Klauser throw domain_error(__msg); 225e78f53d1SNikolas Klauser#else 226e78f53d1SNikolas Klauser _LIBCPP_VERBOSE_ABORT("domain_error was thrown in -fno-exceptions mode with message \"%s\"", __msg); 227e78f53d1SNikolas Klauser#endif 228e78f53d1SNikolas Klauser} 229e78f53d1SNikolas Klauser 230e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_invalid_argument(const char* __msg) { 231e78f53d1SNikolas Klauser#ifndef _LIBCPP_HAS_NO_EXCEPTIONS 232e78f53d1SNikolas Klauser throw invalid_argument(__msg); 233e78f53d1SNikolas Klauser#else 234e78f53d1SNikolas Klauser _LIBCPP_VERBOSE_ABORT("invalid_argument was thrown in -fno-exceptions mode with message \"%s\"", __msg); 235e78f53d1SNikolas Klauser#endif 236e78f53d1SNikolas Klauser} 237e78f53d1SNikolas Klauser 238e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_length_error(const char* __msg) { 239e78f53d1SNikolas Klauser#ifndef _LIBCPP_HAS_NO_EXCEPTIONS 240e78f53d1SNikolas Klauser throw length_error(__msg); 241e78f53d1SNikolas Klauser#else 242e78f53d1SNikolas Klauser _LIBCPP_VERBOSE_ABORT("length_error was thrown in -fno-exceptions mode with message \"%s\"", __msg); 243e78f53d1SNikolas Klauser#endif 244e78f53d1SNikolas Klauser} 245e78f53d1SNikolas Klauser 246e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_out_of_range(const char* __msg) { 247e78f53d1SNikolas Klauser#ifndef _LIBCPP_HAS_NO_EXCEPTIONS 248e78f53d1SNikolas Klauser throw out_of_range(__msg); 249e78f53d1SNikolas Klauser#else 250e78f53d1SNikolas Klauser _LIBCPP_VERBOSE_ABORT("out_of_range was thrown in -fno-exceptions mode with message \"%s\"", __msg); 251e78f53d1SNikolas Klauser#endif 252e78f53d1SNikolas Klauser} 253e78f53d1SNikolas Klauser 254e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_range_error(const char* __msg) { 255e78f53d1SNikolas Klauser#ifndef _LIBCPP_HAS_NO_EXCEPTIONS 256e78f53d1SNikolas Klauser throw range_error(__msg); 257e78f53d1SNikolas Klauser#else 258e78f53d1SNikolas Klauser _LIBCPP_VERBOSE_ABORT("range_error was thrown in -fno-exceptions mode with message \"%s\"", __msg); 259e78f53d1SNikolas Klauser#endif 260e78f53d1SNikolas Klauser} 261e78f53d1SNikolas Klauser 262e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_overflow_error(const char* __msg) { 263e78f53d1SNikolas Klauser#ifndef _LIBCPP_HAS_NO_EXCEPTIONS 264e78f53d1SNikolas Klauser throw overflow_error(__msg); 265e78f53d1SNikolas Klauser#else 266e78f53d1SNikolas Klauser _LIBCPP_VERBOSE_ABORT("overflow_error was thrown in -fno-exceptions mode with message \"%s\"", __msg); 267e78f53d1SNikolas Klauser#endif 268e78f53d1SNikolas Klauser} 269e78f53d1SNikolas Klauser 270e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_underflow_error(const char* __msg) { 271e78f53d1SNikolas Klauser#ifndef _LIBCPP_HAS_NO_EXCEPTIONS 272e78f53d1SNikolas Klauser throw underflow_error(__msg); 273e78f53d1SNikolas Klauser#else 274e78f53d1SNikolas Klauser _LIBCPP_VERBOSE_ABORT("underflow_error was thrown in -fno-exceptions mode with message \"%s\"", __msg); 275e78f53d1SNikolas Klauser#endif 276e78f53d1SNikolas Klauser} 277e78f53d1SNikolas Klauser 278e78f53d1SNikolas Klauser_LIBCPP_END_NAMESPACE_STD 279e78f53d1SNikolas Klauser 280e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 28173fbae83SNikolas Klauser# include <__cxx03/cstdlib> 28273fbae83SNikolas Klauser# include <__cxx03/exception> 28373fbae83SNikolas Klauser# include <__cxx03/iosfwd> 284e78f53d1SNikolas Klauser#endif 285e78f53d1SNikolas Klauser 286*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_STDEXCEPT 287