On 08/10/2025 10:34, Ilya Maximets wrote:
> 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

nit: you could combine to only have one empty #define, but it might be
more readable as is anyway, so

Acked-by: Kevin Traynor <[email protected]>


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

Reply via email to