mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
5af62fcd93
commit
ca2ed3ba8e
|
|
@ -1,3 +1,8 @@
|
||||||
|
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.
|
||||||
|
|
||||||
2010-12-30 Nicola Pero <nicola.pero@meta-innovation.com>
|
2010-12-30 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||||
|
|
||||||
* objc-act.c (objc_types_are_equivalent): Fixed comparing protocol
|
* objc-act.c (objc_types_are_equivalent): Fixed comparing protocol
|
||||||
|
|
|
||||||
|
|
@ -10929,11 +10929,30 @@ add_protocol (tree protocol)
|
||||||
return protocol_chain;
|
return protocol_chain;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check that a protocol is defined, and, recursively, that all
|
||||||
|
protocols that this protocol conforms to are defined too. */
|
||||||
|
static void
|
||||||
|
check_that_protocol_is_defined (tree protocol)
|
||||||
|
{
|
||||||
|
if (!PROTOCOL_DEFINED (protocol))
|
||||||
|
warning (0, "definition of protocol %qE not found",
|
||||||
|
PROTOCOL_NAME (protocol));
|
||||||
|
|
||||||
|
/* If the protocol itself conforms to other protocols, check them
|
||||||
|
too, recursively. */
|
||||||
|
if (PROTOCOL_LIST (protocol))
|
||||||
|
{
|
||||||
|
tree p;
|
||||||
|
|
||||||
|
for (p = PROTOCOL_LIST (p); p; p = TREE_CHAIN (p))
|
||||||
|
check_that_protocol_is_defined (TREE_VALUE (p));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Looks up a protocol. If 'warn_if_deprecated' is true, a warning is
|
/* Looks up a protocol. If 'warn_if_deprecated' is true, a warning is
|
||||||
emitted if the protocol is deprecated. If 'definition_required' is
|
emitted if the protocol is deprecated. If 'definition_required' is
|
||||||
true, a warning is emitted if a full @protocol definition has not
|
true, a warning is emitted if a full @protocol definition has not
|
||||||
been seen. */
|
been seen. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
lookup_protocol (tree ident, bool warn_if_deprecated, bool definition_required)
|
lookup_protocol (tree ident, bool warn_if_deprecated, bool definition_required)
|
||||||
{
|
{
|
||||||
|
|
@ -10951,9 +10970,8 @@ lookup_protocol (tree ident, bool warn_if_deprecated, bool definition_required)
|
||||||
PROTOCOL_NAME (chain));
|
PROTOCOL_NAME (chain));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (definition_required && !PROTOCOL_DEFINED (chain))
|
if (definition_required)
|
||||||
warning (0, "definition of protocol %qE not found",
|
check_that_protocol_is_defined (chain);
|
||||||
PROTOCOL_NAME (chain));
|
|
||||||
|
|
||||||
return chain;
|
return chain;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,10 @@
|
||||||
|
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.
|
||||||
|
|
||||||
2011-01-01 Kai Tietz <kai.tietz@onevision.com>
|
2011-01-01 Kai Tietz <kai.tietz@onevision.com>
|
||||||
|
|
||||||
PR target/38662
|
PR target/38662
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,3 @@
|
||||||
@protocol MyProtocol3 <MyProtocol> /* Ok */
|
@protocol MyProtocol3 <MyProtocol> /* Ok */
|
||||||
@end
|
@end
|
||||||
|
|
||||||
/* TODO: I guess if MyProtocol3 is now used in an @interface, we
|
|
||||||
should check that all the protocols it references are defined
|
|
||||||
too ? */
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -24,7 +24,3 @@
|
||||||
|
|
||||||
@protocol MyProtocol3 <MyProtocol> /* Ok */
|
@protocol MyProtocol3 <MyProtocol> /* Ok */
|
||||||
@end
|
@end
|
||||||
|
|
||||||
/* TODO: I guess if MyProtocol3 is now used in an @interface, we
|
|
||||||
should check that all the protocols it references are defined
|
|
||||||
too ? */
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
Loading…
Reference in New Issue