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?  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.

-Chris

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

Reply via email to