diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2022-10-03 20:53:35 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2022-10-04 15:03:28 +0100 |
commit | 7d8189882fc89f6f410fc9bcf0f8226787316f83 (patch) | |
tree | c4c80ffead08cf04e46cd2178aeb4736c9639621 /libstdc++-v3 | |
parent | 147f6ed39f66a3812a27d0ecd154c8efc1918688 (diff) | |
download | gcc-7d8189882fc89f6f410fc9bcf0f8226787316f83.zip gcc-7d8189882fc89f6f410fc9bcf0f8226787316f83.tar.gz gcc-7d8189882fc89f6f410fc9bcf0f8226787316f83.tar.bz2 |
libstdc++: Define <bits/functexcept.h> functions for freestanding [PR107135]
We don't compile src/c++11/functexcept.cc for freestanding, so just
define the functions used by freestanding entities as inline calls to
std::terminate.
libstdc++-v3/ChangeLog:
PR libstdc++/107135
* include/bits/functexcept.h [!_GLIBCXX_HOSTED]
(__throw_invalid_argument, __throw_out_of_range)
(__throw_out_of_range_fmt, __throw_runtime_error)
(__throw_overflow_error): Define inline.
* include/std/bitset (_M_copy_from_ptr) [!_GLIBCXX_HOSTED]:
Replace __builtin_abort with __throw_invalid_argument.
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/include/bits/functexcept.h | 25 | ||||
-rw-r--r-- | libstdc++-v3/include/std/bitset | 8 |
2 files changed, 26 insertions, 7 deletions
diff --git a/libstdc++-v3/include/bits/functexcept.h b/libstdc++-v3/include/bits/functexcept.h index a78a17b..7fad4b1 100644 --- a/libstdc++-v3/include/bits/functexcept.h +++ b/libstdc++-v3/include/bits/functexcept.h @@ -43,6 +43,7 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION +#if _GLIBCXX_HOSTED // Helper for exception objects in <except> void __throw_bad_exception(void) __attribute__((__noreturn__)); @@ -112,6 +113,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void __throw_bad_function_call() __attribute__((__noreturn__)); +#else // ! HOSTED + + __attribute__((__noreturn__)) inline void + __throw_invalid_argument(const char*) + { std::__terminate(); } + + __attribute__((__noreturn__)) inline void + __throw_out_of_range(const char*) + { std::__terminate(); } + + __attribute__((__noreturn__)) inline void + __throw_out_of_range_fmt(const char*, ...) + { std::__terminate(); } + + __attribute__((__noreturn__)) inline void + __throw_runtime_error(const char*) + { std::__terminate(); } + + __attribute__((__noreturn__)) inline void + __throw_overflow_error(const char*) + { std::__terminate(); } + +#endif // HOSTED + _GLIBCXX_END_NAMESPACE_VERSION } // namespace diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset index afabeb4..1f3f68f 100644 --- a/libstdc++-v3/include/std/bitset +++ b/libstdc++-v3/include/std/bitset @@ -1514,13 +1514,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER else if (_Traits::eq(__c, __one)) _Unchecked_set(__i - 1); else - { -#if _GLIBCXX_HOSTED - __throw_invalid_argument(__N("bitset::_M_copy_from_ptr")); -#else - __builtin_abort(); -#endif - } + __throw_invalid_argument(__N("bitset::_M_copy_from_ptr")); } } |