diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-02-02 18:35:07 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-02-02 18:35:07 +0000 |
commit | 06769f919735a3d5d64ab45003f1c517c8b865ea (patch) | |
tree | 434be479efe64824dad907cc3c10ee99c9bc4a9c /clang | |
parent | ccdb5ff17d9619956f0b79f2453604847d88debe (diff) | |
download | bcm5719-llvm-06769f919735a3d5d64ab45003f1c517c8b865ea.tar.gz bcm5719-llvm-06769f919735a3d5d64ab45003f1c517c8b865ea.zip |
Fix up rewriting of protocol qualified types in objc rewriter.
Fixes radar 7589414.
llvm-svn: 95097
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Frontend/RewriteObjC.cpp | 10 | ||||
-rw-r--r-- | clang/test/Rewriter/rewrite-protocol-qualified.mm | 21 |
2 files changed, 30 insertions, 1 deletions
diff --git a/clang/lib/Frontend/RewriteObjC.cpp b/clang/lib/Frontend/RewriteObjC.cpp index df43da7efff..980c96ad17d 100644 --- a/clang/lib/Frontend/RewriteObjC.cpp +++ b/clang/lib/Frontend/RewriteObjC.cpp @@ -1995,7 +1995,15 @@ static void scanToNextArgument(const char *&argRef) { } bool RewriteObjC::needToScanForQualifiers(QualType T) { - return T->isObjCQualifiedIdType() || T->isObjCQualifiedInterfaceType(); + if (const PointerType *PT = T->getAs<PointerType>()) { + if (PT->getPointeeType()->isObjCQualifiedIdType()) + return true; + } + if (T->isObjCObjectPointerType()) { + T = T->getPointeeType(); + return T->isObjCQualifiedInterfaceType(); + } + return false; } void RewriteObjC::RewriteObjCQualifiedInterfaceTypes(Expr *E) { diff --git a/clang/test/Rewriter/rewrite-protocol-qualified.mm b/clang/test/Rewriter/rewrite-protocol-qualified.mm new file mode 100644 index 00000000000..e93ddbba277 --- /dev/null +++ b/clang/test/Rewriter/rewrite-protocol-qualified.mm @@ -0,0 +1,21 @@ +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: FileCheck -check-prefix LP --input-file=%t-rw.cpp %s +// radar 7589414 + +@protocol NSPortDelegate; +@interface NSConnection @end + +@interface NSMessagePort +- (void) clone; +@end + +@implementation NSMessagePort +- (void) clone { + NSConnection <NSPortDelegate> *conn = 0; + id <NSPortDelegate> *idc = 0; +} +@end + +// CHECK-LP: NSConnection /*<NSPortDelegate>*/ *conn = 0; + +// CHECK-LP: id /*<NSPortDelegate>*/ *idc = 0; |