https://gcc.gnu.org/g:17db5742a555d4f8fd5fa324adb6d1e5c55374be
commit r15-5732-g17db5742a555d4f8fd5fa324adb6d1e5c55374be Author: Jonathan Wakely <jwak...@redhat.com> Date: Wed Nov 27 11:52:40 2024 +0000 libstdc++: Add cold attribute to assertion failure functions [PR117650] This helps the compiler to split the cold path into a separate clone, so that the hot path is a smaller function that uses less icache, and the cold path is only fetched into the icache if actually executed. libstdc++-v3/ChangeLog: PR libstdc++/117650 * include/bits/c++config (__glibcxx_assert_fail): Add cold attribute. * include/debug/formatter.h (_Error_formatter::_M_error): Likewise. Diff: --- libstdc++-v3/include/bits/c++config | 2 +- libstdc++-v3/include/debug/formatter.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 236906d2f79f..c74b03013fdb 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -610,7 +610,7 @@ namespace std { #pragma GCC visibility push(default) // Don't use <cassert> because this should be unaffected by NDEBUG. - extern "C++" _GLIBCXX_NORETURN + extern "C++" _GLIBCXX_NORETURN __attribute__((__cold__)) void __glibcxx_assert_fail /* Called when a precondition violation is detected. */ (const char* __file, int __line, const char* __function, diff --git a/libstdc++-v3/include/debug/formatter.h b/libstdc++-v3/include/debug/formatter.h index 4f5a4539bb9f..df7f6965a4c8 100644 --- a/libstdc++-v3/include/debug/formatter.h +++ b/libstdc++-v3/include/debug/formatter.h @@ -571,7 +571,7 @@ namespace __gnu_debug _Error_formatter& _M_message(_Debug_msg_id __id) const throw (); - _GLIBCXX_NORETURN void + _GLIBCXX_NORETURN __attribute__((__cold__)) void _M_error() const; #if !_GLIBCXX_INLINE_VERSION