[cfe-dev] C++ and volatile lvalue-to-rvalue

Sebastian Redl 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.
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50364
>
> 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 
separate statements:
v = 3;
x = v;

Clang is right, GCC is wrong.

Sebastian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20111013/0bf0748a/attachment.html>


More information about the cfe-dev mailing list