re PR c/69796 (ICE on invalid code in useless_type_conversion_p, at gimple-expr.c:83)
authorJakub Jelinek <jakub@redhat.com>
Tue, 1 Mar 2016 18:27:21 +0000 (19:27 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 1 Mar 2016 18:27:21 +0000 (19:27 +0100)
PR c/69796
PR c/69974
* c-parser.c (c_parser_translation_unit): Don't change TREE_TYPE
of incomplete decls to error_mark_node.

* gcc.dg/pr69796.c: New test.
* gcc.dg/pr69974.c: New test.

From-SVN: r233861

gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr69796.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr69974.c [new file with mode: 0644]

index f814833538b7c05258615b0877b364d8698f1337..004d7c550a005a6b6234c7f6ee4a18cc609d1a8d 100644 (file)
@@ -1,3 +1,10 @@
+2016-03-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/69796
+       PR c/69974
+       * c-parser.c (c_parser_translation_unit): Don't change TREE_TYPE
+       of incomplete decls to error_mark_node.
+
 2016-02-24  Marek Polacek  <polacek@redhat.com>
 
        PR c/69819
index 82c1d61b76afb3cdb3d9667fe987b43d6e0250d1..bb508b7502415b399e11738f40ae432de5e74ea5 100644 (file)
@@ -1436,10 +1436,7 @@ c_parser_translation_unit (c_parser *parser)
   tree decl;
   FOR_EACH_VEC_ELT (incomplete_record_decls, i, decl)
     if (DECL_SIZE (decl) == NULL_TREE && TREE_TYPE (decl) != error_mark_node)
-      {
-       error ("storage size of %q+D isn%'t known", decl);
-       TREE_TYPE (decl) = error_mark_node;
-      }
+      error ("storage size of %q+D isn%'t known", decl);
 }
 
 /* Parse an external declaration (C90 6.7, C99 6.9).
index 5c88b72440f0da05e855aee31a9dbd5ceeb9337a..084a7eb9208595b1281b9180cf592e3a37c920e5 100644 (file)
@@ -1,3 +1,10 @@
+2016-03-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/69796
+       PR c/69974
+       * gcc.dg/pr69796.c: New test.
+       * gcc.dg/pr69974.c: New test.
+
 2016-03-01  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gnat.dg/stack_usage3.adb: Robustify and enable for all targets.
diff --git a/gcc/testsuite/gcc.dg/pr69796.c b/gcc/testsuite/gcc.dg/pr69796.c
new file mode 100644 (file)
index 0000000..ebf34aa
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR c/69796 */
+/* { dg-do compile } */
+
+struct S s;    /* { dg-error "storage size of 's' isn't known" } */
+
+void
+foo ()
+{
+  s a; /* { dg-error "expression statement has incomplete type|expected" } */
+}
diff --git a/gcc/testsuite/gcc.dg/pr69974.c b/gcc/testsuite/gcc.dg/pr69974.c
new file mode 100644 (file)
index 0000000..101d621
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR c/69974 */
+/* { dg-do compile } */
+
+struct S;
+char foo (struct S *);
+struct S a;    /* { dg-error "storage size of 'a' isn't known" } */
+int b;
+
+void
+bar ()
+{
+  b &= foo (&a);
+}