[cfe-dev] curious "apparent" gcc bug that clang seems to get right

Joshua Cranmer 🐧 Pidgeot18 at gmail.com
Wed Dec 4 21:58:04 PST 2013


On 12/4/2013 10:51 PM, reed kotler wrote:
> I'm not sure myself enough of how, if at all, volatile is inherited 
> into a class from it's members.
> But the following code, boiled down from some complicated android code 
> is essentially.
>
> This same problem happens for gcc x86 and mips.
>
> Anyone care to weigh in on a proper reading of the C or C++ standard 
> for this?

C++11 makes this easier to follow. The case this boils down to is the 
defaulted copy assignment operator for union like classes:
The implicitly-defined copy assignment operator for a union X copies the 
object representation (3.9) of X.

As a result, the fact that the member y is volatile is completely 
ignored in C++. C11 is much less clear on the subject, but as far as I 
can make it, the assignment operator is considered to copy the union 
object and not the volatile int subobject contained within, although you 
could easily hide behind section 6.7.3's note that "what constitutes an 
access to an object that has volatile-qualified type is 
implementation-defined."

-- 
Joshua Cranmer
Thunderbird and DXR developer
Source code archæologist




More information about the cfe-dev mailing list