diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2011-12-31 00:15:06 -0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-24 19:07:22 +0100 |
commit | ad81f75429f6c5586d667880f90f4a425f1ce968 (patch) | |
tree | 543600f4a8d20c8be210a0008cc5ab4dd4116148 /src/corelib/global/qcompilerdetection.h | |
parent | 4131c323a36ee8680a3b4d66a2a03a00544751c2 (diff) |
Add macros for assuming and unreachable code
Use these macros to tell the compiler about conditions that may
happen, so it will generate better code. But do not assume that they
will do anything special.
Change-Id: I89ec4f65f48a9340ccf5ffc4ae4b8c3d8897c8b1
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/global/qcompilerdetection.h')
-rw-r--r-- | src/corelib/global/qcompilerdetection.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index f3f0302072..c9f59454b2 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -88,6 +88,8 @@ # define Q_NO_TEMPLATE_FRIENDS # define Q_ALIGNOF(type) __alignof(type) # define Q_DECL_ALIGN(n) __declspec(align(n)) +# define Q_ASSUME(expr) __assume(expr) +# define Q_UNREACHABLE() __assume(0) /* Intel C++ disguising as Visual C++: the `using' keyword avoids warnings */ # if defined(__INTEL_COMPILER) # define Q_CC_INTEL @@ -141,11 +143,17 @@ # if defined(__INTEL_COMPILER) /* Intel C++ also masquerades as GCC */ # define Q_CC_INTEL +# define Q_ASSUME(expr) __assume(expr) +# define Q_UNREACHABLE() __assume(0) # elif defined(__clang__) /* Clang also masquerades as GCC */ # define Q_CC_CLANG +# define Q_ASSUME(expr) if (expr){} else __builtin_unreachable() +# define Q_UNREACHABLE() __builtin_unreachable() # else /* Plain GCC */ +# define Q_ASSUME(expr) if (expr){} else __builtin_unreachable() +# define Q_UNREACHABLE() __builtin_unreachable() # endif # define Q_ALIGNOF(type) __alignof__(type) |