Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Mar 2018 08:56:01 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        Ed Maste <emaste@freebsd.org>
Cc:        Eitan Adler <eadler@freebsd.org>, src-committers <src-committers@freebsd.org>,  svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r330602 - head/sys/compat/cloudabi
Message-ID:  <CANCZdfqi%2BexoSm_j2fRpxLd3SmvKCRH5_xBhVzp_LUw68AN=oQ@mail.gmail.com>
In-Reply-To: <CAPyFy2DOrHNs2BEQVqJYBGxT4iiA3ms_crXcX=q0wXr=63ddug@mail.gmail.com>
References:  <201803071447.w27Elh7C053393@repo.freebsd.org> <CAPyFy2DOrHNs2BEQVqJYBGxT4iiA3ms_crXcX=q0wXr=63ddug@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Mar 7, 2018 at 8:44 AM, Ed Maste <emaste@freebsd.org> wrote:

> On 7 March 2018 at 09:47, Eitan Adler <eadler@freebsd.org> wrote:
> > Author: eadler
> > Date: Wed Mar  7 14:47:43 2018
> > New Revision: 330602
> > URL: https://svnweb.freebsd.org/changeset/base/330602
> >
> > Log:
> >   sys/cloudabi: Avoid relying on GNU specific extensions
> >
> >   An empty initializer list is not technically valid C grammar.
> >
> >   MFC After:    1 week
> >
> > -       cloudabi_fdstat_t fsb = {};
> > +       cloudabi_fdstat_t fsb = {0};
>
> In practice it appears initializing via { 0 } also zeros any padding
> in the struct, but I do not believe it's required by the C standard.
> Perhaps a language lawyer can weigh in?
>

All the standard says are that all named are initialized to 0 (which has
the usual meaning for the integer 0 for pointers) unless otherwise stated:

6.7.8 para 9:

"Except where explicitly stated otherwise, for the purposes of this
subclause unnamed members of objects of structure and union type do not
participate in initialization. Unnamed members of structure objects have
indeterminate value even after initialization."

6.7.8 para 21:

"If there are fewer initializers in a brace-enclosed list than there are
elements or members of an aggregate, or fewer characters in a string
literal used to initialize an array of known size than there are elements
in the array, the remainder of the aggregate shall be initialized
implicitly the same as objects that have static storage duration."

The aggregate here, I believe refers to the elements, not the padded
structure, and the padding is definitely an unnamed part of the structure,
which makes it unspecified.

However 6.7.8 is quite long and detailed, and I'm not 100% sure I have
totally grokked all its subtle implications.

Commenting on this commit just because it's highlighted by this
> change; I do not believe there's a difference between the GNU
> extension { } and { 0 } here.
>

I believe that's correct as well.

Warner



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfqi%2BexoSm_j2fRpxLd3SmvKCRH5_xBhVzp_LUw68AN=oQ>