[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-trivial] [Qemu-devel] [PATCH 5/6] Remove warning in printf due
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-trivial] [Qemu-devel] [PATCH 5/6] Remove warning in printf due to type mismatch |
Date: |
Fri, 27 May 2011 21:11:42 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) |
Stefan Weil <address@hidden> 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 <address@hidden>
>> ---
>> 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.
[...]
- Re: [Qemu-trivial] [Qemu-devel] [PATCH 1/6] Fix incorrect check for fdatasync() in configure, (continued)
[Qemu-trivial] [PATCH 6/6] Avoid compilation warning regarding kvm under darwin, Alexandre Raymond, 2011/05/27
Re: [Qemu-trivial] [Qemu-devel] [PATCH 0/6] Fix compilation issues under darwin, Andreas Färber, 2011/05/28