re PR java/18362 (internal compiler error: in size_binop, at fold-const.c:1598)

2005-03-04  Andrew Haley  <aph@redhat.com>

        PR java/18362
        * class.c (set_method_index): Don't set method_index if it is
        NULL_TREE.
        (layout_class_method): Don't complain about "non-static method foo
        overrides static method" in the case of indirect dispatch.

From-SVN: r95888
This commit is contained in:
Andrew Haley 2005-03-04 15:38:13 +00:00 committed by Andrew Haley
parent 730967114b
commit 7235c3007d
2 changed files with 22 additions and 8 deletions

View File

@ -1,3 +1,11 @@
2005-03-04 Andrew Haley <aph@redhat.com>
PR java/18362
* class.c (set_method_index): Don't set method_index if it is
NULL_TREE.
(layout_class_method): Don't complain about "non-static method foo
overrides static method" in the case of indirect dispatch.
2005-03-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* jcf-io.c (caching_stat): Use __extension__ to avoid pedantic
@ -59,7 +67,7 @@
PR java/19907
* expr.c (expand_byte_code): Call promote_arguments().
(promote_arguments): New function.
* decl.c (check_local_unnamed_variable): Remve special case for
* decl.c (check_local_unnamed_variable): Remove special case for
new verifier.
(find_local_variable): Promote all boolean types to int
when searching for local variable decls.

View File

@ -1476,14 +1476,19 @@ get_dispatch_table (tree type, tree this_class_addr)
void
set_method_index (tree decl, tree method_index)
{
method_index = fold (convert (sizetype, method_index));
if (method_index != NULL_TREE)
{
/* method_index is null if we're using indirect dispatch. */
method_index = fold (convert (sizetype, method_index));
if (TARGET_VTABLE_USES_DESCRIPTORS)
/* Add one to skip bogus descriptor for class and GC descriptor. */
method_index = size_binop (PLUS_EXPR, method_index, size_int (1));
else
/* Add 1 to skip "class" field of dtable, and 1 to skip GC descriptor. */
method_index = size_binop (PLUS_EXPR, method_index, size_int (2));
if (TARGET_VTABLE_USES_DESCRIPTORS)
/* Add one to skip bogus descriptor for class and GC descriptor. */
method_index = size_binop (PLUS_EXPR, method_index, size_int (1));
else
/* Add 1 to skip "class" field of dtable, and 1 to skip GC
descriptor. */
method_index = size_binop (PLUS_EXPR, method_index, size_int (2));
}
DECL_VINDEX (decl) = method_index;
}
@ -2357,6 +2362,7 @@ layout_class_method (tree this_class, tree super_class,
tree method_index = get_method_index (super_method);
set_method_index (method_decl, method_index);
if (method_index == NULL_TREE
&& ! flag_indirect_dispatch
&& !CLASS_FROM_SOURCE_P (this_class)
&& ! DECL_ARTIFICIAL (super_method))
error ("%Jnon-static method '%D' overrides static method",