From 19dbbf3697cff8c0eb50b5ada203860c623f2cde Mon Sep 17 00:00:00 2001
From: Jakub Jelinek <jakub@redhat.com>
Date: Sun, 26 Jun 2005 07:23:48 +0200
Subject: [PATCH] re PR middle-end/22028 (ICE after invalid struct declaration)

	PR middle-end/22028
	* gimplify.c (gimplify_type_sizes): Check for type == error_mark_node
	earlier in the function.

	* gcc.dg/20050620-1.c: New test.

From-SVN: r101332
---
 gcc/ChangeLog                     |  4 ++++
 gcc/gimplify.c                    |  5 ++---
 gcc/testsuite/ChangeLog           |  5 +++++
 gcc/testsuite/gcc.dg/20050620-1.c | 15 +++++++++++++++
 4 files changed, 26 insertions(+), 3 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/20050620-1.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index aaccb6efe1eb..751cc708ee63 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
 2005-06-26  Jakub Jelinek  <jakub@redhat.com>
 
+	PR middle-end/22028
+	* gimplify.c (gimplify_type_sizes): Check for type == error_mark_node
+	earlier in the function.
+
 	* regrename.c (copy_value): Don't replace fixed or global
 	regs with older regs.
 
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 156e56744a57..8bc790877747 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -4524,15 +4524,14 @@ gimplify_type_sizes (tree type, tree *list_p)
 {
   tree field, t;
 
-  if (type == NULL)
+  if (type == NULL || type == error_mark_node)
     return;
 
   /* We first do the main variant, then copy into any other variants.  */
   type = TYPE_MAIN_VARIANT (type);
 
   /* Avoid infinite recursion.  */
-  if (TYPE_SIZES_GIMPLIFIED (type)
-      || type == error_mark_node)
+  if (TYPE_SIZES_GIMPLIFIED (type))
     return;
 
   TYPE_SIZES_GIMPLIFIED (type) = 1;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 71961848bd3a..a8ca329b3267 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-06-26  Jakub Jelinek  <jakub@redhat.com>
+
+	PR middle-end/22028
+	* gcc.dg/20050620-1.c: New test.
+
 2005-06-26  Kazu Hirata  <kazu@codesourcery.com>
 
 	PR tree-optimization/22026
diff --git a/gcc/testsuite/gcc.dg/20050620-1.c b/gcc/testsuite/gcc.dg/20050620-1.c
new file mode 100644
index 000000000000..befdd9636500
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/20050620-1.c
@@ -0,0 +1,15 @@
+/* PR middle-end/22028 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+void
+foo (void)
+{
+  struct { int i[]; } u;	/* { dg-error "flexible array member" } */
+}
+
+void
+bar (void)
+{
+  struct { struct a b; } c;	/* { dg-error "has incomplete type" } */
+}
-- 
GitLab