re PR c/72816 (ICE on x86_64-linux-gnu (tree check: expected tree that contains ...
authorJakub Jelinek <jakub@redhat.com>
Sun, 7 Aug 2016 09:49:14 +0000 (11:49 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Sun, 7 Aug 2016 09:49:14 +0000 (11:49 +0200)
PR c/72816
* stor-layout.c (layout_decl): Fix up formatting.
(relayout_decl): Allow DECL to be FIELD_DECL.

* gcc.dg/pr72816.c: New test.

From-SVN: r239218

gcc/ChangeLog
gcc/stor-layout.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr72816.c [new file with mode: 0644]

index 7b553516ab28cd7e1e4ceba6acb6758e849ac208..8cd9f2aecfdc7e584845a40b76bb2a7107e965c1 100644 (file)
@@ -1,3 +1,9 @@
+2016-08-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/72816
+       * stor-layout.c (layout_decl): Fix up formatting.
+       (relayout_decl): Allow DECL to be FIELD_DECL.
+
 2016-08-07  Alan Modra  <amodra@gmail.com>
 
        * config/rs6000/rs6000.md (fix_trunc<mode>si2): Fix mode of reg.
index 242e79b6d9db1565fe0012ab8836c948cb4f36ea..62ab80457b6fd4f81b243300e5392b8d4f77a089 100644 (file)
@@ -596,7 +596,7 @@ layout_decl (tree decl, unsigned int known_align)
     return;
 
   gcc_assert (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL
-             || code == TYPE_DECL ||code == FIELD_DECL);
+             || code == TYPE_DECL || code == FIELD_DECL);
 
   rtl = DECL_RTL_IF_SET (decl);
 
@@ -768,8 +768,8 @@ layout_decl (tree decl, unsigned int known_align)
     }
 }
 
-/* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
-   a previous call to layout_decl and calls it again.  */
+/* Given a VAR_DECL, PARM_DECL, RESULT_DECL, or FIELD_DECL, clears the
+   results of a previous call to layout_decl and calls it again.  */
 
 void
 relayout_decl (tree decl)
@@ -778,7 +778,8 @@ relayout_decl (tree decl)
   DECL_MODE (decl) = VOIDmode;
   if (!DECL_USER_ALIGN (decl))
     SET_DECL_ALIGN (decl, 0);
-  SET_DECL_RTL (decl, 0);
+  if (DECL_RTL_SET_P (decl))
+    SET_DECL_RTL (decl, 0);
 
   layout_decl (decl, 0);
 }
index 06d6bae6b5a8620bf90c7f836cc79f466fa2f65a..edd4b1cab9f5e2e9b5ead41fdd51be61f066fbab 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/72816
+       * gcc.dg/pr72816.c: New test.
+
 2016-08-06  Jonathan Wakely  <jwakely@redhat.com>
 
        * g++.dg/conversion/pr16333.C: Adjust dg-error regexp.
diff --git a/gcc/testsuite/gcc.dg/pr72816.c b/gcc/testsuite/gcc.dg/pr72816.c
new file mode 100644 (file)
index 0000000..75b8ba1
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR c/72816 */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu11" } */
+
+typedef const int A[];
+struct S {
+  int a;
+  A b; /* { dg-error "array size missing" } */
+};