Fix: use underlying types for array and sequence assertion
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 27 Apr 2020 07:12:11 +0000 (03:12 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 27 Apr 2020 07:19:23 +0000 (03:19 -0400)
Based on https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html:

"Built-in Function: int __builtin_types_compatible_p (type1, type2)

[...] two types that are typedefed are considered compatible if
their underlying types are compatible."

This definition explains why listing all the {u,}intX_t types misses
the underlying type "long" on 32-bit architectures which rely on
"long long" for 64-bit integers. Therefore, list all the underlying
integer types.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/lttng/ust-tracer.h

index c04d6247f57e0a3af082bed1ff1799594871ed4b..546fc2c5422cbfde9a0c38d16b43ebff0f1dd93b 100644 (file)
@@ -27,8 +27,6 @@
  * SOFTWARE.
  */
 
-#include <stdint.h>
-
 #if defined (__cplusplus)
 #include <type_traits>
 #endif
 #else
 #define _lttng_is_integer(type) (__builtin_types_compatible_p(type, _Bool) || \
                __builtin_types_compatible_p(type, char) || \
-               __builtin_types_compatible_p(type, int8_t) || \
-               __builtin_types_compatible_p(type, uint8_t) || \
-               __builtin_types_compatible_p(type, int16_t) || \
-               __builtin_types_compatible_p(type, uint16_t) || \
-               __builtin_types_compatible_p(type, int32_t) || \
-               __builtin_types_compatible_p(type, uint32_t) || \
-               __builtin_types_compatible_p(type, int64_t) || \
-               __builtin_types_compatible_p(type, uint64_t))
+               __builtin_types_compatible_p(type, unsigned char) || \
+               __builtin_types_compatible_p(type, short) || \
+               __builtin_types_compatible_p(type, unsigned short) || \
+               __builtin_types_compatible_p(type, int) || \
+               __builtin_types_compatible_p(type, unsigned int) || \
+               __builtin_types_compatible_p(type, long) || \
+               __builtin_types_compatible_p(type, unsigned long) || \
+               __builtin_types_compatible_p(type, long long) || \
+               __builtin_types_compatible_p(type, unsigned long long))
 #endif
 
 #define _lttng_array_element_type_is_supported(_type, _item) \
This page took 0.025589 seconds and 4 git commands to generate.