Fix: disable array/sequence compile-time type check in C
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 17 Aug 2022 19:10:58 +0000 (15:10 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 17 Aug 2022 19:19:21 +0000 (15:19 -0400)
Disable this compile-time check in C. Indeed, the C implementation of
lttng_ust_is_pointer_type does not support opaque pointer types, because
it relies on pointer arithmetic.

Therefore, remove this check to keep supporting opaque pointers as
array/sequence elements in probe providers.

The worse that could happen is that users providing an unsupported
type as array/sequence element will end up with a meaningless integer
field.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I0fa170f7af7fc016027685e48076ebaf0366cc5b

include/lttng/ust-tracepoint-event.h
include/lttng/ust-utils.h

index 1edb50c13d295cac4d0f973223dc1c3453ee285e..7771518aa20a1ce6f4ba4c9d99ba2093f54c7ef9 100644 (file)
@@ -257,9 +257,16 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG
        };
 #include LTTNG_UST_TRACEPOINT_INCLUDE
 
+#if defined(__cplusplus)
+
 /*
  * Stage 0.9.1
- * Verifying array and sequence elements are of an integer type.
+ * Verifying array and sequence elements are of an integer or pointer
+ * type.
+ *
+ * This compile-time check is only enabled in C++, because the C
+ * implementation of lttng_ust_is_pointer_type does not support opaque
+ * pointer types.
  */
 
 /* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */
@@ -288,6 +295,8 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG
 
 #include LTTNG_UST_TRACEPOINT_INCLUDE
 
+#endif
+
 /*
  * Stage 0.9.2 of tracepoint event generation.
  *
index 7cb0ea349fffc396fdd062c04f6ca09f1d9fcafb..2d55b61f24db6365a0532419afaa9f704bc352e1 100644 (file)
@@ -62,6 +62,9 @@
  * lttng_ust_is_pointer_type - check if type is a pointer
  *
  * Returns true if the type of @type is a pointer.
+ *
+ * Note: The C implementation of lttng_ust_is_pointer_type uses pointer
+ * arithmetic, which does not work on opaque pointer types.
  */
 #if defined(__cplusplus)
 #define lttng_ust_is_pointer_type(type) (std::is_pointer<type>::value)
This page took 0.025981 seconds and 4 git commands to generate.