]> granicus.if.org Git - clang/commitdiff
Forgot to include nested protocols in collection, resulting in
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 25 Feb 2010 18:24:33 +0000 (18:24 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 25 Feb 2010 18:24:33 +0000 (18:24 +0000)
bogus warning. Fixes radar 7682116.

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

lib/AST/ASTContext.cpp
test/SemaObjC/conditional-expr-7.m [new file with mode: 0644]

index 202e3370b67e5bf1cc8e2a13fc523ffdee29e8f7..22871a4a68180bc0e1a9d46410feda47ec459720 100644 (file)
@@ -945,9 +945,11 @@ void ASTContext::CollectInheritedProtocols(const Decl *CDecl,
       ObjCProtocolDecl *Proto = (*P);
       Protocols.insert(Proto);
       for (ObjCProtocolDecl::protocol_iterator P = Proto->protocol_begin(),
-           PE = Proto->protocol_end(); P != PE; ++P)
+           PE = Proto->protocol_end(); P != PE; ++P) {
+        Protocols.insert(*P);
         CollectInheritedProtocols(*P, Protocols);
       }
+    }
     
     // Categories of this Interface.
     for (const ObjCCategoryDecl *CDeclChain = OI->getCategoryList(); 
diff --git a/test/SemaObjC/conditional-expr-7.m b/test/SemaObjC/conditional-expr-7.m
new file mode 100644 (file)
index 0000000..3ddf3d7
--- /dev/null
@@ -0,0 +1,30 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// radar 7682116
+
+@interface Super @end
+
+@interface NSArray : Super @end
+@interface NSSet : Super @end
+
+@protocol MyProtocol
+- (void)myMethod;
+@end
+
+@protocol MyProtocol2 <MyProtocol>
+- (void)myMethod2;
+@end
+
+@interface NSArray() <MyProtocol2>
+@end
+
+@interface NSSet() <MyProtocol>
+@end
+
+int main (int argc, const char * argv[]) {
+    NSArray *array = (void*)0;
+    NSSet *set = (void*)0;
+    id <MyProtocol> instance = (argc) ? array : set;
+    instance = (void*)0;
+    return 0;
+}
+