summaryrefslogtreecommitdiffstats
path: root/src/corelib/global/qglobal.h
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2017-11-21 10:41:45 +0100
committerMarc Mutz <marc.mutz@kdab.com>2017-11-30 13:18:39 +0000
commitc6497e3eac1ac81497f02b40ea7f140a997b4f29 (patch)
treeaa969b1bd80c66e790413e59195eb8b24370cf18 /src/corelib/global/qglobal.h
parent7967c40303604bf1a02fe987ffc667e4e55d9af2 (diff)
Mark some functions as cold
Add Q_DECL_COLD_FUNCTION (__attribute__((cold))) to tell the compiler that the following functions are not usually executed in normal programs: - qWarning/qCritical/qFatal - qTerminate - assertion failure - qBadAlloc The effect of the attribute is that 1. These functions get put into their own section, .text.unlikely, and will be optimized for size, not speed. 2. Conditions that lead to one of these functions are automatically marked as unlikely (something we have done manually in the past) 3. (anecdotal) the compiler is less likely to inline these functions Text size effect of this change over all of QtBase: ~27KiB text size saved, of which 11KiB in QtCore alone. Change-Id: If308d4a4b9ff8f7934316c54b161a78ebe3f4205 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/global/qglobal.h')
-rw-r--r--src/corelib/global/qglobal.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 203c9a9da4..d439085dbc 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -706,7 +706,7 @@ inline void qt_noop(void) {}
# define QT_CATCH(A) catch (A)
# define QT_THROW(A) throw A
# define QT_RETHROW throw
-Q_NORETURN Q_CORE_EXPORT void qTerminate() Q_DECL_NOTHROW;
+Q_NORETURN Q_DECL_COLD_FUNCTION Q_CORE_EXPORT void qTerminate() Q_DECL_NOTHROW;
# ifdef Q_COMPILER_NOEXCEPT
# define QT_TERMINATE_ON_EXCEPTION(expr) do { expr; } while (false)
# else
@@ -749,11 +749,13 @@ Q_CORE_EXPORT Q_DECL_CONST_FUNCTION bool qSharedBuild() Q_DECL_NOTHROW;
#endif
class QString;
+Q_DECL_COLD_FUNCTION
Q_CORE_EXPORT QString qt_error_string(int errorCode = -1);
#ifndef Q_CC_MSVC
Q_NORETURN
#endif
+Q_DECL_COLD_FUNCTION
Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line) Q_DECL_NOTHROW;
#if !defined(Q_ASSERT)
@@ -771,6 +773,7 @@ Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line)
#ifndef Q_CC_MSVC
Q_NORETURN
#endif
+Q_DECL_COLD_FUNCTION
Q_CORE_EXPORT void qt_assert_x(const char *where, const char *what, const char *file, int line) Q_DECL_NOTHROW;
#if !defined(Q_ASSERT_X)
@@ -782,6 +785,7 @@ Q_CORE_EXPORT void qt_assert_x(const char *where, const char *what, const char *
#endif
Q_NORETURN Q_CORE_EXPORT void qt_check_pointer(const char *, int) Q_DECL_NOTHROW;
+Q_DECL_COLD_FUNCTION
Q_CORE_EXPORT void qBadAlloc();
#ifdef QT_NO_EXCEPTIONS