re PR other/88007 (ICE in gt_ggc_m_S, at ggc-page.c:1474)
authorJakub Jelinek <jakub@redhat.com>
Wed, 14 Nov 2018 12:38:20 +0000 (13:38 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 14 Nov 2018 12:38:20 +0000 (13:38 +0100)
PR other/88007
* c-common.c (parse_optimize_options): Allocate option string from
opts_obstack rather than as GC memory.  Move the allocation after
warning for invalid option.

* gcc.dg/pr88007.c: New test.

From-SVN: r266141

gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr88007.c [new file with mode: 0644]

index 4b8d8228dfa2fac5e7de4fb5ccb1f5a922a574ca..94b823fe39898ac04b7c2d8bff8d9601bbff225a 100644 (file)
@@ -1,3 +1,10 @@
+2018-11-14  Jakub Jelinek  <jakub@redhat.com>
+
+       PR other/88007
+       * c-common.c (parse_optimize_options): Allocate option string from
+       opts_obstack rather than as GC memory.  Move the allocation after
+       warning for invalid option.
+
 2018-11-13  David Malcolm  <dmalcolm@redhat.com>
 
        * c-common.c (c_get_substring_location): Update for renaming of
index 9c2f18609acb48b4cff92c5c4a655f7cb64aba5f..cd88f3a5ed304a04954f23ac4afb4e1ca083ce89 100644 (file)
@@ -5523,8 +5523,6 @@ parse_optimize_options (tree args, bool attr_p)
                  next_p = NULL;
                }
 
-             r = q = (char *) ggc_alloc_atomic (len2 + 3);
-
              /* If the user supplied -Oxxx or -fxxx, only allow -Oxxx or -fxxx
                 options.  */
              if (*p == '-' && p[1] != 'O' && p[1] != 'f')
@@ -5539,6 +5537,9 @@ parse_optimize_options (tree args, bool attr_p)
                  continue;
                }
 
+             /* Can't use GC memory here, see PR88007.  */
+             r = q = XOBNEWVEC (&opts_obstack, char, len2 + 3);
+
              if (*p != '-')
                {
                  *r++ = '-';
index d8897fa5dbe5530cc2890fdf6dc70389fc76f62c..5f58860714d94dae185265fed37eb665d7acca51 100644 (file)
@@ -1,5 +1,8 @@
 2018-11-14  Jakub Jelinek  <jakub@redhat.com>
 
+       PR other/88007
+       * gcc.dg/pr88007.c: New test.
+
        PR rtl-optimization/87817
        * gcc.target/i386/bmi2-bzhi-3.c (main): Add a couple of new tests.
 
diff --git a/gcc/testsuite/gcc.dg/pr88007.c b/gcc/testsuite/gcc.dg/pr88007.c
new file mode 100644 (file)
index 0000000..4f56ba4
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR other/88007 */
+/* { dg-do compile } */
+/* { dg-options "--param ggc-min-expand=3 --param ggc-min-heapsize=1024" } */
+/* { dg-skip-if "no code alignment > 2" { "pdp11-*-*" } } */
+
+void bar (void);
+
+__attribute__((optimize ("align-loops=16", "align-jumps=16",
+                        "align-labels=16", "align-functions=16")))
+void
+foo (void)
+{
+  for (int i = 0; i < 1024; ++i)
+    bar ();
+}