[cfe-dev] Assignment expression in C++ returns its right operand (A possible bug)
abramo.bagnara at gmail.com
Fri Feb 17 02:16:50 PST 2012
Il 17/02/2012 10:52, John McCall ha scritto:
> On Feb 16, 2012, at 2:37 PM, Xiaolong Tang wrote:
>> Note that the register value denoted by %tmp is returned, but %tmp is
>> the value of the second parameter. (This does not agree with the c++
>> Again I am using clang version 3.0. And the revision is git-svn-id:
>> If I am correct and the above problem has been fixed, can someone
>> point to me the commit where the problem is fixed? If I am somehow
>> wrong, can someone give me any explanation?
> As David says, it's not a problem. You are correct that C++ semantics
> say that the RHS is stored to the LHS and then the result of the
> expression is the same l-value as the original LHS. However, when
> that l-value is non-volatile, we are not strictly bound by those
> semantics. In this case, it is clear that the object identified by the LHS
> is not modified by this thread between the store and the load, and
> any other thread modifying it would be a forbidden race condition.
> Therefore, if the result of this assignment is needed as an r-value,
> we can simply forward the original value (suitably truncated if the
> l-value is a bitfield).
BTW: John, wouldn't it be a very good thing to have a
BitfieldTruncateExpr AST node (or an extension of ImplicitCastExpr)?
More information about the cfe-dev