On Oct 28, 2008, at 8:25 AM, Doug Gregor wrote:
>>> +++ 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.
Oh right.
>> 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.
cast<T> returns a "T*" or "const T*". It is just being implicitly
converted to QualType here with no qualifiers. The cast argument is
converted from QualType to Type by
simplify_type<const ::clang::QualType> at around Type.h:212.
-Chris
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits