http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59377

            Bug ID: 59377
           Summary: VRP produces bogus warning with -Warray-bounds
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dnovillo at gcc dot gnu.org
              Host: x86_64-unknown-linux-gnu
            Target: x86_64-unknown-linux-gnu
             Build: x86_64-unknown-linux-gnu

Using trunk and 4.8.x, this code produces a bogus -Warray-bounds warning:

typedef decltype(sizeof(void*)) size_t;

size_t strlen(const char *);
int memcmp (const void *, const void *, size_t);

struct StringPiece
{
   const char *ptr_;
   size_t size_;
   StringPiece ();
   StringPiece (const char *p1):ptr_ (p1), size_(strlen(p1)) { }
   const char *data () { return ptr_; }
   size_t length() { return size_; }
};


void operator== (StringPiece, StringPiece p2)
{
   const char *a = p2.data (), *b = a;
   if (p2.length() > 8) {
     b += 8;
     memcmp (a, b, 1);
   }
}
void
UtilsSplitQuotedStrings ()
{
   StringPiece c;
   c == "";
}

$ trunk/bld/bin/g++ -std=c++11 -c -Warray-bounds -O2 a.cc
a.cc: In function ‘void UtilsSplitQuotedStrings()’:
a.cc:22:23: warning: array subscript is above array bounds [-Warray-bounds]
      memcmp (a, b, 1);
$                      ^

The warning disappears with -fno-tree-vrp:

$ trunk/bld/bin/g++ -std=c++11 -c -Warray-bounds -O2 a.cc -fno-tree-vrp
$

I've seen some similar looking bug reports, but none seemed related with VRP.

Reply via email to