Re: [for-linus][PATCH 01/10] tracing: Suppress sparse warnings triggered by is_signed_type()

From: Al Viro
Date: Tue Aug 23 2022 - 22:09:21 EST


On Tue, Aug 23, 2022 at 04:57:00PM -0700, Linus Torvalds wrote:
> On Tue, Aug 23, 2022 at 4:18 PM Linus Torvalds
> <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:
> >
> > Can you try the sparse version at
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/sparse.git
> >
> > which I just set up temporarily with some patches of mine.
>
> Ugh, and while testing this with sparse, I noticed that sparse itself
> got that whole 'is_signed_type()' check wrong.
>
> The sparse fix was to remove one line of code, but that one worries
> me, because that one line was clearly very intentional:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/sparse.git/commit/?id=7e5f1c2eba1426e414698071dd0de7d039eb385d
>
> Adding Al, since he's actually the original source of that bitwise
> code (and did a lot of other sparse code on the type handling and
> preprocessor side in particular).

Ouch... That'll take quite a bit of swap-in (and digging through the
old notes). I'll take a look, but there's an unrelated problem:
ANY ordered comparisons should spew warnings on bitwise
And we really want that to happen - things like
#define MASK cpu_to_le32(1023)
if (foo->len > MASK)
return -EINVAL;
something(le32_to_cpu(foo->len));
should trigger warnings and I have seen real bugs of that sort.

So I'm not sure how is that supposed to work without sparse getting
loudly unhappy.

Al, going to look through that thread and then try to reconstruct sparse-related
notes...