This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Really, really const
Steven Bosscher writes:
> Op vr 26-09-2003, om 09:59 schreef Andrew Haley:
> > > | The memory a[0] is read twice. Is there any attrribute I can use to
> > > | stop gcc from doing this?
> > >
> > > GCC should be able to get that right without resorting to attributte
> > > hackery.
> >
> > I think the C standard says that gcc has to read the memory twice.
> >
> > Just because that memory is declared const here that doesn't mean that
> > it is const everywhere else; it just means that it's read-only here.
> > It might change.
>
> If you are right, then GCC is buggy. If a[0] might change, then that
> would have to happen in the call to f(), so in a modified version of
> your example:
>
> extern const int a[];
> extern void f();
>
> int foo ()
> {
> int t = a[0];
> int n = t;
> f();
> n += t;
> return n;
> }
>
> the assignment to t should happen before the call to f(). But GCC 3.2.2
> produces this:
Mainline doesn't; it reads a first. Okay, now I'm really confused. I
thought I understood what was going on, but now I'm not sure.
Andrew.