diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-11-14 13:38:20 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-11-14 13:38:20 +0100 |
commit | 8cca0163fb468842f85ac8e8638ea6d1ca2f9181 (patch) | |
tree | cf23cca3962027a5a39d599d84a2973d7a5cc7b0 /gcc | |
parent | 5bfba2b58ddb37c89e0633a2dc48fa8c4430a026 (diff) | |
download | gcc-8cca0163fb468842f85ac8e8638ea6d1ca2f9181.zip gcc-8cca0163fb468842f85ac8e8638ea6d1ca2f9181.tar.gz gcc-8cca0163fb468842f85ac8e8638ea6d1ca2f9181.tar.bz2 |
re PR other/88007 (ICE in gt_ggc_m_S, at ggc-page.c:1474)
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c-family/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr88007.c | 15 |
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 (); +} |