13e519524SHoward Hinnant// -*- C++ -*- 23e519524SHoward Hinnant//===--------------------------- stdexcept --------------------------------===// 33e519524SHoward Hinnant// 4*57b08b09SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*57b08b09SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 6*57b08b09SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 73e519524SHoward Hinnant// 83e519524SHoward Hinnant//===----------------------------------------------------------------------===// 93e519524SHoward Hinnant 103e519524SHoward Hinnant#ifndef _LIBCPP_STDEXCEPT 113e519524SHoward Hinnant#define _LIBCPP_STDEXCEPT 123e519524SHoward Hinnant 133e519524SHoward Hinnant/* 143e519524SHoward Hinnant stdexcept synopsis 153e519524SHoward Hinnant 163e519524SHoward Hinnantnamespace std 173e519524SHoward Hinnant{ 183e519524SHoward Hinnant 193e519524SHoward Hinnantclass logic_error; 203e519524SHoward Hinnant class domain_error; 213e519524SHoward Hinnant class invalid_argument; 223e519524SHoward Hinnant class length_error; 233e519524SHoward Hinnant class out_of_range; 243e519524SHoward Hinnantclass runtime_error; 253e519524SHoward Hinnant class range_error; 263e519524SHoward Hinnant class overflow_error; 273e519524SHoward Hinnant class underflow_error; 283e519524SHoward Hinnant 293e519524SHoward Hinnantfor each class xxx_error: 303e519524SHoward Hinnant 313e519524SHoward Hinnantclass xxx_error : public exception // at least indirectly 323e519524SHoward Hinnant{ 333e519524SHoward Hinnantpublic: 343e519524SHoward Hinnant explicit xxx_error(const string& what_arg); 35a62f2899SHoward Hinnant explicit xxx_error(const char* what_arg); 363e519524SHoward Hinnant 37a62f2899SHoward Hinnant virtual const char* what() const noexcept // returns what_arg 383e519524SHoward Hinnant}; 393e519524SHoward Hinnant 403e519524SHoward Hinnant} // std 413e519524SHoward Hinnant 423e519524SHoward Hinnant*/ 433e519524SHoward Hinnant 443e519524SHoward Hinnant#include <__config> 453e519524SHoward Hinnant#include <exception> 463e519524SHoward Hinnant#include <iosfwd> // for string forward decl 47b683ec20SEric Fiselier#ifdef _LIBCPP_NO_EXCEPTIONS 48b683ec20SEric Fiselier#include <cstdlib> 49b683ec20SEric Fiselier#endif 503e519524SHoward Hinnant 51073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 523e519524SHoward Hinnant#pragma GCC system_header 53073458b1SHoward Hinnant#endif 543e519524SHoward Hinnant 55a1fbf345SJoerg Sonnenberger_LIBCPP_BEGIN_NAMESPACE_STD 56a624409cSEric Fiselier 57a624409cSEric Fiselierclass _LIBCPP_HIDDEN __libcpp_refstring 58a624409cSEric Fiselier{ 5989dd1dd2SEric Fiselier const char* __imp_; 60a624409cSEric Fiselier 61a624409cSEric Fiselier bool __uses_refcount() const; 62a624409cSEric Fiselierpublic: 639ffacf3dSEric Fiselier explicit __libcpp_refstring(const char* __msg); 649ffacf3dSEric Fiselier __libcpp_refstring(const __libcpp_refstring& __s) _NOEXCEPT; 659ffacf3dSEric Fiselier __libcpp_refstring& operator=(const __libcpp_refstring& __s) _NOEXCEPT; 66a624409cSEric Fiselier ~__libcpp_refstring(); 67a624409cSEric Fiselier 68a624409cSEric Fiselier const char* c_str() const _NOEXCEPT {return __imp_;} 69a1fbf345SJoerg Sonnenberger}; 70a624409cSEric Fiselier 71a1fbf345SJoerg Sonnenberger_LIBCPP_END_NAMESPACE_STD 72a1fbf345SJoerg Sonnenberger 733e519524SHoward Hinnantnamespace std // purposefully not using versioning namespace 743e519524SHoward Hinnant{ 753e519524SHoward Hinnant 763e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI logic_error 773e519524SHoward Hinnant : public exception 783e519524SHoward Hinnant{ 793e519524SHoward Hinnantprivate: 80a1fbf345SJoerg Sonnenberger _VSTD::__libcpp_refstring __imp_; 813e519524SHoward Hinnantpublic: 823e519524SHoward Hinnant explicit logic_error(const string&); 833e519524SHoward Hinnant explicit logic_error(const char*); 843e519524SHoward Hinnant 85a62f2899SHoward Hinnant logic_error(const logic_error&) _NOEXCEPT; 86a62f2899SHoward Hinnant logic_error& operator=(const logic_error&) _NOEXCEPT; 873e519524SHoward Hinnant 88a62f2899SHoward Hinnant virtual ~logic_error() _NOEXCEPT; 893e519524SHoward Hinnant 90a62f2899SHoward Hinnant virtual const char* what() const _NOEXCEPT; 913e519524SHoward Hinnant}; 923e519524SHoward Hinnant 933e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI runtime_error 943e519524SHoward Hinnant : public exception 953e519524SHoward Hinnant{ 963e519524SHoward Hinnantprivate: 97a1fbf345SJoerg Sonnenberger _VSTD::__libcpp_refstring __imp_; 983e519524SHoward Hinnantpublic: 993e519524SHoward Hinnant explicit runtime_error(const string&); 1003e519524SHoward Hinnant explicit runtime_error(const char*); 1013e519524SHoward Hinnant 102a62f2899SHoward Hinnant runtime_error(const runtime_error&) _NOEXCEPT; 103a62f2899SHoward Hinnant runtime_error& operator=(const runtime_error&) _NOEXCEPT; 1043e519524SHoward Hinnant 105a62f2899SHoward Hinnant virtual ~runtime_error() _NOEXCEPT; 1063e519524SHoward Hinnant 107a62f2899SHoward Hinnant virtual const char* what() const _NOEXCEPT; 1083e519524SHoward Hinnant}; 1093e519524SHoward Hinnant 1103e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI domain_error 1113e519524SHoward Hinnant : public logic_error 1123e519524SHoward Hinnant{ 1133e519524SHoward Hinnantpublic: 1143e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {} 1153e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s) : logic_error(__s) {} 1163e519524SHoward Hinnant 117a62f2899SHoward Hinnant virtual ~domain_error() _NOEXCEPT; 1183e519524SHoward Hinnant}; 1193e519524SHoward Hinnant 1203e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI invalid_argument 1213e519524SHoward Hinnant : public logic_error 1223e519524SHoward Hinnant{ 1233e519524SHoward Hinnantpublic: 1243e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {} 1253e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s) : logic_error(__s) {} 1263e519524SHoward Hinnant 127a62f2899SHoward Hinnant virtual ~invalid_argument() _NOEXCEPT; 1283e519524SHoward Hinnant}; 1293e519524SHoward Hinnant 1303e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI length_error 1313e519524SHoward Hinnant : public logic_error 1323e519524SHoward Hinnant{ 1333e519524SHoward Hinnantpublic: 1343e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {} 1353e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s) : logic_error(__s) {} 1363e519524SHoward Hinnant 137a62f2899SHoward Hinnant virtual ~length_error() _NOEXCEPT; 1383e519524SHoward Hinnant}; 1393e519524SHoward Hinnant 1403e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI out_of_range 1413e519524SHoward Hinnant : public logic_error 1423e519524SHoward Hinnant{ 1433e519524SHoward Hinnantpublic: 1443e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {} 1453e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s) : logic_error(__s) {} 1463e519524SHoward Hinnant 147a62f2899SHoward Hinnant virtual ~out_of_range() _NOEXCEPT; 1483e519524SHoward Hinnant}; 1493e519524SHoward Hinnant 1503e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI range_error 1513e519524SHoward Hinnant : public runtime_error 1523e519524SHoward Hinnant{ 1533e519524SHoward Hinnantpublic: 1543e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {} 1553e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s) : runtime_error(__s) {} 1563e519524SHoward Hinnant 157a62f2899SHoward Hinnant virtual ~range_error() _NOEXCEPT; 1583e519524SHoward Hinnant}; 1593e519524SHoward Hinnant 1603e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI overflow_error 1613e519524SHoward Hinnant : public runtime_error 1623e519524SHoward Hinnant{ 1633e519524SHoward Hinnantpublic: 1643e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {} 1653e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s) : runtime_error(__s) {} 1663e519524SHoward Hinnant 167a62f2899SHoward Hinnant virtual ~overflow_error() _NOEXCEPT; 1683e519524SHoward Hinnant}; 1693e519524SHoward Hinnant 1703e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI underflow_error 1713e519524SHoward Hinnant : public runtime_error 1723e519524SHoward Hinnant{ 1733e519524SHoward Hinnantpublic: 1743e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {} 1753e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s) : runtime_error(__s) {} 1763e519524SHoward Hinnant 177a62f2899SHoward Hinnant virtual ~underflow_error() _NOEXCEPT; 1783e519524SHoward Hinnant}; 1793e519524SHoward Hinnant 1803e519524SHoward Hinnant} // std 1813e519524SHoward Hinnant 182d437fa5cSMarshall Clow_LIBCPP_BEGIN_NAMESPACE_STD 183d437fa5cSMarshall Clow 184d437fa5cSMarshall Clow// in the dylib 185d437fa5cSMarshall Clow_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); 186d437fa5cSMarshall Clow 187dc7200b4SLouis Dionne_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 188d437fa5cSMarshall Clowvoid __throw_logic_error(const char*__msg) 189d437fa5cSMarshall Clow{ 190d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 191d437fa5cSMarshall Clow throw logic_error(__msg); 192d437fa5cSMarshall Clow#else 193fd838227SEric Fiselier ((void)__msg); 194d437fa5cSMarshall Clow _VSTD::abort(); 195d437fa5cSMarshall Clow#endif 196d437fa5cSMarshall Clow} 197d437fa5cSMarshall Clow 198dc7200b4SLouis Dionne_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 199d437fa5cSMarshall Clowvoid __throw_domain_error(const char*__msg) 200d437fa5cSMarshall Clow{ 201d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 202d437fa5cSMarshall Clow throw domain_error(__msg); 203d437fa5cSMarshall Clow#else 204fd838227SEric Fiselier ((void)__msg); 205d437fa5cSMarshall Clow _VSTD::abort(); 206d437fa5cSMarshall Clow#endif 207d437fa5cSMarshall Clow} 208d437fa5cSMarshall Clow 209dc7200b4SLouis Dionne_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 210d437fa5cSMarshall Clowvoid __throw_invalid_argument(const char*__msg) 211d437fa5cSMarshall Clow{ 212d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 213d437fa5cSMarshall Clow throw invalid_argument(__msg); 214d437fa5cSMarshall Clow#else 215fd838227SEric Fiselier ((void)__msg); 216d437fa5cSMarshall Clow _VSTD::abort(); 217d437fa5cSMarshall Clow#endif 218d437fa5cSMarshall Clow} 219d437fa5cSMarshall Clow 220dc7200b4SLouis Dionne_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 221d437fa5cSMarshall Clowvoid __throw_length_error(const char*__msg) 222d437fa5cSMarshall Clow{ 223d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 224d437fa5cSMarshall Clow throw length_error(__msg); 225d437fa5cSMarshall Clow#else 226fd838227SEric Fiselier ((void)__msg); 227d437fa5cSMarshall Clow _VSTD::abort(); 228d437fa5cSMarshall Clow#endif 229d437fa5cSMarshall Clow} 230d437fa5cSMarshall Clow 231dc7200b4SLouis Dionne_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 232d437fa5cSMarshall Clowvoid __throw_out_of_range(const char*__msg) 233d437fa5cSMarshall Clow{ 234d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 235d437fa5cSMarshall Clow throw out_of_range(__msg); 236d437fa5cSMarshall Clow#else 237fd838227SEric Fiselier ((void)__msg); 238d437fa5cSMarshall Clow _VSTD::abort(); 239d437fa5cSMarshall Clow#endif 240d437fa5cSMarshall Clow} 241d437fa5cSMarshall Clow 242dc7200b4SLouis Dionne_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 243d437fa5cSMarshall Clowvoid __throw_range_error(const char*__msg) 244d437fa5cSMarshall Clow{ 245d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 246d437fa5cSMarshall Clow throw range_error(__msg); 247d437fa5cSMarshall Clow#else 248fd838227SEric Fiselier ((void)__msg); 249d437fa5cSMarshall Clow _VSTD::abort(); 250d437fa5cSMarshall Clow#endif 251d437fa5cSMarshall Clow} 252d437fa5cSMarshall Clow 253dc7200b4SLouis Dionne_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 254d437fa5cSMarshall Clowvoid __throw_overflow_error(const char*__msg) 255d437fa5cSMarshall Clow{ 256d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 257d437fa5cSMarshall Clow throw overflow_error(__msg); 258d437fa5cSMarshall Clow#else 259fd838227SEric Fiselier ((void)__msg); 260d437fa5cSMarshall Clow _VSTD::abort(); 261d437fa5cSMarshall Clow#endif 262d437fa5cSMarshall Clow} 263d437fa5cSMarshall Clow 264dc7200b4SLouis Dionne_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 265d437fa5cSMarshall Clowvoid __throw_underflow_error(const char*__msg) 266d437fa5cSMarshall Clow{ 267d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 268d437fa5cSMarshall Clow throw underflow_error(__msg); 269d437fa5cSMarshall Clow#else 270fd838227SEric Fiselier ((void)__msg); 271d437fa5cSMarshall Clow _VSTD::abort(); 272d437fa5cSMarshall Clow#endif 273d437fa5cSMarshall Clow} 274d437fa5cSMarshall Clow 275d437fa5cSMarshall Clow_LIBCPP_END_NAMESPACE_STD 276d437fa5cSMarshall Clow 2773e519524SHoward Hinnant#endif // _LIBCPP_STDEXCEPT 278