global.c (global_alloc): Use xmalloc instead of alloca for CONFLICTS...
authorBrendan Kehoe <brendan@lisa.cygnus.com>
Tue, 28 Oct 1997 23:39:28 +0000 (23:39 +0000)
committerBrendan Kehoe <brendan@gcc.gnu.org>
Tue, 28 Oct 1997 23:39:28 +0000 (18:39 -0500)
* global.c (global_alloc): Use xmalloc instead of alloca for
CONFLICTS, since max_allocno * allocno_row_words alone can be more
than 2.5Mb sometimes.

From-SVN: r16223

gcc/ChangeLog
gcc/global.c

index 39a753d0f1679c66d67696c0aae4ebf65af48449..182a76e1ef6f4a75f8ddd8c9ef3185ba10b04287 100644 (file)
@@ -1,3 +1,9 @@
+1997-10-28  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * global.c (global_alloc): Use xmalloc instead of alloca for
+       CONFLICTS, since max_allocno * allocno_row_words alone can be more
+       than 2.5Mb sometimes.
+
 Tue Oct 28 15:29:15 1997  Richard Henderson  <rth@cygnus.com>
 
        * reload1.c (eliminate_regs [SET]): If [SUBREG] widened the mode of
index 83b09fe431fd88e8bdc526b33ca51eea8585ca9e..0480ebf3c4dc868f85925f8965b07f3d36538797 100644 (file)
@@ -486,8 +486,11 @@ global_alloc (file)
 
   allocno_row_words = (max_allocno + INT_BITS - 1) / INT_BITS;
 
-  conflicts = (INT_TYPE *) alloca (max_allocno * allocno_row_words
-                                  * sizeof (INT_TYPE));
+  /* We used to use alloca here, but the size of what it would try to
+     allocate would occasionally cause it to exceed the stack limit and
+     cause unpredictable core dumps.  Some examples were > 2Mb in size.  */
+  conflicts = (INT_TYPE *) xmalloc (max_allocno * allocno_row_words
+                                   * sizeof (INT_TYPE));
   bzero ((char *) conflicts,
         max_allocno * allocno_row_words * sizeof (INT_TYPE));
 
@@ -570,6 +573,8 @@ global_alloc (file)
          }
     }
 
+  free (conflicts);
+
   /* Do the reloads now while the allocno data still exist, so that we can
      try to assign new hard regs to any pseudo regs that are spilled.  */