mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-19 15:49:54 +08:00
c-decl.c (pushdecl): Move block inside if conditional to remove possibility of a segfault.
* c-decl.c (pushdecl): Move block inside if conditional to remove possibility of a segfault. Lookup block-level extern variables in enclosing scopes correctly. * testsuite/gcc.c-torture/compile/20001018-1.x: Remove XFAIL. From-SVN: r46726
This commit is contained in:
parent
1b5e9d7e1b
commit
234f46aead
@ -1,3 +1,11 @@
|
||||
2001-11-02 Neil Booth <neil@daikokuya.demon.co.uk>
|
||||
|
||||
* c-decl.c (pushdecl): Move block inside if conditional to remove
|
||||
possibility of a segfault. Lookup block-level extern
|
||||
variables in enclosing scopes correctly.
|
||||
|
||||
* testsuite/gcc.c-torture/compile/20001018-1.x: Remove XFAIL.
|
||||
|
||||
2001-11-02 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* expmed.c (store_bit_field): Use simplify_gen_subreg to make
|
||||
|
17
gcc/c-decl.c
17
gcc/c-decl.c
@ -2115,25 +2115,28 @@ pushdecl (x)
|
||||
&& DECL_INITIAL (x) == 0 && DECL_EXTERNAL (x))
|
||||
DECL_CONTEXT (x) = 0;
|
||||
|
||||
if (warn_nested_externs && DECL_EXTERNAL (x) && b != global_binding_level
|
||||
&& x != IDENTIFIER_IMPLICIT_DECL (name)
|
||||
/* Don't print error messages for __FUNCTION__ and __PRETTY_FUNCTION__ */
|
||||
&& !DECL_IN_SYSTEM_HEADER (x))
|
||||
warning ("nested extern declaration of `%s'", IDENTIFIER_POINTER (name));
|
||||
|
||||
if (name)
|
||||
{
|
||||
const char *file;
|
||||
int line;
|
||||
int different_binding_level = 0;
|
||||
|
||||
if (warn_nested_externs
|
||||
&& DECL_EXTERNAL (x)
|
||||
&& b != global_binding_level
|
||||
&& x != IDENTIFIER_IMPLICIT_DECL (name)
|
||||
/* No error messages for __FUNCTION__ and __PRETTY_FUNCTION__. */
|
||||
&& !DECL_IN_SYSTEM_HEADER (x))
|
||||
warning ("nested extern declaration of `%s'",
|
||||
IDENTIFIER_POINTER (name));
|
||||
|
||||
t = lookup_name_current_level (name);
|
||||
/* Don't type check externs here when -traditional. This is so that
|
||||
code with conflicting declarations inside blocks will get warnings
|
||||
not errors. X11 for instance depends on this. */
|
||||
if (! t && DECL_EXTERNAL (x) && TREE_PUBLIC (x) && ! flag_traditional)
|
||||
{
|
||||
t = IDENTIFIER_GLOBAL_VALUE (name);
|
||||
t = lookup_name (name);
|
||||
/* Type decls at global scope don't conflict with externs declared
|
||||
inside lexical blocks. */
|
||||
if (t && TREE_CODE (t) == TYPE_DECL)
|
||||
|
@ -1,2 +0,0 @@
|
||||
set torture_compile_xfail "*-*-*"
|
||||
return 0
|
Loading…
Reference in New Issue
Block a user