On Tue, Oct 28, 2008 at 1:09 AM, Chris Lattner <[EMAIL PROTECTED]> wrote:
> On Oct 27, 2008, at 5:22 PM, Douglas Gregor wrote:
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=58306&view=rev
>> Log:
>> Improve our handling of (C++) references within Clang. Specifically:
>>  - Do not allow expressions to ever have reference type
>>  - Extend Expr::isLvalue to handle more cases where having written a
>>   reference into the source implies that the expression is an lvalue
>>   (e.g., function calls, C++ casts).
>
> Nice assert,
>
>> +++ cfe/trunk/lib/AST/Expr.cpp Mon Oct 27 19:22:11 2008
>> @@ -393,6 +393,20 @@
>>    break;
>>  case ParenExprClass: // C99 6.5.1p5
>>    return cast<ParenExpr>(this)->getSubExpr()->isLvalue(Ctx);
>> +  case CallExprClass: {
>> +    // C++ [expr.call]p10:
>> +    //   A function call is an lvalue if and only if the result type
>> +    //   is a reference.
>> +    QualType CalleeType
>> +      = dyn_cast<CallExpr>(this)->getCallee()->IgnoreParens()->getType();
>> +    if (const PointerType *FnTypePtr = CalleeType->getAsPointerType())
>
> Won't this crash if dyn_cast returns null?

Oops, it should just be cast<CallExpr>, since we know the type statically.

> It would also be more idiomatic
> and claean to make 'CalleeType' be a Type* instead of a QualType, as there
> are no qualifiers in the result of the dyn_cast.

?? The thing we're getting back is a QualType.

  - Doug
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to