[Bug tree-optimization/97410] New: missing -Warray-bounds with constant index from second array element

msebor at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Oct 13 20:51:04 GMT 2020


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

            Bug ID: 97410
           Summary: missing -Warray-bounds with constant index from second
                    array element
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

The out of bounds access in the function below isn't diagnosed even though the
dump shows GCC knows that q cannot point to the beginning of a (q_6: char *
[1B, +INF]).

$ cat xx.c && gcc -O2 -S -Wall -fdump-tree-vrp1=/dev/stdout xx.c
int f (int i)
{
  char a[4] = "", *p = a, *q = &a[i];

  if (p == q) return -1;

  return q[3];   // missing -Warray-bounds
}

;; Function f (f, funcdef_no=0, decl_uid=1931, cgraph_uid=1, symbol_order=0)

;; 1 loops found
;;
;; Loop 0
;;  header 0, latch 1
;;  depth 0, outer -1
;;  nodes: 0 1 2 3 4
;; 2 succs { 4 3 }
;; 3 succs { 4 }
;; 4 succs { 1 }

SSA replacement table
N_i -> { O_1 ... O_j } means that N_i replaces O_1, ..., O_j

q_9 -> { q_6 }
Incremental SSA update started at block: 2
Number of blocks in CFG: 5
Number of blocks to update: 2 ( 40%)



Value ranges after VRP:

_1: char VARYING
_2: int [-128, 127]
i_5(D): int VARYING
q_6: char * [1B, +INF]
_7: int [-128, 127]
q_9: char[4] * ~[&a, &a]  EQUIVALENCES: { q_6 } (1 elements)


f (int i)
{
  char * q;
  char a[4];
  char _1;
  int _2;
  int _7;

  <bb 2> [local count: 1073741824]:
  a = "";
  q_6 = &a[i_5(D)];
  if (&a == q_6)
    goto <bb 4>; [0.45%]
  else
    goto <bb 3>; [99.55%]

  <bb 3> [local count: 1068909985]:
  _1 = MEM[(char *)q_6 + 3B];
  _7 = (int) _1;

  <bb 4> [local count: 1073741824]:
  # _2 = PHI <-1(2), _7(3)>
  a ={v} {CLOBBER};
  return _2;

}


More information about the Gcc-bugs mailing list