summaryrefslogtreecommitdiff
path: root/gcc/testsuite/obj-c++.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/obj-c++.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/obj-c++.dg')
-rw-r--r--gcc/testsuite/obj-c++.dg/protocol-forward-1.mm3
-rw-r--r--gcc/testsuite/obj-c++.dg/protocol-forward-2.mm95
2 files changed, 95 insertions, 3 deletions
diff --git a/gcc/testsuite/obj-c++.dg/protocol-forward-1.mm b/gcc/testsuite/obj-c++.dg/protocol-forward-1.mm
index 17d9044ab3a..03c7ae065da 100644
--- a/gcc/testsuite/obj-c++.dg/protocol-forward-1.mm
+++ b/gcc/testsuite/obj-c++.dg/protocol-forward-1.mm
@@ -25,6 +25,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/obj-c++.dg/protocol-forward-2.mm b/gcc/testsuite/obj-c++.dg/protocol-forward-2.mm
new file mode 100644
index 00000000000..9217ca8d55a
--- /dev/null
+++ b/gcc/testsuite/obj-c++.dg/protocol-forward-2.mm
@@ -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