(pushdecl): When have a duplicate decl, and it is global,
delete lookup_name name in test for return. (redeclaration_error_message): When newdecl is a block level declaration, use lookup_name_current_level instead of DECL_CONTEXT. From-SVN: r9072
This commit is contained in:
parent
9791111f79
commit
4d53757da9
12
gcc/c-decl.c
12
gcc/c-decl.c
@ -1939,11 +1939,11 @@ pushdecl (x)
|
||||
IDENTIFIER_POINTER (name));
|
||||
}
|
||||
|
||||
/* If this is a global decl, and there exists a conflicting local
|
||||
decl in a parent block, then we can't return as yet, because we
|
||||
need to register this decl in the current binding block. */
|
||||
if (! DECL_EXTERNAL (x) || ! TREE_PUBLIC (x)
|
||||
|| lookup_name (name) == t)
|
||||
/* If this is a global decl, then we can't return as yet, because we
|
||||
need to register this decl in the current binding block. This
|
||||
ensures that we get an error message if it is redeclared as a
|
||||
local variable later in the same block. */
|
||||
if (! DECL_EXTERNAL (x) || ! TREE_PUBLIC (x))
|
||||
return t;
|
||||
}
|
||||
|
||||
@ -2422,7 +2422,7 @@ redeclaration_error_message (newdecl, olddecl)
|
||||
external reference. Otherwise, it is OK, because newdecl must
|
||||
be an extern reference to olddecl. */
|
||||
if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl))
|
||||
&& DECL_CONTEXT (newdecl) == DECL_CONTEXT (olddecl))
|
||||
&& lookup_name_current_level (DECL_NAME (newdecl)) == olddecl)
|
||||
return "redeclaration of `%s'";
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user