Re: Don't Plan 9 C compiler initialize the rest of member of a?struct?

Kurt H Maier <[email protected]>
Newsgroups gmane.os.plan9.general
Message-ID <20190402022256.GA36424@wopr>
On Mon, Apr 01, 2019 at 09:20:43PM -0400, Dan Cross wrote:
> On Mon, Apr 1, 2019 at 8:36 PM Kurt H Maier <[email protected]> wrote:
> 
> > On Mon, Apr 01, 2019 at 08:26:30PM -0400, Jeremy O'Brien wrote:
> > > On Mon, Apr 1, 2019, at 11:33, Kyohei Kadota wrote:
> > > > Hi, 9fans. I use 9legacy.
> > > >
> > > > About below program, I expected that flags field will initialize to
> > > > zero but the value of flags was a garbage, ex, "f8f7".
> > > > Is this expected?
> > > >
> > > > ```
> > > > #include <stdio.h>
> > > >
> > > > struct option {
> > > >     int n;
> > > >     char *s;
> > > >     int flags;
> > > > };
> > > >
> > > > int
> > > > main(void)
> > > > {
> > > >     struct option opt = {1, "test"};
> > > >     printf("%d %s %x\n", opt.n, opt.s, opt.flags);
> > > >     return 0;
> > > > }
> > > > ```
> > > >
> > > >
> > >
> > > According to C99: "If an object that has automatic storage duration is
> > not initialized explicitly, its value is indeterminate."
> > >
> > > Stack variable == automatic storage duration. This appears to be correct
> > behavior to me.
> > >
> >
> > Can anyone provide the patches 9legacy uses to implement C99 compliance?
> 
> 
> There were actually quite a few of them, mostly done by Geoff Collyer.  The
> compiler sources list contains a list of desiderata in a file called `c99`;
> of course, the plan9 compilers aren't completely compliant (they weren't
> trying to be). Incidentally this file has been carried forward into, for
> example, /sys/src/cmd/cc/c99 in the 9front distribution (and other plan9
> derivatives).
> 
> In the present case, this appears to be a compiler bug. The aforementioned
> reference to n1548 sec 6.7.9 para 10 is incorrect in that there _is_ an
> explicit initializer here. The relevant text in the standard is sec 6.7.9
> pp 16-21, which specifies that in the event that an explicit initializer
> does not completely cover (in a topological sense) the thing it is
> initializing, then the elements not covered shall be initialized as if they
> had _static_ storage duration; that is, they should be zeroed.
> 
> Now as I said, the Plan 9 C compilers aren't explicit C99 compliant. But
> given that the `c99` file describes things related to initializer lists as
> being unneeded because they were already implemented, one may assume it was
> believed that this was covered by c99 behavior. It isn't.
> 
>         - Dan C.

So, no?

khm
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.