On 09/20/2017 01:02 PM, Mark Cave-Ayland wrote: > On 18/09/17 19:14, Peter Maydell wrote: > >> On 18 September 2017 at 19:00, Peter Maydell <peter.mayd...@linaro.org> >> wrote: >>> On 18 September 2017 at 18:55, John Snow <js...@redhat.com> wrote: >>>> On 09/16/2017 10:34 AM, Peter Maydell wrote: >>>>> Hi; I'm afraid this doesn't build with clang: >>>>> >>>>> /home/petmay01/linaro/qemu-for-merges/hw/ide/core.c:70:15: error: >>>>> comparison of unsigned enum expression >= 0 is always true >>>>> [-Werror,-Wtautological-compare] >>>>> if (enval >= 0 && enval < IDE_DMA__COUNT) { >>>>> ~~~~~ ^ ~ >>>>> 1 error generated >> >> >>> I think you could argue that it would at least be helpful >>> if clang didn't warn about comparisons that only happen >>> to be useless for this particular platform/impdef choice >>> but are useful for the same code compiled with a different >>> compiler. >> >> A bit of googling and some experimentation reveals that >> clang deliberately suppresses this warning in the special >> case of comparing against an enum value which happens to >> be zero (but not for literal constant zero!). So this will >> be fine: >> if (enval >= IDE_DMA_READ && enval < IDE_DMA__COUNT) >> >> (or more sensibly you'd want to define an enum constant >> for IDE_DMA__FIRST or something rather than relying on >> READ being 0.) >> >> (found here: >> http://clang-developers.42468.n3.nabble.com/Possibly-invalid-enum-tautology-warning-td3233140.html >> ) > > Doing a git pull and even with the applied version of this patch I get a > build failure on my local gcc-4.7: > > cc -I/home/build/src/qemu/git/qemu/hw/ide -Ihw/ide > -I/home/build/src/qemu/git/qemu/tcg > -I/home/build/src/qemu/git/qemu/tcg/i386 > -I/home/build/src/qemu/git/qemu/linux-headers > -I/home/build/src/qemu/git/qemu/linux-headers -I. > -I/home/build/src/qemu/git/qemu > -I/home/build/src/qemu/git/qemu/accel/tcg > -I/home/build/src/qemu/git/qemu/include -I/usr/include/pixman-1 > -I/home/build/src/qemu/git/qemu/dtc/libfdt -Werror -pthread > -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include > -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE > -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings > -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv > -Wendif-labels -Wno-missing-include-dirs -Wempty-body -Wnested-externs > -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers > -Wold-style-declaration -Wold-style-definition -Wtype-limits > -fstack-protector-all -I/usr/include/p11-kit-1 > -I/usr/include/libpng12 -I/home/build/src/qemu/git/qemu/tests -MMD -MP > -MT hw/ide/core.o -MF hw/ide/core.d -O2 -U_FORTIFY_SOURCE > -D_FORTIFY_SOURCE=2 -g -c -o hw/ide/core.o hw/ide/core.c > hw/ide/core.c: In function ‘IDE_DMA_CMD_str’: > hw/ide/core.c:71:5: error: comparison of unsigned expression >= 0 is > always true [-Werror=type-limits] > cc1: all warnings being treated as errors > make: *** [hw/ide/core.o] Error 1 > > Are there any other workarounds for this at all? > > > ATB, > > Mark. >
Guh. From which distro does your GCC 4.7 hail? Regardless, I suppose I will revert to Eric's workaround, though I like the way it reads an awful lot less. --js