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

Eli Friedman eli.friedman at gmail.com
Fri Jan 29 14:53:44 PST 2010


On Fri, Jan 29, 2010 at 2:05 PM, Douglas Gregor <dgregor at apple.com> wrote:
>
> 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

Umm, from Expr::isLvalueInternal:

  case ObjCPropertyRefExprClass: // FIXME: check if read-only property.
    return LV_Valid;

-Eli




More information about the cfe-commits mailing list