Comments
Patch
@@ -6156,6 +6156,22 @@ main (int argc, char **argv)
signal (SIGCHLD, SIG_DFL);
#endif
+#if defined(HAVE_SETRLIMIT) && defined(RLIMIT_STACK) && defined(RLIM_INFINITY)
+ {
+ /* Parsing and gimplification sometimes need quite large stack.
+ Increase stack size limits if possible. */
+ struct rlimit rlim;
+ if (getrlimit (RLIMIT_STACK, &rlim) == 0
+ && rlim.rlim_cur != RLIM_INFINITY)
+ {
+ rlim.rlim_cur = MAX (rlim.rlim_cur, 64 * 1024 * 1024);
+ if (rlim.rlim_max != RLIM_INFINITY)
+ rlim.rlim_cur = MIN (rlim.rlim_cur, rlim.rlim_max);
+ setrlimit (RLIMIT_STACK, &rlim);
+ }
+ }
+#endif
+
/* Allocate the argument vector. */
alloc_args ();
@@ -1911,6 +1911,22 @@ do_compile (void)
int
toplev_main (int argc, char **argv)
{
+#if defined(HAVE_SETRLIMIT) && defined(RLIMIT_STACK) && defined(RLIM_INFINITY)
+ {
+ /* Parsing and gimplification sometimes need quite large stack.
+ Increase stack size limits if possible. */
+ struct rlimit rlim;
+ if (getrlimit (RLIMIT_STACK, &rlim) == 0
+ && rlim.rlim_cur != RLIM_INFINITY)
+ {
+ rlim.rlim_cur = MAX (rlim.rlim_cur, 64 * 1024 * 1024);
+ if (rlim.rlim_max != RLIM_INFINITY)
+ rlim.rlim_cur = MIN (rlim.rlim_cur, rlim.rlim_max);
+ setrlimit (RLIMIT_STACK, &rlim);
+ }
+ }
+#endif
+
expandargv (&argc, &argv);
/* Initialization of GCC's environment, and diagnostics. */