aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>2006-08-05 23:41:22 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2006-08-05 23:41:22 +0000
commitffc44ab6831b7834cc88993c3fec7e9563747184 (patch)
treefbc37391729f934dcc29d7e70e54e555edccd9ef /gcc
parentc0bcacec2d602672e56efcd6575a629dd22a41d1 (diff)
downloadgcc-ffc44ab6831b7834cc88993c3fec7e9563747184.zip
gcc-ffc44ab6831b7834cc88993c3fec7e9563747184.tar.gz
gcc-ffc44ab6831b7834cc88993c3fec7e9563747184.tar.bz2
re PR c/28502 (ICE with invalid declaration after definition)
PR c/28502 * c-decl.c (validate_proto_after_old_defn): Return false on invalid argument. * gcc.dg/proto-1.c: New test. From-SVN: r115957
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/c-decl.c10
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/proto-1.c5
4 files changed, 20 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0cbdf6d..4ac1f1f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2006-08-05 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+ PR c/28502
+ * c-decl.c (validate_proto_after_old_defn): Return false on invalid
+ argument.
+
PR c/27721
* c-typeck.c (build_modify_expr): Test earlier for non-lvalues.
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index b900e8a..9a0e747 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -1083,8 +1083,14 @@ validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
for (;;)
{
- tree oldargtype = TYPE_MAIN_VARIANT (TREE_VALUE (oldargs));
- tree newargtype = TYPE_MAIN_VARIANT (TREE_VALUE (newargs));
+ tree oldargtype = TREE_VALUE (oldargs);
+ tree newargtype = TREE_VALUE (newargs);
+
+ if (oldargtype == error_mark_node || newargtype == error_mark_node)
+ return false;
+
+ oldargtype = TYPE_MAIN_VARIANT (oldargtype);
+ newargtype = TYPE_MAIN_VARIANT (newargtype);
if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
break;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 89f1d4a..0cdbbef 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2006-08-05 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+ PR c/28502
+ * gcc.dg/proto-1.c: New test.
+
PR c/27721
* gcc.dg/lvalue-4.c: New test.
diff --git a/gcc/testsuite/gcc.dg/proto-1.c b/gcc/testsuite/gcc.dg/proto-1.c
new file mode 100644
index 0000000..13c59a8a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/proto-1.c
@@ -0,0 +1,5 @@
+/* PR c/28502 */
+/* { dg-do compile } */
+
+void foo() {} /* { dg-error "previous" } */
+void foo(void[]); /* { dg-error "array of voids" } */