aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2023-06-28 11:45:15 +0200
committerJan Hubicka <jh@suse.cz>2023-06-28 11:47:11 +0200
commit45c53768b6fa3d737ae818e31d3c50da62e0ad2b (patch)
tree35611361bc35f893d2b4a1c0a5f5607ba5eee63e
parent51c8cbc6bba387f953d9be48c4a4c8b657dd54a5 (diff)
downloadgcc-45c53768b6fa3d737ae818e31d3c50da62e0ad2b.zip
gcc-45c53768b6fa3d737ae818e31d3c50da62e0ad2b.tar.gz
gcc-45c53768b6fa3d737ae818e31d3c50da62e0ad2b.tar.bz2
Add cold attribute to throw wrappers and terminate
PR middle-end/109849 * include/bits/c++config (std::__terminate): Mark cold. * include/bits/functexcept.h: Mark everything as cold. * libsupc++/exception: Mark terminate and unexpected as cold.
-rw-r--r--libstdc++-v3/include/bits/c++config2
-rw-r--r--libstdc++-v3/include/bits/functexcept.h34
-rw-r--r--libstdc++-v3/libsupc++/exception4
3 files changed, 20 insertions, 20 deletions
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 009a017..dd47f27 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -320,7 +320,7 @@ namespace std
extern "C++" __attribute__ ((__noreturn__, __always_inline__))
inline void __terminate() _GLIBCXX_USE_NOEXCEPT
{
- void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__));
+ void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__,__cold__));
terminate();
}
#pragma GCC visibility pop
diff --git a/libstdc++-v3/include/bits/functexcept.h b/libstdc++-v3/include/bits/functexcept.h
index 89972ba..c43ca82 100644
--- a/libstdc++-v3/include/bits/functexcept.h
+++ b/libstdc++-v3/include/bits/functexcept.h
@@ -57,61 +57,61 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Helper for exception objects in <typeinfo>
void
- __throw_bad_cast(void) __attribute__((__noreturn__));
+ __throw_bad_cast(void) __attribute__((__noreturn__,__cold__));
void
- __throw_bad_typeid(void) __attribute__((__noreturn__));
+ __throw_bad_typeid(void) __attribute__((__noreturn__,__cold__));
// Helpers for exception objects in <stdexcept>
void
- __throw_logic_error(const char*) __attribute__((__noreturn__));
+ __throw_logic_error(const char*) __attribute__((__noreturn__,__cold__));
void
- __throw_domain_error(const char*) __attribute__((__noreturn__));
+ __throw_domain_error(const char*) __attribute__((__noreturn__,__cold__));
void
- __throw_invalid_argument(const char*) __attribute__((__noreturn__));
+ __throw_invalid_argument(const char*) __attribute__((__noreturn__,__cold__));
void
- __throw_length_error(const char*) __attribute__((__noreturn__));
+ __throw_length_error(const char*) __attribute__((__noreturn__,__cold__));
void
- __throw_out_of_range(const char*) __attribute__((__noreturn__));
+ __throw_out_of_range(const char*) __attribute__((__noreturn__,__cold__));
void
- __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__))
+ __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__,__cold__))
__attribute__((__format__(__gnu_printf__, 1, 2)));
void
- __throw_runtime_error(const char*) __attribute__((__noreturn__));
+ __throw_runtime_error(const char*) __attribute__((__noreturn__,__cold__));
void
- __throw_range_error(const char*) __attribute__((__noreturn__));
+ __throw_range_error(const char*) __attribute__((__noreturn__,__cold__));
void
- __throw_overflow_error(const char*) __attribute__((__noreturn__));
+ __throw_overflow_error(const char*) __attribute__((__noreturn__,__cold__));
void
- __throw_underflow_error(const char*) __attribute__((__noreturn__));
+ __throw_underflow_error(const char*) __attribute__((__noreturn__,__cold__));
// Helpers for exception objects in <ios>
void
- __throw_ios_failure(const char*) __attribute__((__noreturn__));
+ __throw_ios_failure(const char*) __attribute__((__noreturn__,__cold__));
void
- __throw_ios_failure(const char*, int) __attribute__((__noreturn__));
+ __throw_ios_failure(const char*, int) __attribute__((__noreturn__,__cold__));
// Helpers for exception objects in <system_error>
void
- __throw_system_error(int) __attribute__((__noreturn__));
+ __throw_system_error(int) __attribute__((__noreturn__,__cold__));
// Helpers for exception objects in <future>
void
- __throw_future_error(int) __attribute__((__noreturn__));
+ __throw_future_error(int) __attribute__((__noreturn__,__cold__));
// Helpers for exception objects in <functional>
void
- __throw_bad_function_call() __attribute__((__noreturn__));
+ __throw_bad_function_call() __attribute__((__noreturn__,__cold__));
#else // ! HOSTED
diff --git a/libstdc++-v3/libsupc++/exception b/libstdc++-v3/libsupc++/exception
index a34386e..00a6347 100644
--- a/libstdc++-v3/libsupc++/exception
+++ b/libstdc++-v3/libsupc++/exception
@@ -75,7 +75,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
/** The runtime will call this function if %exception handling must be
* abandoned for any reason. It can also be called by the user. */
- void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__));
+ void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__,__cold__));
#if __cplusplus < 201703L || (__cplusplus <= 202002L && _GLIBCXX_USE_DEPRECATED)
/// If you write a replacement %unexpected handler, it must be of this type.
@@ -104,7 +104,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
* @deprecated Removed from the C++ standard in C++17
*/
_GLIBCXX11_DEPRECATED
- void unexpected() __attribute__ ((__noreturn__));
+ void unexpected() __attribute__ ((__noreturn__,__cold__));
#endif
/** [18.6.4]/1: 'Returns true after completing evaluation of a