On Wed, Oct 19, 2022 at 11:11 AM Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > But while sparse does a lot of basic optimizations, it still left > enough "look, you're doing sign-extensions on a 'char'" on the table > that it warned about perfectly valid stuff. > > And maybe that's fundamentally hard. > > The "-Wpointer-sign" thing could probably be fairly easily improved, > by just recognizing that things like 'strlen()' and friends do not > care about the sign of 'char', and neither does a 'strcmp()' that only > checks for equality (but if you check the *sign* of strcmp, it does > matter). > > It's been some time since I last tried it, but at least from memory, > it really was mostly the standard C string functions that caused > almost all problems. Your *own* functions you can just make sure the > signedness is right, but it's really really annoying when you try to > be careful about the byte signs, and the compiler starts complaining > just because you want to use the bog-standard 'strlen()' function. > > And no, something like 'ustrlen()' with a hidden cast is just noise > for a warning that really shouldn't exist. > > So some way to say 'this function really doesn't care about the sign > of this pointer' (and having the compiler know that for the string > functions it already knows about anyway) would probably make almost > all problems with -Wsign-warning go away. > > Put another way: 'char *' is so fundamental and inherent in C, that > you can't just warn when people use it in contexts where sign really > doesn't matter. A few times in the past, we've split a warning flag into a group so that we could be more specific about distinct cases. Perhaps if -Wpointer-sign was a group that implied -Wpointer-char-sign, then the kernel could use -Wpointer-sign -Wno-pointer-char-sign. I don't know if that's the right granularity though. -- Thanks, ~Nick Desaulniers