re PR c/18946 (ICE in pushdecl)

PR c/18946
	* c-decl.c (warn_if_shadowing): Handle old_decl error_mark_node.
	(pushdecl): Only use DECL_FILE_SCOPE_P if DECL_P.
	(implicitly_declare): Handle error_mark_node.

	* gcc.dg/noncompile/20050120-1.c: New test.

From-SVN: r94320
This commit is contained in:
Jakub Jelinek 2005-01-27 13:38:38 +01:00 committed by Jakub Jelinek
parent 7d921ba4c9
commit d8dd2f3a64
4 changed files with 48 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2005-01-27 Jakub Jelinek <jakub@redhat.com>
PR c/18946
* c-decl.c (warn_if_shadowing): Handle old_decl error_mark_node.
(pushdecl): Only use DECL_FILE_SCOPE_P if DECL_P.
(implicitly_declare): Handle error_mark_node.
2005-01-27 Richard Henderson <rth@redhat.com>
PR tree-opt/14329

View File

@ -1850,7 +1850,13 @@ warn_if_shadowing (tree new_decl)
{
tree old_decl = b->decl;
if (TREE_CODE (old_decl) == PARM_DECL)
if (old_decl == error_mark_node)
{
warning ("%Jdeclaration of %qD shadows previous non-variable",
new_decl, new_decl);
break;
}
else if (TREE_CODE (old_decl) == PARM_DECL)
warning ("%Jdeclaration of %qD shadows a parameter",
new_decl, new_decl);
else if (DECL_FILE_SCOPE_P (old_decl))
@ -1858,15 +1864,16 @@ warn_if_shadowing (tree new_decl)
new_decl, new_decl);
else if (TREE_CODE (old_decl) == FUNCTION_DECL
&& DECL_BUILT_IN (old_decl))
warning ("%Jdeclaration of %qD shadows a built-in function",
new_decl, new_decl);
{
warning ("%Jdeclaration of %qD shadows a built-in function",
new_decl, new_decl);
break;
}
else
warning ("%Jdeclaration of %qD shadows a previous local",
new_decl, new_decl);
if (TREE_CODE (old_decl) != FUNCTION_DECL
|| !DECL_BUILT_IN (old_decl))
warning ("%Jshadowed declaration is here", old_decl);
warning ("%Jshadowed declaration is here", old_decl);
break;
}
@ -2032,7 +2039,7 @@ pushdecl (tree x)
its type saved; the others will already have had their
proper types saved and the types will not have changed as
their scopes will not have been re-entered. */
if (DECL_FILE_SCOPE_P (b->decl) && !type_saved)
if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
{
b->type = TREE_TYPE (b->decl);
type_saved = true;
@ -2206,6 +2213,9 @@ implicitly_declare (tree functionid)
if (decl)
{
if (decl == error_mark_node)
return decl;
/* FIXME: Objective-C has weird not-really-builtin functions
which are supposed to be visible automatically. They wind up
in the external scope because they're pushed before the file

View File

@ -1,3 +1,8 @@
2005-01-27 Jakub Jelinek <jakub@redhat.com>
PR c/18946
* gcc.dg/noncompile/20050120-1.c: New test.
2005-01-26 Diego Novillo <dnovillo@redhat.com>
PR tree-optimization/19633

View File

@ -0,0 +1,19 @@
/* PR c/18946 */
/* { dg-do compile } */
/* { dg-options "-Wshadow" } */
void bar (void)
{
{
if (foo) /* { dg-error "undeclared|for each" } */
foo (); /* { dg-warning "shadows previous" } */
}
}
void baz (void)
{
if (foo) /* { dg-error "undeclared" } */
{
int foo; /* { dg-warning "shadows previous" } */
}
}