Commit d8dd2f3a by Jakub Jelinek Committed by Jakub Jelinek

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
parent 7d921ba4
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> 2005-01-27 Richard Henderson <rth@redhat.com>
PR tree-opt/14329 PR tree-opt/14329
......
...@@ -1850,7 +1850,13 @@ warn_if_shadowing (tree new_decl) ...@@ -1850,7 +1850,13 @@ warn_if_shadowing (tree new_decl)
{ {
tree old_decl = b->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", warning ("%Jdeclaration of %qD shadows a parameter",
new_decl, new_decl); new_decl, new_decl);
else if (DECL_FILE_SCOPE_P (old_decl)) else if (DECL_FILE_SCOPE_P (old_decl))
...@@ -1858,15 +1864,16 @@ warn_if_shadowing (tree new_decl) ...@@ -1858,15 +1864,16 @@ warn_if_shadowing (tree new_decl)
new_decl, new_decl); new_decl, new_decl);
else if (TREE_CODE (old_decl) == FUNCTION_DECL else if (TREE_CODE (old_decl) == FUNCTION_DECL
&& DECL_BUILT_IN (old_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 else
warning ("%Jdeclaration of %qD shadows a previous local", warning ("%Jdeclaration of %qD shadows a previous local",
new_decl, new_decl); new_decl, new_decl);
if (TREE_CODE (old_decl) != FUNCTION_DECL warning ("%Jshadowed declaration is here", old_decl);
|| !DECL_BUILT_IN (old_decl))
warning ("%Jshadowed declaration is here", old_decl);
break; break;
} }
...@@ -2032,7 +2039,7 @@ pushdecl (tree x) ...@@ -2032,7 +2039,7 @@ pushdecl (tree x)
its type saved; the others will already have had their its type saved; the others will already have had their
proper types saved and the types will not have changed as proper types saved and the types will not have changed as
their scopes will not have been re-entered. */ 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); b->type = TREE_TYPE (b->decl);
type_saved = true; type_saved = true;
...@@ -2206,6 +2213,9 @@ implicitly_declare (tree functionid) ...@@ -2206,6 +2213,9 @@ implicitly_declare (tree functionid)
if (decl) if (decl)
{ {
if (decl == error_mark_node)
return decl;
/* FIXME: Objective-C has weird not-really-builtin functions /* FIXME: Objective-C has weird not-really-builtin functions
which are supposed to be visible automatically. They wind up which are supposed to be visible automatically. They wind up
in the external scope because they're pushed before the file in the external scope because they're pushed before the file
......
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> 2005-01-26 Diego Novillo <dnovillo@redhat.com>
PR tree-optimization/19633 PR tree-optimization/19633
......
/* 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" } */
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment