[cfe-dev] C++ and volatile lvalue-to-rvalue
sebastian.redl at getdesigned.at
Thu Oct 13 05:24:11 PDT 2011
On 13.10.2011 13:43, Abramo Bagnara wrote:
> I want to put this gcc bug report to clang developer attention.
> The gcc developers believe that according to the standard
> volatile int v;
> x = v = 3;
> does not imply necessarily a read from v.
> clang instead add a lvalue-to-rvalue implicit cast outside v = 3
> assignment (and there is general consensus that lvalue-to-rvalue *is*
> the marker for memory read access).
C++11 5.17 [expr.ass]p1 says:
"The assignment operator (=) and the compound assignment operators all
group right-to-left. All require a modifiable lvalue as their left
operand and *return an lvalue referring to the left operand*."
So the result of (v = 3) is an lvalue referring to v, just as the
expression (v) alone. Therefore the code is equivalent to the two
v = 3;
x = v;
Clang is right, GCC is wrong.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the cfe-dev