OSDN Git Service

2005-03-04 Andrew Haley <aph@redhat.com>
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 4 Mar 2005 15:38:13 +0000 (15:38 +0000)
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 4 Mar 2005 15:38:13 +0000 (15:38 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95888 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/class.c

index 0fd4364..cee0acb 100644 (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.
index 53a31e9..5e2e535 100644 (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",