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

            Bug ID: 99272
           Summary: False positive -Wredundant-tags warning when reusing a
                    name
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: headch at gmail dot com
  Target Milestone: ---

$ cat test.cpp
struct foo {
        int x;
};

struct bar {
        struct foo foo;
};

$ g++-10.2.0 -Wall -Wextra -Wredundant-tags -std=c++2a -c test.cpp
test.cpp:6:2: warning: redundant class-key ‘struct’ in reference to ‘struct
foo’ [-Wredundant-tags]
    6 |  struct foo foo;
      |  ^~~~~~
      |  ------

But this is not redundant. Removing the word “struct” results in a compile
error:

$ g++-10.2.0 -Wall -Wextra -Wredundant-tags -std=c++2a -c test.cpp
test.cpp:6:6: error: declaration of ‘foo bar::foo’ changes meaning of ‘foo’
[-fpermissive]
    6 |  foo foo;
      |      ^~~
test.cpp:1:8: note: ‘foo’ declared here as ‘struct foo’
    1 | struct foo {
      |        ^~~

Therefore I think -Wredundant-tags should not generate a warning in this
situation (the tag is not redundant).

Reply via email to