Coverage Report

Created: 2024-09-08 06:18

/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