target/ppc/int_helper.c:2806: strange expression ?
Bug #1655708 reported by
dcb
This bug affects 1 person
| Affects | Status | Importance | Assigned to | Milestone | |
|---|---|---|---|---|---|
| QEMU |
Fix Released
|
Undecided
|
ziviani | ||
Bug Description
target/
Source code is
zone_digit = (i * 2) ? b->u8[BCD_
Which I read as
zone_digit = (i * 2) ? (b->u8[
so I think the compiler warning is for the i * 2 lhs of the ?.
I am not sure what to suggest as a bugfix.
| Changed in qemu: | |
| assignee: | nobody → Jose R. Ziviani (jrziviani) |
To post a comment you must log in.

On 01/11/2017 10:41 AM, dcb wrote: ppc/int_ helper. c:2806: 25: warning: ‘*’ in boolean context, in-bool- context] DIG_BYTE( i * 2)] >> 4 :
> Public bug reported:
>
> target/
> suggest ‘&&’ instead [-Wint-
>
> Source code is
>
> zone_digit = (i * 2) ? b->u8[BCD_
> zone_lead;
Also, looking at BCD_DIG_BYTE():
#if defined( HOST_WORDS_ BIGENDIAN)
#define BCD_DIG_BYTE(n) (15 - (n/2))
#else
#define BCD_DIG_BYTE(n) (n/2)
#endif
Oops. n is under-parenthes ized, and will cause invalid expansions for
some expressions. Let's fix that as well.
> so I think the compiler warning is for the i * 2 lhs of the ?.
Yes - the compiler is complaining that 'i * 2' can only be non-zero if
'i' was non-zero (given that the code occurs in a loop for i between 0
and 16), so it is just as easy to write 'i ? ...' instead of the weirder
'(i * 2) ? ...'.
-- libvirt. org
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://