This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: GCC warnings for unused global variables


> Well, if the side effect is needed then the compiler won't remove it.
But how can the compiler possibly determine that? The compiler is just
phase 1 of a multi-phase process to create a functioning executable.
I don't know if such code exists, but it wouldn't surprise me terribly
if some smart bloke somewhere has organised, through link editor
trickery
or other object-file manipulation, that code like:

static volatile int foo;

void doit (void)
{
  foo = 1;
  foo = 2;
}

actually orchestrates that because the symbol is marked as volatile,
whether static or not, that it is mapped to some I/O port or special
memory location or any number of possible things, and that the mere act
of assigning a value to it writes data to the port. I belive that THAT
kind of trickery was the intent behind volatile. I don't have the 
standard in front of me but I do have access to one of the committee
members and he confirms that that was indeed the intent, that volatile
should indicate to the compiler an entity that has side effects beyond
the ability for *ANY* compiler to detect.

It is critical to remember when discussing these things that gcc isnt
the final arbitrator of what constitutes valid code. There are other
standards, beyond simple language semantic standards, that it has to
interact with.

Kean


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]