On Wed, Feb 23, 2022 at 11:23 AM Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > That said, we seem to only have two cases of it in the kernel, at > least by a x86-64 allmodconfig build. No, there's more of them, it's just that the build broke early enough that I didn't see it. Doing git grep '\(\(~0\)\|\(-1\)\) <<' finds a number of them. Some of them have casts in front, so they wouldn't necessarily trigger this issue, but it's not an entirely uncommon pattern. And as mentioned, I think it's a *good* pattern, in that it takes advantage of the sign-extension of the top bit in any widening use, when the type might not be obvious (in macros, or when accessing members of unions or structures, or when using typedefs that hide the actual type). So I still think that warning is actively detrimental, and I'm wondering why it was added (and why 'gnu99' enables it, but 'gnu89' does not). There's presumably _some_ reason. Linus