------- Additional Comments From gdr at integrable-solutions dot net 2005-07-03 00:03 ------- Subject: Re: gcc -O2 discards cast to volatile
"gcc2eran at tromer dot org" <[EMAIL PROTECTED]> writes: | ------- Additional Comments From gcc2eran at tromer dot org 2005-07-02 23:30 ------- | (In reply to comment #17) | > Furthermore, the fundamental issue is whether this | > | > *(volatile int*) (int*) (&foo); | > | > (or equivalent) where foo has been defined volatile int should be | > treated differently from | > | > *(volatile int*) (&foo); | > | > or | > | > foo; | | How about this? | | int foo; | *(volatile int*) (&foo); It was included in my previous message. | In other words, why should the compiler bother at all with the qualifiers of | what the pointer "really" points to? Because the language definition says that the compiler should preserve a semantics and the compiler better bothers. | It seems simplest and most natural to | decree that any dereference of a pointer-to-volatile (regardless of | its origin) is to be treated as volatile and thus never optimized | away. In other words, "volatile" should treated as a property of the | type of the pointer being dereferenced, not of the actual object | being pointed to. but that is a fundamental departure from the language semantics. Replace "volatile" with "const" -- both are qualifiers -- and observe the disaster that would ensue. The "volatile" cv-qualified is interesting in the sense that it is fuzzily defined, but there are identities that the compiler must preserve. -- Gaby -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22278