On Tue, 2019-03-05 at 12:07 -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. > > 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. Look at default argument promotions for varargs functions. (integer promotions) > 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. Doesn't matter for varargs. See above. cheers, Joe