]> granicus.if.org Git - clang/commitdiff
Fix up rewriting of protocol qualified types in objc rewriter.
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 2 Feb 2010 18:35:07 +0000 (18:35 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 2 Feb 2010 18:35:07 +0000 (18:35 +0000)
Fixes radar 7589414.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95097 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/RewriteObjC.cpp
test/Rewriter/rewrite-protocol-qualified.mm [new file with mode: 0644]

index df43da7efff3221d05b6045708886e339cd21e5e..980c96ad17d9cf1391a65027c2006131ed14e653 100644 (file)
@@ -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/test/Rewriter/rewrite-protocol-qualified.mm b/test/Rewriter/rewrite-protocol-qualified.mm
new file mode 100644 (file)
index 0000000..e93ddbb
--- /dev/null
@@ -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;