aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <andrew.pinski@caviumnetworks.com>2010-03-19 15:52:41 -0700
committerAndrew Pinski <pinskia@gcc.gnu.org>2010-03-19 15:52:41 -0700
commite49a760f33541c07a605bdbd64ca15c56e398b6c (patch)
treee9656d534c50302597e79125c358500a49c47f8f
parentfdb2c6841da6ea02699c79ae63d80ffef3b140e8 (diff)
downloadgcc-e49a760f33541c07a605bdbd64ca15c56e398b6c.zip
gcc-e49a760f33541c07a605bdbd64ca15c56e398b6c.tar.gz
gcc-e49a760f33541c07a605bdbd64ca15c56e398b6c.tar.bz2
re PR c/43211 (ICE with incomplete type in function argument)
2010-03-19 Andrew Pinski <andrew_pinski@caviumnetworks.com> PR C/43211 * c-decl.c (grokparms): Set arg_types to NULL_TREE if there was an error. 2010-03-19 Andrew Pinski <andrew_pinski@caviumnetworks.com> PR C/43211 * gcc.dg/pr43211.c: New test. * gcc.dg/pr18809-1.c: Don't expect an error when calling foo. From-SVN: r157585
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/c-decl.c2
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/pr18809-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr43211.c15
5 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index abf7e3f..8684997 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2010-03-19 Andrew Pinski <andrew_pinski@caviumnetworks.com>
+
+ PR C/43211
+ * c-decl.c (grokparms): Set arg_types to NULL_TREE if there was an error.
+
2010-03-19 Bernd Schmidt <bernd.schmidt@codesourcery.com>
PR rtl-optimization/42258
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 87fb19a..fed04dc 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -6118,6 +6118,7 @@ grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
TREE_VALUE (typelt) = error_mark_node;
TREE_TYPE (parm) = error_mark_node;
+ arg_types = NULL_TREE;
}
else if (VOID_TYPE_P (type))
{
@@ -6138,6 +6139,7 @@ grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
error (errmsg);
TREE_VALUE (typelt) = error_mark_node;
TREE_TYPE (parm) = error_mark_node;
+ arg_types = NULL_TREE;
}
if (DECL_NAME (parm) && TREE_USED (parm))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4701169..8e5ca1f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2010-03-19 Andrew Pinski <andrew_pinski@caviumnetworks.com>
+
+ PR C/43211
+ * gcc.dg/pr43211.c: New test.
+ * gcc.dg/pr18809-1.c: Don't expect an error when calling foo.
+
2010-03-19 Bernd Schmidt <bernd.schmidt@codesourcery.com>
PR rtl-optimization/42258
diff --git a/gcc/testsuite/gcc.dg/pr18809-1.c b/gcc/testsuite/gcc.dg/pr18809-1.c
index 27f2be9..3b6e8cc 100644
--- a/gcc/testsuite/gcc.dg/pr18809-1.c
+++ b/gcc/testsuite/gcc.dg/pr18809-1.c
@@ -7,4 +7,4 @@ void foo(enum E e) {} /* { dg-error "forward ref" "forward" } */
/* { dg-warning "declared" "declared" { target *-*-* } 6 } */
/* { dg-warning "scope" "scope" { target *-*-* } 6 } */
/* { dg-error "incomplete" "incomplete" { target *-*-* } 6 } */
-void bar() { foo(0); } /* { dg-error "formal" } */
+void bar() { foo(0); }
diff --git a/gcc/testsuite/gcc.dg/pr43211.c b/gcc/testsuite/gcc.dg/pr43211.c
new file mode 100644
index 0000000..1549619
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr43211.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+
+struct T;
+
+struct S {
+ void (*bar)(struct S);
+};
+
+void bar(struct T t) {} /* { dg-error "" } */
+
+void foo(struct S *s)
+{
+ s->bar = bar;
+}
+