re PR middle-end/43600 (Segmentation fault for large C file (24MB))
authorRichard Guenther <rguenther@suse.de>
Wed, 31 Mar 2010 13:20:19 +0000 (13:20 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 31 Mar 2010 13:20:19 +0000 (13:20 +0000)
2010-03-31  Richard Guenther  <rguenther@suse.de>

PR middle-end/43600
* cgraphunit.c (cgraph_output_in_order): Do not allocate
temporary data on stack.

From-SVN: r157867

gcc/ChangeLog
gcc/cgraphunit.c

index 8d7b219259a223a948bc05d96cc22f96c98cea07..6515701fed3de8fa0844f9eb114f2a59d5595a76 100644 (file)
@@ -1,3 +1,9 @@
+2010-03-31  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/43600
+       * cgraphunit.c (cgraph_output_in_order): Do not allocate
+       temporary data on stack.
+
 2010-03-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * config/sparc/sysv4.h (PUSHSECTION_FORMAT): Remove undef.
index 185fc538d7d3aa956339676d3f33ddf3ac00de7d..212ab3aa1abf0778b11fc74741556616170046b8 100644 (file)
@@ -1664,7 +1664,6 @@ static void
 cgraph_output_in_order (void)
 {
   int max;
-  size_t size;
   struct cgraph_order_sort *nodes;
   int i;
   struct cgraph_node *pf;
@@ -1672,9 +1671,7 @@ cgraph_output_in_order (void)
   struct cgraph_asm_node *pa;
 
   max = cgraph_order;
-  size = max * sizeof (struct cgraph_order_sort);
-  nodes = (struct cgraph_order_sort *) alloca (size);
-  memset (nodes, 0, size);
+  nodes = XCNEWVEC (struct cgraph_order_sort, max);
 
   varpool_analyze_pending_decls ();
 
@@ -1741,6 +1738,7 @@ cgraph_output_in_order (void)
     }
 
   cgraph_asm_nodes = NULL;
+  free (nodes);
 }
 
 /* Return true when function body of DECL still needs to be kept around