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:16 +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 86098a9847f8cc0dc83d9f0b0dbcda219c29e79b..81affd8c6713ef67b3e7e4ba215cdf0b0bb3d483 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 d815cf0cc465ef5f3a8864e12d5125fed85057ff..e60cdbe3b1a490934945d2c74ae93f86a0934384 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.025879 seconds and 4 git commands to generate.