diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-06-01 07:40:02 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-06-01 07:40:02 +0000 |
commit | 2bd21a29979e347a838ea8c645376f660a0f4e65 (patch) | |
tree | 139086f8092179d1478c674d6dd17965d6d53178 /gcc/objc | |
parent | 7a20f1a02a00029812901f16a9fc65f3b3d4c68c (diff) | |
download | ppe42-gcc-2bd21a29979e347a838ea8c645376f660a0f4e65.tar.gz ppe42-gcc-2bd21a29979e347a838ea8c645376f660a0f4e65.zip |
2004-06-01 Nicola Pero <nicola@brainstorm.co.uk>
Fix PR objc/7993:
* objc-act.c (is_private): Do not emit the 'instance variable %s
is declared private' error.
(is_public): Emit the error after calling is_private.
(lookup_objc_ivar): If the instance variable is private, return 0
- the instance variable is invisible here.
testsuite:
* objc.dg/private-1.m, objc-dg/private-2.m: New testcases.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82532 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/objc')
-rw-r--r-- | gcc/objc/objc-act.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 385360a28eb..07074330adf 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -6467,15 +6467,9 @@ is_ivar (tree decl_chain, tree ident) int is_private (tree decl) { - if (TREE_PRIVATE (decl) - && ! is_ivar (CLASS_IVARS (implementation_template), DECL_NAME (decl))) - { - error ("instance variable `%s' is declared private", - IDENTIFIER_POINTER (DECL_NAME (decl))); - return 1; - } - else - return 0; + return (TREE_PRIVATE (decl) + && ! is_ivar (CLASS_IVARS (implementation_template), + DECL_NAME (decl))); } /* We have an instance variable reference;, check to see if it is public. */ @@ -6513,7 +6507,14 @@ is_public (tree expr, tree identifier) == CATEGORY_IMPLEMENTATION_TYPE)) && (CLASS_NAME (objc_implementation_context) == OBJC_TYPE_NAME (basetype)))) - return ! is_private (decl); + { + int private = is_private (decl); + + if (private) + error ("instance variable `%s' is declared private", + IDENTIFIER_POINTER (DECL_NAME (decl))); + return !private; + } /* The 2.95.2 compiler sometimes allowed C functions to access non-@public ivars. We will let this slide for now... */ @@ -9066,7 +9067,7 @@ lookup_objc_ivar (tree id) else if (objc_method_context && (decl = is_ivar (objc_ivar_chain, id))) { if (is_private (decl)) - return error_mark_node; + return 0; else return build_ivar_reference (id); } |