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
