On 4/26/24 18:35, Ilya Maximets wrote:
> Cirrus CI is broken on FreeBSD 13.3 due to clang version update.
> It now complains about snprintf truncation the same way GCC does:
> 
>   tests/test-util.c:1129:16: error: 'snprintf' will always be truncated;
>           specified size is 5, but format string expands to at least 6
>           [-Werror,-Wformat-truncation]
> 
>   1129 |     ovs_assert(snprintf(s, 5, "abcde") == 5);
>        |                ^
> 
> Clang 17 on FreeBSD 14.0 works fine, but new Clang 18.1.4 on 13.3
> fails to build.
> 
> Fix that by disabling Clang diagnostic the same way as we do for GCC.
> 
> Unfortunately, the pragma's are compiler-specific, so cannot be
> combined, AFAIK.
> 
> Signed-off-by: Ilya Maximets <[email protected]>
> ---

Hi, Eelco and Simon.  May I ask you to take a look at this patch?

It's blocking Cirrus CI and I don't think anything else should be
merged until CI is fixed.

Best regards, Ilya Maximets.


>  tests/test-util.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/tests/test-util.c b/tests/test-util.c
> index 7d899fbbf..5d88d38f2 100644
> --- a/tests/test-util.c
> +++ b/tests/test-util.c
> @@ -1116,12 +1116,16 @@ test_snprintf(struct ovs_cmdl_context *ctx OVS_UNUSED)
>  {
>      char s[16];
>  
> +    /* GCC 7+ and Clang 18+ warn about the following calls that truncate
> +     * a string using snprintf().  We're testing that truncation works
> +     * properly, so temporarily disable the warning. */
>  #if __GNUC__ >= 7
> -    /* GCC 7+ warns about the following calls that truncate a string using
> -     * snprintf().  We're testing that truncation works properly, so
> -     * temporarily disable the warning. */
>  #pragma GCC diagnostic push
>  #pragma GCC diagnostic ignored "-Wformat-truncation"
> +#endif
> +#if __clang_major__ >= 18
> +#pragma clang diagnostic push
> +#pragma clang diagnostic ignored "-Wformat-truncation"
>  #endif
>      ovs_assert(snprintf(s, 4, "abcde") == 5);
>      ovs_assert(!strcmp(s, "abc"));
> @@ -1130,6 +1134,9 @@ test_snprintf(struct ovs_cmdl_context *ctx OVS_UNUSED)
>      ovs_assert(!strcmp(s, "abcd"));
>  #if __GNUC__ >= 7
>  #pragma GCC diagnostic pop
> +#endif
> +#if __clang_major__ >= 18
> +#pragma clang diagnostic pop
>  #endif
>  
>      ovs_assert(snprintf(s, 6, "abcde") == 5);

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

Reply via email to