On Sat, Nov 7, 2020 at 2:33 AM Joe Perches <joe@xxxxxxxxxxx> wrote: > > On Fri, 2020-11-06 at 23:55 -0800, Nick Desaulniers wrote: > > Clang is more aggressive about -Wformat warnings when the format flag > > specifies a type smaller than the parameter. Fixes 8 instances of: > > > > warning: format specifies type 'unsigned short' but the argument has > > type 'int' [-Wformat] > > Likely clang's -Wformat message is still bogus. > Wasn't that going to be fixed? > > Integer promotions are already done on these types to int anyway. > Didn't we have this discussion last year? > > https://lore.kernel.org/lkml/CAKwvOd=mqzj2pAZEUsW-M_62xn4pijpCJmP=B1h_-wEb0NeZsA@xxxxxxxxxxxxxx/ > https://lore.kernel.org/lkml/CAHk-=wgoxnmsj8GEVFJSvTwdnWm8wVJthefNk2n6+4TC=20e0Q@xxxxxxxxxxxxxx/ > https://lore.kernel.org/lkml/a68114afb134b8633905f5a25ae7c4e6799ce8f1.camel@xxxxxxxxxxx/ Now I'll have to page in some old context... The case we addressed last year was printing char with a wider format string like %hd: https://reviews.llvm.org/rL369791, https://bugs.llvm.org/show_bug.cgi?id=41467 and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95588 have a little more info but not much. Which is the case that Linus commented on. Let's say we're printing a "wider format than intended." Those have been fixed in Clang. These cases are printing a "narrower format than intended." Two distinct cases. > > Look at commit cbacb5ab0aa0 ("docs: printk-formats: Stop encouraging use > of unnecessary %h[xudi] and %hh[xudi]") > > The "h" and "hh" things should never be used. The only reason for them > being used if if you have an "int", but you want to print it out as a > "char" (and honestly, that is a really bad reason, you'd be better off > just using a proper cast to make the code more obvious). > > So if what you have a "char" (or unsigned char) you should always just > print it out as an "int", knowing that the compiler already did the > proper type conversion. Yeah, we could go through and remove %h and %hh to solve this, too, right? -- Thanks, ~Nick Desaulniers