summaryrefslogtreecommitdiffstats
path: root/gcc/objc
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-01 07:40:02 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-01 07:40:02 +0000
commit2bd21a29979e347a838ea8c645376f660a0f4e65 (patch)
tree139086f8092179d1478c674d6dd17965d6d53178 /gcc/objc
parent7a20f1a02a00029812901f16a9fc65f3b3d4c68c (diff)
downloadppe42-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.c23
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);
}
OpenPOWER on IntegriCloud