All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
@ 2016-01-17 22:23 Programmingkid
  2016-01-17 23:22 ` Paolo Bonzini
  2016-01-18  9:58 ` Daniel P. Berrange
  0 siblings, 2 replies; 15+ messages in thread
From: Programmingkid @ 2016-01-17 22:23 UTC (permalink / raw)
  To: Peter Maydell; +Cc: qemu-devel qemu-devel

I was wondering if you had problems compiling QEMU on Mac OS X recently. On my system, the channel-socket.c file causes this error:

io/channel-socket.c: In function 'qio_channel_socket_writev':
io/channel-socket.c:497:18: error: variable-sized object may not be initialized
     char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
  
As a test I made this simple program:

#include <sys/socket.h>
#include <stdio.h>

int main (int argc, char * const argv[]) {
    printf("GCC version = %d.%d.%d\n", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
    char control[CMSG_SPACE(sizeof(int) * 16)] = { 0 };
    control[0] = 'a';  // just to eliminate a warning
    return 0;
}

When compiling under Xcode, the program does compile and run. It prints "GCC version = 4.2.1".

When I try to compile it under gcc 4.2.1 using just the terminal, I see this error message:
main.cpp: In function ‘int main(int, char* const*)’:
main.cpp:6: error: size of array ‘control’ is not an integral constant-expression

Why there is a difference between XCode and the terminal I have no idea. 

When compiling it under gcc 4.9.2, it compiles and runs without problem. 

I have set the configure option for cc to gcc-4.9 with this "-cc=gcc-4.9". So the error message makes me believe that the wrong compiler is being used. 

This is the full configure command options I used:
./configure --cxx=gcc-4.9 --cc=gcc-4.9 --objcc=gcc-4.9 --disable-gtk --disable-sdl --target-list=ppc-softmmu,i386-softmmu

Any insight as to what could be wrong? 

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-17 22:23 [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X Programmingkid
@ 2016-01-17 23:22 ` Paolo Bonzini
  2016-01-17 23:45   ` Programmingkid
  2016-01-18  9:58 ` Daniel P. Berrange
  1 sibling, 1 reply; 15+ messages in thread
From: Paolo Bonzini @ 2016-01-17 23:22 UTC (permalink / raw)
  To: Programmingkid, Peter Maydell; +Cc: qemu-devel qemu-devel



On 17/01/2016 23:23, Programmingkid wrote:
> When compiling under Xcode, the program does compile and run. It prints "GCC version = 4.2.1".
> 
> When I try to compile it under gcc 4.2.1 using just the terminal, I see this error message:
> main.cpp: In function ‘int main(int, char* const*)’:
> main.cpp:6: error: size of array ‘control’ is not an integral constant-expression
> 
> Why there is a difference between XCode and the terminal I have no idea. 
> 
> When compiling it under gcc 4.9.2, it compiles and runs without problem. 
> 
> I have set the configure option for cc to gcc-4.9 with this "-cc=gcc-4.9". So the error message makes me believe that the wrong compiler is being used. 
> 
> This is the full configure command options I used:
> ./configure --cxx=gcc-4.9 --cc=gcc-4.9 --objcc=gcc-4.9 --disable-gtk --disable-sdl --target-list=ppc-softmmu,i386-softmmu
> 
> Any insight as to what could be wrong? 

What's the definition of the CMSG_SPACE macro under OS X?

Paolo

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-17 23:22 ` Paolo Bonzini
@ 2016-01-17 23:45   ` Programmingkid
  2016-01-18 17:45     ` Eric Blake
  0 siblings, 1 reply; 15+ messages in thread
From: Programmingkid @ 2016-01-17 23:45 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Peter Maydell, qemu-devel qemu-devel


On Jan 17, 2016, at 6:22 PM, Paolo Bonzini wrote:

> 
> 
> On 17/01/2016 23:23, Programmingkid wrote:
>> When compiling under Xcode, the program does compile and run. It prints "GCC version = 4.2.1".
>> 
>> When I try to compile it under gcc 4.2.1 using just the terminal, I see this error message:
>> main.cpp: In function ‘int main(int, char* const*)’:
>> main.cpp:6: error: size of array ‘control’ is not an integral constant-expression
>> 
>> Why there is a difference between XCode and the terminal I have no idea. 
>> 
>> When compiling it under gcc 4.9.2, it compiles and runs without problem. 
>> 
>> I have set the configure option for cc to gcc-4.9 with this "-cc=gcc-4.9". So the error message makes me believe that the wrong compiler is being used. 
>> 
>> This is the full configure command options I used:
>> ./configure --cxx=gcc-4.9 --cc=gcc-4.9 --objcc=gcc-4.9 --disable-gtk --disable-sdl --target-list=ppc-softmmu,i386-softmmu
>> 
>> Any insight as to what could be wrong? 
> 
> What's the definition of the CMSG_SPACE macro under OS X?
> 
> Paolo

#define	CMSG_SPACE(l)		(__DARWIN_ALIGN32(sizeof(struct cmsghdr)) + __DARWIN_ALIGN32(l))

Hope this helps. 

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-17 22:23 [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X Programmingkid
  2016-01-17 23:22 ` Paolo Bonzini
@ 2016-01-18  9:58 ` Daniel P. Berrange
  2016-01-18 14:36   ` Programmingkid
  1 sibling, 1 reply; 15+ messages in thread
From: Daniel P. Berrange @ 2016-01-18  9:58 UTC (permalink / raw)
  To: Programmingkid; +Cc: Peter Maydell, qemu-devel qemu-devel, Paolo Bonzini

On Sun, Jan 17, 2016 at 05:23:44PM -0500, Programmingkid wrote:
> I was wondering if you had problems compiling QEMU on Mac OS X recently. On my system, the channel-socket.c file causes this error:
> 
> io/channel-socket.c: In function 'qio_channel_socket_writev':
> io/channel-socket.c:497:18: error: variable-sized object may not be initialized
>      char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };

Can you try applying this patch:

diff --git a/io/channel-socket.c b/io/channel-socket.c
index eaa411f..bc117b1 100644
--- a/io/channel-socket.c
+++ b/io/channel-socket.c
@@ -493,10 +495,12 @@ static ssize_t qio_channel_socket_writev(QIOChannel *ioc,
     QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
     ssize_t ret;
     struct msghdr msg = { NULL, };
-    char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
+    char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)];
     size_t fdsize = sizeof(int) * nfds;
     struct cmsghdr *cmsg;
 
+    memset(control, 0, CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS));
+
     msg.msg_iov = (struct iovec *)iov;
     msg.msg_iovlen = niov;
 


Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-18  9:58 ` Daniel P. Berrange
@ 2016-01-18 14:36   ` Programmingkid
  2016-01-19 14:06     ` Daniel P. Berrange
  0 siblings, 1 reply; 15+ messages in thread
From: Programmingkid @ 2016-01-18 14:36 UTC (permalink / raw)
  To: Daniel P. Berrange; +Cc: Peter Maydell, qemu-devel qemu-devel, Paolo Bonzini


On Jan 18, 2016, at 4:58 AM, Daniel P. Berrange wrote:

> On Sun, Jan 17, 2016 at 05:23:44PM -0500, Programmingkid wrote:
>> I was wondering if you had problems compiling QEMU on Mac OS X recently. On my system, the channel-socket.c file causes this error:
>> 
>> io/channel-socket.c: In function 'qio_channel_socket_writev':
>> io/channel-socket.c:497:18: error: variable-sized object may not be initialized
>>     char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
> 
> Can you try applying this patch:
> 
> diff --git a/io/channel-socket.c b/io/channel-socket.c
> index eaa411f..bc117b1 100644
> --- a/io/channel-socket.c
> +++ b/io/channel-socket.c
> @@ -493,10 +495,12 @@ static ssize_t qio_channel_socket_writev(QIOChannel *ioc,
>     QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
>     ssize_t ret;
>     struct msghdr msg = { NULL, };
> -    char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
> +    char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)];
>     size_t fdsize = sizeof(int) * nfds;
>     struct cmsghdr *cmsg;
> 
> +    memset(control, 0, CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS));
> +
>     msg.msg_iov = (struct iovec *)iov;
>     msg.msg_iovlen = niov;
> 
> 
> 
> Regards,
> Daniel
> -- 
> |: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
> |: http://libvirt.org              -o-             http://virt-manager.org :|
> |: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
> |: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

Your patch solves the problem. Good job!

Reviewed-By: John Arbuckle <programmingkidx@gmail.com>

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-17 23:45   ` Programmingkid
@ 2016-01-18 17:45     ` Eric Blake
  2016-01-18 17:59       ` Peter Maydell
  2016-01-18 19:50       ` Programmingkid
  0 siblings, 2 replies; 15+ messages in thread
From: Eric Blake @ 2016-01-18 17:45 UTC (permalink / raw)
  To: Programmingkid, Paolo Bonzini; +Cc: Peter Maydell, qemu-devel qemu-devel

[-- Attachment #1: Type: text/plain, Size: 666 bytes --]

On 01/17/2016 04:45 PM, Programmingkid wrote:
>> What's the definition of the CMSG_SPACE macro under OS X?
>>
>> Paolo
> 
> #define	CMSG_SPACE(l)		(__DARWIN_ALIGN32(sizeof(struct cmsghdr)) + __DARWIN_ALIGN32(l))

And the definition of __DARWIN_ALIGN32()?

It looks like the definition is not properly resulting in a compile-time
constant, and therefore the warning about the initializer is resulting
because you can't initialize a dynamically-sized array.  But you still
haven't shown us why the headers are resulting in a non-constant size.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-18 17:45     ` Eric Blake
@ 2016-01-18 17:59       ` Peter Maydell
  2016-01-18 19:46         ` Programmingkid
  2016-01-18 19:50       ` Programmingkid
  1 sibling, 1 reply; 15+ messages in thread
From: Peter Maydell @ 2016-01-18 17:59 UTC (permalink / raw)
  To: Eric Blake; +Cc: Programmingkid, qemu-devel qemu-devel, Paolo Bonzini

On 18 January 2016 at 17:45, Eric Blake <eblake@redhat.com> wrote:
> On 01/17/2016 04:45 PM, Programmingkid wrote:
>>> What's the definition of the CMSG_SPACE macro under OS X?
>>>
>>> Paolo
>>
>> #define       CMSG_SPACE(l)           (__DARWIN_ALIGN32(sizeof(struct cmsghdr)) + __DARWIN_ALIGN32(l))
>
> And the definition of __DARWIN_ALIGN32()?
>
> It looks like the definition is not properly resulting in a compile-time
> constant, and therefore the warning about the initializer is resulting
> because you can't initialize a dynamically-sized array.  But you still
> haven't shown us why the headers are resulting in a non-constant size.

FWIW, on my OSX system (OSX 10.10.5, Xcode 7.1), compiling the test
program with

  gcc -Wall -E  -o /tmp/varray.S /tmp/varray.c

shows that the array definition expands to

    char control[(((__darwin_size_t)((char
*)(__darwin_size_t)(sizeof(struct cmsghdr)) + (sizeof(__uint32_t) -
1)) &~ (sizeof(__uint32_t) - 1)) + ((__darwin_size_t)((char
*)(__darwin_size_t)(sizeof(int) * 16) + (sizeof(__uint32_t) - 1)) &~
(sizeof(__uint32_t) - 1)))] = { 0 };

the relevant macro definitions being
#define __DARWIN_ALIGNBYTES     (sizeof(__darwin_size_t) - 1)
#define       __DARWIN_ALIGN32(p)       ((__darwin_size_t)((char
*)(__darwin_size_t)(p) + __DARWIN_ALIGNBYTES32) &~
__DARWIN_ALIGNBYTES32)


this is with a 'gcc' that gcc --version reports as
Configured with:
--prefix=/Applications/Xcode.app/Contents/Developer/usr
--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.0.0 (clang-700.1.76)
Target: x86_64-apple-darwin14.5.0
Thread model: posix

and which claims itself to be 4.2.1 by the printout from the test
program (ie it's clang under the hood).

I don't get any compiler warnings from
  gcc -Wall -O2  -o /tmp/varray /tmp/varray.c

I don't know what the difference between my setup and John's is
(likely an older clang version).

thanks
-- PMM

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-18 17:59       ` Peter Maydell
@ 2016-01-18 19:46         ` Programmingkid
  0 siblings, 0 replies; 15+ messages in thread
From: Programmingkid @ 2016-01-18 19:46 UTC (permalink / raw)
  To: Peter Maydell, Eric Blake; +Cc: Paolo Bonzini, qemu-devel qemu-devel


On Jan 18, 2016, at 12:59 PM, Peter Maydell wrote:

> On 18 January 2016 at 17:45, Eric Blake <eblake@redhat.com> wrote:
>> On 01/17/2016 04:45 PM, Programmingkid wrote:
>>>> What's the definition of the CMSG_SPACE macro under OS X?
>>>> 
>>>> Paolo
>>> 
>>> #define       CMSG_SPACE(l)           (__DARWIN_ALIGN32(sizeof(struct cmsghdr)) + __DARWIN_ALIGN32(l))
>> 
>> And the definition of __DARWIN_ALIGN32()?
>> 
>> It looks like the definition is not properly resulting in a compile-time
>> constant, and therefore the warning about the initializer is resulting
>> because you can't initialize a dynamically-sized array.  But you still
>> haven't shown us why the headers are resulting in a non-constant size.
> 
> FWIW, on my OSX system (OSX 10.10.5, Xcode 7.1), compiling the test
> program with
> 
>  gcc -Wall -E  -o /tmp/varray.S /tmp/varray.c
> 
> shows that the array definition expands to
> 
>    char control[(((__darwin_size_t)((char
> *)(__darwin_size_t)(sizeof(struct cmsghdr)) + (sizeof(__uint32_t) -
> 1)) &~ (sizeof(__uint32_t) - 1)) + ((__darwin_size_t)((char
> *)(__darwin_size_t)(sizeof(int) * 16) + (sizeof(__uint32_t) - 1)) &~
> (sizeof(__uint32_t) - 1)))] = { 0 };
> 
> the relevant macro definitions being
> #define __DARWIN_ALIGNBYTES     (sizeof(__darwin_size_t) - 1)
> #define       __DARWIN_ALIGN32(p)       ((__darwin_size_t)((char
> *)(__darwin_size_t)(p) + __DARWIN_ALIGNBYTES32) &~
> __DARWIN_ALIGNBYTES32)
> 
> 
> this is with a 'gcc' that gcc --version reports as
> Configured with:
> --prefix=/Applications/Xcode.app/Contents/Developer/usr
> --with-gxx-include-dir=/usr/include/c++/4.2.1
> Apple LLVM version 7.0.0 (clang-700.1.76)
> Target: x86_64-apple-darwin14.5.0
> Thread model: posix
> 
> and which claims itself to be 4.2.1 by the printout from the test
> program (ie it's clang under the hood).

That is interesting. I would have thought Apple would have upgrade their GCC compatibility version by now. 

> 
> I don't get any compiler warnings from
>  gcc -Wall -O2  -o /tmp/varray /tmp/varray.c
> 
> I don't know what the difference between my setup and John's is
> (likely an older clang version).
> 
> thanks
> -- PMM

A patch by Daniel P. Berrange successfully fixes this problem. 

http://patchwork.ozlabs.org/patch/569500/

diff --git a/io/channel-socket.c b/io/channel-socket.c
index eaa411f..bc117b1 100644
--- a/io/channel-socket.c
+++ b/io/channel-socket.c
@@ -493,10 +495,12 @@  static ssize_t qio_channel_socket_writev(QIOChannel *ioc,

     QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
     ssize_t ret;
     struct msghdr msg = { NULL, };

-    char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
+    char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)];

     size_t fdsize = sizeof(int) * nfds;
     struct cmsghdr *cmsg;
 

+    memset(control, 0, CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS));
+

     msg.msg_iov = (struct iovec *)iov;
     msg.msg_iovlen = niov;
 

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-18 17:45     ` Eric Blake
  2016-01-18 17:59       ` Peter Maydell
@ 2016-01-18 19:50       ` Programmingkid
  2016-01-18 20:49         ` Peter Maydell
  1 sibling, 1 reply; 15+ messages in thread
From: Programmingkid @ 2016-01-18 19:50 UTC (permalink / raw)
  To: Eric Blake, Peter Maydell, Paolo Bonzini; +Cc: qemu-devel qemu-devel


On Jan 18, 2016, at 12:45 PM, Eric Blake wrote:

> On 01/17/2016 04:45 PM, Programmingkid wrote:
>>> What's the definition of the CMSG_SPACE macro under OS X?
>>> 
>>> Paolo
>> 
>> #define	CMSG_SPACE(l)		(__DARWIN_ALIGN32(sizeof(struct cmsghdr)) + __DARWIN_ALIGN32(l))
> 
> And the definition of __DARWIN_ALIGN32()?
> 
> It looks like the definition is not properly resulting in a compile-time
> constant, and therefore the warning about the initializer is resulting
> because you can't initialize a dynamically-sized array.  But you still
> haven't shown us why the headers are resulting in a non-constant size.

I tried what Peter Maydell did and here are the results:

typedef __darwin_size_t size_t;

char control[(((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(struct cmsghdr)) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)) + ((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(int) * 16) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)))] = { 0 };

It looks like the problem was actually with this part: = { 0 };

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-18 19:50       ` Programmingkid
@ 2016-01-18 20:49         ` Peter Maydell
  2016-01-18 21:09           ` Programmingkid
  0 siblings, 1 reply; 15+ messages in thread
From: Peter Maydell @ 2016-01-18 20:49 UTC (permalink / raw)
  To: Programmingkid; +Cc: Paolo Bonzini, qemu-devel qemu-devel

On 18 January 2016 at 19:50, Programmingkid <programmingkidx@gmail.com> wrote:
> I tried what Peter Maydell did and here are the results:
>
> typedef __darwin_size_t size_t;
>
> char control[(((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(struct cmsghdr)) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)) + ((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(int) * 16) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)))] = { 0 };
>
> It looks like the problem was actually with this part: = { 0 };

No, the problem is that the compiler seems to think the bit in []
is not compile time constant (the = { 0 } initializer syntax
is valid if and only if it is compile-time-constant).

Can you say what 'gcc --version' prints for you? That will
tell us the clang version number, which is more interesting
than what clang claims its gcc-compatibility is.

I'm leaning towards this being a compiler bug fixed in
a later version of clang, because that [] expression looks
like it should be constant to me, and it's constant as
far as my clang version thinks.

thanks
-- PMM

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-18 20:49         ` Peter Maydell
@ 2016-01-18 21:09           ` Programmingkid
  2016-01-18 22:09             ` Peter Maydell
  0 siblings, 1 reply; 15+ messages in thread
From: Programmingkid @ 2016-01-18 21:09 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Paolo Bonzini, qemu-devel qemu-devel


On Jan 18, 2016, at 3:49 PM, Peter Maydell wrote:

> On 18 January 2016 at 19:50, Programmingkid <programmingkidx@gmail.com> wrote:
>> I tried what Peter Maydell did and here are the results:
>> 
>> typedef __darwin_size_t size_t;
>> 
>> char control[(((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(struct cmsghdr)) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)) + ((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(int) * 16) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)))] = { 0 };
>> 
>> It looks like the problem was actually with this part: = { 0 };
> 
> No, the problem is that the compiler seems to think the bit in []
> is not compile time constant (the = { 0 } initializer syntax
> is valid if and only if it is compile-time-constant).
> 
> Can you say what 'gcc --version' prints for you? That will
> tell us the clang version number, which is more interesting
> than what clang claims its gcc-compatibility is.

$ gcc-4.9 --version
gcc-4.9 (Homebrew gcc49 4.9.2_1) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

> I'm leaning towards this being a compiler bug fixed in
> a later version of clang, because that [] expression looks
> like it should be constant to me, and it's constant as
> far as my clang version thinks.

A bug could be the case. I use gcc 4.9.2 to compile QEMU.
I don't use the clang compiler. 

Just in case here is the info from Apple's clang compiler on
my system:

$ gcc --version
i686-apple-darwin10-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-18 21:09           ` Programmingkid
@ 2016-01-18 22:09             ` Peter Maydell
  2016-01-19  1:23               ` Programmingkid
  0 siblings, 1 reply; 15+ messages in thread
From: Peter Maydell @ 2016-01-18 22:09 UTC (permalink / raw)
  To: Programmingkid; +Cc: Paolo Bonzini, qemu-devel qemu-devel

On 18 January 2016 at 21:09, Programmingkid <programmingkidx@gmail.com> wrote:
>
> On Jan 18, 2016, at 3:49 PM, Peter Maydell wrote:
>> Can you say what 'gcc --version' prints for you? That will
>> tell us the clang version number, which is more interesting
>> than what clang claims its gcc-compatibility is.
>
> $ gcc-4.9 --version
> gcc-4.9 (Homebrew gcc49 4.9.2_1) 4.9.2
> Copyright (C) 2014 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ah, I misread your earlier message and I thought you said that
gcc-4.9 worked ok and it was plain 'gcc' that caused the warning.
Is that expansion of the macro the one produced by gcc-4.9, then?

Also, you're right that we should figure out why it seems to
be using the wrong C compiler. Can you use 'V=1' to look at
what command line make is using to compile this file, please?
(you'll probably want to dump the whole make output to a file
and then search through it). Also:
*  what does your config-host.mak say (in particular about what
 it's set CC, HOST_CC, CXX, etc to)?
* can you check your environment doesn't have CC set to anything?
("env | grep CC" should tell you if it is)

thanks
-- PMM

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-18 22:09             ` Peter Maydell
@ 2016-01-19  1:23               ` Programmingkid
  2016-01-19 23:49                 ` Programmingkid
  0 siblings, 1 reply; 15+ messages in thread
From: Programmingkid @ 2016-01-19  1:23 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Paolo Bonzini, qemu-devel qemu-devel


On Jan 18, 2016, at 5:09 PM, Peter Maydell wrote:

> On 18 January 2016 at 21:09, Programmingkid <programmingkidx@gmail.com> wrote:
>> 
>> On Jan 18, 2016, at 3:49 PM, Peter Maydell wrote:
>>> Can you say what 'gcc --version' prints for you? That will
>>> tell us the clang version number, which is more interesting
>>> than what clang claims its gcc-compatibility is.
>> 
>> $ gcc-4.9 --version
>> gcc-4.9 (Homebrew gcc49 4.9.2_1) 4.9.2
>> Copyright (C) 2014 Free Software Foundation, Inc.
>> This is free software; see the source for copying conditions.  There is NO
>> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
> Ah, I misread your earlier message and I thought you said that
> gcc-4.9 worked ok and it was plain 'gcc' that caused the warning.
> Is that expansion of the macro the one produced by gcc-4.9, then?

Actually it should have but wasn't. It is of gcc 4.2.1.

Here is gcc 4.9.2's output:

char control[(((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(struct cmsghdr)) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)) + ((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(int) * 16) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)))] = { 0 };

This is gcc 4.2.1's output:

char control[(((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(struct cmsghdr)) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)) + ((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(int) * 16) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)))] = { 0 };

They appear to be identical. 

> 
> Also, you're right that we should figure out why it seems to
> be using the wrong C compiler. Can you use 'V=1' to look at
> what command line make is using to compile this file, please?
> (you'll probably want to dump the whole make output to a file
> and then search through it).

It says gcc-4.9 for the compiler. I wonder if the wrong header file is being used somewhere. 

> Also:
> *  what does your config-host.mak say (in particular about what
> it's set CC, HOST_CC, CXX, etc to)?

CC=gcc-4.9
HOST_CC=cc
CXX=gcc-4.9
CPP=gcc-4.9 -E
OBJCC=gcc-4.9

> * can you check your environment doesn't have CC set to anything?
> ("env | grep CC" should tell you if it is)

Nothing is returned.

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-18 14:36   ` Programmingkid
@ 2016-01-19 14:06     ` Daniel P. Berrange
  0 siblings, 0 replies; 15+ messages in thread
From: Daniel P. Berrange @ 2016-01-19 14:06 UTC (permalink / raw)
  To: Programmingkid; +Cc: Peter Maydell, qemu-devel qemu-devel, Paolo Bonzini

On Mon, Jan 18, 2016 at 09:36:08AM -0500, Programmingkid wrote:
> 
> On Jan 18, 2016, at 4:58 AM, Daniel P. Berrange wrote:
> 
> > On Sun, Jan 17, 2016 at 05:23:44PM -0500, Programmingkid wrote:
> >> I was wondering if you had problems compiling QEMU on Mac OS X recently. On my system, the channel-socket.c file causes this error:
> >> 
> >> io/channel-socket.c: In function 'qio_channel_socket_writev':
> >> io/channel-socket.c:497:18: error: variable-sized object may not be initialized
> >>     char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
> > 
> > Can you try applying this patch:
> > 
> > diff --git a/io/channel-socket.c b/io/channel-socket.c
> > index eaa411f..bc117b1 100644
> > --- a/io/channel-socket.c
> > +++ b/io/channel-socket.c
> > @@ -493,10 +495,12 @@ static ssize_t qio_channel_socket_writev(QIOChannel *ioc,
> >     QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
> >     ssize_t ret;
> >     struct msghdr msg = { NULL, };
> > -    char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
> > +    char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)];
> >     size_t fdsize = sizeof(int) * nfds;
> >     struct cmsghdr *cmsg;
> > 
> > +    memset(control, 0, CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS));
> > +
> >     msg.msg_iov = (struct iovec *)iov;
> >     msg.msg_iovlen = niov;
> > 
> 
> Your patch solves the problem. Good job!
> 
> Reviewed-By: John Arbuckle <programmingkidx@gmail.com>

Thanks, I'll include this fix in my next PULL request for the io/ layer

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

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

* Re: [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X
  2016-01-19  1:23               ` Programmingkid
@ 2016-01-19 23:49                 ` Programmingkid
  0 siblings, 0 replies; 15+ messages in thread
From: Programmingkid @ 2016-01-19 23:49 UTC (permalink / raw)
  To: Peter Maydell, Eric Blake, Paolo Bonzini, qemu-devel qemu-devel


On Jan 18, 2016, at 8:23 PM, Programmingkid wrote:

> 
> On Jan 18, 2016, at 5:09 PM, Peter Maydell wrote:
> 
>> On 18 January 2016 at 21:09, Programmingkid <programmingkidx@gmail.com> wrote:
>>> 
>>> On Jan 18, 2016, at 3:49 PM, Peter Maydell wrote:
>>>> Can you say what 'gcc --version' prints for you? That will
>>>> tell us the clang version number, which is more interesting
>>>> than what clang claims its gcc-compatibility is.
>>> 
>>> $ gcc-4.9 --version
>>> gcc-4.9 (Homebrew gcc49 4.9.2_1) 4.9.2
>>> Copyright (C) 2014 Free Software Foundation, Inc.
>>> This is free software; see the source for copying conditions.  There is NO
>>> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>> 
>> Ah, I misread your earlier message and I thought you said that
>> gcc-4.9 worked ok and it was plain 'gcc' that caused the warning.
>> Is that expansion of the macro the one produced by gcc-4.9, then?
> 
> Actually it should have but wasn't. It is of gcc 4.2.1.
> 
> Here is gcc 4.9.2's output:
> 
> char control[(((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(struct cmsghdr)) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)) + ((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(int) * 16) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)))] = { 0 };
> 
> This is gcc 4.2.1's output:
> 
> char control[(((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(struct cmsghdr)) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)) + ((__darwin_size_t)((char *)(__darwin_size_t)(sizeof(int) * 16) + (sizeof(__uint32_t) - 1)) &~ (sizeof(__uint32_t) - 1)))] = { 0 };
> 
> They appear to be identical. 
> 
>> 
>> Also, you're right that we should figure out why it seems to
>> be using the wrong C compiler. Can you use 'V=1' to look at
>> what command line make is using to compile this file, please?
>> (you'll probably want to dump the whole make output to a file
>> and then search through it).
> 
> It says gcc-4.9 for the compiler. I wonder if the wrong header file is being used somewhere. 
> 
>> Also:
>> *  what does your config-host.mak say (in particular about what
>> it's set CC, HOST_CC, CXX, etc to)?
> 
> CC=gcc-4.9
> HOST_CC=cc
> CXX=gcc-4.9
> CPP=gcc-4.9 -E
> OBJCC=gcc-4.9
> 
>> * can you check your environment doesn't have CC set to anything?
>> ("env | grep CC" should tell you if it is)
> 
> Nothing is returned.


printf("GCC version = %d.%d.%d\n", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);

I thought I should add that with this code in the qio_channel_socket_register_types() function of channel-socket.c, this was printed: GCC version = 4.9.2

It looks like my theory of another version of GCC being used for compiling the channel-socket.c file isn't correct. 

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

end of thread, other threads:[~2016-01-19 23:49 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-17 22:23 [Qemu-devel] CMSG_SPACE() causing compile time error on Mac OS X Programmingkid
2016-01-17 23:22 ` Paolo Bonzini
2016-01-17 23:45   ` Programmingkid
2016-01-18 17:45     ` Eric Blake
2016-01-18 17:59       ` Peter Maydell
2016-01-18 19:46         ` Programmingkid
2016-01-18 19:50       ` Programmingkid
2016-01-18 20:49         ` Peter Maydell
2016-01-18 21:09           ` Programmingkid
2016-01-18 22:09             ` Peter Maydell
2016-01-19  1:23               ` Programmingkid
2016-01-19 23:49                 ` Programmingkid
2016-01-18  9:58 ` Daniel P. Berrange
2016-01-18 14:36   ` Programmingkid
2016-01-19 14:06     ` Daniel P. Berrange

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.