From 35ab11f05fb3547f56cdadfed442a7e7d2e9f385 Mon Sep 17 00:00:00 2001 From: Bryce McKinlay Date: Mon, 19 Feb 2001 21:10:14 +0000 Subject: [PATCH] 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 --- gcc/java/ChangeLog | 7 +++++++ gcc/java/parse.y | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 848fd7ce1972..f19c3fffc499 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,10 @@ +2001-02-18 Bryce McKinlay + + * 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 * expr.c (build_instanceof): Check for arrays when trying fold to diff --git a/gcc/java/parse.y b/gcc/java/parse.y index e70b2eb0cd82..cb8525a85214 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -9684,6 +9684,7 @@ patch_method_invocation (patch, primary, where, from_super, int is_static_flag = 0; int is_super_init = 0; tree this_arg = NULL_TREE; + int is_array_clone_call = 0; /* Should be overriden if everything goes well. Otherwise, if something fails, it should keep this value. It stop the @@ -9758,6 +9759,9 @@ patch_method_invocation (patch, primary, where, from_super, else 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 */ wfl = identifier_wfl; } @@ -9839,6 +9843,10 @@ patch_method_invocation (patch, primary, where, from_super, can't be executed then. */ if (!list) 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 */ if (check_for_static_method_reference (wfl, patch, list, @@ -9909,7 +9917,9 @@ patch_method_invocation (patch, primary, where, from_super, return the call */ if (not_accessible_p (DECL_CONTEXT (current_function_decl), list, (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 *access = java_accstring_lookup (get_access_flags_from_decl (list)); -- 2.43.5