# Check for GCC style builtins
foreach b : ['bswap32', 'bswap64', 'clz', 'clzll', 'ctz', 'expect', 'ffs',
- 'ffsll', 'popcount', 'popcountll', 'unreachable']
+ 'ffsll', 'popcount', 'popcountll', 'unreachable', 'types_compatible_p']
if cc.has_function(b)
pre_args += '-DHAVE___BUILTIN_@0@'.format(b.to_upper())
endif
# endif
#endif
+/**
+ * __builtin_types_compatible_p compat
+ */
+#if defined(__cplusplus) || !defined(HAVE___BUILTIN_TYPES_COMPATIBLE_P)
+# define __builtin_types_compatible_p(type1, type2) (1)
+#endif
/**
* Static (compile-time) assertion.
free(queue->data);
}
-#if !defined(__GNUC__) || defined(__cplusplus)
-#define __builtin_types_compatible_p(t1, t2) 1
-#endif
-
#define u_vector_foreach(elem, queue) \
STATIC_ASSERT(__builtin_types_compatible_p(__typeof__(queue), struct u_vector *)); \
for (uint32_t __u_vector_offset = (queue)->tail; \