This results in slightly smaller code when assertions are enabled when either using Clang (because it adds code to call std::terminate when potentially-throwing functions are called in a noexcept function) or a freestanding or non-verbose build (because it doesn't use printf).
Signed-off-by: Jonathan Wakely <jwak...@redhat.com> libstdc++-v3/ChangeLog: PR libstdc++/101429 * include/bits/c++config (__replacement_assert): Add noexcept. [!_GLIBCXX_VERBOSE] (__glibcxx_assert_impl): Use __builtin_trap instead of __replacement_assert. Tested powerpc64le-linux. Committed to trunk.
commit 1f7182d68c24985dace2a94422c671ff987c262c Author: Jonathan Wakely <jwak...@redhat.com> Date: Wed Jul 14 12:25:11 2021 libstdc++: Add noexcept to __replacement_assert [PR101429] This results in slightly smaller code when assertions are enabled when either using Clang (because it adds code to call std::terminate when potentially-throwing functions are called in a noexcept function) or a freestanding or non-verbose build (because it doesn't use printf). Signed-off-by: Jonathan Wakely <jwak...@redhat.com> libstdc++-v3/ChangeLog: PR libstdc++/101429 * include/bits/c++config (__replacement_assert): Add noexcept. [!_GLIBCXX_VERBOSE] (__glibcxx_assert_impl): Use __builtin_trap instead of __replacement_assert. diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 9314117aed8..69ace386dd7 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -500,6 +500,7 @@ namespace std // Assert. #if defined(_GLIBCXX_ASSERTIONS) \ || defined(_GLIBCXX_PARALLEL) || defined(_GLIBCXX_PARALLEL_ASSERTIONS) +# if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE namespace std { // Avoid the use of assert, because we're trying to keep the <cassert> @@ -508,6 +509,7 @@ namespace std inline void __replacement_assert(const char* __file, int __line, const char* __function, const char* __condition) + _GLIBCXX_NOEXCEPT { __builtin_printf("%s:%d: %s: Assertion '%s' failed.\n", __file, __line, __function, __condition); @@ -517,10 +519,18 @@ namespace std #define __glibcxx_assert_impl(_Condition) \ if (__builtin_expect(!bool(_Condition), false)) \ { \ - __glibcxx_constexpr_assert(_Condition); \ + __glibcxx_constexpr_assert(false); \ std::__replacement_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \ #_Condition); \ } +# else // ! VERBOSE +# define __glibcxx_assert_impl(_Condition) \ + if (__builtin_expect(!bool(_Condition), false)) \ + { \ + __glibcxx_constexpr_assert(false); \ + __builtin_abort(); \ + } +#endif #endif #if defined(_GLIBCXX_ASSERTIONS)