aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog7
-rw-r--r--gcc/c-family/c-common.c5
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/pr88007.c15
4 files changed, 28 insertions, 2 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 4b8d822..94b823f 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -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
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 9c2f186..cd88f3a 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -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++ = '-';
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d8897fa..5f58860 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..4f56ba4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr88007.c
@@ -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 ();
+}