diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-12-19 07:07:47 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-12-19 07:07:47 +0000 |
commit | 5103effb1d0860c1d3132afd7d4e052967f41f48 (patch) | |
tree | 4ab14b6074c609ad92aef32406976d28dca30a3f /clang/lib/AST/Expr.cpp | |
parent | 740ab38bb76f31b6301982d96699a7afe9badb77 (diff) | |
download | bcm5719-llvm-5103effb1d0860c1d3132afd7d4e052967f41f48.tar.gz bcm5719-llvm-5103effb1d0860c1d3132afd7d4e052967f41f48.zip |
A CXXExprWithTemporaries expression is an lvalue if its subexpression
is an lvalue. Fixes PR5787.
llvm-svn: 91765
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
-rw-r--r-- | clang/lib/AST/Expr.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index dcf4411d854..034b91ed0f5 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -1213,6 +1213,16 @@ Expr::isLvalueResult Expr::isLvalueInternal(ASTContext &Ctx) const { return LV_Valid; } + case Expr::CXXExprWithTemporariesClass: + return cast<CXXExprWithTemporaries>(this)->getSubExpr()->isLvalue(Ctx); + + case Expr::ObjCMessageExprClass: + if (const ObjCMethodDecl *Method + = cast<ObjCMessageExpr>(this)->getMethodDecl()) + if (Method->getResultType()->isLValueReferenceType()) + return LV_Valid; + break; + default: break; } |