summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2017-03-30 13:48:33 +0000
committerAlex Lorenz <arphaman@gmail.com>2017-03-30 13:48:33 +0000
commitdf42cf101f5420da1fc38df37f308faabe94ca42 (patch)
tree7026daec6d5794d99a80d86ac6b6290cb3bd60c5 /clang/lib/Sema
parent741dea003e7d97f1e5e6eca2a485784cff923bb2 (diff)
downloadbcm5719-llvm-df42cf101f5420da1fc38df37f308faabe94ca42.tar.gz
bcm5719-llvm-df42cf101f5420da1fc38df37f308faabe94ca42.zip
[ARC][ObjC++] Use ObjC semantic rules for comparisons between a pointer and
an ObjC object pointer When ARC is enabled in Objective-C++, comparisons between a pointer and Objective-C object pointer typically result in errors like this: "invalid operands to a binary expression". This error message can be quite confusing as it doesn't provide a solution to the problem, unlike the non-C++ diagnostic: "implicit conversion of Objective-C pointer type 'id' to C pointer type 'void *' requires a bridged cast" (it also provides fix-its). This commit forces comparisons between pointers and Objective-C object pointers in ARC to use the Objective-C semantic rules to ensure that a better diagnostic is reported. rdar://31103857 Differential Revision: https://reviews.llvm.org/D31177 llvm-svn: 299080
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaExpr.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 6144b5ac457..62863c25ebd 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -9423,7 +9423,10 @@ QualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS,
// If both operands are pointers, [...] bring them to their composite
// pointer type.
if ((int)LHSType->isPointerType() + (int)RHSType->isPointerType() >=
- (IsRelational ? 2 : 1)) {
+ (IsRelational ? 2 : 1) &&
+ (!LangOpts.ObjCAutoRefCount ||
+ !(LHSType->isObjCObjectPointerType() ||
+ RHSType->isObjCObjectPointerType()))) {
if (convertPointersToCompositeType(*this, Loc, LHS, RHS))
return QualType();
else
OpenPOWER on IntegriCloud