qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] gtk: Fix compiler warnings with -Werror=sign-compare
@ 2013-11-04 19:51 Stefan Weil
  2013-11-04 20:07 ` Peter Maydell
  0 siblings, 1 reply; 6+ messages in thread
From: Stefan Weil @ 2013-11-04 19:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-trivial, Stefan Weil, Anthony Liguori

With -Werror=sign-compare (not enabled by default), gcc shows these errors:

ui/gtk.c: In function ‘gtk_release_modifiers’:
ui/gtk.c:288:19: error:
 comparison between signed and unsigned integer expressions [-Werror=sign-compare]
ui/gtk.c: In function ‘gd_key_event’:
ui/gtk.c:746:19: error:
 comparison between signed and unsigned integer expressions [-Werror=sign-compare]

Signed-off-by: Stefan Weil <sw@weilnetz.de>
---
 ui/gtk.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/ui/gtk.c b/ui/gtk.c
index b5f4f0b..79efda1 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -273,7 +273,8 @@ static void gd_update_full_redraw(GtkDisplayState *s)
 
 static void gtk_release_modifiers(GtkDisplayState *s)
 {
-    int i, keycode;
+    unsigned i;
+    int keycode;
 
     if (!gd_on_vga(s)) {
         return;
@@ -714,7 +715,7 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
     GtkDisplayState *s = opaque;
     int gdk_keycode;
     int qemu_keycode;
-    int i;
+    unsigned i;
 
     gdk_keycode = key->hardware_keycode;
 
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] gtk: Fix compiler warnings with -Werror=sign-compare
  2013-11-04 19:51 [Qemu-devel] [PATCH] gtk: Fix compiler warnings with -Werror=sign-compare Stefan Weil
@ 2013-11-04 20:07 ` Peter Maydell
  2013-11-04 20:23   ` Stefan Weil
  2013-11-04 20:38   ` Laszlo Ersek
  0 siblings, 2 replies; 6+ messages in thread
From: Peter Maydell @ 2013-11-04 20:07 UTC (permalink / raw)
  To: Stefan Weil; +Cc: QEMU Trivial, qemu-devel, Anthony Liguori

On 4 November 2013 19:51, Stefan Weil <sw@weilnetz.de> wrote:
> With -Werror=sign-compare (not enabled by default), gcc shows these errors:
>
> ui/gtk.c: In function ‘gtk_release_modifiers’:
> ui/gtk.c:288:19: error:
>  comparison between signed and unsigned integer expressions [-Werror=sign-compare]
> ui/gtk.c: In function ‘gd_key_event’:
> ui/gtk.c:746:19: error:
>  comparison between signed and unsigned integer expressions [-Werror=sign-compare]

If this warning is going to complain about entirely
safe and idiomatic code like

   int i;
   static const int some_array[] = {
       0x2a, 0x36, 0x1d, 0x9d, 0x38, 0xb8, 0xdb, 0xdd,
   };

   for (i = 0; i < ARRAY_SIZE(some_array); i++) {
       ...
   }

then I think it is more trouble than it is worth and we
should leave it disabled.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] gtk: Fix compiler warnings with -Werror=sign-compare
  2013-11-04 20:07 ` Peter Maydell
@ 2013-11-04 20:23   ` Stefan Weil
  2013-11-04 20:38   ` Laszlo Ersek
  1 sibling, 0 replies; 6+ messages in thread
From: Stefan Weil @ 2013-11-04 20:23 UTC (permalink / raw)
  To: Peter Maydell; +Cc: QEMU Trivial, qemu-devel, Anthony Liguori

Am 04.11.2013 21:07, schrieb Peter Maydell:
> On 4 November 2013 19:51, Stefan Weil <sw@weilnetz.de> wrote:
>> With -Werror=sign-compare (not enabled by default), gcc shows these errors:
>>
>> ui/gtk.c: In function ‘gtk_release_modifiers’:
>> ui/gtk.c:288:19: error:
>>  comparison between signed and unsigned integer expressions [-Werror=sign-compare]
>> ui/gtk.c: In function ‘gd_key_event’:
>> ui/gtk.c:746:19: error:
>>  comparison between signed and unsigned integer expressions [-Werror=sign-compare]
> If this warning is going to complain about entirely
> safe and idiomatic code like
>
>    int i;
>    static const int some_array[] = {
>        0x2a, 0x36, 0x1d, 0x9d, 0x38, 0xb8, 0xdb, 0xdd,
>    };
>
>    for (i = 0; i < ARRAY_SIZE(some_array); i++) {
>        ...
>    }
>
> then I think it is more trouble than it is worth and we
> should leave it disabled.
>
> thanks
> -- PMM

Yes, we should leave it disabled for simple practical reasons: there are
too many warnings of this kind, so I don't expect they will be fixed in
the near future (I have no plan to send patches to fix them all - this
one was just in my way).

And yes, we should fix code which can be improved as easily as in the
above example. ARRAY_SIZE happens to be an unsigned size_t, so comparing
it to an unsigned value is better IMHO (I'm aware that there were
already discussions about using signed or unsigned integers).

-Wsign-compare is like other compiler warnings: it can detect some
really unwanted code, but a human reviewer won't always agree on the
results.It might be a good idea to support it somewhere in the far future.

Stefan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] gtk: Fix compiler warnings with -Werror=sign-compare
  2013-11-04 20:07 ` Peter Maydell
  2013-11-04 20:23   ` Stefan Weil
@ 2013-11-04 20:38   ` Laszlo Ersek
  2013-11-04 21:00     ` Peter Maydell
  2013-11-06  8:51     ` [Qemu-devel] C99 loop vars? [was: gtk: Fix compiler warnings with -Werror=sign-compare] Michael Tokarev
  1 sibling, 2 replies; 6+ messages in thread
From: Laszlo Ersek @ 2013-11-04 20:38 UTC (permalink / raw)
  To: Peter Maydell; +Cc: QEMU Trivial, Stefan Weil, qemu-devel, Anthony Liguori

On 11/04/13 21:07, Peter Maydell wrote:
> On 4 November 2013 19:51, Stefan Weil <sw@weilnetz.de> wrote:
>> With -Werror=sign-compare (not enabled by default), gcc shows these errors:
>>
>> ui/gtk.c: In function ‘gtk_release_modifiers’:
>> ui/gtk.c:288:19: error:
>>  comparison between signed and unsigned integer expressions [-Werror=sign-compare]
>> ui/gtk.c: In function ‘gd_key_event’:
>> ui/gtk.c:746:19: error:
>>  comparison between signed and unsigned integer expressions [-Werror=sign-compare]
> 
> If this warning is going to complain about entirely
> safe and idiomatic code like
> 
>    int i;
>    static const int some_array[] = {
>        0x2a, 0x36, 0x1d, 0x9d, 0x38, 0xb8, 0xdb, 0xdd,
>    };
> 
>    for (i = 0; i < ARRAY_SIZE(some_array); i++) {
>        ...
>    }

(Entirely safe, and completely non-idiomatic: "i" should be size_t, as
that is the type of the sizeof operator's result.)

Laszlo
/me apologizes for the raging pedantry

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] gtk: Fix compiler warnings with -Werror=sign-compare
  2013-11-04 20:38   ` Laszlo Ersek
@ 2013-11-04 21:00     ` Peter Maydell
  2013-11-06  8:51     ` [Qemu-devel] C99 loop vars? [was: gtk: Fix compiler warnings with -Werror=sign-compare] Michael Tokarev
  1 sibling, 0 replies; 6+ messages in thread
From: Peter Maydell @ 2013-11-04 21:00 UTC (permalink / raw)
  To: Laszlo Ersek; +Cc: QEMU Trivial, Stefan Weil, qemu-devel, Anthony Liguori

On 4 November 2013 20:38, Laszlo Ersek <lersek@redhat.com> wrote:
> On 11/04/13 21:07, Peter Maydell wrote:
>> If this warning is going to complain about entirely
>> safe and idiomatic code like
>>
>>    int i;
>>    static const int some_array[] = {
>>        0x2a, 0x36, 0x1d, 0x9d, 0x38, 0xb8, 0xdb, 0xdd,
>>    };
>>
>>    for (i = 0; i < ARRAY_SIZE(some_array); i++) {
>>        ...
>>    }
>
> (Entirely safe, and completely non-idiomatic: "i" should be size_t, as
> that is the type of the sizeof operator's result.)

Making simple loop iteration variables 'unsigned' is completely
non-idiomatic. It just happens that we're calculating the upper
bound here via a macro that coincidentally produces an
unsigned result. Insisting on unsigned also runs you into
problems with loops like

   for (i = ARRAY_SIZE(foo) - 1; i >=0 ; i--) {
     something(foo[i]);
   }

(which obviously you can avoid by contorting the code,
but why do that when leaving 'i' as signed is much clearer?)

-- PMM

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] C99 loop vars? [was: gtk: Fix compiler warnings with -Werror=sign-compare]
  2013-11-04 20:38   ` Laszlo Ersek
  2013-11-04 21:00     ` Peter Maydell
@ 2013-11-06  8:51     ` Michael Tokarev
  1 sibling, 0 replies; 6+ messages in thread
From: Michael Tokarev @ 2013-11-06  8:51 UTC (permalink / raw)
  To: Laszlo Ersek
  Cc: QEMU Trivial, Peter Maydell, qemu-devel, Anthony Liguori,
	Stefan Weil

05.11.2013 00:38, Laszlo Ersek wrote:
> On 11/04/13 21:07, Peter Maydell wrote:
>> On 4 November 2013 19:51, Stefan Weil <sw@weilnetz.de> wrote:
>>> With -Werror=sign-compare (not enabled by default), gcc shows these errors:
>>>
>>> ui/gtk.c: In function ‘gtk_release_modifiers’:
>>> ui/gtk.c:288:19: error:
>>>   comparison between signed and unsigned integer expressions [-Werror=sign-compare]
>>> ui/gtk.c: In function ‘gd_key_event’:
>>> ui/gtk.c:746:19: error:
>>>   comparison between signed and unsigned integer expressions [-Werror=sign-compare]
>>
>> If this warning is going to complain about entirely
>> safe and idiomatic code like
>>
>>     int i;
>>     static const int some_array[] = {
>>         0x2a, 0x36, 0x1d, 0x9d, 0x38, 0xb8, 0xdb, 0xdd,
>>     };
>>
>>     for (i = 0; i < ARRAY_SIZE(some_array); i++) {
>>         ...
>>     }
>
> (Entirely safe, and completely non-idiomatic: "i" should be size_t, as
> that is the type of the sizeof operator's result.)

Maybe in some places we should switch to C99 which allows to declare
a loop variable inside the loop header, like this:

   for(int i = 0; i < ARRAY_SIZE(..); i++) {
   }

?

This is much better than a per-unit (function-level) declaration because
by changing type in one place we don't change it for other places which
might become wrong in the result...

But this requires compiling whole thing with gcc -std=c99, which might
bit problematic.

But as it is, the original patch from Stefan, -- I don't think it's a
good idea to apply it.  The code is obviously correct, ARRAY_SIZE is
a fixed value, the compiler is able to determine this and shut pretty
much up ;)

Thanks,

/mjt

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-11-06  8:52 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-04 19:51 [Qemu-devel] [PATCH] gtk: Fix compiler warnings with -Werror=sign-compare Stefan Weil
2013-11-04 20:07 ` Peter Maydell
2013-11-04 20:23   ` Stefan Weil
2013-11-04 20:38   ` Laszlo Ersek
2013-11-04 21:00     ` Peter Maydell
2013-11-06  8:51     ` [Qemu-devel] C99 loop vars? [was: gtk: Fix compiler warnings with -Werror=sign-compare] Michael Tokarev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).