Index: gcc/testsuite/gcc.dg/pr27953.c =================================================================== --- gcc/testsuite/gcc.dg/pr27953.c (revision 0) +++ gcc/testsuite/gcc.dg/pr27953.c (revision 0) @@ -0,0 +1,4 @@ +/* PR c/27953 */ + +void foo(struct A a) {} /* { dg-error "parameter list|definition|incomplete type" } */ +void foo() {} /* { dg-error "redefinition" } Index: gcc/c-decl.c =================================================================== --- gcc/c-decl.c (revision 116257) +++ gcc/c-decl.c (working copy) @@ -6384,8 +6384,8 @@ store_parm_decls_oldstyle (tree fndecl, tree type; for (parm = DECL_ARGUMENTS (fndecl), type = current_function_prototype_arg_types; - parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) - != void_type_node)); + parm || (type && TREE_VALUE (type) != error_mark_node + && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node)); parm = TREE_CHAIN (parm), type = TREE_CHAIN (type)) { if (parm == 0 || type == 0