From: Jakub Jelinek Date: Tue, 1 Mar 2016 18:27:21 +0000 (+0100) Subject: re PR c/69796 (ICE on invalid code in useless_type_conversion_p, at gimple-expr.c:83) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=686e2237f31bd26851e3c8f9a528ab30aef16c54;p=gcc.git re PR c/69796 (ICE on invalid code in useless_type_conversion_p, at gimple-expr.c:83) 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 --- diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index f814833538b..004d7c550a0 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,10 @@ +2016-03-01 Jakub Jelinek + + 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 PR c/69819 diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 82c1d61b76a..bb508b75024 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -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). diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5c88b72440f..084a7eb9208 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2016-03-01 Jakub Jelinek + + PR c/69796 + PR c/69974 + * gcc.dg/pr69796.c: New test. + * gcc.dg/pr69974.c: New test. + 2016-03-01 Eric Botcazou * 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 index 00000000000..ebf34aaa216 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69796.c @@ -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 index 00000000000..101d6212003 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69974.c @@ -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); +}