summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Expr.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2012-06-15 23:51:06 +0000
committerEli Friedman <eli.friedman@gmail.com>2012-06-15 23:51:06 +0000
commit13ffdd86b93ff8bf5d26bca55119982c899bb5ce (patch)
treeec73c7696eaf77d61a646cc1777c13190fb07416 /clang/lib/AST/Expr.cpp
parent38a6fbf933e707e02ac9fc5a6326fc3b4d27266a (diff)
downloadbcm5719-llvm-13ffdd86b93ff8bf5d26bca55119982c899bb5ce.tar.gz
bcm5719-llvm-13ffdd86b93ff8bf5d26bca55119982c899bb5ce.zip
Make the ".*" operator work correctly when the base is a prvalue and the field has a non-trivial copy constructor. PR13097.
llvm-svn: 158578
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
-rw-r--r--clang/lib/AST/Expr.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 5bbf7503f8e..3de4b5771a2 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -2376,6 +2376,10 @@ bool Expr::isTemporaryObject(ASTContext &C, const CXXRecordDecl *TempTy) const {
if (isa<MemberExpr>(E))
return false;
+ if (const BinaryOperator *BO = dyn_cast<BinaryOperator>(E))
+ if (BO->isPtrMemOp())
+ return false;
+
// - opaque values (all)
if (isa<OpaqueValueExpr>(E))
return false;
OpenPOWER on IntegriCloud