_values \
ctf_enum_value("", 0) /* Dummy, 0-len array forbidden by C99. */ \
};
+#include TRACEPOINT_INCLUDE
+
+/*
+ * Stage 0.9.1
+ * Verifying array and sequence elements are of an integer type.
+ */
+
+/* Reset all macros within TRACEPOINT_EVENT */
+#include <lttng/ust-tracepoint-event-reset.h>
+#include <lttng/ust-tracepoint-event-write.h>
+#include <lttng/ust-tracepoint-event-nowrite.h>
+
+#undef _ctf_array_encoded
+#define _ctf_array_encoded(_type, _item, _src, _byte_order, \
+ _length, _encoding, _nowrite, \
+ _elem_type_base) \
+ _lttng_array_element_type_is_supported(_type, _item)
+
+#undef _ctf_sequence_encoded
+#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, \
+ _length_type, _src_length, _encoding, _nowrite, \
+ _elem_type_base) \
+ _lttng_array_element_type_is_supported(_type, _item)
+
+#undef TP_FIELDS
+#define TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */
+
+#undef TRACEPOINT_EVENT_CLASS
+#define TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \
+ _fields
#include TRACEPOINT_INCLUDE
* SOFTWARE.
*/
+#include <stdint.h>
+
+#if defined (__cplusplus)
+#include <type_traits>
+#endif
+
+#include <lttng/ust-compiler.h>
#include <lttng/ust-config.h>
#include <lttng/ust-version.h>
#define lttng_is_signed_type(type) ((type) -1 < (type) 0)
+/*
+ * This macro adds a compilation assertion that CTF arrays and sequences
+ * declared by the users are of an integral type.
+ */
+
+#if defined(__cplusplus)
+#define _lttng_is_integer(type) (std::is_integral<type>::value)
+#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))
+#endif
+
+#define _lttng_array_element_type_is_supported(_type, _item) \
+ lttng_static_assert(_lttng_is_integer(_type), \
+ "Non-integer type `" #_item "` not supported as element of CTF_ARRAY or CTF_SEQUENCE", \
+ Non_integer_type__##_item##__not_supported_as_element_of_CTF_ARRAY_or_CTF_SEQUENCE);
+
#endif /* _LTTNG_UST_TRACER_H */