From 0f99537ecac400c5c6db0eafdc60ef871859d5f6 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Thu, 19 Jun 2014 14:45:16 +0000 Subject: Fix assertion hit or bogus compiler error in cases when instantiating ObjC property accesses used with overloaded binary operators. rdar://17153478 llvm-svn: 211270 --- clang/lib/Sema/TreeTransform.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'clang/lib/Sema/TreeTransform.h') diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 9330070bf66..a1a564e2f27 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -9911,6 +9911,24 @@ TreeTransform::RebuildCXXOperatorCallExpr(OverloadedOperatorKind Op, Expr *Callee = OrigCallee->IgnoreParenCasts(); bool isPostIncDec = Second && (Op == OO_PlusPlus || Op == OO_MinusMinus); + if (First->getObjectKind() == OK_ObjCProperty) { + BinaryOperatorKind Opc = BinaryOperator::getOverloadedOpcode(Op); + if (BinaryOperator::isAssignmentOp(Opc)) + return SemaRef.checkPseudoObjectAssignment(/*Scope=*/nullptr, OpLoc, Opc, + First, Second); + ExprResult Result = SemaRef.CheckPlaceholderExpr(First); + if (Result.isInvalid()) + return ExprError(); + First = Result.get(); + } + + if (Second && Second->getObjectKind() == OK_ObjCProperty) { + ExprResult Result = SemaRef.CheckPlaceholderExpr(Second); + if (Result.isInvalid()) + return ExprError(); + Second = Result.get(); + } + // Determine whether this should be a builtin operation. if (Op == OO_Subscript) { if (!First->getType()->isOverloadableType() && -- cgit v1.2.3