re PR c++/49756 (g++ ICE)
authorJakub Jelinek <jakub@redhat.com>
Fri, 22 Jul 2011 08:33:37 +0000 (10:33 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 22 Jul 2011 08:33:37 +0000 (10:33 +0200)
PR c++/49756
* libiberty.h (stack_limit_increase): New prototype.

* stack-limit.c: New file.
* Makefile.in: Regenerate deps.
(CFILES): Add stack-limit.c.
(REQUIRED_OFILES): Add ./stack-limit.$(objext).
* configure.ac (checkfuncs): Add getrlimit and setrlimit.
(AC_CHECK_FUNCS): Likewise.
* configure: Regenerated.
* config.in: Regenerated.

* gcc.c (main): Call stack_limit_increase (64MB).
* toplev.c (toplev_main): Likewise.

From-SVN: r176617

gcc/ChangeLog
gcc/gcc.c
gcc/toplev.c
include/ChangeLog
include/libiberty.h
libiberty/ChangeLog
libiberty/Makefile.in
libiberty/config.in
libiberty/configure
libiberty/configure.ac

index 5ac6697d9fcce7b7705921cc57b02c63959bd1d8..d27b2551f15cd96d476172792e07586e3513120e 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/49756
+       * gcc.c (main): Call stack_limit_increase (64MB).
+       * toplev.c (toplev_main): Likewise.
+
 2011-07-21  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/i386/i386.c (ix86_expand_call): Call copy_to_mode_reg
index 5e5d3c2b81e746bae05d7d5466952de3fa9be250..fc0cb1b6d7547d4a8e30e85d5fcd022b6614f2b9 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -6156,6 +6156,10 @@ main (int argc, char **argv)
   signal (SIGCHLD, SIG_DFL);
 #endif
 
+  /* Parsing and gimplification sometimes need quite large stack.
+     Increase stack size limits if possible.  */
+  stack_limit_increase (64 * 1024 * 1024);
+
   /* Allocate the argument vector.  */
   alloc_args ();
 
index 109325cc871a9698628d167fcba8b61e22c9b7ba..de0a58a67731c2f75d81990fae54b05eece077d1 100644 (file)
@@ -1911,6 +1911,10 @@ do_compile (void)
 int
 toplev_main (int argc, char **argv)
 {
+  /* Parsing and gimplification sometimes need quite large stack.
+     Increase stack size limits if possible.  */
+  stack_limit_increase (64 * 1024 * 1024);
+
   expandargv (&argc, &argv);
 
   /* Initialization of GCC's environment, and diagnostics.  */
index 655fc180d0052e639499a2b41dfe7b3ea67f83ee..e641ae0c3e9fc5985f8429021c50351d471310d0 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/49756
+       * libiberty.h (stack_limit_increase): New prototype.
+
 2011-07-13  Sriraman Tallam  <tmsriram@google.com>
        
        * plugin-api.h
index 1cc7250bf3c9b2e5aacedd990647aeafe33e653c..32eb83a049eefec2a29f9eef2ab3aaadf72379d7 100644 (file)
@@ -1,7 +1,7 @@
 /* Function declarations for libiberty.
 
    Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
    
    Note - certain prototypes declared in this header file are for
    functions whoes implementation copyright does not belong to the
@@ -637,6 +637,9 @@ extern int strverscmp (const char *, const char *);
 /* Set the title of a process */
 extern void setproctitle (const char *name, ...);
 
+/* Increase stack limit if possible.  */
+extern void stack_limit_increase (unsigned long);
+
 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
 
 /* Drastically simplified alloca configurator.  If we're using GCC,
index cd71565e582b86905af065fdb1b310afa0fcfef1..689d507cdde8e46cc89577044d50cb69de7a2fd7 100644 (file)
@@ -1,3 +1,15 @@
+2011-07-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/49756
+       * stack-limit.c: New file.
+       * Makefile.in: Regenerate deps.
+       (CFILES): Add stack-limit.c.
+       (REQUIRED_OFILES): Add ./stack-limit.$(objext).
+       * configure.ac (checkfuncs): Add getrlimit and setrlimit.
+       (AC_CHECK_FUNCS): Likewise.
+       * configure: Regenerated.
+       * config.in: Regenerated.
+
 2011-07-04  Jason Merrill  <jason@redhat.com>
 
        * cp-demangle.c (d_expression): Handle 'this'.
index ef35453c031023e07c893fd8a3fee326817378da..bcd03fd016725b665e6de962b25bebb7e71db73f 100644 (file)
@@ -2,7 +2,7 @@
 # Originally written by K. Richard Pixley <rich@cygnus.com>.
 #
 # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 # Free Software Foundation
 #
 # This file is part of the libiberty library.
@@ -148,10 +148,10 @@ CFILES = alloca.c argv.c asprintf.c atexit.c                              \
         simple-object.c simple-object-coff.c simple-object-elf.c       \
         simple-object-mach-o.c                                         \
          snprintf.c sort.c                                             \
-        spaces.c splay-tree.c stpcpy.c stpncpy.c strcasecmp.c          \
-        strchr.c strdup.c strerror.c strncasecmp.c strncmp.c           \
-        strrchr.c strsignal.c strstr.c strtod.c strtol.c strtoul.c     \
-        strndup.c strverscmp.c                                         \
+        spaces.c splay-tree.c stack-limit.c stpcpy.c stpncpy.c         \
+        strcasecmp.c strchr.c strdup.c strerror.c strncasecmp.c        \
+        strncmp.c strrchr.c strsignal.c strstr.c strtod.c strtol.c     \
+        strtoul.c strndup.c strverscmp.c                               \
        tmpnam.c                                                        \
        unlink-if-ordinary.c                                            \
        vasprintf.c vfork.c vfprintf.c vprintf.c vsnprintf.c vsprintf.c \
@@ -183,7 +183,8 @@ REQUIRED_OFILES =                                                   \
        ./simple-object.$(objext) ./simple-object-coff.$(objext)        \
        ./simple-object-elf.$(objext) ./simple-object-mach-o.$(objext)  \
        ./sort.$(objext) ./spaces.$(objext)                             \
-       ./splay-tree.$(objext) ./strerror.$(objext)                     \
+       ./splay-tree.$(objext) ./stack-limit.$(objext)                  \
+       ./strerror.$(objext)                                            \
        ./strsignal.$(objext) ./unlink-if-ordinary.$(objext)            \
        ./xatexit.$(objext) ./xexit.$(objext) ./xmalloc.$(objext)       \
        ./xmemdup.$(objext) ./xstrdup.$(objext) ./xstrerror.$(objext)   \
@@ -1033,6 +1034,12 @@ $(CONFIGURED_OFILES): stamp-picdir
        else true; fi
        $(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION)
 
+./stack-limit.$(objext): $(srcdir)/stack-limit.c config.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/stack-limit.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/stack-limit.c $(OUTPUT_OPTION)
+
 ./stpcpy.$(objext): $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
        if [ x"$(PICFLAG)" != x ]; then \
          $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \
index e4f1f1620e19be55112d0cf1b765314b09867f4a..17c4c2e4414a2fa1f58f0644316632f8372a43f6 100644 (file)
 /* Define to 1 if you have the `getpagesize' function. */
 #undef HAVE_GETPAGESIZE
 
+/* Define to 1 if you have the `getrlimit' function. */
+#undef HAVE_GETRLIMIT
+
 /* Define to 1 if you have the `getrusage' function. */
 #undef HAVE_GETRUSAGE
 
 /* Define to 1 if you have the `setproctitle' function. */
 #undef HAVE_SETPROCTITLE
 
+/* Define to 1 if you have the `setrlimit' function. */
+#undef HAVE_SETRLIMIT
+
 /* Define to 1 if you have the `sigsetmask' function. */
 #undef HAVE_SIGSETMASK
 
index bdabe8d1a3546e570c3e4cc38bd789de4c36a6b5..35b8ce5049bb38f10fa06e74d8bfe8731370920f 100755 (executable)
@@ -5293,10 +5293,10 @@ funcs="$funcs setproctitle"
 
 vars="sys_errlist sys_nerr sys_siglist"
 
-checkfuncs="__fsetlocking canonicalize_file_name dup3 getrusage getsysinfo \
- gettimeofday on_exit psignal pstat_getdynamic pstat_getstatic realpath \
sbrk spawnve spawnvpe strerror strsignal sysconf sysctl sysmp table \
- times wait3 wait4"
+checkfuncs="__fsetlocking canonicalize_file_name dup3 getrlimit getrusage \
+ getsysinfo gettimeofday on_exit psignal pstat_getdynamic pstat_getstatic \
realpath setrlimit sbrk spawnve spawnvpe strerror strsignal sysconf sysctl \
sysmp table times wait3 wait4"
 
 # These are neither executed nor required, but they help keep
 # autoheader happy without adding a bunch of text to acconfig.h.
@@ -5306,13 +5306,13 @@ if test "x" = "y"; then
     calloc canonicalize_file_name clock \
     dup3 \
     ffs __fsetlocking \
-    getcwd getpagesize getrusage getsysinfo gettimeofday \
+    getcwd getpagesize getrlimit getrusage getsysinfo gettimeofday \
     index insque \
     memchr memcmp memcpy memmem memmove memset mkstemps \
     on_exit \
     psignal pstat_getdynamic pstat_getstatic putenv \
     random realpath rename rindex \
-    sbrk setenv setproctitle sigsetmask snprintf spawnve spawnvpe \
+    sbrk setenv setproctitle setrlimit sigsetmask snprintf spawnve spawnvpe \
      stpcpy stpncpy strcasecmp strchr strdup \
      strerror strncasecmp strndup strrchr strsignal strstr strtod strtol \
      strtoul strverscmp sysconf sysctl sysmp \
index 9f1ff04938ec28cf81e69b0990e0c3831684e2f9..eebd7e991056f629baeb474ae551903306196119 100644 (file)
@@ -358,10 +358,10 @@ funcs="$funcs setproctitle"
 
 vars="sys_errlist sys_nerr sys_siglist"
 
-checkfuncs="__fsetlocking canonicalize_file_name dup3 getrusage getsysinfo \
- gettimeofday on_exit psignal pstat_getdynamic pstat_getstatic realpath \
sbrk spawnve spawnvpe strerror strsignal sysconf sysctl sysmp table \
- times wait3 wait4"
+checkfuncs="__fsetlocking canonicalize_file_name dup3 getrlimit getrusage \
+ getsysinfo gettimeofday on_exit psignal pstat_getdynamic pstat_getstatic \
realpath setrlimit sbrk spawnve spawnvpe strerror strsignal sysconf sysctl \
sysmp table times wait3 wait4"
 
 # These are neither executed nor required, but they help keep
 # autoheader happy without adding a bunch of text to acconfig.h.
@@ -371,13 +371,13 @@ if test "x" = "y"; then
     calloc canonicalize_file_name clock \
     dup3 \
     ffs __fsetlocking \
-    getcwd getpagesize getrusage getsysinfo gettimeofday \
+    getcwd getpagesize getrlimit getrusage getsysinfo gettimeofday \
     index insque \
     memchr memcmp memcpy memmem memmove memset mkstemps \
     on_exit \
     psignal pstat_getdynamic pstat_getstatic putenv \
     random realpath rename rindex \
-    sbrk setenv setproctitle sigsetmask snprintf spawnve spawnvpe \
+    sbrk setenv setproctitle setrlimit sigsetmask snprintf spawnve spawnvpe \
      stpcpy stpncpy strcasecmp strchr strdup \
      strerror strncasecmp strndup strrchr strsignal strstr strtod strtol \
      strtoul strverscmp sysconf sysctl sysmp \