From cd11bdcc47258cf9c6f7fb2be0e7563dc4a49a8b Mon Sep 17 00:00:00 2001 From: Alexandre Petit-Bianco Date: Sat, 27 Sep 2003 13:17:21 -0700 Subject: [PATCH] re PR java/1333 (private field access modifier not implemented correctly) 2003-09-27 Alexandre Petit-Bianco Bryce McKinlay PR java/1333: * parse.y (not_accessible_field_error): New function. (resolve_expression_name): Check field access permissions. (resolve_qualified_expression_name): Use not_accessible_field_error. (resolve_qualified_expression_name): Likewise. Co-Authored-By: Bryce McKinlay From-SVN: r71862 --- gcc/java/ChangeLog | 10 ++++++++++ gcc/java/parse.y | 42 +++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 9d2cc8ca71e..a79d73ad5a9 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,13 @@ +2003-09-27 Alexandre Petit-Bianco + Bryce McKinlay + + PR java/1333: + * parse.y (not_accessible_field_error): New function. + (resolve_expression_name): Check field access permissions. + (resolve_qualified_expression_name): Use + not_accessible_field_error. + (resolve_qualified_expression_name): Likewise. + 2003-09-24 Rainer Orth * class.c (build_utf8_ref): Test for HAVE_GAS_SHF_MERGE value. diff --git a/gcc/java/parse.y b/gcc/java/parse.y index a5064e18465..e40971925b0 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -250,6 +250,7 @@ static void java_check_regular_methods (tree); static void check_interface_throws_clauses (tree, tree); static void java_check_abstract_methods (tree); static void unreachable_stmt_error (tree); +static int not_accessible_field_error (tree, tree); static tree find_expr_with_wfl (tree); static void missing_return_error (tree); static tree build_new_array_init (int, tree); @@ -3161,6 +3162,18 @@ unreachable_stmt_error (tree node) abort (); } +static int +not_accessible_field_error (tree wfl, tree decl) +{ + parse_error_context + (wfl, "Can't access %s field `%s.%s' from `%s'", + java_accstring_lookup (get_access_flags_from_decl (decl)), + GET_TYPE_NAME (DECL_CONTEXT (decl)), + IDENTIFIER_POINTER (DECL_NAME (decl)), + IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)))); + return 1; +} + int java_report_errors (void) { @@ -9353,6 +9366,12 @@ resolve_expression_name (tree id, tree *orig) /* We may be asked to save the real field access node */ if (orig) *orig = access; + /* Last check: can we access the field? */ + if (not_accessible_p (current_class, decl, NULL_TREE, 0)) + { + not_accessible_field_error (id, decl); + return error_mark_node; + } /* And we return what we got */ return access; } @@ -9832,15 +9851,7 @@ resolve_qualified_expression_name (tree wfl, tree *found_decl, } if (not_accessible_p (TREE_TYPE (decl), decl, type, 0)) - { - parse_error_context - (qual_wfl, "Can't access %s field `%s.%s' from `%s'", - java_accstring_lookup (get_access_flags_from_decl (decl)), - GET_TYPE_NAME (type), - IDENTIFIER_POINTER (DECL_NAME (decl)), - IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)))); - return 1; - } + return not_accessible_field_error (qual_wfl, decl); check_deprecation (qual_wfl, decl); type = TREE_TYPE (decl); @@ -9961,18 +9972,7 @@ resolve_qualified_expression_name (tree wfl, tree *found_decl, /* Check on accessibility here */ if (not_accessible_p (current_class, field_decl, DECL_CONTEXT (field_decl), from_super)) - { - parse_error_context - (qual_wfl, - "Can't access %s field `%s.%s' from `%s'", - java_accstring_lookup - (get_access_flags_from_decl (field_decl)), - GET_TYPE_NAME (type), - IDENTIFIER_POINTER (DECL_NAME (field_decl)), - IDENTIFIER_POINTER - (DECL_NAME (TYPE_NAME (current_class)))); - return 1; - } + return not_accessible_field_error (qual_wfl,field_decl); check_deprecation (qual_wfl, field_decl); /* There are things to check when fields are accessed