From: Jakub Jelinek Date: Wed, 14 Nov 2018 12:38:20 +0000 (+0100) Subject: re PR other/88007 (ICE in gt_ggc_m_S, at ggc-page.c:1474) X-Git-Tag: upstream/12.2.0~28073 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8cca0163fb468842f85ac8e8638ea6d1ca2f9181;p=platform%2Fupstream%2Fgcc.git 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 --- 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 + + 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 * 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 + 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 (); +}