volatile [was: GCC warnings for unused global variables]

Gabriel Dos Reis gdr@integrable-solutions.net
Thu May 8 12:30:00 GMT 2003


Fergus Henderson <fjh@cs.mu.oz.au> writes:

| On 04-May-2003, Gabriel Dos Reis <gdr@integrable-solutions.net> wrote:
| > Fergus Henderson <fjh@cs.mu.oz.au> writes:
| > | I do not agree that the text which you quoted permitted such optimization.
| > 
| > Still, it says so in black on white.
| 
| The C standard text which you quoted doesn't say that the optimization
| is permitted unconditionally. 
               ^^^^^^^^^^^^^^^

Which is not my claim.

| It only says that the optimization is
| permitted only "if [the implementation] can deduce that [the expression's]
| value is not used and that no needed side effects are produced". 

In what is that different from 

 # Why? the last part of the paragraph quoted above does specifically
 # permit that optimization where applicable.
 
quoted from http://gcc.gnu.org/ml/gcc/2003-05/msg00145.html ?

| In the
| case of volatile variables, this condition is always false,

No, because the standard does specifically add

  INCLUDING ANY CAUSED BY CALLING A FUNCTION OR ACCESSING A VOLATILE
  OBJECT 

| because the
| definition of volatile means that the implementation can never know if
| a side effect is "needed".

The definition of "volatile" does not say that the implementation can
never know if a side effect is needed.  what you've discovered is just
another facet of the ill-defined notion of "volatile".

-- Gaby



More information about the Gcc mailing list