Mesa (master): util: Implement assume() for clang.

Matt Turner mattst88 at kemper.freedesktop.org
Mon Nov 24 22:12:35 UTC 2014


Module: Mesa
Branch: master
Commit: 99cebffda9cd2d42edd6c1cbeceb994e6b320c5a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=99cebffda9cd2d42edd6c1cbeceb994e6b320c5a

Author: Matt Turner <mattst88 at gmail.com>
Date:   Fri Nov 21 13:50:14 2014 -0800

util: Implement assume() for clang.

Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

---

 src/util/macros.h |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/util/macros.h b/src/util/macros.h
index da5daff..5fc6729 100644
--- a/src/util/macros.h
+++ b/src/util/macros.h
@@ -29,6 +29,10 @@
 #  define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
 #endif
 
+/* For compatibility with Clang's __has_builtin() */
+#ifndef __has_builtin
+#  define __has_builtin(x) 0
+#endif
 
 /**
  * __builtin_expect macros
@@ -85,7 +89,13 @@ do {                        \
  * Assume macro. Useful for expressing our assumptions to the compiler,
  * typically for purposes of silencing warnings.
  */
-#ifdef HAVE___BUILTIN_UNREACHABLE
+#if __has_builtin(__builtin_assume)
+#define assume(expr)       \
+do {                       \
+   assert(expr);           \
+   __builtin_assume(expr); \
+} while (0)
+#elif defined HAVE___BUILTIN_UNREACHABLE
 #define assume(expr) ((expr) ? ((void) 0) \
                              : (assert(!"assumption failed"), \
                                 __builtin_unreachable()))




More information about the mesa-commit mailing list