diff options
author | Volker Reichelt <reichelt@igpm.rwth-aachen.de> | 2006-08-05 23:41:22 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2006-08-05 23:41:22 +0000 |
commit | ffc44ab6831b7834cc88993c3fec7e9563747184 (patch) | |
tree | fbc37391729f934dcc29d7e70e54e555edccd9ef | |
parent | c0bcacec2d602672e56efcd6575a629dd22a41d1 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/c-decl.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/proto-1.c | 5 |
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" } */ |