Hi Stefan and Markus, Thanks for your feedback :)
"%td" doesn't generate warnings on Linux nor on OSX. Alexandre On Fri, May 27, 2011 at 4:44 PM, Stefan Weil <w...@mail.berlios.de> wrote: > Am 27.05.2011 21:11, schrieb Markus Armbruster: >> >> Stefan Weil <w...@mail.berlios.de> writes: >> >>> Am 27.05.2011 19:22, schrieb Alexandre Raymond: >>>> >>>> ----8<---- >>>> qemu/target-lm32/translate.c: In function >>>> ‘gen_intermediate_code_internal’: >>>> qemu/target-lm32/translate.c:1135: warning: format ‘%zd’ expects >>>> type ‘signed size_t’, but argument 4 has type ‘int’ >>>> ----8<---- >>>> >>>> Both gen_opc_ptr and gen_opc_buf are "uint16_t *", so a simple '%d' >>>> should >>>> be able to describe their relative difference. >>>> >>>> Signed-off-by: Alexandre Raymond <cerb...@gmail.com> >>>> --- >>>> target-lm32/translate.c | 2 +- >>>> 1 files changed, 1 insertions(+), 1 deletions(-) >>>> >>>> diff --git a/target-lm32/translate.c b/target-lm32/translate.c >>>> index eb21158..0f69f27 100644 >>>> --- a/target-lm32/translate.c >>>> +++ b/target-lm32/translate.c >>>> @@ -1132,7 +1132,7 @@ static void >>>> gen_intermediate_code_internal(CPUState *env, >>>> if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { >>>> qemu_log("\n"); >>>> log_target_disas(pc_start, dc->pc - pc_start, 0); >>>> - qemu_log("\nisize=%d osize=%zd\n", >>>> + qemu_log("\nisize=%d osize=%d\n", >>>> dc->pc - pc_start, gen_opc_ptr - gen_opc_buf); >>>> } >>>> #endif >>> >>> Nack. >>> >>> The original code is correct, because the difference of two pointers >>> is always of type ssize_t (well, obviously not with your compiler, >>> but then I assume that your compiler is broken). >> >> ISO/IEC 9899:1999 §6.5.6 on pointer subtraction: >> >> The size of the result is implementation-defined, and its type (a >> signed integer type) is ptrdiff_t defined in the <stddef.h> header. >> >> The pedantically correct way to print a pointer difference is the 't' >> type modifier. Ibid. §7.19.6.1 on fprintf(): >> >> t Specifies that a following d, i, o, u, x, or X conversion >> specifier applies to a ptrdiff_t or the corresponding unsigned >> integer type argument; or that a following n conversion >> specifier applies to a pointer to a ptrdiff_t argument. >> >> ssize_t is POSIX, not ISO C. It can differ from ptrdiff_t only if >> ptrdiff_t has a different size than size_t, which would be kind of sick. >> ISO C permits all kinds of sickness. Whether tolerating a particular >> sickness is worth our while is another question. >> >> [...] > > That's correct. And ptrdiff_t needs %td. > > Alexandre, could you please try %td instead of %zd? > > Cheers, > Stefan W. > >