[lld][WebAssembly] Reinstate mistakenly disabled test. NFC
[llvm-project.git] / libcxx / include / stdexcept
blob5df2050ee4ec865ee6a4fac3499d95692ab4e9a6
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 //===----------------------------------------------------------------------===//
10 #ifndef _LIBCPP_STDEXCEPT
11 #define _LIBCPP_STDEXCEPT
14     stdexcept synopsis
16 namespace std
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;
29 for each class xxx_error:
31 class xxx_error : public exception // at least indirectly
33 public:
34     explicit xxx_error(const string& what_arg);
35     explicit xxx_error(const char*   what_arg);
37     virtual const char* what() const noexcept // returns what_arg
40 }  // std
44 #include <__config>
45 #include <cstdlib>
46 #include <exception>
47 #include <iosfwd>  // for string forward decl
49 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
50 #pragma GCC system_header
51 #endif
53 _LIBCPP_BEGIN_NAMESPACE_STD
55 #ifndef _LIBCPP_ABI_VCRUNTIME
56 class _LIBCPP_HIDDEN __libcpp_refstring
58     const char* __imp_;
60     bool __uses_refcount() const;
61 public:
62     explicit __libcpp_refstring(const char* __msg);
63     __libcpp_refstring(const __libcpp_refstring& __s) _NOEXCEPT;
64     __libcpp_refstring& operator=(const __libcpp_refstring& __s) _NOEXCEPT;
65     ~__libcpp_refstring();
67     const char* c_str() const _NOEXCEPT {return __imp_;}
69 #endif // !_LIBCPP_ABI_VCRUNTIME
71 _LIBCPP_END_NAMESPACE_STD
73 namespace std  // purposefully not using versioning namespace
76 class _LIBCPP_EXCEPTION_ABI logic_error
77     : public exception
79 #ifndef _LIBCPP_ABI_VCRUNTIME
80 private:
81     _VSTD::__libcpp_refstring __imp_;
82 public:
83     explicit logic_error(const string&);
84     explicit logic_error(const char*);
86     logic_error(const logic_error&) _NOEXCEPT;
87     logic_error& operator=(const logic_error&) _NOEXCEPT;
89     virtual ~logic_error() _NOEXCEPT;
91     virtual const char* what() const _NOEXCEPT;
92 #else
93 public:
94     explicit logic_error(const _VSTD::string&); // Symbol uses versioned std::string
95     _LIBCPP_INLINE_VISIBILITY explicit logic_error(const char* __s) : exception(__s) {}
96 #endif
99 class _LIBCPP_EXCEPTION_ABI runtime_error
100     : public exception
102 #ifndef _LIBCPP_ABI_VCRUNTIME
103 private:
104     _VSTD::__libcpp_refstring __imp_;
105 public:
106     explicit runtime_error(const string&);
107     explicit runtime_error(const char*);
109     runtime_error(const runtime_error&) _NOEXCEPT;
110     runtime_error& operator=(const runtime_error&) _NOEXCEPT;
112     virtual ~runtime_error() _NOEXCEPT;
114     virtual const char* what() const _NOEXCEPT;
115 #else
116 public:
117    explicit runtime_error(const _VSTD::string&); // Symbol uses versioned std::string
118    _LIBCPP_INLINE_VISIBILITY explicit runtime_error(const char* __s) : exception(__s) {}
119 #endif // _LIBCPP_ABI_VCRUNTIME
122 class _LIBCPP_EXCEPTION_ABI domain_error
123     : public logic_error
125 public:
126     _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {}
127     _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s)   : logic_error(__s) {}
129 #ifndef _LIBCPP_ABI_VCRUNTIME
130     domain_error(const domain_error&) _NOEXCEPT = default;
131     virtual ~domain_error() _NOEXCEPT;
132 #endif
135 class _LIBCPP_EXCEPTION_ABI invalid_argument
136     : public logic_error
138 public:
139     _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {}
140     _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s)   : logic_error(__s) {}
142 #ifndef _LIBCPP_ABI_VCRUNTIME
143     invalid_argument(const invalid_argument&) _NOEXCEPT = default;
144     virtual ~invalid_argument() _NOEXCEPT;
145 #endif
148 class _LIBCPP_EXCEPTION_ABI length_error
149     : public logic_error
151 public:
152     _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {}
153     _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s)   : logic_error(__s) {}
154 #ifndef _LIBCPP_ABI_VCRUNTIME
155     length_error(const length_error&) _NOEXCEPT = default;
156     virtual ~length_error() _NOEXCEPT;
157 #endif
160 class _LIBCPP_EXCEPTION_ABI out_of_range
161     : public logic_error
163 public:
164     _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {}
165     _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s)   : logic_error(__s) {}
167 #ifndef _LIBCPP_ABI_VCRUNTIME
168     out_of_range(const out_of_range&) _NOEXCEPT = default;
169     virtual ~out_of_range() _NOEXCEPT;
170 #endif
173 class _LIBCPP_EXCEPTION_ABI range_error
174     : public runtime_error
176 public:
177     _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {}
178     _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s)   : runtime_error(__s) {}
180 #ifndef _LIBCPP_ABI_VCRUNTIME
181     range_error(const range_error&) _NOEXCEPT = default;
182     virtual ~range_error() _NOEXCEPT;
183 #endif
186 class _LIBCPP_EXCEPTION_ABI overflow_error
187     : public runtime_error
189 public:
190     _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {}
191     _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s)   : runtime_error(__s) {}
193 #ifndef _LIBCPP_ABI_VCRUNTIME
194     overflow_error(const overflow_error&) _NOEXCEPT = default;
195     virtual ~overflow_error() _NOEXCEPT;
196 #endif
199 class _LIBCPP_EXCEPTION_ABI underflow_error
200     : public runtime_error
202 public:
203     _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {}
204     _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s)   : runtime_error(__s) {}
206 #ifndef _LIBCPP_ABI_VCRUNTIME
207     underflow_error(const underflow_error&) _NOEXCEPT = default;
208     virtual ~underflow_error() _NOEXCEPT;
209 #endif
212 } // namespace std
214 _LIBCPP_BEGIN_NAMESPACE_STD
216 // in the dylib
217 _LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*);
219 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
220 void __throw_logic_error(const char*__msg)
222 #ifndef _LIBCPP_NO_EXCEPTIONS
223     throw logic_error(__msg);
224 #else
225     ((void)__msg);
226     _VSTD::abort();
227 #endif
230 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
231 void __throw_domain_error(const char*__msg)
233 #ifndef _LIBCPP_NO_EXCEPTIONS
234     throw domain_error(__msg);
235 #else
236     ((void)__msg);
237     _VSTD::abort();
238 #endif
241 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
242 void __throw_invalid_argument(const char*__msg)
244 #ifndef _LIBCPP_NO_EXCEPTIONS
245     throw invalid_argument(__msg);
246 #else
247     ((void)__msg);
248     _VSTD::abort();
249 #endif
252 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
253 void __throw_length_error(const char*__msg)
255 #ifndef _LIBCPP_NO_EXCEPTIONS
256     throw length_error(__msg);
257 #else
258     ((void)__msg);
259     _VSTD::abort();
260 #endif
263 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
264 void __throw_out_of_range(const char*__msg)
266 #ifndef _LIBCPP_NO_EXCEPTIONS
267     throw out_of_range(__msg);
268 #else
269     ((void)__msg);
270     _VSTD::abort();
271 #endif
274 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
275 void __throw_range_error(const char*__msg)
277 #ifndef _LIBCPP_NO_EXCEPTIONS
278     throw range_error(__msg);
279 #else
280     ((void)__msg);
281     _VSTD::abort();
282 #endif
285 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
286 void __throw_overflow_error(const char*__msg)
288 #ifndef _LIBCPP_NO_EXCEPTIONS
289     throw overflow_error(__msg);
290 #else
291     ((void)__msg);
292     _VSTD::abort();
293 #endif
296 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
297 void __throw_underflow_error(const char*__msg)
299 #ifndef _LIBCPP_NO_EXCEPTIONS
300     throw underflow_error(__msg);
301 #else
302     ((void)__msg);
303     _VSTD::abort();
304 #endif
307 _LIBCPP_END_NAMESPACE_STD
309 #endif // _LIBCPP_STDEXCEPT