[m-rev.] for review: fix MSVC LLDS code compilation
Peter Ross
pro at missioncriticalit.com
Mon May 28 11:25:40 AEST 2007
On 5/28/07, Peter Ross <pro at missioncriticalit.com> wrote:
> On 5/28/07, Zoltan Somogyi <zs at csse.unimelb.edu.au> wrote:
> > On 28-May-2007, Peter Ross <pro at missioncriticalit.com> wrote:
> > > Could you just check the following.
> > > It doesn't give any warnings under gcc.
> > >
> > > compiler/llds_out.m:
> > > MSVC treats declarations such as
> > > "static const struct s a[];"
> > > as definitions. As a definition it doesn't know the size
> > > of the definition, so aborts.
> > > Thus we now output
> > > "extern const struct s a[];"
> > > which both gcc and msvc seem to handle.
> >
> > I am surprised this doesn't get a warning from gcc. "extern" indicates
> > the symbol is visible outside the module; "static" indicates it is not
> > visible. Having a declaration use one and the definition use the other
> > is definitely something that at least *some* versions of gcc generate
> > warnings about, at least with *some* options that we use.
> >
> I thought so as well
>
> I thought I had also tried the following and got an error message, but
> it appears not, as I just retried with msvc and gcc 3.4.4
>
> static struct s array[2];
> ......
> static struct s array[2] = {{1}, {2}};
>
> This seems to be accepted by everything.
> Are there any issues with this?
>
In other words define it twice with the second definition doing the
initialization.
--
Peter Ross - Mission Critical Australia
AU: +61 424 651 834
BE: +32 485 482 559
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list