diff options
author | Nicola Pero <nicola.pero@meta-innovation.com> | 2011-01-02 10:19:42 +0000 |
---|---|---|
committer | Nicola Pero <nicola@gcc.gnu.org> | 2011-01-02 10:19:42 +0000 |
commit | ca2ed3ba8e3069e6c9b269d02b70d14b8d227da5 (patch) | |
tree | 11c76db2f4f7ce2099f86c2f785be90df61a15e5 /gcc/testsuite/objc.dg | |
parent | 5af62fcd9311650891737643858e34433ab4557a (diff) | |
download | gcc-ca2ed3ba8e3069e6c9b269d02b70d14b8d227da5.zip gcc-ca2ed3ba8e3069e6c9b269d02b70d14b8d227da5.tar.gz gcc-ca2ed3ba8e3069e6c9b269d02b70d14b8d227da5.tar.bz2 |
In gcc/objc/: 2011-01-02 Nicola Pero <nicola.pero@meta-innovation.com>
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.
From-SVN: r168398
Diffstat (limited to 'gcc/testsuite/objc.dg')
-rw-r--r-- | gcc/testsuite/objc.dg/protocol-forward-1.m | 4 | ||||
-rw-r--r-- | gcc/testsuite/objc.dg/protocol-forward-2.m | 95 |
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 17d9044..df8dcd7 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 0000000..9217ca8 --- /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 |