summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Expr.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-12-19 07:07:47 +0000
committerDouglas Gregor <dgregor@apple.com>2009-12-19 07:07:47 +0000
commit5103effb1d0860c1d3132afd7d4e052967f41f48 (patch)
tree4ab14b6074c609ad92aef32406976d28dca30a3f /clang/lib/AST/Expr.cpp
parent740ab38bb76f31b6301982d96699a7afe9badb77 (diff)
downloadbcm5719-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.cpp10
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;
}
OpenPOWER on IntegriCloud