From 4b91b82dfd92da5564ef88e1e7f72508e5c73e07 Mon Sep 17 00:00:00 2001 From: rmathew Date: Mon, 5 Sep 2005 14:57:25 +0000 Subject: [PATCH] PR java/23431 * typeck.c (lookup_do): Look up interfaces for the original class, not the base class. * parse.y (java_check_regular_methods): Fix diagnostic message for more restrictive overriding of a method from an interface. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103909 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/java/ChangeLog | 8 ++++++++ gcc/java/parse.y | 2 +- gcc/java/typeck.c | 3 ++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 0ecfd8f..8252aad 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,11 @@ +2005-09-05 Ranjit Mathew + + PR java/23431 + * typeck.c (lookup_do): Look up interfaces for the original class, + not the base class. + * parse.y (java_check_regular_methods): Fix diagnostic message for + more restrictive overriding of a method from an interface. + 2005-08-16 Tom Tromey * class.c (make_class_data): Always emit JV_STATE_PRELOADING for diff --git a/gcc/java/parse.y b/gcc/java/parse.y index b1de35f..9dd860d 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -6518,7 +6518,7 @@ java_check_regular_methods (tree class_decl) tree found_decl = TYPE_NAME (DECL_CONTEXT (found)); parse_error_context (method_wfl, "Class %qs must override %qs with a public method in order to implement interface %qs", IDENTIFIER_POINTER (DECL_NAME (class_decl)), - lang_printable_name (method, 2), + lang_printable_name (found, 0), IDENTIFIER_POINTER (DECL_NAME (found_decl))); } diff --git a/gcc/java/typeck.c b/gcc/java/typeck.c index 8616d0b..8b64ac8 100644 --- a/gcc/java/typeck.c +++ b/gcc/java/typeck.c @@ -842,6 +842,7 @@ lookup_do (tree searched_class, int flags, tree method_name, tree signature, tree (*signature_builder) (tree)) { tree method; + tree orig_class = searched_class; if (searched_class == NULL_TREE) return NULL_TREE; @@ -868,7 +869,7 @@ lookup_do (tree searched_class, int flags, tree method_name, /* If that doesn't work, look in our interfaces. */ if (flags & SEARCH_INTERFACE) - method = find_method_in_interfaces (searched_class, flags, method_name, + method = find_method_in_interfaces (orig_class, flags, method_name, signature, signature_builder); return method; -- 2.7.4