aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c/ChangeLog7
-rw-r--r--gcc/c/c-parser.c5
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.dg/pr69796.c10
-rw-r--r--gcc/testsuite/gcc.dg/pr69974.c13
5 files changed, 38 insertions, 4 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index f814833..004d7c5 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -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
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index 82c1d61..bb508b7 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 5c88b72..084a7eb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..ebf34aa
--- /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 0000000..101d621
--- /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);
+}