From 029ba7b267745ada271dcc18f8b1880e27510932 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 27 Apr 2020 03:12:11 -0400 Subject: [PATCH] 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 --- include/lttng/ust-tracer.h | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) 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) \ -- 2.34.1