[cfe-commits] r94826 - in /cfe/trunk: lib/AST/Expr.cpp lib/Sema/SemaInit.cpp lib/Sema/SemaInit.h test/CodeGenCXX/reference-init.cpp

Douglas Gregor dgregor at apple.com
Fri Jan 29 14:05:42 PST 2010


On Jan 29, 2010, at 1:36 PM, Eli Friedman wrote:

> On Fri, Jan 29, 2010 at 1:12 PM, Chris Lattner <clattner at apple.com> wrote:
>> 
>> On Jan 29, 2010, at 11:14 AM, Douglas Gregor wrote:
>> 
>>> Author: dgregor
>>> Date: Fri Jan 29 13:14:02 2010
>>> New Revision: 94826
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=94826&view=rev
>>> Log:
>>> Fix reference binding of const lvalue references to bit-fields, which
>>> requires a temporary. Previously, we were building an initialization
>>> sequence that bound to the bit-field as if it were a real lvalue. Note
>>> that we previously (and still) diagnose binding of non-const
>>> references to bit-fields, as we should.
>> 
>> Does this also work for opencl vector elements?  Something like this:
>> 
>> 
>> float &x = myfloat4.x;
>> 
>> should be invalid, but:
>> float x = myfloat4.x;
>> 
>> is ok.  Very similar to bitfields,
> 
> We don't check for it at all... we silently build a temporary for the following:
> typedef int V __attribute((ext_vector_type(4)));
> V x;
> void a() { int& y = x[0]; }

BUG! I'll take a look when I can. Thanks Chris, Eli.

> I don't know enough ObjC to make a testcase, but I think the same
> issue affects ObjC properties.


It shouldn't, because an ObjCPropertyRefExpr is not an lvalue. However, I'll still test it :)

	- Doug



More information about the cfe-commits mailing list