On Wed, 2019-04-10 at 23:03 +0100, Louis Taylor wrote: > When compiling with -Wformat, clang warns: > > fs/afs/flock.c:632:29: warning: format specifies type 'short' but the > argument has type > 'unsigned char' [-Wformat] > _leave(" = %d [%hd]", ret, fl->fl_type);
I really think this clang message should be ignored. It's really unnecessary as every vararg argument smaller than int size is already promoted to int. This particular error is pedantic and has no effect _at all_ on output or runtime. If there was some actual mismatch between the signedness of the argument and the format type, it could make sense. ie: signed char foo = (signed char)-1; printk("mismatched %%d emitted as %%u: %u\n", foo); where the output is a somewhat unexpected 4294967295 > fl_type is declared as an unsigned char unconditionally in > include/linux/fs.h, so use the correct format characters. > > Link: https://github.com/ClangBuiltLinux/linux/issues/378 > Signed-off-by: Louis Taylor <lo...@kragniz.eu> > --- > fs/afs/flock.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/afs/flock.c b/fs/afs/flock.c > index 6a0174258382..be4c3f6a3178 100644 > --- a/fs/afs/flock.c > +++ b/fs/afs/flock.c > @@ -629,7 +629,7 @@ static int afs_do_getlk(struct file *file, struct > file_lock *fl) > > ret = 0; > error: > - _leave(" = %d [%hd]", ret, fl->fl_type); > + _leave(" = %d [%hhu]", ret, fl->fl_type); > return ret; > } >