13e519524SHoward Hinnant// -*- C++ -*- 23e519524SHoward Hinnant//===--------------------------- stdexcept --------------------------------===// 33e519524SHoward Hinnant// 45b08a8a4SHoward Hinnant// The LLVM Compiler Infrastructure 53e519524SHoward Hinnant// 6412dbebeSHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 7412dbebeSHoward Hinnant// Source Licenses. See LICENSE.TXT for details. 83e519524SHoward Hinnant// 93e519524SHoward Hinnant//===----------------------------------------------------------------------===// 103e519524SHoward Hinnant 113e519524SHoward Hinnant#ifndef _LIBCPP_STDEXCEPT 123e519524SHoward Hinnant#define _LIBCPP_STDEXCEPT 133e519524SHoward Hinnant 143e519524SHoward Hinnant/* 153e519524SHoward Hinnant stdexcept synopsis 163e519524SHoward Hinnant 173e519524SHoward Hinnantnamespace std 183e519524SHoward Hinnant{ 193e519524SHoward Hinnant 203e519524SHoward Hinnantclass logic_error; 213e519524SHoward Hinnant class domain_error; 223e519524SHoward Hinnant class invalid_argument; 233e519524SHoward Hinnant class length_error; 243e519524SHoward Hinnant class out_of_range; 253e519524SHoward Hinnantclass runtime_error; 263e519524SHoward Hinnant class range_error; 273e519524SHoward Hinnant class overflow_error; 283e519524SHoward Hinnant class underflow_error; 293e519524SHoward Hinnant 303e519524SHoward Hinnantfor each class xxx_error: 313e519524SHoward Hinnant 323e519524SHoward Hinnantclass xxx_error : public exception // at least indirectly 333e519524SHoward Hinnant{ 343e519524SHoward Hinnantpublic: 353e519524SHoward Hinnant explicit xxx_error(const string& what_arg); 36a62f2899SHoward Hinnant explicit xxx_error(const char* what_arg); 373e519524SHoward Hinnant 38a62f2899SHoward Hinnant virtual const char* what() const noexcept // returns what_arg 393e519524SHoward Hinnant}; 403e519524SHoward Hinnant 413e519524SHoward Hinnant} // std 423e519524SHoward Hinnant 433e519524SHoward Hinnant*/ 443e519524SHoward Hinnant 453e519524SHoward Hinnant#include <__config> 463e519524SHoward Hinnant#include <exception> 473e519524SHoward Hinnant#include <iosfwd> // for string forward decl 48b683ec20SEric Fiselier#ifdef _LIBCPP_NO_EXCEPTIONS 49b683ec20SEric Fiselier#include <cstdlib> 50b683ec20SEric Fiselier#endif 513e519524SHoward Hinnant 52073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 533e519524SHoward Hinnant#pragma GCC system_header 54073458b1SHoward Hinnant#endif 553e519524SHoward Hinnant 56a1fbf345SJoerg Sonnenberger_LIBCPP_BEGIN_NAMESPACE_STD 57a624409cSEric Fiselier 58a624409cSEric Fiselierclass _LIBCPP_HIDDEN __libcpp_refstring 59a624409cSEric Fiselier{ 6089dd1dd2SEric Fiselier const char* __imp_; 61a624409cSEric Fiselier 62a624409cSEric Fiselier bool __uses_refcount() const; 63a624409cSEric Fiselierpublic: 64*9ffacf3dSEric Fiselier explicit __libcpp_refstring(const char* __msg); 65*9ffacf3dSEric Fiselier __libcpp_refstring(const __libcpp_refstring& __s) _NOEXCEPT; 66*9ffacf3dSEric Fiselier __libcpp_refstring& operator=(const __libcpp_refstring& __s) _NOEXCEPT; 67a624409cSEric Fiselier ~__libcpp_refstring(); 68a624409cSEric Fiselier 69a624409cSEric Fiselier const char* c_str() const _NOEXCEPT {return __imp_;} 70a1fbf345SJoerg Sonnenberger}; 71a624409cSEric Fiselier 72a1fbf345SJoerg Sonnenberger_LIBCPP_END_NAMESPACE_STD 73a1fbf345SJoerg Sonnenberger 743e519524SHoward Hinnantnamespace std // purposefully not using versioning namespace 753e519524SHoward Hinnant{ 763e519524SHoward Hinnant 773e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI logic_error 783e519524SHoward Hinnant : public exception 793e519524SHoward Hinnant{ 803e519524SHoward Hinnantprivate: 81a1fbf345SJoerg Sonnenberger _VSTD::__libcpp_refstring __imp_; 823e519524SHoward Hinnantpublic: 833e519524SHoward Hinnant explicit logic_error(const string&); 843e519524SHoward Hinnant explicit logic_error(const char*); 853e519524SHoward Hinnant 86a62f2899SHoward Hinnant logic_error(const logic_error&) _NOEXCEPT; 87a62f2899SHoward Hinnant logic_error& operator=(const logic_error&) _NOEXCEPT; 883e519524SHoward Hinnant 89a62f2899SHoward Hinnant virtual ~logic_error() _NOEXCEPT; 903e519524SHoward Hinnant 91a62f2899SHoward Hinnant virtual const char* what() const _NOEXCEPT; 923e519524SHoward Hinnant}; 933e519524SHoward Hinnant 943e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI runtime_error 953e519524SHoward Hinnant : public exception 963e519524SHoward Hinnant{ 973e519524SHoward Hinnantprivate: 98a1fbf345SJoerg Sonnenberger _VSTD::__libcpp_refstring __imp_; 993e519524SHoward Hinnantpublic: 1003e519524SHoward Hinnant explicit runtime_error(const string&); 1013e519524SHoward Hinnant explicit runtime_error(const char*); 1023e519524SHoward Hinnant 103a62f2899SHoward Hinnant runtime_error(const runtime_error&) _NOEXCEPT; 104a62f2899SHoward Hinnant runtime_error& operator=(const runtime_error&) _NOEXCEPT; 1053e519524SHoward Hinnant 106a62f2899SHoward Hinnant virtual ~runtime_error() _NOEXCEPT; 1073e519524SHoward Hinnant 108a62f2899SHoward Hinnant virtual const char* what() const _NOEXCEPT; 1093e519524SHoward Hinnant}; 1103e519524SHoward Hinnant 1113e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI domain_error 1123e519524SHoward Hinnant : public logic_error 1133e519524SHoward Hinnant{ 1143e519524SHoward Hinnantpublic: 1153e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {} 1163e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s) : logic_error(__s) {} 1173e519524SHoward Hinnant 118a62f2899SHoward Hinnant virtual ~domain_error() _NOEXCEPT; 1193e519524SHoward Hinnant}; 1203e519524SHoward Hinnant 1213e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI invalid_argument 1223e519524SHoward Hinnant : public logic_error 1233e519524SHoward Hinnant{ 1243e519524SHoward Hinnantpublic: 1253e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {} 1263e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s) : logic_error(__s) {} 1273e519524SHoward Hinnant 128a62f2899SHoward Hinnant virtual ~invalid_argument() _NOEXCEPT; 1293e519524SHoward Hinnant}; 1303e519524SHoward Hinnant 1313e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI length_error 1323e519524SHoward Hinnant : public logic_error 1333e519524SHoward Hinnant{ 1343e519524SHoward Hinnantpublic: 1353e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {} 1363e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s) : logic_error(__s) {} 1373e519524SHoward Hinnant 138a62f2899SHoward Hinnant virtual ~length_error() _NOEXCEPT; 1393e519524SHoward Hinnant}; 1403e519524SHoward Hinnant 1413e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI out_of_range 1423e519524SHoward Hinnant : public logic_error 1433e519524SHoward Hinnant{ 1443e519524SHoward Hinnantpublic: 1453e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {} 1463e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s) : logic_error(__s) {} 1473e519524SHoward Hinnant 148a62f2899SHoward Hinnant virtual ~out_of_range() _NOEXCEPT; 1493e519524SHoward Hinnant}; 1503e519524SHoward Hinnant 1513e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI range_error 1523e519524SHoward Hinnant : public runtime_error 1533e519524SHoward Hinnant{ 1543e519524SHoward Hinnantpublic: 1553e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {} 1563e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s) : runtime_error(__s) {} 1573e519524SHoward Hinnant 158a62f2899SHoward Hinnant virtual ~range_error() _NOEXCEPT; 1593e519524SHoward Hinnant}; 1603e519524SHoward Hinnant 1613e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI overflow_error 1623e519524SHoward Hinnant : public runtime_error 1633e519524SHoward Hinnant{ 1643e519524SHoward Hinnantpublic: 1653e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {} 1663e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s) : runtime_error(__s) {} 1673e519524SHoward Hinnant 168a62f2899SHoward Hinnant virtual ~overflow_error() _NOEXCEPT; 1693e519524SHoward Hinnant}; 1703e519524SHoward Hinnant 1713e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI underflow_error 1723e519524SHoward Hinnant : public runtime_error 1733e519524SHoward Hinnant{ 1743e519524SHoward Hinnantpublic: 1753e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {} 1763e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s) : runtime_error(__s) {} 1773e519524SHoward Hinnant 178a62f2899SHoward Hinnant virtual ~underflow_error() _NOEXCEPT; 1793e519524SHoward Hinnant}; 1803e519524SHoward Hinnant 1813e519524SHoward Hinnant} // std 1823e519524SHoward Hinnant 183d437fa5cSMarshall Clow_LIBCPP_BEGIN_NAMESPACE_STD 184d437fa5cSMarshall Clow 185d437fa5cSMarshall Clow// in the dylib 186d437fa5cSMarshall Clow_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); 187d437fa5cSMarshall Clow 188d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 189d437fa5cSMarshall Clowvoid __throw_logic_error(const char*__msg) 190d437fa5cSMarshall Clow{ 191d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 192d437fa5cSMarshall Clow throw logic_error(__msg); 193d437fa5cSMarshall Clow#else 194fd838227SEric Fiselier ((void)__msg); 195d437fa5cSMarshall Clow _VSTD::abort(); 196d437fa5cSMarshall Clow#endif 197d437fa5cSMarshall Clow} 198d437fa5cSMarshall Clow 199d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 200d437fa5cSMarshall Clowvoid __throw_domain_error(const char*__msg) 201d437fa5cSMarshall Clow{ 202d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 203d437fa5cSMarshall Clow throw domain_error(__msg); 204d437fa5cSMarshall Clow#else 205fd838227SEric Fiselier ((void)__msg); 206d437fa5cSMarshall Clow _VSTD::abort(); 207d437fa5cSMarshall Clow#endif 208d437fa5cSMarshall Clow} 209d437fa5cSMarshall Clow 210d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 211d437fa5cSMarshall Clowvoid __throw_invalid_argument(const char*__msg) 212d437fa5cSMarshall Clow{ 213d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 214d437fa5cSMarshall Clow throw invalid_argument(__msg); 215d437fa5cSMarshall Clow#else 216fd838227SEric Fiselier ((void)__msg); 217d437fa5cSMarshall Clow _VSTD::abort(); 218d437fa5cSMarshall Clow#endif 219d437fa5cSMarshall Clow} 220d437fa5cSMarshall Clow 221d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 222d437fa5cSMarshall Clowvoid __throw_length_error(const char*__msg) 223d437fa5cSMarshall Clow{ 224d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 225d437fa5cSMarshall Clow throw length_error(__msg); 226d437fa5cSMarshall Clow#else 227fd838227SEric Fiselier ((void)__msg); 228d437fa5cSMarshall Clow _VSTD::abort(); 229d437fa5cSMarshall Clow#endif 230d437fa5cSMarshall Clow} 231d437fa5cSMarshall Clow 232d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 233d437fa5cSMarshall Clowvoid __throw_out_of_range(const char*__msg) 234d437fa5cSMarshall Clow{ 235d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 236d437fa5cSMarshall Clow throw out_of_range(__msg); 237d437fa5cSMarshall Clow#else 238fd838227SEric Fiselier ((void)__msg); 239d437fa5cSMarshall Clow _VSTD::abort(); 240d437fa5cSMarshall Clow#endif 241d437fa5cSMarshall Clow} 242d437fa5cSMarshall Clow 243d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 244d437fa5cSMarshall Clowvoid __throw_range_error(const char*__msg) 245d437fa5cSMarshall Clow{ 246d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 247d437fa5cSMarshall Clow throw range_error(__msg); 248d437fa5cSMarshall Clow#else 249fd838227SEric Fiselier ((void)__msg); 250d437fa5cSMarshall Clow _VSTD::abort(); 251d437fa5cSMarshall Clow#endif 252d437fa5cSMarshall Clow} 253d437fa5cSMarshall Clow 254d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 255d437fa5cSMarshall Clowvoid __throw_overflow_error(const char*__msg) 256d437fa5cSMarshall Clow{ 257d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 258d437fa5cSMarshall Clow throw overflow_error(__msg); 259d437fa5cSMarshall Clow#else 260fd838227SEric Fiselier ((void)__msg); 261d437fa5cSMarshall Clow _VSTD::abort(); 262d437fa5cSMarshall Clow#endif 263d437fa5cSMarshall Clow} 264d437fa5cSMarshall Clow 265d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 266d437fa5cSMarshall Clowvoid __throw_underflow_error(const char*__msg) 267d437fa5cSMarshall Clow{ 268d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 269d437fa5cSMarshall Clow throw underflow_error(__msg); 270d437fa5cSMarshall Clow#else 271fd838227SEric Fiselier ((void)__msg); 272d437fa5cSMarshall Clow _VSTD::abort(); 273d437fa5cSMarshall Clow#endif 274d437fa5cSMarshall Clow} 275d437fa5cSMarshall Clow 276d437fa5cSMarshall Clow_LIBCPP_END_NAMESPACE_STD 277d437fa5cSMarshall Clow 2783e519524SHoward Hinnant#endif // _LIBCPP_STDEXCEPT 279