From 4c3d9cd0b8f8c270ea61474ea75418285e6afdd7 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 8 Mar 2023 15:58:33 -0500 Subject: [PATCH] Fix: c99: static assert: clang build fails due to multiple typedef Unlike c11, c99 does not allow redefinition of the same typedef, and clang is strict about it. Building code with tracepoints with -std=c99 with clang fails with: warning: redefinition of typedef 'lttng_ust_static_assert_Tracepoint_name_length_is_too_long' is a C11 feature [-Wtypedef-redefinition] Fix this by placing the (potentially negative size) array as argument to a function prototype instead. Signed-off-by: Mathieu Desnoyers Change-Id: I06b6edbcd93f43f349451c23b0520df59f4fb346 --- include/lttng/ust-compiler.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/include/lttng/ust-compiler.h b/include/lttng/ust-compiler.h index 38c89b08..c0aae11e 100644 --- a/include/lttng/ust-compiler.h +++ b/include/lttng/ust-compiler.h @@ -85,15 +85,17 @@ /* * Evaluates the predicate and emit a compilation error on failure. * - * If the predicate evaluates to true, this macro emits a typedef of an array - * of size 0. + * If the predicate evaluates to true, this macro emits a function + * prototype with an argument type which is an array of size 0. * - * If the predicate evaluates to false, this macro emits a typedef of an array - * of negative size which is invalid in C and forces a compiler error. The msg - * parameter is used in the tentative typedef so it is printed to the user. + * If the predicate evaluates to false, this macro emits a function + * prototype with an argument type which is an array of negative size + * which is invalid in C and forces a compiler error. The + * c_identifier_msg parameter is used as the argument identifier so it + * is printed to the user when the error is reported. */ #define lttng_ust_static_assert(predicate, msg, c_identifier_msg) \ - typedef char lttng_ust_static_assert_##c_identifier_msg[2*!!(predicate)-1] + void lttng_ust_static_assert_proto(char c_identifier_msg[2*!!(predicate)-1]) #endif /* Combine two tokens. */ -- 2.34.1