146035553Spatrick// -*- C++ -*- 2*4bdff4beSrobert//===----------------------------------------------------------------------===// 346035553Spatrick// 446035553Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 546035553Spatrick// See https://llvm.org/LICENSE.txt for license information. 646035553Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 746035553Spatrick// 846035553Spatrick//===----------------------------------------------------------------------===// 946035553Spatrick 1046035553Spatrick#ifndef _LIBCPP_STDEXCEPT 1146035553Spatrick#define _LIBCPP_STDEXCEPT 1246035553Spatrick 1346035553Spatrick/* 1446035553Spatrick stdexcept synopsis 1546035553Spatrick 1646035553Spatricknamespace std 1746035553Spatrick{ 1846035553Spatrick 1946035553Spatrickclass logic_error; 2046035553Spatrick class domain_error; 2146035553Spatrick class invalid_argument; 2246035553Spatrick class length_error; 2346035553Spatrick class out_of_range; 2446035553Spatrickclass runtime_error; 2546035553Spatrick class range_error; 2646035553Spatrick class overflow_error; 2746035553Spatrick class underflow_error; 2846035553Spatrick 2946035553Spatrickfor each class xxx_error: 3046035553Spatrick 3146035553Spatrickclass xxx_error : public exception // at least indirectly 3246035553Spatrick{ 3346035553Spatrickpublic: 3446035553Spatrick explicit xxx_error(const string& what_arg); 3546035553Spatrick explicit xxx_error(const char* what_arg); 3646035553Spatrick 3746035553Spatrick virtual const char* what() const noexcept // returns what_arg 3846035553Spatrick}; 3946035553Spatrick 4046035553Spatrick} // std 4146035553Spatrick 4246035553Spatrick*/ 4346035553Spatrick 44*4bdff4beSrobert#include <__assert> // all public C++ headers provide the assertion handler 4546035553Spatrick#include <__config> 46*4bdff4beSrobert#include <cstdlib> 4746035553Spatrick#include <exception> 4846035553Spatrick#include <iosfwd> // for string forward decl 4946035553Spatrick 5046035553Spatrick#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 5146035553Spatrick# pragma GCC system_header 5246035553Spatrick#endif 5346035553Spatrick 5446035553Spatrick_LIBCPP_BEGIN_NAMESPACE_STD 5546035553Spatrick 5646035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 5746035553Spatrickclass _LIBCPP_HIDDEN __libcpp_refstring 5846035553Spatrick{ 5946035553Spatrick const char* __imp_; 6046035553Spatrick 6146035553Spatrick bool __uses_refcount() const; 6246035553Spatrickpublic: 6346035553Spatrick explicit __libcpp_refstring(const char* __msg); 6446035553Spatrick __libcpp_refstring(const __libcpp_refstring& __s) _NOEXCEPT; 6546035553Spatrick __libcpp_refstring& operator=(const __libcpp_refstring& __s) _NOEXCEPT; 6646035553Spatrick ~__libcpp_refstring(); 6746035553Spatrick 6846035553Spatrick const char* c_str() const _NOEXCEPT {return __imp_;} 6946035553Spatrick}; 7046035553Spatrick#endif // !_LIBCPP_ABI_VCRUNTIME 7146035553Spatrick 7246035553Spatrick_LIBCPP_END_NAMESPACE_STD 7346035553Spatrick 7446035553Spatricknamespace std // purposefully not using versioning namespace 7546035553Spatrick{ 7646035553Spatrick 7746035553Spatrickclass _LIBCPP_EXCEPTION_ABI logic_error 7846035553Spatrick : public exception 7946035553Spatrick{ 8046035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 8146035553Spatrickprivate: 8246035553Spatrick _VSTD::__libcpp_refstring __imp_; 8346035553Spatrickpublic: 8446035553Spatrick explicit logic_error(const string&); 8546035553Spatrick explicit logic_error(const char*); 8646035553Spatrick 8746035553Spatrick logic_error(const logic_error&) _NOEXCEPT; 8846035553Spatrick logic_error& operator=(const logic_error&) _NOEXCEPT; 8946035553Spatrick 90*4bdff4beSrobert ~logic_error() _NOEXCEPT override; 9146035553Spatrick 92*4bdff4beSrobert const char* what() const _NOEXCEPT override; 9346035553Spatrick#else 9446035553Spatrickpublic: 9546035553Spatrick explicit logic_error(const _VSTD::string&); // Symbol uses versioned std::string 9646035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit logic_error(const char* __s) : exception(__s) {} 9746035553Spatrick#endif 9846035553Spatrick}; 9946035553Spatrick 10046035553Spatrickclass _LIBCPP_EXCEPTION_ABI runtime_error 10146035553Spatrick : public exception 10246035553Spatrick{ 10346035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 10446035553Spatrickprivate: 10546035553Spatrick _VSTD::__libcpp_refstring __imp_; 10646035553Spatrickpublic: 10746035553Spatrick explicit runtime_error(const string&); 10846035553Spatrick explicit runtime_error(const char*); 10946035553Spatrick 11046035553Spatrick runtime_error(const runtime_error&) _NOEXCEPT; 11146035553Spatrick runtime_error& operator=(const runtime_error&) _NOEXCEPT; 11246035553Spatrick 113*4bdff4beSrobert ~runtime_error() _NOEXCEPT override; 11446035553Spatrick 115*4bdff4beSrobert const char* what() const _NOEXCEPT override; 11646035553Spatrick#else 11746035553Spatrickpublic: 11846035553Spatrick explicit runtime_error(const _VSTD::string&); // Symbol uses versioned std::string 11946035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit runtime_error(const char* __s) : exception(__s) {} 12046035553Spatrick#endif // _LIBCPP_ABI_VCRUNTIME 12146035553Spatrick}; 12246035553Spatrick 12346035553Spatrickclass _LIBCPP_EXCEPTION_ABI domain_error 12446035553Spatrick : public logic_error 12546035553Spatrick{ 12646035553Spatrickpublic: 12746035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {} 12846035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s) : logic_error(__s) {} 12946035553Spatrick 13046035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 131037e7968Spatrick domain_error(const domain_error&) _NOEXCEPT = default; 132*4bdff4beSrobert ~domain_error() _NOEXCEPT override; 13346035553Spatrick#endif 13446035553Spatrick}; 13546035553Spatrick 13646035553Spatrickclass _LIBCPP_EXCEPTION_ABI invalid_argument 13746035553Spatrick : public logic_error 13846035553Spatrick{ 13946035553Spatrickpublic: 14046035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {} 14146035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s) : logic_error(__s) {} 14246035553Spatrick 14346035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 144037e7968Spatrick invalid_argument(const invalid_argument&) _NOEXCEPT = default; 145*4bdff4beSrobert ~invalid_argument() _NOEXCEPT override; 14646035553Spatrick#endif 14746035553Spatrick}; 14846035553Spatrick 14946035553Spatrickclass _LIBCPP_EXCEPTION_ABI length_error 15046035553Spatrick : public logic_error 15146035553Spatrick{ 15246035553Spatrickpublic: 15346035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {} 15446035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s) : logic_error(__s) {} 15546035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 156037e7968Spatrick length_error(const length_error&) _NOEXCEPT = default; 157*4bdff4beSrobert ~length_error() _NOEXCEPT override; 15846035553Spatrick#endif 15946035553Spatrick}; 16046035553Spatrick 16146035553Spatrickclass _LIBCPP_EXCEPTION_ABI out_of_range 16246035553Spatrick : public logic_error 16346035553Spatrick{ 16446035553Spatrickpublic: 16546035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {} 16646035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s) : logic_error(__s) {} 16746035553Spatrick 16846035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 169037e7968Spatrick out_of_range(const out_of_range&) _NOEXCEPT = default; 170*4bdff4beSrobert ~out_of_range() _NOEXCEPT override; 17146035553Spatrick#endif 17246035553Spatrick}; 17346035553Spatrick 17446035553Spatrickclass _LIBCPP_EXCEPTION_ABI range_error 17546035553Spatrick : public runtime_error 17646035553Spatrick{ 17746035553Spatrickpublic: 17846035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {} 17946035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s) : runtime_error(__s) {} 18046035553Spatrick 18146035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 182037e7968Spatrick range_error(const range_error&) _NOEXCEPT = default; 183*4bdff4beSrobert ~range_error() _NOEXCEPT override; 18446035553Spatrick#endif 18546035553Spatrick}; 18646035553Spatrick 18746035553Spatrickclass _LIBCPP_EXCEPTION_ABI overflow_error 18846035553Spatrick : public runtime_error 18946035553Spatrick{ 19046035553Spatrickpublic: 19146035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {} 19246035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s) : runtime_error(__s) {} 19346035553Spatrick 19446035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 195037e7968Spatrick overflow_error(const overflow_error&) _NOEXCEPT = default; 196*4bdff4beSrobert ~overflow_error() _NOEXCEPT override; 19746035553Spatrick#endif 19846035553Spatrick}; 19946035553Spatrick 20046035553Spatrickclass _LIBCPP_EXCEPTION_ABI underflow_error 20146035553Spatrick : public runtime_error 20246035553Spatrick{ 20346035553Spatrickpublic: 20446035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {} 20546035553Spatrick _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s) : runtime_error(__s) {} 20646035553Spatrick 20746035553Spatrick#ifndef _LIBCPP_ABI_VCRUNTIME 208037e7968Spatrick underflow_error(const underflow_error&) _NOEXCEPT = default; 209*4bdff4beSrobert ~underflow_error() _NOEXCEPT override; 21046035553Spatrick#endif 21146035553Spatrick}; 21246035553Spatrick 213*4bdff4beSrobert} // namespace std 21446035553Spatrick 21546035553Spatrick_LIBCPP_BEGIN_NAMESPACE_STD 21646035553Spatrick 21746035553Spatrick// in the dylib 21846035553Spatrick_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); 21946035553Spatrick 22046035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 22146035553Spatrickvoid __throw_logic_error(const char*__msg) 22246035553Spatrick{ 22346035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 22446035553Spatrick throw logic_error(__msg); 22546035553Spatrick#else 22646035553Spatrick ((void)__msg); 22746035553Spatrick _VSTD::abort(); 22846035553Spatrick#endif 22946035553Spatrick} 23046035553Spatrick 23146035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 23246035553Spatrickvoid __throw_domain_error(const char*__msg) 23346035553Spatrick{ 23446035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 23546035553Spatrick throw domain_error(__msg); 23646035553Spatrick#else 23746035553Spatrick ((void)__msg); 23846035553Spatrick _VSTD::abort(); 23946035553Spatrick#endif 24046035553Spatrick} 24146035553Spatrick 24246035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 24346035553Spatrickvoid __throw_invalid_argument(const char*__msg) 24446035553Spatrick{ 24546035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 24646035553Spatrick throw invalid_argument(__msg); 24746035553Spatrick#else 24846035553Spatrick ((void)__msg); 24946035553Spatrick _VSTD::abort(); 25046035553Spatrick#endif 25146035553Spatrick} 25246035553Spatrick 25346035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 25446035553Spatrickvoid __throw_length_error(const char*__msg) 25546035553Spatrick{ 25646035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 25746035553Spatrick throw length_error(__msg); 25846035553Spatrick#else 25946035553Spatrick ((void)__msg); 26046035553Spatrick _VSTD::abort(); 26146035553Spatrick#endif 26246035553Spatrick} 26346035553Spatrick 26446035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 26546035553Spatrickvoid __throw_out_of_range(const char*__msg) 26646035553Spatrick{ 26746035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 26846035553Spatrick throw out_of_range(__msg); 26946035553Spatrick#else 27046035553Spatrick ((void)__msg); 27146035553Spatrick _VSTD::abort(); 27246035553Spatrick#endif 27346035553Spatrick} 27446035553Spatrick 27546035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 27646035553Spatrickvoid __throw_range_error(const char*__msg) 27746035553Spatrick{ 27846035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 27946035553Spatrick throw range_error(__msg); 28046035553Spatrick#else 28146035553Spatrick ((void)__msg); 28246035553Spatrick _VSTD::abort(); 28346035553Spatrick#endif 28446035553Spatrick} 28546035553Spatrick 28646035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 28746035553Spatrickvoid __throw_overflow_error(const char*__msg) 28846035553Spatrick{ 28946035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 29046035553Spatrick throw overflow_error(__msg); 29146035553Spatrick#else 29246035553Spatrick ((void)__msg); 29346035553Spatrick _VSTD::abort(); 29446035553Spatrick#endif 29546035553Spatrick} 29646035553Spatrick 29746035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 29846035553Spatrickvoid __throw_underflow_error(const char*__msg) 29946035553Spatrick{ 30046035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 30146035553Spatrick throw underflow_error(__msg); 30246035553Spatrick#else 30346035553Spatrick ((void)__msg); 30446035553Spatrick _VSTD::abort(); 30546035553Spatrick#endif 30646035553Spatrick} 30746035553Spatrick 30846035553Spatrick_LIBCPP_END_NAMESPACE_STD 30946035553Spatrick 31046035553Spatrick#endif // _LIBCPP_STDEXCEPT 311