From 1f7182d68c24985dace2a94422c671ff987c262c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 14 Jul 2021 12:25:11 +0100 Subject: [PATCH] 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 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. --- libstdc++-v3/include/bits/c++config | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 9314117..69ace38 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 @@ -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) -- 2.7.4