https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103104

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-12-16
                 CC|                            |msebor at gcc dot gnu.org
             Status|UNCONFIRMED                 |NEW
             Blocks|87403                       |
     Ever confirmed|0                           |1
           Severity|normal                      |enhancement

--- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> ---
Based on the rather loose(*) description of -Wredundant-decls in the manual:

  Warn if anything is declared more than once in the same scope, even in cases
where multiple declaration is valid and changes nothing. 

I'd expect the warning to trigger but it doesn't, most likely because it only
triggers for the second and subsequent declaration that's not a definition.  It
seems that this can be viewed as a request to enhance -Wredundant-decls to do
what's already documented to do.

Here's a test case:

$ cat a.c && gcc -O2 -S -Wall -Wextra -Wredundant-decls a.c
static void f (void);
static void f (void);      // -Wredundant-decl
static void f (void) { }

static void g (void);      // no warning
static void g (void) { }

void h (void)
{
  f ();
  g ();
}

a.c:2:13: warning: redundant redeclaration of ‘f’ [-Wredundant-decls]
    2 | static void f (void);      // -Wredundant-decl
      |             ^
a.c:1:13: note: previous declaration of ‘f’ with type ‘void(void)’
    1 | static void f (void);
      |             ^

I say "loose" above because it suggests that the following should also be
diagnosed but aren't:

enum E;
enum E;      // missing -Wredundant-decl

struct S;
struct S;    // missing -Wredundant-decl


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87403
[Bug 87403] [Meta-bug] Issues that suggest a new warning

Reply via email to