From d85983ece7223d733ab87b0b9a8cca3aa246a406 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Sat, 1 Mar 2014 14:12:33 +0100 Subject: [PATCH] Introduce Q_DECL_CONST_FUNCTION and Q_DECL_PURE_FUNCTION That expand to __attribute__((const)) and ((pure)). A "const" function is a function allowed to examine only its arguments, without modifying them. A "pure" function is also allowed to read memory. Currently working only on GCC/ICC/Clang, MSVC lacks these. Change-Id: Ie60a0847b193fb88e116f61611dc571296a3df1c Reviewed-by: Marc Mutz --- doc/global/qt-cpp-defines.qdocconf | 2 ++ src/corelib/global/qcompilerdetection.h | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/doc/global/qt-cpp-defines.qdocconf b/doc/global/qt-cpp-defines.qdocconf index bbf1dda2e67..b2205f54acc 100644 --- a/doc/global/qt-cpp-defines.qdocconf +++ b/doc/global/qt-cpp-defines.qdocconf @@ -27,9 +27,11 @@ Cpp.ignoretokens += \ Q_CORE_EXPORT_INLINE \ Q_DBUS_EXPORT \ Q_DECL_CONSTEXPR \ + Q_DECL_CONST_FUNCTION \ Q_DECL_DEPRECATED \ Q_DECL_NOEXCEPT \ Q_DECL_NOTHROW \ + Q_DECL_PURE_FUNCTION \ Q_DECL_UNUSED \ Q_DECLARATIVE_EXPORT \ Q_EXPLICIT \ diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index 1eb442aa5f6..a9f143502ea 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -200,6 +200,8 @@ # define Q_UNLIKELY(expr) __builtin_expect(!!(expr), false) # define Q_NORETURN __attribute__((__noreturn__)) # define Q_REQUIRED_RESULT __attribute__ ((__warn_unused_result__)) +# define Q_DECL_PURE_FUNCTION __attribute__((pure)) +# define Q_DECL_CONST_FUNCTION __attribute__((const)) # if !defined(QT_MOC_CPP) # define Q_PACKED __attribute__ ((__packed__)) # ifndef __ARM_EABI__ @@ -975,6 +977,12 @@ #ifndef Q_DECL_NS_RETURNS_AUTORELEASED # define Q_DECL_NS_RETURNS_AUTORELEASED #endif +#ifndef Q_DECL_PURE_FUNCTION +# define Q_DECL_PURE_FUNCTION +#endif +#ifndef Q_DECL_CONST_FUNCTION +# define Q_DECL_CONST_FUNCTION Q_DECL_PURE_FUNCTION +#endif /* Workaround for static const members on MSVC++.