]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
audit: crau: fix compilation with gcc < 11
authorJulien Olivain <ju.o@free.fr>
Sun, 23 Nov 2025 17:17:19 +0000 (18:17 +0100)
committerJulien Olivain <ju.o@free.fr>
Sun, 23 Nov 2025 17:17:19 +0000 (18:17 +0100)
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 <neal.frager@amd.com>
Signed-off-by: Julien Olivain <ju.o@free.fr>
lib/crau/crau.h

index 0d4f9f13e2c8e18fdc088e3460f2ce8b4ed8cda2..53d33555be3b47aa387502a5471ef03683421186 100644 (file)
@@ -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