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. [...]