summaryrefslogtreecommitdiff
path: root/gcc/testsuite/objc.dg
diff options
context:
space:
mode:
authornicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2011-01-02 10:19:42 +0000
committernicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2011-01-02 10:19:42 +0000
commit56c83d77129c8360451a1a6317ba59b6335c07ff (patch)
tree11c76db2f4f7ce2099f86c2f785be90df61a15e5 /gcc/testsuite/objc.dg
parentc22368c0c08f14bc84261b2d387477d19ceb5742 (diff)
downloadgcc-56c83d77129c8360451a1a6317ba59b6335c07ff.tar.gz
In gcc/objc/:
2011-01-02 Nicola Pero <nicola.pero@meta-innovation.com> * objc-act.c (check_that_protocol_is_defined): New. (lookup_protocol): Call check_that_protocol_is_defined. In gcc/testsuite/: 2011-01-02 Nicola Pero <nicola.pero@meta-innovation.com> * objc.dg/protocol-forward-1.m: Removed TODO. * objc.dg/protocol-forward-2.m: New. * obj-c++.dg/protocol-forward-2.mm: Removed TODO. * obj-c++.dg/protocol-forward-2.mm: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168398 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/objc.dg')
-rw-r--r--gcc/testsuite/objc.dg/protocol-forward-1.m4
-rw-r--r--gcc/testsuite/objc.dg/protocol-forward-2.m95
2 files changed, 95 insertions, 4 deletions
diff --git a/gcc/testsuite/objc.dg/protocol-forward-1.m b/gcc/testsuite/objc.dg/protocol-forward-1.m
index 17d9044ab3a..df8dcd70f3e 100644
--- a/gcc/testsuite/objc.dg/protocol-forward-1.m
+++ b/gcc/testsuite/objc.dg/protocol-forward-1.m
@@ -24,7 +24,3 @@
@protocol MyProtocol3 <MyProtocol> /* Ok */
@end
-
-/* TODO: I guess if MyProtocol3 is now used in an @interface, we
- should check that all the protocols it references are defined
- too ? */
diff --git a/gcc/testsuite/objc.dg/protocol-forward-2.m b/gcc/testsuite/objc.dg/protocol-forward-2.m
new file mode 100644
index 00000000000..9217ca8d55a
--- /dev/null
+++ b/gcc/testsuite/objc.dg/protocol-forward-2.m
@@ -0,0 +1,95 @@
+/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, December 2010. */
+/* { dg-do compile } */
+
+/* Test that all protocols appearing in @interface declarations are
+ real (ie, we saw a full @protocol definition with list of methods),
+ and not just forward-references (ie, "@protocol NSObject;"). This
+ test checks protocols implemented by other protocols. */
+
+#include <objc/objc.h>
+
+@protocol MyProtocol;
+
+@interface MyClass <MyProtocol> /* { dg-warning "definition of protocol .MyProtocol. not found" } */
+@end
+
+
+@protocol MyProtocol2 <MyProtocol>
+- (int)method2;
+@end
+
+@interface MyClass2 <MyProtocol2> /* { dg-warning "definition of protocol .MyProtocol. not found" } */
+- (int)method2;
+@end
+
+
+@protocol MyProtocol3 <MyProtocol2>
+- (int)method3;
+@end
+
+@interface MyClass3 <MyProtocol3> /* { dg-warning "definition of protocol .MyProtocol. not found" } */
+- (int)method2;
+- (int)method3;
+@end
+
+
+@protocol MyProtocol4 <MyProtocol3, MyProtocol2>
+- (int)method4;
+@end
+
+@interface MyClass4 <MyProtocol4> /* { dg-warning "definition of protocol .MyProtocol. not found" } */
+- (int)method2;
+- (int)method3;
+- (int)method4;
+@end
+
+
+@protocol MyProtocol5
+- (int)method5;
+@end
+
+@interface MyClass5 <MyProtocol5> /* Ok */
+- (int)method5;
+@end
+
+
+@protocol MyProtocol6 <MyProtocol5>
+- (int)method6;
+@end
+
+@interface MyClass6 <MyProtocol6> /* Ok */
+- (int)method5;
+- (int)method6;
+@end
+
+
+@protocol MyProtocol7 <MyProtocol5, MyProtocol4>
+- (int)method7;
+@end
+
+@interface MyClass7 <MyProtocol7> /* { dg-warning "definition of protocol .MyProtocol. not found" } */
+- (int)method2;
+- (int)method3;
+- (int)method4;
+- (int)method5;
+- (int)method7;
+@end
+
+
+/* Now test that if we finally define MyProtocol, the warnings go away. */
+@protocol MyProtocol
+- (int)method;
+@end
+
+@protocol MyProtocol8 <MyProtocol5, MyProtocol4>
+- (int)method8;
+@end
+
+@interface MyClass8 <MyProtocol8> /* Ok */
+- (int)method;
+- (int)method2;
+- (int)method3;
+- (int)method4;
+- (int)method5;
+- (int)method8;
+@end