Subject: Re: [PATCH] sparse: ignore warning from new glibc headers

From: Junio C Hamano <[email-masked]>
Date: Wed, 17 Jul 2024 11:51:23 -0700

Ramsay Jones <[email-masked]> writes:

> On 17/07/2024 17:54, Junio C Hamano wrote:
>> Đoàn Trần Công Danh <[email-masked]> writes:
>> 
>>> With at least glibc 2.39, glibc provides a function declaration that
>>> matches with this POSIX interface:
>>>
>>>     int regexec(const regex_t *restrict preg, const char *restrict string,
>>>            size_t nmatch, regmatch_t pmatch[restrict], int eflags);
>>>
>>> such prototype requires variable-length-array for `pmatch'.
>>> ...
>>> Thus, sparse reports this error:
>>>
>>>> ../add-patch.c: note: in included file (through ../git-compat-util.h):
>>>> /usr/include/regex.h:682:41: error: undefined identifier '__nmatch'
>>>> /usr/include/regex.h:682:41: error: bad constant expression type
>>>> /usr/include/regex.h:682:41: error: Variable length array is used.
>
> Yes, I noted this about 2 years ago! If memory serves, it was when the
> libc6-dev package went from v2.31 to 2.35 (well 2.31-0ubuntu9.9).

Yes, our mails crossed.  I was just writing to linux-sparse@vger ;-)

> I mentioned this problem to Luc on the sparse mailing list[1] and
> he produced a patch which 'fixed' the problem in one way, but
> caused a different problem[2]. Namely, because git passes -Wvla
> to gcc, it now issues the 'used vla' warnings, which gcc does
> not because of some '# pragma GCC diagnostic ignored "-Wvla"' which
> sparse does not honor! :(

Sorry, but I do not follow.  Isn't -Wno-vla an instruction to sparse
to tell it *not* to complain about use of vla?

We do not pass -Wvla or -Wno-vla to sparse ourselves.  Because the
tool comes from the Linux land where VLA is not welcome, we'd by
default get the "hey, you used vla here---did you mean it?" error.

And the patch by Luc Van Oostenryck in the thread you raised at
around the end of 2023 does apply to the tip and with

	SP_EXTRA_FLAGS += -Wno-vla

in Makefile, sparse seems to be happy when I do "make sparse".