On Tue, Mar 05, 2019 at 12:07:25PM -0800, Matthew Wilcox wrote: > On Tue, Mar 05, 2019 at 11:59:30AM -0800, Joe Perches wrote: > > Many of the -Wformat warnings are bogus too. > > > > There's nothing wrong with using %x for a unsigned int > > of less than long size. (u8/u16) > > I believe you to be incorrect. No, you're right, I got tangled up in the spec language and stopped reading too soon. > 6.5.2.2 Function calls > > 7 If the expression that denotes the called function has a type that does > include a prototype, the arguments are implicitly converted, as if by > assignment, to the types of the corresponding parameters, taking the > type of each parameter to be the unqualified version of its declared > type. The ellipsis notation in a function prototype declarator causes > argument type conversion to stop after the last declared parameter. The > default argument promotions are performed on trailing arguments. ... the default argument promotions performed on the trailing arguments promote short/char to int. So you were right. > I could define a calling convention for my CPU which says to pack u8s > and u16s as tightly as possible in registers (or on the stack), rather > than the prevailing calling convention of having each argument take up > at least one register-sized slot. ... and that is just wrong; it's not allowed.