The attribute was added in GCC 4.9.  Older versions complain:

  lib/util.h:164:1:
    warning: 'returns_nonnull' attribute directive ignored [-Wattributes]
     OVS_RETURNS_NONNULL void *xmalloc(size_t) MALLOC_LIKE;
     ^

Fixes: ed738eca39ef ("util: Annotate function that will never return NULL.")
Reported-at: 
https://mail.openvswitch.org/pipermail/ovs-discuss/2025-September/053800.html
Reported-by: Brendan Doyle <[email protected]>
Signed-off-by: Ilya Maximets <[email protected]>
---
 include/openvswitch/compiler.h | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/include/openvswitch/compiler.h b/include/openvswitch/compiler.h
index ecb91801c..bd30369a7 100644
--- a/include/openvswitch/compiler.h
+++ b/include/openvswitch/compiler.h
@@ -26,6 +26,9 @@
 #ifndef __has_extension
   #define __has_extension(x) 0
 #endif
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
 
 /* To make OVS_NO_RETURN portable across gcc/clang and MSVC, it should be
  * added at the beginning of the function declaration. */
@@ -37,7 +40,10 @@
 #define OVS_NO_RETURN
 #endif
 
-#if __GNUC__ && !__CHECKER__
+#ifdef __CHECKER__
+#define OVS_RETURNS_NONNULL
+#elif ( __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9) \
+        || __has_attribute(returns_nonnull))
 #define OVS_RETURNS_NONNULL __attribute__((returns_nonnull))
 #else
 #define OVS_RETURNS_NONNULL
-- 
2.51.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to