class.c (finish_class): Whenever a deferred method is output...
authorAndrew Haley <aph@cygnus.com>
Thu, 1 Jul 1999 06:03:28 +0000 (06:03 +0000)
committerAndrew Haley <aph@gcc.gnu.org>
Thu, 1 Jul 1999 06:03:28 +0000 (06:03 +0000)
1999-06-24  Andrew Haley  <aph@cygnus.com>
        * class.c (finish_class): Whenever a deferred method is
        output, rescan the list of methods to see if a new candidate for
        output can be found.

From-SVN: r27872

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

index 0c14d37ff6e927002af825d3de961c89fcbcab03..7241c550861667c2ff113e10f3d86ee4252acb4f 100644 (file)
@@ -1,3 +1,9 @@
+1999-06-24  Andrew Haley  <aph@cygnus.com>
+
+       * class.c (finish_class): Whenever a deferred method is
+       output, rescan the list of methods to see if a new candidate for
+       output can be found.
+
 1999-06-28  Tom Tromey  <tromey@cygnus.com>
 
        * jvspec.c (lang_specific_driver): Recognize --help.
index 8217a9507687afb9d1a2d292014a14d87c662dfa..9a73364c8c9fe7b25fdf42f4f2616a9d027ddca0 100644 (file)
@@ -1200,10 +1200,10 @@ finish_class (cl)
      tree cl;
 {
   tree method;
-
-  /* Emit deferred inline methods. */
-  for ( method = TYPE_METHODS (CLASS_TO_HANDLE_TYPE (current_class));
-       method != NULL_TREE; method = TREE_CHAIN (method))
+  tree type_methods = TYPE_METHODS (CLASS_TO_HANDLE_TYPE (current_class));
+  
+  /* Emit deferred inline methods. */  
+  for (method = type_methods; method != NULL_TREE; )
     {
       if (! TREE_ASM_WRITTEN (method) && DECL_SAVED_INSNS (method) != 0)
        {
@@ -1215,8 +1215,13 @@ finish_class (cl)
              temporary_allocation ();
              output_inline_function (method);
              permanent_allocation (1);
+             /* Scan the list again to see if there are any earlier
+                 methods to emit. */
+             method = type_methods;
+             continue;
            }
        }
+      method = TREE_CHAIN (method);
     }
 
   make_class_data (current_class);