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

Reply via email to