aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-12-08 20:04:24 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-12-08 20:04:24 +0000
commit0cedfbdb44d865f38ec2de4bf92838f53c5607ec (patch)
tree2bdc90b12e8f28aac8906ef49a60bbca081e9530
parent87667aafe68c366be57f5afb60428237593da0ed (diff)
Patch to allow matching 0 with an objective-c pointer type
in objective-c++ mode. Fixes radar 7443165 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90874 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaExprCXX.cpp4
-rw-r--r--test/SemaObjCXX/composite-objc-pointertype.mm18
2 files changed, 20 insertions, 2 deletions
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index 567b488caf..be33c06765 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -1881,8 +1881,8 @@ QualType Sema::FindCompositePointerType(Expr *&E1, Expr *&E2) {
assert(getLangOptions().CPlusPlus && "This function assumes C++");
QualType T1 = E1->getType(), T2 = E2->getType();
- if (!T1->isPointerType() && !T1->isMemberPointerType() &&
- !T2->isPointerType() && !T2->isMemberPointerType())
+ if (!T1->isAnyPointerType() && !T1->isMemberPointerType() &&
+ !T2->isAnyPointerType() && !T2->isMemberPointerType())
return QualType();
// C++0x 5.9p2
diff --git a/test/SemaObjCXX/composite-objc-pointertype.mm b/test/SemaObjCXX/composite-objc-pointertype.mm
new file mode 100644
index 0000000000..8bbfa071ad
--- /dev/null
+++ b/test/SemaObjCXX/composite-objc-pointertype.mm
@@ -0,0 +1,18 @@
+// RUN: clang-cc -fsyntax-only -verify %s
+
+@interface Foo
+@end
+
+@implementation Foo
+- (id)test {
+ id bar;
+ Class cl;
+ Foo *f;
+
+ (void)((bar!= 0) ? bar : 0);
+ (void)((cl != 0) ? cl : 0);
+ (void)((f != 0) ? 0 : f);
+ return (0 == 1) ? 0 : bar;
+}
+@end
+