diff options
author | Joseph Myers <jsm@polyomino.org.uk> | 2004-07-31 18:21:27 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2004-07-31 18:21:27 +0100 |
commit | 558d1f815dbe96208954efba3bab256bbe7f106e (patch) | |
tree | 37c2094176ebe279ec60f8c89c341f5502370a4b /gcc/c-decl.c | |
parent | 2347da644d23390399cc060fe3f2358314efc1b6 (diff) | |
download | gcc-558d1f815dbe96208954efba3bab256bbe7f106e.zip gcc-558d1f815dbe96208954efba3bab256bbe7f106e.tar.gz gcc-558d1f815dbe96208954efba3bab256bbe7f106e.tar.bz2 |
c-decl.c (diagnose_mismatched_decls): Give error for external redeclaration of identifier declared with no linkage...
* c-decl.c (diagnose_mismatched_decls): Give error for external
redeclaration of identifier declared with no linkage, not just
warning with -Wtraditional. Do not check DECL_CONTEXT to give
error for redeclaration with no linkage.
testsuite:
* gcc.dg/redecl-2.c: New test.
From-SVN: r85386
Diffstat (limited to 'gcc/c-decl.c')
-rw-r--r-- | gcc/c-decl.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index b14d331..27860b4 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -1325,7 +1325,14 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl, { if (DECL_EXTERNAL (newdecl)) { - if (warn_traditional) + if (!DECL_FILE_SCOPE_P (olddecl)) + { + error ("%Jextern declaration of %qD follows " + "declaration with no linkage", newdecl, newdecl); + locate_old_decl (olddecl, error); + return false; + } + else if (warn_traditional) { warning ("%Jnon-static declaration of '%D' follows " "static declaration", newdecl, newdecl); @@ -1347,13 +1354,10 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl, } /* Two objects with the same name declared at the same block scope must both be external references (6.7p3). */ - else if (!DECL_FILE_SCOPE_P (newdecl) - && DECL_CONTEXT (newdecl) == DECL_CONTEXT (olddecl) - && (!DECL_EXTERNAL (newdecl) || !DECL_EXTERNAL (olddecl))) + else if (!DECL_FILE_SCOPE_P (newdecl)) { if (DECL_EXTERNAL (newdecl)) - error ("%Jextern declaration of '%D' follows " - "declaration with no linkage", newdecl, newdecl); + abort (); else if (DECL_EXTERNAL (olddecl)) error ("%Jdeclaration of '%D' with no linkage follows " "extern declaration", newdecl, newdecl); |