Mesa (master): mesa: Define introspection macro to determine whether a type is trivially destructible .
Francisco Jerez
currojerez at kemper.freedesktop.org
Tue Oct 29 19:45:40 UTC 2013
Module: Mesa
Branch: master
Commit: 98ab905af0e0eedf0cfbd9c466f6ae587f5b20c9
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=98ab905af0e0eedf0cfbd9c466f6ae587f5b20c9
Author: Francisco Jerez <currojerez at riseup.net>
Date: Wed Oct 9 10:37:21 2013 -0700
mesa: Define introspection macro to determine whether a type is trivially destructible.
Only implemented on GCC and Clang for now. Other compilers use a
dummy implementation that always returns false, which should be a safe
[but slightly inefficient] assumption in all cases.
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
src/mesa/main/compiler.h | 24 +++++++++++++++++++++++-
1 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/src/mesa/main/compiler.h b/src/mesa/main/compiler.h
index 0f27d5a..d806d5b 100644
--- a/src/mesa/main/compiler.h
+++ b/src/mesa/main/compiler.h
@@ -444,7 +444,29 @@ do { \
#define Elements(x) (sizeof(x)/sizeof(*(x)))
#endif
-
+#ifdef __cplusplus
+/**
+ * Macro function that evaluates to true if T is a trivially
+ * destructible type -- that is, if its (non-virtual) destructor
+ * performs no action and all member variables and base classes are
+ * trivially destructible themselves.
+ */
+# if defined(__GNUC__)
+# if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
+# define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+# endif
+# elif (defined(__clang__) && defined(__has_feature))
+# if __has_feature(has_trivial_destructor)
+# define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+# endif
+# endif
+# ifndef HAS_TRIVIAL_DESTRUCTOR
+ /* It's always safe (if inefficient) to assume that a
+ * destructor is non-trivial.
+ */
+# define HAS_TRIVIAL_DESTRUCTOR(T) (false)
+# endif
+#endif
#ifdef __cplusplus
}
More information about the mesa-commit
mailing list