From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:43665) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QQ5FY-0004lc-Jl for qemu-devel@nongnu.org; Fri, 27 May 2011 18:11:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QQ5FX-0004ZU-GS for qemu-devel@nongnu.org; Fri, 27 May 2011 18:11:20 -0400 MIME-Version: 1.0 In-Reply-To: <4DE00D46.5030604@mail.berlios.de> References: <1306516951-31105-1-git-send-email-cerbere@gmail.com> <1306516951-31105-6-git-send-email-cerbere@gmail.com> <4DDFE0C9.5040907@mail.berlios.de> <4DE00D46.5030604@mail.berlios.de> From: Alexandre Raymond Date: Fri, 27 May 2011 18:10:58 -0400 Message-ID: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 5/6] Remove warning in printf due to type mismatch List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Weil Cc: qemu-trivial@nongnu.org, Markus Armbruster , qemu-devel@nongnu.org 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 wrote: > Am 27.05.2011 21:11, schrieb Markus Armbruster: >> >> Stefan Weil writes: >> >>> Am 27.05.2011 19:22, schrieb Alexandre Raymond: >>>> >>>> ----8<---- >>>> qemu/target-lm32/translate.c: In function >>>> =E2=80=98gen_intermediate_code_internal=E2=80=99: >>>> qemu/target-lm32/translate.c:1135: warning: format =E2=80=98%zd=E2=80= =99 expects >>>> type =E2=80=98signed size_t=E2=80=99, but argument 4 has type =E2=80= =98int=E2=80=99 >>>> ----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 >>>> --- >>>> 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=3D%d osize=3D%zd\n", >>>> + qemu_log("\nisize=3D%d osize=3D%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 =C2=A76.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 header. >> >> The pedantically correct way to print a pointer difference is the 't' >> type modifier. Ibid. =C2=A77.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. > >