On 20 July 2017 at 22:10, Eric Blake <ebl...@redhat.com> wrote: > On 07/20/2017 03:53 PM, Peter Maydell wrote: >> On 20 July 2017 at 19:26, Eric Blake <ebl...@redhat.com> wrote: >>> On 07/20/2017 11:32 AM, Peter Maydell wrote: >>>> On NetBSD the compiler warns: >>>> util/oslib-posix.c: In function 'sigaction_invoke': >>>> util/oslib-posix.c:589:5: warning: missing braces around initializer >>>> [-Wmissing-braces] >>>> siginfo_t si = { 0 }; >>>> ^ >>> >>> Uggh. That is a broken compiler. C99 declares that 'anything = {0}' is >>> supposed to be a valid way to zero-initialize anything. >> >> Looks like maybe it was https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119 > > Would it be better to add a configure check for broken -Wmissing-braces > (where we would then add -Wno-missing-braces to the (outdated) NetBSD > compiler)?
There's also a pointer to a clang bug which is not marked as fixed, and even in gcc it's down as not fixed in 4.8 or 4.9 if I'm reading the bug comments right. > But then again, we already rely on gcc/clang's extension of foo={} > (which is valid for C++, what a shame that the two languages picked > different universal-zero initializers), so it's probably less churn to > just fix the few outliers to also rely on the extension than it is to > bloat configure just to permanently work around the broken compiler. This is AFAICT the only instance that needs fixing, because the compiler only warns if the first element in the struct isn't a simple data type that can be initialized with '= 0'. If NetBSD had happened to use a similar definition to Linux (which happens to start with "int si_signo;") we wouldn't have had to change this initializer. (The fact that so many still-prevalent gcc versions behave like this is probably why the only case the NetBSD compile found is one that is an initializer of a system-header-defined struct where NetBSD has taken a somewhat odd approach.) (Personally if I were the C standards folks I'd fix it by blessing the gcc-extension that makes "{}" a valid zero initializer and bringing it into line with C++.) thanks -- PMM