On 20.01.2017 11:00, Cornelia Huck wrote: > On Fri, 20 Jan 2017 10:52:26 +0100 > Thomas Huth <th...@redhat.com> wrote: > >> On 20.01.2017 10:21, Cornelia Huck wrote: >>> On Thu, 19 Jan 2017 18:32:44 +0000 >>> Peter Maydell <peter.mayd...@linaro.org> wrote: >>> >>>> Hi; I'm afraid this fails to build on Windows: >>>> >>>> /home/petmay01/linaro/qemu-for-merges/hw/s390x/s390-pci-bus.c: In >>>> function ‘s390_pci_get_iommu’: >>>> /home/petmay01/linaro/qemu-for-merges/hw/s390x/s390-pci-bus.c:415:20: >>>> error: cast from pointer to integer of different size >>>> [-Werror=pointer-to-int-cast] >>>> uint64_t key = (unsigned long)bus; >>>> ^ >>>> /home/petmay01/linaro/qemu-for-merges/hw/s390x/s390-pci-bus.c: In >>>> function ‘s390_pci_iommu_free’: >>>> /home/petmay01/linaro/qemu-for-merges/hw/s390x/s390-pci-bus.c:539:20: >>>> error: cast from pointer to integer of different size >>>> [-Werror=pointer-to-int-cast] >>>> uint64_t key = (unsigned long)bus; >>>> ^ >>>> cc1: all warnings being treated as errors >>>> >>>> >>>> You probably wanted uintptr_t. >>> >>> Fixed and v2 sent. >>> >>> I'm wondering if there is any way to catch this earlier (without >>> actually building on Windows)? My mingw 4.8.2 cross-build worked fine... >> >> You likely got to use the 32-bit version of MinGW (or compile with -m32 >> with any other version of GCC) to catch this issue, so that you get >> sizeof(long) != sizeof(void *). > > Well, I already do that (mingw32, and I see -m32 on the command line; > that already caught sizeof(uint64_t) != sizeof(void *) here.) But isn't > sizeof(long) == sizeof(void *) even in the -m32 case?
Yes, sorry, my bad, it's the 64-bit version of MinGW where sizeof(long) is different to sizeof(void *), see https://sourceforge.net/p/mingw-w64/bugs/58/ for example. Thomas