From 2fe90a61bdf16bb1a08817ba544e2309b524a052 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 30 Jun 2014 14:34:39 -0700 Subject: Mark all QChar static functions as [[gnu::const]] The GCC documentation says that a const function is not allowed to read global memory. This needs to be clarified: it's not allowed to read RW global memory. It's fine to read read-only memory, as that is equivalent to just pure code. The QChar static out-of-line functions only lookup a property of the given Unicode character and always return the same value. The only exception is the decomposition() function, which returns a QString and is therefore not allowed to be marked const. Change-Id: Id36b2f84a1b8ff9db5acf1d4e59e8b3811068cff Reviewed-by: Konstantin Ritt Reviewed-by: Giuseppe D'Angelo --- src/corelib/tools/qchar.cpp | 8 ++--- src/corelib/tools/qchar.h | 64 ++++++++++++++++++------------------ src/corelib/tools/qunicodetables.cpp | 8 ++--- util/unicode/main.cpp | 8 ++--- 4 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp index eb59cc719f..656e57391f 100644 --- a/src/corelib/tools/qchar.cpp +++ b/src/corelib/tools/qchar.cpp @@ -1398,7 +1398,7 @@ QChar::UnicodeVersion QChar::currentUnicodeVersion() template -static inline T toLowerCase_helper(T uc) +Q_DECL_CONST_FUNCTION static inline T toLowerCase_helper(T uc) { const QUnicodeTables::Properties *p = qGetProp(uc); if (p->lowerCaseSpecial) { @@ -1409,7 +1409,7 @@ static inline T toLowerCase_helper(T uc) } template -static inline T toUpperCase_helper(T uc) +Q_DECL_CONST_FUNCTION static inline T toUpperCase_helper(T uc) { const QUnicodeTables::Properties *p = qGetProp(uc); if (p->upperCaseSpecial) { @@ -1420,7 +1420,7 @@ static inline T toUpperCase_helper(T uc) } template -static inline T toTitleCase_helper(T uc) +Q_DECL_CONST_FUNCTION static inline T toTitleCase_helper(T uc) { const QUnicodeTables::Properties *p = qGetProp(uc); if (p->titleCaseSpecial) { @@ -1431,7 +1431,7 @@ static inline T toTitleCase_helper(T uc) } template -static inline T toCaseFolded_helper(T uc) +Q_DECL_CONST_FUNCTION static inline T toCaseFolded_helper(T uc) { const QUnicodeTables::Properties *p = qGetProp(uc); if (p->caseFoldSpecial) { diff --git a/src/corelib/tools/qchar.h b/src/corelib/tools/qchar.h index 11969e12d3..5dfd7b30f9 100644 --- a/src/corelib/tools/qchar.h +++ b/src/corelib/tools/qchar.h @@ -450,50 +450,50 @@ public: return ushort(ucs4%0x400 + 0xdc00); } - static Category QT_FASTCALL category(uint ucs4); - static Direction QT_FASTCALL direction(uint ucs4); - static JoiningType QT_FASTCALL joiningType(uint ucs4); + static Category QT_FASTCALL category(uint ucs4) Q_DECL_CONST_FUNCTION; + static Direction QT_FASTCALL direction(uint ucs4) Q_DECL_CONST_FUNCTION; + static JoiningType QT_FASTCALL joiningType(uint ucs4) Q_DECL_CONST_FUNCTION; #if QT_DEPRECATED_SINCE(5, 3) - QT_DEPRECATED static Joining QT_FASTCALL joining(uint ucs4); + QT_DEPRECATED static Joining QT_FASTCALL joining(uint ucs4) Q_DECL_CONST_FUNCTION; #endif - static unsigned char QT_FASTCALL combiningClass(uint ucs4); + static unsigned char QT_FASTCALL combiningClass(uint ucs4) Q_DECL_CONST_FUNCTION; - static uint QT_FASTCALL mirroredChar(uint ucs4); - static bool QT_FASTCALL hasMirrored(uint ucs4); + static uint QT_FASTCALL mirroredChar(uint ucs4) Q_DECL_CONST_FUNCTION; + static bool QT_FASTCALL hasMirrored(uint ucs4) Q_DECL_CONST_FUNCTION; static QString QT_FASTCALL decomposition(uint ucs4); - static Decomposition QT_FASTCALL decompositionTag(uint ucs4); + static Decomposition QT_FASTCALL decompositionTag(uint ucs4) Q_DECL_CONST_FUNCTION; - static int QT_FASTCALL digitValue(uint ucs4); - static uint QT_FASTCALL toLower(uint ucs4); - static uint QT_FASTCALL toUpper(uint ucs4); - static uint QT_FASTCALL toTitleCase(uint ucs4); - static uint QT_FASTCALL toCaseFolded(uint ucs4); + static int QT_FASTCALL digitValue(uint ucs4) Q_DECL_CONST_FUNCTION; + static uint QT_FASTCALL toLower(uint ucs4) Q_DECL_CONST_FUNCTION; + static uint QT_FASTCALL toUpper(uint ucs4) Q_DECL_CONST_FUNCTION; + static uint QT_FASTCALL toTitleCase(uint ucs4) Q_DECL_CONST_FUNCTION; + static uint QT_FASTCALL toCaseFolded(uint ucs4) Q_DECL_CONST_FUNCTION; - static Script QT_FASTCALL script(uint ucs4); + static Script QT_FASTCALL script(uint ucs4) Q_DECL_CONST_FUNCTION; - static UnicodeVersion QT_FASTCALL unicodeVersion(uint ucs4); + static UnicodeVersion QT_FASTCALL unicodeVersion(uint ucs4) Q_DECL_CONST_FUNCTION; - static UnicodeVersion QT_FASTCALL currentUnicodeVersion(); + static UnicodeVersion QT_FASTCALL currentUnicodeVersion() Q_DECL_CONST_FUNCTION; - static bool QT_FASTCALL isPrint(uint ucs4); - static inline bool isSpace(uint ucs4); - static bool QT_FASTCALL isMark(uint ucs4); - static bool QT_FASTCALL isPunct(uint ucs4); - static bool QT_FASTCALL isSymbol(uint ucs4); - static inline bool isLetter(uint ucs4); - static inline bool isNumber(uint ucs4); - static inline bool isLetterOrNumber(uint ucs4); - static inline bool isDigit(uint ucs4); - static inline bool isLower(uint ucs4); - static inline bool isUpper(uint ucs4); - static inline bool isTitleCase(uint ucs4); + static bool QT_FASTCALL isPrint(uint ucs4) Q_DECL_CONST_FUNCTION; + static inline bool isSpace(uint ucs4) Q_DECL_CONST_FUNCTION; + static bool QT_FASTCALL isMark(uint ucs4) Q_DECL_CONST_FUNCTION; + static bool QT_FASTCALL isPunct(uint ucs4) Q_DECL_CONST_FUNCTION; + static bool QT_FASTCALL isSymbol(uint ucs4) Q_DECL_CONST_FUNCTION; + static inline bool isLetter(uint ucs4) Q_DECL_CONST_FUNCTION; + static inline bool isNumber(uint ucs4) Q_DECL_CONST_FUNCTION; + static inline bool isLetterOrNumber(uint ucs4) Q_DECL_CONST_FUNCTION; + static inline bool isDigit(uint ucs4) Q_DECL_CONST_FUNCTION; + static inline bool isLower(uint ucs4) Q_DECL_CONST_FUNCTION; + static inline bool isUpper(uint ucs4) Q_DECL_CONST_FUNCTION; + static inline bool isTitleCase(uint ucs4) Q_DECL_CONST_FUNCTION; private: - static bool QT_FASTCALL isSpace_helper(uint ucs4); - static bool QT_FASTCALL isLetter_helper(uint ucs4); - static bool QT_FASTCALL isNumber_helper(uint ucs4); - static bool QT_FASTCALL isLetterOrNumber_helper(uint ucs4); + static bool QT_FASTCALL isSpace_helper(uint ucs4) Q_DECL_CONST_FUNCTION; + static bool QT_FASTCALL isLetter_helper(uint ucs4) Q_DECL_CONST_FUNCTION; + static bool QT_FASTCALL isNumber_helper(uint ucs4) Q_DECL_CONST_FUNCTION; + static bool QT_FASTCALL isLetterOrNumber_helper(uint ucs4) Q_DECL_CONST_FUNCTION; #ifdef QT_NO_CAST_FROM_ASCII QChar(char c); diff --git a/src/corelib/tools/qunicodetables.cpp b/src/corelib/tools/qunicodetables.cpp index 41a22a779a..a351533a98 100644 --- a/src/corelib/tools/qunicodetables.cpp +++ b/src/corelib/tools/qunicodetables.cpp @@ -6920,24 +6920,24 @@ static const Properties uc_properties[] = { { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 } }; -static inline const Properties *qGetProp(uint ucs4) +Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(uint ucs4) { const int index = GET_PROP_INDEX(ucs4); return uc_properties + index; } -static inline const Properties *qGetProp(ushort ucs2) +Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(ushort ucs2) { const int index = GET_PROP_INDEX_UCS2(ucs2); return uc_properties + index; } -Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) +Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) { return qGetProp(ucs4); } -Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2) +Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2) { return qGetProp(ucs2); } diff --git a/util/unicode/main.cpp b/util/unicode/main.cpp index 4f941d0eb3..0747238b8e 100644 --- a/util/unicode/main.cpp +++ b/util/unicode/main.cpp @@ -2401,24 +2401,24 @@ static QByteArray createPropertyInfo() out += "\n};\n\n"; - out += "static inline const Properties *qGetProp(uint ucs4)\n" + out += "Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(uint ucs4)\n" "{\n" " const int index = GET_PROP_INDEX(ucs4);\n" " return uc_properties + index;\n" "}\n" "\n" - "static inline const Properties *qGetProp(ushort ucs2)\n" + "Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(ushort ucs2)\n" "{\n" " const int index = GET_PROP_INDEX_UCS2(ucs2);\n" " return uc_properties + index;\n" "}\n" "\n" - "Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4)\n" + "Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4)\n" "{\n" " return qGetProp(ucs4);\n" "}\n" "\n" - "Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2)\n" + "Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2)\n" "{\n" " return qGetProp(ucs2);\n" "}\n\n"; -- cgit v1.2.3