[cfe-commits] r58306 - in /cfe/trunk: include/clang/AST/Expr.h include/clang/AST/ExprCXX.h include/clang/AST/StmtNodes.def include/clang/Analysis/PathSensitive/GRExprEngine.h lib/AST/Expr.cpp lib/Analysis/GRExprEngine.cpp lib/Sema/SemaDecl.cpp li
Chris Lattner
clattner at apple.com
Tue Oct 28 08:42:31 PDT 2008
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
More information about the cfe-commits
mailing list