From: Mathieu Desnoyers Date: Mon, 27 Apr 2020 07:12:11 +0000 (-0400) Subject: Fix: use underlying types for array and sequence assertion X-Git-Tag: v2.13.0-rc1~500 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=029ba7b267745ada271dcc18f8b1880e27510932;p=lttng-ust.git Fix: use underlying types for array and sequence assertion 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 --- diff --git a/include/lttng/ust-tracer.h b/include/lttng/ust-tracer.h index c04d6247..546fc2c5 100644 --- a/include/lttng/ust-tracer.h +++ b/include/lttng/ust-tracer.h @@ -27,8 +27,6 @@ * SOFTWARE. */ -#include - #if defined (__cplusplus) #include #endif @@ -64,14 +62,15 @@ #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) \