Commit 35ab11f0 by Bryce McKinlay Committed by Bryce McKinlay

typeck.c (build_java_array_type): Don't try to poke a public `clone' method into array types.

	* typeck.c (build_java_array_type): Don't try to poke a public `clone'
	method into array types.
	* parse.y (patch_method_invocation): Bypass access check on clone call
	to array instance.

From-SVN: r39906
parent 75393169
2001-02-18 Bryce McKinlay <bryce@albatross.co.nz>
* typeck.c (build_java_array_type): Don't try to poke a public `clone'
method into array types.
* parse.y (patch_method_invocation): Bypass access check on clone call
to array instance.
2001-02-15 Alexandre Petit-Bianco <apbianco@redhat.com> 2001-02-15 Alexandre Petit-Bianco <apbianco@redhat.com>
* expr.c (build_instanceof): Check for arrays when trying fold to * expr.c (build_instanceof): Check for arrays when trying fold to
......
...@@ -9684,6 +9684,7 @@ patch_method_invocation (patch, primary, where, from_super, ...@@ -9684,6 +9684,7 @@ patch_method_invocation (patch, primary, where, from_super,
int is_static_flag = 0; int is_static_flag = 0;
int is_super_init = 0; int is_super_init = 0;
tree this_arg = NULL_TREE; tree this_arg = NULL_TREE;
int is_array_clone_call = 0;
/* Should be overriden if everything goes well. Otherwise, if /* Should be overriden if everything goes well. Otherwise, if
something fails, it should keep this value. It stop the something fails, it should keep this value. It stop the
...@@ -9758,6 +9759,9 @@ patch_method_invocation (patch, primary, where, from_super, ...@@ -9758,6 +9759,9 @@ patch_method_invocation (patch, primary, where, from_super,
else else
this_arg = primary = resolved; this_arg = primary = resolved;
if (TYPE_ARRAY_P (type) && identifier == get_identifier ("clone"))
is_array_clone_call = 1;
/* IDENTIFIER_WFL will be used to report any problem further */ /* IDENTIFIER_WFL will be used to report any problem further */
wfl = identifier_wfl; wfl = identifier_wfl;
} }
...@@ -9840,6 +9844,10 @@ patch_method_invocation (patch, primary, where, from_super, ...@@ -9840,6 +9844,10 @@ patch_method_invocation (patch, primary, where, from_super,
if (!list) if (!list)
PATCH_METHOD_RETURN_ERROR (); PATCH_METHOD_RETURN_ERROR ();
if (TYPE_ARRAY_P (class_to_search)
&& DECL_NAME (list) == get_identifier ("clone"))
is_array_clone_call = 1;
/* Check for static reference if non static methods */ /* Check for static reference if non static methods */
if (check_for_static_method_reference (wfl, patch, list, if (check_for_static_method_reference (wfl, patch, list,
class_to_search, primary)) class_to_search, primary))
...@@ -9909,7 +9917,9 @@ patch_method_invocation (patch, primary, where, from_super, ...@@ -9909,7 +9917,9 @@ patch_method_invocation (patch, primary, where, from_super,
return the call */ return the call */
if (not_accessible_p (DECL_CONTEXT (current_function_decl), list, if (not_accessible_p (DECL_CONTEXT (current_function_decl), list,
(primary ? TREE_TYPE (TREE_TYPE (primary)) : (primary ? TREE_TYPE (TREE_TYPE (primary)) :
NULL_TREE), from_super)) NULL_TREE), from_super)
/* Calls to clone() on array types are permitted as a special-case. */
&& !is_array_clone_call)
{ {
char *fct_name = (char *) IDENTIFIER_POINTER (DECL_NAME (list)); char *fct_name = (char *) IDENTIFIER_POINTER (DECL_NAME (list));
char *access = java_accstring_lookup (get_access_flags_from_decl (list)); char *access = java_accstring_lookup (get_access_flags_from_decl (list));
......
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