From: Jakub Jelinek Date: Fri, 30 Aug 2019 11:08:10 +0000 (+0200) Subject: backport: re PR middle-end/87647 (ICE on valid code in decode_addr_const, at varasm... X-Git-Tag: releases/gcc-7.5.0~294 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20940c0e029eddeec4e618bfb8f0f8e98851dfd1;p=thirdparty%2Fgcc.git backport: re PR middle-end/87647 (ICE on valid code in decode_addr_const, at varasm.c:2958) Backported from mainline 2018-10-20 Jakub Jelinek PR middle-end/87647 * varasm.c (decode_addr_const): Handle COMPOUND_LITERAL_EXPR. * gcc.c-torture/compile/pr87647.c: New test. From-SVN: r275066 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6703f2a0e75c..fab10b03da02 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,11 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2018-10-20 Jakub Jelinek + + PR middle-end/87647 + * varasm.c (decode_addr_const): Handle COMPOUND_LITERAL_EXPR. + 2018-10-19 Jakub Jelinek PR middle-end/85488 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bdc93394d020..68b0effa4203 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2018-10-20 Jakub Jelinek + + PR middle-end/87647 + * gcc.c-torture/compile/pr87647.c: New test. + 2018-10-19 Jakub Jelinek PR middle-end/85488 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr87647.c b/gcc/testsuite/gcc.c-torture/compile/pr87647.c new file mode 100644 index 000000000000..67f9d8734135 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr87647.c @@ -0,0 +1,15 @@ +/* PR middle-end/87647 */ + +struct A {}; +struct A *const b = &(struct A) {}; +struct B { char *s; struct A *t; }; +void bar (struct B *); + +void +foo (void) +{ + struct B a[] = { "", b, "", b, "", b, "", b, "", b, "", b, "", b, "", b, + "", b, "", b, "", b, "", b, "", b, "", b, "", b, "", b, + "", b }; + bar (a); +} diff --git a/gcc/varasm.c b/gcc/varasm.c index e554cf56bc06..1b9030029ac3 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -2881,6 +2881,11 @@ decode_addr_const (tree exp, struct addr_const *value) x = output_constant_def (target, 1); break; + case COMPOUND_LITERAL_EXPR: + gcc_assert (COMPOUND_LITERAL_EXPR_DECL (target)); + x = DECL_RTL (COMPOUND_LITERAL_EXPR_DECL (target)); + break; + default: gcc_unreachable (); }