This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: volatile [was: GCC warnings for unused global variables]
On 04-May-2003, Gabriel Dos Reis <gdr@integrable-solutions.net> wrote:
> Fergus Henderson <fjh@cs.mu.OZ.AU> writes:
> | On 04-May-2003, Michael Eager <eager@eagercon.com> wrote:
> | > I don't believe there is any requirement that static variables are
> | > first set to zero and then set their initial value.
> |
> | C++98 8.5 [dcl.init] paragraph 6: "The memory occupied by any object
> | of static storage duration shall be zero-initialized at program startup
> | before any other initialization takes place.".
>
> Which is different from your earlier claim that the *object* is
> zero-initialized.
Are you claiming here a distinction between the object itself and
the memory (or storage) occupied by the object?
According to C++98 1.8 paragraph 1, "An object _is_ a region of storage."
(my emphasis). If there is some reason why it is important to make a
distinction between the two here, I don't see it.
> | > They can be
> | > created with the initialized value, if that can be calculated at
> | > compile time (e.g., if there is no constructor).
> |
> | That is true for non-volatile variables, but only because the compiler
> | can apply the as-if rule. As discussed earlier in this thread, the
> | as-if rule does not apply to volatile variables -- the standard prohibits
> | implementations from optimizing away accesses to volatile variables.
>
> You keep repeating this false assertion: Quotes have been to specific
> text where the standard does actually permit such optimization.
I'm afraid we'll have to disagree on that point.
I do not agree that the text which you quoted permitted such optimization.
I believe you were misinterpreting that text.
--
Fergus Henderson <fjh@cs.mu.oz.au> | "I have always known that the pursuit
The University of Melbourne | of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp.