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

            Bug ID: 102697
           Summary: [Diagnostics] overflow warning missing after O2
                    vectorization.
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: crazylht at gmail dot com
                CC: msebor at gcc dot gnu.org
  Target Milestone: ---
              Host: x86_64-pc-linux-gnu

testcase is from Wstringop-overflow-76.c

It looks to me the testcase is not well written since variable i here could be
negative value, and d[6] may not overflow.

#define MAX(p, q) ((p) > (q) ? (p) : (q))
struct B4_B6
{
  char b4[4];
  char b6[6];       // { dg-message "at offset 6 into destination object 'b6'
of size 6" "note" }
};

void max_B6_B4 (int i, struct B4_B6 *pb4_b6)
{
char *p = pb4_b6->b6 + i;
char *q = pb4_b6->b4 + i;
  char *d = MAX (p, q);

  d[3] = 0;
  d[4] = 0;
  d[5] = 0;
  d[6] = 0;         // { dg-warning "writing 1 byte into a region of size 0 " }
}

Reply via email to