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
This commit is contained in:
parent
2347da644d
commit
558d1f815d
@ -1,3 +1,10 @@
|
||||
2004-07-31 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||
|
||||
* 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.
|
||||
|
||||
2004-07-30 Geoffrey Keating <geoffk@apple.com>
|
||||
Fariborz Jahanian <fjahanian@apple.com>
|
||||
|
||||
|
16
gcc/c-decl.c
16
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);
|
||||
|
@ -1,3 +1,7 @@
|
||||
2004-07-31 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||
|
||||
* gcc.dg/redecl-2.c: New test.
|
||||
|
||||
2004-07-30 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* gcc.dg/darwin-longdouble.c: New file.
|
||||
|
68
gcc/testsuite/gcc.dg/redecl-2.c
Normal file
68
gcc/testsuite/gcc.dg/redecl-2.c
Normal file
@ -0,0 +1,68 @@
|
||||
/* Test for multiple declarations of an identifier at same block
|
||||
scope: only valid case is all extern. */
|
||||
/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "" } */
|
||||
|
||||
void
|
||||
fa0 (void)
|
||||
{
|
||||
int a0; /* { dg-error "previous declaration" } */
|
||||
int a0; /* { dg-error "redeclaration" } */
|
||||
}
|
||||
|
||||
void
|
||||
fa1 (void)
|
||||
{
|
||||
int a1; /* { dg-error "previous declaration" } */
|
||||
static int a1; /* { dg-error "redeclaration" } */
|
||||
}
|
||||
|
||||
void
|
||||
fa2 (void)
|
||||
{
|
||||
int a2; /* { dg-error "previous declaration" } */
|
||||
extern int a2; /* { dg-error "follows declaration with no linkage" } */
|
||||
}
|
||||
|
||||
void
|
||||
fa3 (void)
|
||||
{
|
||||
static int a3; /* { dg-error "previous declaration" } */
|
||||
int a3; /* { dg-error "redeclaration" } */
|
||||
}
|
||||
|
||||
void
|
||||
fa4 (void)
|
||||
{
|
||||
static int a4; /* { dg-error "previous declaration" } */
|
||||
static int a4; /* { dg-error "redeclaration" } */
|
||||
}
|
||||
|
||||
void
|
||||
fa5 (void)
|
||||
{
|
||||
static int a5; /* { dg-error "previous declaration" } */
|
||||
extern int a5; /* { dg-error "follows declaration with no linkage" } */
|
||||
}
|
||||
|
||||
void
|
||||
fa6 (void)
|
||||
{
|
||||
extern int a6; /* { dg-error "previous declaration" } */
|
||||
int a6; /* { dg-error "follows extern declaration" } */
|
||||
}
|
||||
|
||||
void
|
||||
fa7 (void)
|
||||
{
|
||||
extern int a7; /* { dg-error "previous declaration" } */
|
||||
static int a7; /* { dg-error "follows extern declaration" } */
|
||||
}
|
||||
|
||||
void
|
||||
fa8 (void)
|
||||
{
|
||||
extern int a8;
|
||||
extern int a8;
|
||||
}
|
Loading…
Reference in New Issue
Block a user