From: Julien Olivain Date: Sun, 23 Nov 2025 17:17:19 +0000 (+0100) Subject: audit: crau: fix compilation with gcc < 11 X-Git-Tag: 3.8.12~20^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=2bbae7644a2292410b53f98fd0035c40bf8750a5;p=thirdparty%2Fgnutls.git audit: crau: fix compilation with gcc < 11 If the CRAU_MAYBE_UNUSED macro is unset, the crau.h file tries to automatically detect an appropriate value for it. This autodetection is using the cpp special operator `__has_c_attribute` [1], introduced in gcc 11 [2]. When compiling with a gcc older than version 11, the compilation fails with the error: In file included from audit.h:22, from audit.c:26: crau/crau.h:255:23: error: missing binary operator before token "(" __has_c_attribute (__maybe_unused__) ^ This has been observed, for example, in Rocky Linux 8.10, which contains a gcc v8.5.0. The issue happens because the test for the `__has_c_attribute` availability and the test for the `__maybe_unused__` attribute are in the same directive. Those tests should be separated in two different directives, following the same logic described in the `__has_builtin` documentation [3]. This issue was found in Buildroot, after updating gnutls to version 3.8.11 in [4]. This commit fixes the issue by splitting the test in two. [1] https://gcc.gnu.org/onlinedocs/cpp/_005f_005fhas_005fc_005fattribute.html [2] https://gcc.gnu.org/gcc-11/changes.html#c [3] https://gcc.gnu.org/onlinedocs/cpp/_005f_005fhas_005fbuiltin.html [4] https://gitlab.com/buildroot.org/buildroot/-/commit/81dbfe1c2ae848b4eb1f896198d13455df50e548 Reported-by: Neal Frager Signed-off-by: Julien Olivain --- diff --git a/lib/crau/crau.h b/lib/crau/crau.h index 0d4f9f13e2..53d33555be 100644 --- a/lib/crau/crau.h +++ b/lib/crau/crau.h @@ -251,9 +251,10 @@ void crau_data(struct crau_context_stack_st *stack, ...) # else # ifndef CRAU_MAYBE_UNUSED -# if defined(__has_c_attribute) && \ - __has_c_attribute (__maybe_unused__) -# define CRAU_MAYBE_UNUSED [[__maybe_unused__]] +# if defined(__has_c_attribute) +# if __has_c_attribute (__maybe_unused__) +# define CRAU_MAYBE_UNUSED [[__maybe_unused__]] +# endif # elif defined(__GNUC__) # define CRAU_MAYBE_UNUSED __attribute__((__unused__)) # endif