summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2010-05-10 23:46:53 +0000
committerFariborz Jahanian <fjahanian@apple.com>2010-05-10 23:46:53 +0000
commiteee1669adbf5c4dad40a4d7e14407260e4e2f05d (patch)
treee0da2e8c1a330adee61b2480410aea84eac6ac2d
parent341db487a8d408f2b92d6ba5605c731842c11337 (diff)
downloadbcm5719-llvm-eee1669adbf5c4dad40a4d7e14407260e4e2f05d.tar.gz
bcm5719-llvm-eee1669adbf5c4dad40a4d7e14407260e4e2f05d.zip
Allow static_cast to objective-c pointers.
Fixes radar 7952457. llvm-svn: 103447
-rw-r--r--clang/lib/Sema/SemaCXXCast.cpp5
-rw-r--r--clang/test/SemaObjCXX/void_to_obj.mm15
2 files changed, 18 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaCXXCast.cpp b/clang/lib/Sema/SemaCXXCast.cpp
index ba7e1ff6341..b7b6c3535c5 100644
--- a/clang/lib/Sema/SemaCXXCast.cpp
+++ b/clang/lib/Sema/SemaCXXCast.cpp
@@ -578,8 +578,9 @@ static TryCastResult TryStaticCast(Sema &Self, Expr *&SrcExpr,
return TC_Success;
}
}
- else if (CStyle && DestType->isObjCObjectPointerType()) {
- // allow c-style cast of objective-c pointers as they are pervasive.
+ else if (DestType->isObjCObjectPointerType()) {
+ // allow both c-style cast and static_cast of objective-c pointers as
+ // they are pervasive.
Kind = CastExpr::CK_AnyPointerToObjCPointerCast;
return TC_Success;
}
diff --git a/clang/test/SemaObjCXX/void_to_obj.mm b/clang/test/SemaObjCXX/void_to_obj.mm
index 52510c84f13..7dca9faa854 100644
--- a/clang/test/SemaObjCXX/void_to_obj.mm
+++ b/clang/test/SemaObjCXX/void_to_obj.mm
@@ -9,3 +9,18 @@ void func() {
obj = vv; // expected-error{{assigning to 'XX *' from incompatible type 'void *'}}
}
+
+// <rdar://problem/7952457>
+@interface I
+{
+ void* delegate;
+}
+- (I*) Meth;
+- (I*) Meth1;
+@end
+
+@implementation I
+- (I*) Meth { return static_cast<I*>(delegate); }
+- (I*) Meth1 { return reinterpret_cast<I*>(delegate); }
+@end
+
OpenPOWER on IntegriCloud