aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaExprCXX.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2010-09-25 01:08:05 +0000
committerFariborz Jahanian <fjahanian@apple.com>2010-09-25 01:08:05 +0000
commit3911a1a0ab0bbbf2304db8e965f5b8365eb6887b (patch)
treea6e9dce21ebded447555a6a7851f59c0eed3a192 /lib/Sema/SemaExprCXX.cpp
parent76dc8890b6c5223de80be8284adbfc63ceeb3a55 (diff)
Fix a NYI in IRGen which was due to incorrect AST
for property reference expression (of c++ object type) in the conditional expression. Fixes // rdar://8291337 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114783 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaExprCXX.cpp')
-rw-r--r--lib/Sema/SemaExprCXX.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index f30fcf7312..e4ee90d668 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -2592,8 +2592,16 @@ QualType Sema::CXXCheckConditionalOperands(Expr *&Cond, Expr *&LHS, Expr *&RHS,
// the result is of that type [...]
bool Same = Context.hasSameType(LTy, RTy);
if (Same && LHS->isLvalue(Context) == Expr::LV_Valid &&
- RHS->isLvalue(Context) == Expr::LV_Valid)
- return LTy;
+ RHS->isLvalue(Context) == Expr::LV_Valid) {
+ // In this context, property reference is really a message call and
+ // is not considered an l-value.
+ bool lhsProperty = (isa<ObjCPropertyRefExpr>(LHS) ||
+ isa<ObjCImplicitSetterGetterRefExpr>(LHS));
+ bool rhsProperty = (isa<ObjCPropertyRefExpr>(RHS) ||
+ isa<ObjCImplicitSetterGetterRefExpr>(RHS));
+ if (!lhsProperty && !rhsProperty)
+ return LTy;
+ }
// C++0x 5.16p5
// Otherwise, the result is an rvalue. If the second and third operands