diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2010-05-10 23:46:53 +0000 |
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-05-10 23:46:53 +0000 |
| commit | eee1669adbf5c4dad40a4d7e14407260e4e2f05d (patch) | |
| tree | e0da2e8c1a330adee61b2480410aea84eac6ac2d | |
| parent | 341db487a8d408f2b92d6ba5605c731842c11337 (diff) | |
| download | bcm5719-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.cpp | 5 | ||||
| -rw-r--r-- | clang/test/SemaObjCXX/void_to_obj.mm | 15 |
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 + |

