From: Linus Torvalds > Sent: 06 December 2024 19:15 > On Fri, 6 Dec 2024 at 11:07, David Laight <David.Laight@xxxxxxxxxx> wrote: > > > > I'm missing the compiler version and options to generate the error. > > Just -Wall with most recent gcc versions seems to do it. At least I > can repro it with gcc-14.2.1 and something silly like this: I may have just missed golbolt returning a warning. ... > > Does a '+ 0' help? "(var << 2) + 0 ? 0 : 0" > > Yeah, that actually works. > > And "+0" is nice in that it should work in any context. Unless it falls foul of the clang test for arthmetic on NULL pointers. (I'm sure that is only a problem if NULL isn't the all-zero bit pattern. And pretty much no C code has ever been 'that portable'.) Adding 0 can also help when compliers are being picky about enums. Since none have (yet) made them more like a 32bit pointer to a one byte structure (or the Pascal enum). In case the relevant people are reading this, maybe only do any non-integer warnings for named enums? > > #define const_NULL(x) _Generic(0 ? (x) : (char *)0, char *: 1, void *: 0) > > #define const_true(x) const_NULL((x) ? NULL : (void *)1L)) > > #define const_expr(x) const_NULL((x) ? NULL : NULL)) > > I send this morning. > > Needs 's/char/struct kjkjkjkjui/' applied. > > Oh Christ. You really are taking this whole ugly to another level. I sort of liked that version in a perverse sort of way. It does give you a simple test for NULL (unless you've used 'struct kjkjkjkjui'). David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)