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

            Bug ID: 68374
           Summary: G++ -Wshadow doesn't warn about static member
                    shadowing
           Product: gcc
           Version: 5.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: xyzdragon at fastmail dot fm
  Target Milestone: ---

This bug seems to be related to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=45615 but the code example is a
bit different, so I'm not sure. Delete this if necessary.

This is the source code in question:

class f {
    static int mVar;
    int g(int x) { int mVar=3; return x+mVar; }
};
int f::mVar = 1;

The problem is, that I accidentally added int in front of mVar. When I compile
this with:
  g++ -c -Wall -Wextra -Wshadow shadowtest.cpp
I don't get any warning, about the local mVar shadowing the static member mVar.

But if I don't declare the member variable to be static, then g++ correctly
issues a warning:

class f {
    int mVar;
    f(int rVar) : mVar(rVar) {};
    int g(int x) { int mVar=3; return x+mVar; }
};

compile with g++ -c -Wall -Wextra -Wshadow shadowtest2.cpp gets:

shadowtest2.cpp:5:24: warning: declaration of ‘mVar’ shadows a member of ‘f’
[-Wshadow]
     int g(int x) { int mVar=3; return x+mVar; }
                        ^
shadowtest2.cpp:3:9: note: shadowed declaration is here
     int mVar;
         ^

Note, as pointed out by other stack users
http://stackoverflow.com/questions/33739066/ and also tested myself clang++
behaves like I would have expected g++ to behave, that's why I'm filing this as
a bug.

The above behavior is the same in g++ 4.9.2 and g++ 5.2.1-17

Reply via email to