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

            Bug ID: 94867
           Summary: New (since gcc 8) false positive with
                    -Wnull-dereference in very simple code
           Product: gcc
           Version: 9.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vz-gcc at zeitlins dot org
  Target Milestone: ---

Consider:

% cat -n gcc-null-deref.cpp
     1  #include <vector>
     2
     3  void test()
     4  {
     5      std::vector<int> p;
     6      p.push_back(1);
     7      std::vector<int> q(p.size());
     8      q[0] = p[0];
     9  }
% g++-9 -O2 -c gcc-null-deref.cpp -Wnull-dereference
gcc-null-deref.cpp: In function ‘void test()’:
gcc-null-deref.cpp:8:10: warning: potential null pointer dereference
[-Wnull-dereference]
    8 |     q[0] = p[0];


This is with gcc version 9.3.0 (Debian 9.3.0-11). It doesn't happen with g++-8
but does still happen with the latest version available in Debian which is gcc
version 10.0.1 20200418 (experimental) [master revision
27c171775ab:4c277008be0:c5bac7d127f288fd2f8a1f15c3f30da5903141c6] (Debian
10-20200418-1)

FWIW it looks like -Wnull-dereference really doesn't like push_back() for
whatever reason. Even initializing the vector with fixed size doesn't help to
make the warning go away -- however doing this _and_ removing push_back() does
help.

Reply via email to