/src/llvm-project-16.0.6.build/include/c++/v1/stdexcept
Line | Count | Source (jump to first uncovered line) |
1 | | // -*- C++ -*- |
2 | | //===----------------------------------------------------------------------===// |
3 | | // |
4 | | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
5 | | // See https://llvm.org/LICENSE.txt for license information. |
6 | | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
7 | | // |
8 | | //===----------------------------------------------------------------------===// |
9 | | |
10 | | #ifndef _LIBCPP_STDEXCEPT |
11 | | #define _LIBCPP_STDEXCEPT |
12 | | |
13 | | /* |
14 | | stdexcept synopsis |
15 | | |
16 | | namespace std |
17 | | { |
18 | | |
19 | | class logic_error; |
20 | | class domain_error; |
21 | | class invalid_argument; |
22 | | class length_error; |
23 | | class out_of_range; |
24 | | class runtime_error; |
25 | | class range_error; |
26 | | class overflow_error; |
27 | | class underflow_error; |
28 | | |
29 | | for each class xxx_error: |
30 | | |
31 | | class xxx_error : public exception // at least indirectly |
32 | | { |
33 | | public: |
34 | | explicit xxx_error(const string& what_arg); |
35 | | explicit xxx_error(const char* what_arg); |
36 | | |
37 | | virtual const char* what() const noexcept // returns what_arg |
38 | | }; |
39 | | |
40 | | } // std |
41 | | |
42 | | */ |
43 | | |
44 | | #include <__assert> // all public C++ headers provide the assertion handler |
45 | | #include <__config> |
46 | | #include <cstdlib> |
47 | | #include <exception> |
48 | | #include <iosfwd> // for string forward decl |
49 | | |
50 | | #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) |
51 | | # pragma GCC system_header |
52 | | #endif |
53 | | |
54 | | _LIBCPP_BEGIN_NAMESPACE_STD |
55 | | |
56 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
57 | | class _LIBCPP_HIDDEN __libcpp_refstring |
58 | | { |
59 | | const char* __imp_; |
60 | | |
61 | | bool __uses_refcount() const; |
62 | | public: |
63 | | explicit __libcpp_refstring(const char* __msg); |
64 | | __libcpp_refstring(const __libcpp_refstring& __s) _NOEXCEPT; |
65 | | __libcpp_refstring& operator=(const __libcpp_refstring& __s) _NOEXCEPT; |
66 | | ~__libcpp_refstring(); |
67 | | |
68 | | const char* c_str() const _NOEXCEPT {return __imp_;} |
69 | | }; |
70 | | #endif // !_LIBCPP_ABI_VCRUNTIME |
71 | | |
72 | | _LIBCPP_END_NAMESPACE_STD |
73 | | |
74 | | namespace std // purposefully not using versioning namespace |
75 | | { |
76 | | |
77 | | class _LIBCPP_EXCEPTION_ABI logic_error |
78 | | : public exception |
79 | | { |
80 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
81 | | private: |
82 | | _VSTD::__libcpp_refstring __imp_; |
83 | | public: |
84 | | explicit logic_error(const string&); |
85 | | explicit logic_error(const char*); |
86 | | |
87 | | logic_error(const logic_error&) _NOEXCEPT; |
88 | | logic_error& operator=(const logic_error&) _NOEXCEPT; |
89 | | |
90 | | ~logic_error() _NOEXCEPT override; |
91 | | |
92 | | const char* what() const _NOEXCEPT override; |
93 | | #else |
94 | | public: |
95 | | explicit logic_error(const _VSTD::string&); // Symbol uses versioned std::string |
96 | | _LIBCPP_INLINE_VISIBILITY explicit logic_error(const char* __s) : exception(__s) {} |
97 | | #endif |
98 | | }; |
99 | | |
100 | | class _LIBCPP_EXCEPTION_ABI runtime_error |
101 | | : public exception |
102 | | { |
103 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
104 | | private: |
105 | | _VSTD::__libcpp_refstring __imp_; |
106 | | public: |
107 | | explicit runtime_error(const string&); |
108 | | explicit runtime_error(const char*); |
109 | | |
110 | | runtime_error(const runtime_error&) _NOEXCEPT; |
111 | | runtime_error& operator=(const runtime_error&) _NOEXCEPT; |
112 | | |
113 | | ~runtime_error() _NOEXCEPT override; |
114 | | |
115 | | const char* what() const _NOEXCEPT override; |
116 | | #else |
117 | | public: |
118 | | explicit runtime_error(const _VSTD::string&); // Symbol uses versioned std::string |
119 | | _LIBCPP_INLINE_VISIBILITY explicit runtime_error(const char* __s) : exception(__s) {} |
120 | | #endif // _LIBCPP_ABI_VCRUNTIME |
121 | | }; |
122 | | |
123 | | class _LIBCPP_EXCEPTION_ABI domain_error |
124 | | : public logic_error |
125 | | { |
126 | | public: |
127 | 0 | _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {} |
128 | 0 | _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s) : logic_error(__s) {} |
129 | | |
130 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
131 | | domain_error(const domain_error&) _NOEXCEPT = default; |
132 | | ~domain_error() _NOEXCEPT override; |
133 | | #endif |
134 | | }; |
135 | | |
136 | | class _LIBCPP_EXCEPTION_ABI invalid_argument |
137 | | : public logic_error |
138 | | { |
139 | | public: |
140 | 0 | _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {} |
141 | 0 | _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s) : logic_error(__s) {} |
142 | | |
143 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
144 | | invalid_argument(const invalid_argument&) _NOEXCEPT = default; |
145 | | ~invalid_argument() _NOEXCEPT override; |
146 | | #endif |
147 | | }; |
148 | | |
149 | | class _LIBCPP_EXCEPTION_ABI length_error |
150 | | : public logic_error |
151 | | { |
152 | | public: |
153 | 0 | _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {} |
154 | 0 | _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s) : logic_error(__s) {} |
155 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
156 | | length_error(const length_error&) _NOEXCEPT = default; |
157 | | ~length_error() _NOEXCEPT override; |
158 | | #endif |
159 | | }; |
160 | | |
161 | | class _LIBCPP_EXCEPTION_ABI out_of_range |
162 | | : public logic_error |
163 | | { |
164 | | public: |
165 | 0 | _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {} |
166 | 0 | _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s) : logic_error(__s) {} |
167 | | |
168 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
169 | | out_of_range(const out_of_range&) _NOEXCEPT = default; |
170 | | ~out_of_range() _NOEXCEPT override; |
171 | | #endif |
172 | | }; |
173 | | |
174 | | class _LIBCPP_EXCEPTION_ABI range_error |
175 | | : public runtime_error |
176 | | { |
177 | | public: |
178 | 0 | _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {} |
179 | 0 | _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s) : runtime_error(__s) {} |
180 | | |
181 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
182 | | range_error(const range_error&) _NOEXCEPT = default; |
183 | | ~range_error() _NOEXCEPT override; |
184 | | #endif |
185 | | }; |
186 | | |
187 | | class _LIBCPP_EXCEPTION_ABI overflow_error |
188 | | : public runtime_error |
189 | | { |
190 | | public: |
191 | 0 | _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {} |
192 | 0 | _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s) : runtime_error(__s) {} |
193 | | |
194 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
195 | | overflow_error(const overflow_error&) _NOEXCEPT = default; |
196 | | ~overflow_error() _NOEXCEPT override; |
197 | | #endif |
198 | | }; |
199 | | |
200 | | class _LIBCPP_EXCEPTION_ABI underflow_error |
201 | | : public runtime_error |
202 | | { |
203 | | public: |
204 | 0 | _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {} |
205 | 0 | _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s) : runtime_error(__s) {} |
206 | | |
207 | | #ifndef _LIBCPP_ABI_VCRUNTIME |
208 | | underflow_error(const underflow_error&) _NOEXCEPT = default; |
209 | | ~underflow_error() _NOEXCEPT override; |
210 | | #endif |
211 | | }; |
212 | | |
213 | | } // namespace std |
214 | | |
215 | | _LIBCPP_BEGIN_NAMESPACE_STD |
216 | | |
217 | | // in the dylib |
218 | | _LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); |
219 | | |
220 | | _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY |
221 | | void __throw_logic_error(const char*__msg) |
222 | 0 | { |
223 | 0 | #ifndef _LIBCPP_NO_EXCEPTIONS |
224 | 0 | throw logic_error(__msg); |
225 | 0 | #else |
226 | 0 | ((void)__msg); |
227 | 0 | _VSTD::abort(); |
228 | 0 | #endif |
229 | 0 | } |
230 | | |
231 | | _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY |
232 | | void __throw_domain_error(const char*__msg) |
233 | 0 | { |
234 | 0 | #ifndef _LIBCPP_NO_EXCEPTIONS |
235 | 0 | throw domain_error(__msg); |
236 | 0 | #else |
237 | 0 | ((void)__msg); |
238 | 0 | _VSTD::abort(); |
239 | 0 | #endif |
240 | 0 | } |
241 | | |
242 | | _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY |
243 | | void __throw_invalid_argument(const char*__msg) |
244 | 0 | { |
245 | 0 | #ifndef _LIBCPP_NO_EXCEPTIONS |
246 | 0 | throw invalid_argument(__msg); |
247 | 0 | #else |
248 | 0 | ((void)__msg); |
249 | 0 | _VSTD::abort(); |
250 | 0 | #endif |
251 | 0 | } |
252 | | |
253 | | _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY |
254 | | void __throw_length_error(const char*__msg) |
255 | 0 | { |
256 | 0 | #ifndef _LIBCPP_NO_EXCEPTIONS |
257 | 0 | throw length_error(__msg); |
258 | | #else |
259 | | ((void)__msg); |
260 | | _VSTD::abort(); |
261 | | #endif |
262 | 0 | } |
263 | | |
264 | | _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY |
265 | | void __throw_out_of_range(const char*__msg) |
266 | 0 | { |
267 | 0 | #ifndef _LIBCPP_NO_EXCEPTIONS |
268 | 0 | throw out_of_range(__msg); |
269 | | #else |
270 | | ((void)__msg); |
271 | | _VSTD::abort(); |
272 | | #endif |
273 | 0 | } |
274 | | |
275 | | _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY |
276 | | void __throw_range_error(const char*__msg) |
277 | 0 | { |
278 | 0 | #ifndef _LIBCPP_NO_EXCEPTIONS |
279 | 0 | throw range_error(__msg); |
280 | 0 | #else |
281 | 0 | ((void)__msg); |
282 | 0 | _VSTD::abort(); |
283 | 0 | #endif |
284 | 0 | } |
285 | | |
286 | | _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY |
287 | | void __throw_overflow_error(const char*__msg) |
288 | 0 | { |
289 | 0 | #ifndef _LIBCPP_NO_EXCEPTIONS |
290 | 0 | throw overflow_error(__msg); |
291 | 0 | #else |
292 | 0 | ((void)__msg); |
293 | 0 | _VSTD::abort(); |
294 | 0 | #endif |
295 | 0 | } |
296 | | |
297 | | _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY |
298 | | void __throw_underflow_error(const char*__msg) |
299 | 0 | { |
300 | 0 | #ifndef _LIBCPP_NO_EXCEPTIONS |
301 | 0 | throw underflow_error(__msg); |
302 | 0 | #else |
303 | 0 | ((void)__msg); |
304 | 0 | _VSTD::abort(); |
305 | 0 | #endif |
306 | 0 | } |
307 | | |
308 | | _LIBCPP_END_NAMESPACE_STD |
309 | | |
310 | | #endif // _LIBCPP_STDEXCEPT |