From: Jonathan Wakely Date: Wed, 14 Jul 2021 11:25:11 +0000 (+0100) Subject: libstdc++: Add noexcept to __replacement_assert [PR101429] X-Git-Tag: upstream/12.2.0~6371 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1f7182d68c24985dace2a94422c671ff987c262c;p=platform%2Fupstream%2Fgcc.git 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. --- 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)