]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR middle-end/87647 (ICE on valid code in decode_addr_const, at varasm...
authorJakub Jelinek <jakub@redhat.com>
Fri, 30 Aug 2019 11:08:10 +0000 (13:08 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 30 Aug 2019 11:08:10 +0000 (13:08 +0200)
Backported from mainline
2018-10-20  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/87647
* varasm.c (decode_addr_const): Handle COMPOUND_LITERAL_EXPR.

* gcc.c-torture/compile/pr87647.c: New test.

From-SVN: r275066

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr87647.c [new file with mode: 0644]
gcc/varasm.c

index 6703f2a0e75c3d334a929ceace8720f61ac5a0c7..fab10b03da02c85d7b7806bad706305376ed6076 100644 (file)
@@ -1,6 +1,11 @@
 2019-08-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2018-10-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/87647
+       * varasm.c (decode_addr_const): Handle COMPOUND_LITERAL_EXPR.
+
        2018-10-19  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/85488
index bdc93394d0204dcd93c8cc12980bf6a8b1cba7d5..68b0effa4203d281e0d85d5ba8d6a77b429a9d4c 100644 (file)
@@ -1,6 +1,11 @@
 2019-08-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2018-10-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/87647
+       * gcc.c-torture/compile/pr87647.c: New test.
+
        2018-10-19  Jakub Jelinek  <jakub@redhat.com>
 
        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 (file)
index 0000000..67f9d87
--- /dev/null
@@ -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);
+}
index e554cf56bc06617d770d9af1de48fb4a92864fdb..1b9030029ac3456f61157120642fbf130731f6ac 100644 (file)
@@ -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 ();
     }