On Jan 18, 2016, at 3:49 PM, Peter Maydell wrote: > On 18 January 2016 at 19:50, Programmingkid <programmingk...@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.