Commit cd11bdcc by Alexandre Petit-Bianco Committed by Tom Tromey

re PR java/1333 (private field access modifier not implemented correctly)

2003-09-27  Alexandre Petit-Bianco  <apbianco@redhat.com>
	    Bryce McKinlay  <bryce@mckinlay.net.nz>

	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 <bryce@mckinlay.net.nz>

From-SVN: r71862
parent e8226879
2003-09-27 Alexandre Petit-Bianco <apbianco@redhat.com>
Bryce McKinlay <bryce@mckinlay.net.nz>
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 <ro@TechFak.Uni-Bielefeld.DE> 2003-09-24 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* class.c (build_utf8_ref): Test for HAVE_GAS_SHF_MERGE value. * class.c (build_utf8_ref): Test for HAVE_GAS_SHF_MERGE value.
......
...@@ -250,6 +250,7 @@ static void java_check_regular_methods (tree); ...@@ -250,6 +250,7 @@ static void java_check_regular_methods (tree);
static void check_interface_throws_clauses (tree, tree); static void check_interface_throws_clauses (tree, tree);
static void java_check_abstract_methods (tree); static void java_check_abstract_methods (tree);
static void unreachable_stmt_error (tree); static void unreachable_stmt_error (tree);
static int not_accessible_field_error (tree, tree);
static tree find_expr_with_wfl (tree); static tree find_expr_with_wfl (tree);
static void missing_return_error (tree); static void missing_return_error (tree);
static tree build_new_array_init (int, tree); static tree build_new_array_init (int, tree);
...@@ -3161,6 +3162,18 @@ unreachable_stmt_error (tree node) ...@@ -3161,6 +3162,18 @@ unreachable_stmt_error (tree node)
abort (); 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 int
java_report_errors (void) java_report_errors (void)
{ {
...@@ -9353,6 +9366,12 @@ resolve_expression_name (tree id, tree *orig) ...@@ -9353,6 +9366,12 @@ resolve_expression_name (tree id, tree *orig)
/* We may be asked to save the real field access node */ /* We may be asked to save the real field access node */
if (orig) if (orig)
*orig = access; *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 */ /* And we return what we got */
return access; return access;
} }
...@@ -9832,15 +9851,7 @@ resolve_qualified_expression_name (tree wfl, tree *found_decl, ...@@ -9832,15 +9851,7 @@ resolve_qualified_expression_name (tree wfl, tree *found_decl,
} }
if (not_accessible_p (TREE_TYPE (decl), decl, type, 0)) if (not_accessible_p (TREE_TYPE (decl), decl, type, 0))
{ return not_accessible_field_error (qual_wfl, decl);
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;
}
check_deprecation (qual_wfl, decl); check_deprecation (qual_wfl, decl);
type = TREE_TYPE (decl); type = TREE_TYPE (decl);
...@@ -9961,18 +9972,7 @@ resolve_qualified_expression_name (tree wfl, tree *found_decl, ...@@ -9961,18 +9972,7 @@ resolve_qualified_expression_name (tree wfl, tree *found_decl,
/* Check on accessibility here */ /* Check on accessibility here */
if (not_accessible_p (current_class, field_decl, if (not_accessible_p (current_class, field_decl,
DECL_CONTEXT (field_decl), from_super)) DECL_CONTEXT (field_decl), from_super))
{ return not_accessible_field_error (qual_wfl,field_decl);
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;
}
check_deprecation (qual_wfl, field_decl); check_deprecation (qual_wfl, field_decl);
/* There are things to check when fields are accessed /* There are things to check when fields are accessed
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment