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/objc | |
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/objc')
-rw-r--r-- | gcc/objc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/objc/objc-act.c | 26 |
2 files changed, 27 insertions, 4 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 12536a0..7a9387f 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -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> * objc-act.c (objc_types_are_equivalent): Fixed comparing protocol diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index a37f3d9..b65b928 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -10929,11 +10929,30 @@ add_protocol (tree protocol) 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 emitted if the protocol is deprecated. If 'definition_required' is true, a warning is emitted if a full @protocol definition has not been seen. */ - static tree 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)); } - if (definition_required && !PROTOCOL_DEFINED (chain)) - warning (0, "definition of protocol %qE not found", - PROTOCOL_NAME (chain)); + if (definition_required) + check_that_protocol_is_defined (chain); return chain; } |