Message ID | 1349287498-10475-1-git-send-email-sandmann@cs.au.dk |
---|---|
State | New |
Headers | show |
Stefan Weil <sw@weilnetz.de> writes: > I don't see any warnings with gcc Debian 4.4.5-8. > > Could you please provide more information on your environment > and the warnings which you get? > > Here is a macro which simplifies the version check: > > #if QEMU_GNUC_PREREQ(4, 6) > > Regards > > Stefan Weil With this compiler: dhcp-100-3-184:~/vertigo/qemu% gcc -v Using built-in specs. COLLECT_GCC=/usr/bin/gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.5.1/lto-wrapper Target: x86_64-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,lto --enable-plugin --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux Thread model: posix gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) This is the error I get: make BUILD_DIR=/home/ssp/vertigo/qemu -C i386-softmmu V="1" TARGET_DIR="i386-softmmu/" all make[1]: Entering directory `/home/ssp/vertigo/qemu/i386-softmmu' gcc -I/home/ssp/vertigo/qemu/slirp -I. -I/home/ssp/vertigo/qemu -I/home/ssp/vertigo/qemu/fpu -I/home/ssp/vertigo/qemu/libcacard -I/home/ssp/vertigo/qemu/linux-headers -I/home/ssp/vertigo/qemu/tcg -I/home/ssp/vertigo/qemu/tcg/i386 -Werror -fPIE -DPIE -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fstack-protector-all -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -I/usr/include/libpng12 -I/usr/include/spice-server -I/usr/include/pixman-1 -I/usr/include/spice-1 -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -DHAS_AUDIO -DHAS_AUDIO_CHOICE -DTARGET_PHYS_ADDR_BITS=64 -I../linux-headers -I.. -I/home/ssp/vertigo/qemu/target-i386 -DNEED_CPU_H -I/home/ssp/vertigo/qemu/include -I/usr/include/libpng12 -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -MMD -MP -MT hw/vfio_pci.o -MF hw/vfio_pci.d -O2 -D_FORTIFY_SOURCE=2 -g -c -o hw/vfio_pci.o /home/ssp/vertigo/qemu/hw/vfio_pci.c cc1: warnings being treated as errors /home/ssp/vertigo/qemu/hw/vfio_pci.c: In function ‘vfio_bar_write’: /home/ssp/vertigo/qemu/hw/vfio_pci.c:604:84: error: value computed is not used /home/ssp/vertigo/qemu/hw/vfio_pci.c: In function ‘vfio_bar_read’: /home/ssp/vertigo/qemu/hw/vfio_pci.c:644:84: error: value computed is not used make[1]: *** [hw/vfio_pci.o] Error 1 make[1]: Leaving directory `/home/ssp/vertigo/qemu/i386-softmmu' make: *** [subdir-i386-softmmu] Error 2
Am 03.10.2012 21:49, schrieb Søren Sandmann: > Stefan Weil<sw@weilnetz.de> writes: > >> I don't see any warnings with gcc Debian 4.4.5-8. >> >> Could you please provide more information on your environment >> and the warnings which you get? >> >> Here is a macro which simplifies the version check: >> >> #if QEMU_GNUC_PREREQ(4, 6) >> >> Regards >> >> Stefan Weil > > With this compiler: > > dhcp-100-3-184:~/vertigo/qemu% gcc -v > Using built-in specs. > COLLECT_GCC=/usr/bin/gcc > COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.5.1/lto-wrapper > Target: x86_64-redhat-linux > Configured with: ../configure --prefix=/usr --mandir=/usr/share/man > --infodir=/usr/share/info > --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap > --enable-shared --enable-threads=posix --enable-checking=release > --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions > --enable-gnu-unique-object --enable-linker-build-id > --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,lto > --enable-plugin --enable-java-awt=gtk --disable-dssi > --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre > --enable-libgcj-multifile --enable-java-maintainer-mode > --with-ecj-jar=/usr/share/java/eclipse-ecj.jar > --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic > --with-arch_32=i686 --build=x86_64-redhat-linux > Thread model: posix > gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) > > This is the error I get: > > make BUILD_DIR=/home/ssp/vertigo/qemu -C i386-softmmu V="1" > TARGET_DIR="i386-softmmu/" all > make[1]: Entering directory `/home/ssp/vertigo/qemu/i386-softmmu' > gcc -I/home/ssp/vertigo/qemu/slirp -I. -I/home/ssp/vertigo/qemu > -I/home/ssp/vertigo/qemu/fpu -I/home/ssp/vertigo/qemu/libcacard > -I/home/ssp/vertigo/qemu/linux-headers -I/home/ssp/vertigo/qemu/tcg > -I/home/ssp/vertigo/qemu/tcg/i386 -Werror -fPIE -DPIE -m64 > -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE > -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings > -Wmissing-prototypes -fno-strict-aliasing -fstack-protector-all > -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs > -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers > -Wold-style-declaration -Wold-style-definition -Wtype-limits > -I/usr/include/libpng12 -I/usr/include/spice-server > -I/usr/include/pixman-1 -I/usr/include/spice-1 -I/usr/include/nss3 > -I/usr/include/nspr4 -pthread -I/usr/include/glib-2.0 > -I/usr/lib64/glib-2.0/include -DHAS_AUDIO -DHAS_AUDIO_CHOICE > -DTARGET_PHYS_ADDR_BITS=64 -I../linux-headers > -I.. -I/home/ssp/vertigo/qemu/target-i386 -DNEED_CPU_H > -I/home/ssp/vertigo/qemu/include -I/usr/include/libpng12 -pthread > -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -MMD -MP -MT > hw/vfio_pci.o -MF hw/vfio_pci.d -O2 -D_FORTIFY_SOURCE=2 -g -c -o > hw/vfio_pci.o /home/ssp/vertigo/qemu/hw/vfio_pci.c > cc1: warnings being treated as errors > /home/ssp/vertigo/qemu/hw/vfio_pci.c: In function ‘vfio_bar_write’: > /home/ssp/vertigo/qemu/hw/vfio_pci.c:604:84: error: value computed is not used > /home/ssp/vertigo/qemu/hw/vfio_pci.c: In function ‘vfio_bar_read’: > /home/ssp/vertigo/qemu/hw/vfio_pci.c:644:84: error: value computed is > not used > make[1]: *** [hw/vfio_pci.o] Error 1 > make[1]: Leaving directory `/home/ssp/vertigo/qemu/i386-softmmu' > make: *** [subdir-i386-softmmu] Error 2 That's strange. The lines which cause compiler errors look like this: vfio_eoi(DO_UPCAST(VFIODevice, bars[bar->nr], bar)); There are more uses of DO_UPCAST without any compiler error: VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); Neither of both lines creates a compiler error with any of my compilers (gcc 4.4 up to latest gcc, Linux and MinGW hosts). When I compile with gcc option -save-temps, I get this code for the first line: vfio_eoi(( __extension__ ( { char __attribute__((unused)) offset_must_be_zero[ -__builtin_offsetof (VFIODevice, bars[bar->nr])]; ({ const typeof(((VFIODevice *) 0)->bars[bar->nr]) *__mptr = (bar); (VFIODevice *) ((char *) __mptr - __builtin_offsetof (VFIODevice, bars[bar->nr]));});}))); Could you please replace the first line by that code and try your compiler? If it remains silent, I suspect a bad offsetof macro. Do you compile on Linux? Which distribution or which C library do you use? Regards Stefan Weil
On 10/03/2012 11:04 AM, Søren Sandmann wrote: > From: Søren Sandmann Pedersen <ssp@redhat.com> > > Apparently GCC 4.5 still warns about "value computed not used" even > with __attribute__((unused)). Fix this by only doing the compile time > check on gcc > 4.5. > > Signed-off-by: Soren Sandmann <ssp@redhat.com> > --- > > I need this patch to get qemu to compile with GCC 4.5, but I'm not > sure if 4.5 is the right compiler version to check against. > > osdep.h | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/osdep.h b/osdep.h > index cb213e0..df89552 100644 > --- a/osdep.h > +++ b/osdep.h > @@ -41,8 +41,9 @@ typedef signed int int_fast16_t; > #endif > > /* Convert from a base type to a parent type, with compile time checking. */ > -#ifdef __GNUC__ > -#define DO_UPCAST(type, field, dev) ( __extension__ ( { \ > +#if defined (__GNUC__) && \ > + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5)) > +#define DO_UPCAST(type, field, dev) ( __extension__ ( { \ > char __attribute__((unused)) offset_must_be_zero[ \ > -offsetof(type, field)]; \ > container_of(dev, type, field);})) Try moving the attribute to the end of the declaration, i.e. just before the semi-colon. r~
diff --git a/osdep.h b/osdep.h index cb213e0..df89552 100644 --- a/osdep.h +++ b/osdep.h @@ -41,8 +41,9 @@ typedef signed int int_fast16_t; #endif /* Convert from a base type to a parent type, with compile time checking. */ -#ifdef __GNUC__ -#define DO_UPCAST(type, field, dev) ( __extension__ ( { \ +#if defined (__GNUC__) && \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5)) +#define DO_UPCAST(type, field, dev) ( __extension__ ( { \ char __attribute__((unused)) offset_must_be_zero[ \ -offsetof(type, field)]; \ container_of(dev, type, field);}))