re PR java/14231 (Incorrect interface method called when compiling against .class files)

2004-02-26  Andrew Haley  <aph@redhat.com>

        PR java/14231:
        * parse.y (check_interface_throws_clauses): Check for
        !METHOD_INVISIBLE (iface_method).
        * class.c (layout_class_methods): Check for CLASS_INTERFACE as
        well as CLASS_ABSTRACT.

From-SVN: r78505
This commit is contained in:
Andrew Haley 2004-02-26 15:34:05 +00:00 committed by Andrew Haley
parent 50106e8f8d
commit bddefd4f80
3 changed files with 13 additions and 3 deletions

View File

@ -1,3 +1,11 @@
2004-02-26 Andrew Haley <aph@redhat.com>
PR java/14231:
* parse.y (check_interface_throws_clauses): Check for
!METHOD_INVISIBLE (iface_method).
* class.c (layout_class_methods): Check for CLASS_INTERFACE as
well as CLASS_ABSTRACT.
2004-02-25 Per Bothner <per@bothner.com>
* parse.y (build_assertion): If we're in an inner class, create the

View File

@ -2053,7 +2053,7 @@ void
layout_class_methods (tree this_class)
{
tree method_decl, dtable_count;
tree super_class;
tree super_class, type_name;
if (TYPE_NVIRTUALS (this_class))
return;
@ -2070,7 +2070,8 @@ layout_class_methods (tree this_class)
else
dtable_count = integer_zero_node;
if (CLASS_ABSTRACT (TYPE_NAME (this_class)))
type_name = TYPE_NAME (this_class);
if (CLASS_ABSTRACT (type_name) || CLASS_INTERFACE (type_name))
{
/* An abstract class can have methods which are declared only in
an implemented interface. These are called "Miranda

View File

@ -6525,7 +6525,8 @@ check_interface_throws_clauses (tree check_class_decl, tree class_decl)
Also, multiple inheritance with conflicting throws
clauses is fine in the absence of a concrete
implementation. */
if (method != NULL_TREE && !METHOD_ABSTRACT (method))
if (method != NULL_TREE && !METHOD_ABSTRACT (method)
&& !METHOD_INVISIBLE (iface_method))
{
tree method_wfl = DECL_FUNCTION_WFL (method);
check_throws_clauses (method, method_wfl, iface_method);