(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Warray-bounds-91.c
       1  /* PR middle-end/103215 - bogus -Warray-bounds with two pointers with
       2     different offsets each
       3     Test for accesses into the same array through pointers with different
       4     offsets each.
       5     { dg-do compile }
       6     { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
       7  
       8  #define NOIPA __attribute__ ((noipa))
       9  
      10  #define A(p, off) ((p)[off] = __COUNTER__)
      11  
      12  extern int a4[4];
      13  
      14  
      15  NOIPA void p0_p1 (int i)
      16  {
      17    int *p0 = a4 + 0;
      18    int *p1 = a4 + 1;
      19    int *q = i ? p0 : p1;
      20    A (q, -2);      // { dg-warning "-Warray-bounds" }
      21    A (q, -1); A (q, 0); A (q, 1); A (q, 2);
      22    /* Since q points to a4 and -1 is a valid subscript, +3 must be invalid.
      23       But the warning for each subscript is independent of prior subscripts
      24       into the same object.  That should be improved.  */
      25    A (q, 3);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      26    A (q, 4);       // { dg-warning "-Warray-bounds" }
      27  }
      28  
      29  NOIPA void p1_p0 (int i)
      30  {
      31    int *p1 = a4 + 1;
      32    int *p0 = a4 + 0;
      33    int *q = i ? p0 : p1;
      34    A (q, -2);      // { dg-warning "-Warray-bounds" }
      35    A (q, -1); A (q, 0); A (q, 1); A (q, 2);
      36    A (q, 3);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      37    A (q, 4);       // { dg-warning "-Warray-bounds" }
      38  }
      39  
      40  
      41  NOIPA void p1_p2 (int i)
      42  {
      43    int *p1 = a4 + 1;
      44    int *p2 = a4 + 2;
      45    int *q = i ? p1 : p2;
      46    A (q, -3);      // { dg-warning "-Warray-bounds" }
      47    A (q, -2); A (q, -1); A (q, 0); A (q, 1);
      48    A (q, 2);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      49    A (q, 3);       // { dg-warning "-Warray-bounds" }
      50  }
      51  
      52  NOIPA void p2_p1 (int i)
      53  {
      54    int *p2 = a4 + 2;
      55    int *p1 = a4 + 1;
      56    int *q = i ? p1 : p2;
      57    A (q, -3);      // { dg-warning "-Warray-bounds" }
      58    A (q, -2); A (q, -1); A (q, 0); A (q, 1);
      59    A (q, 2);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      60    A (q, 3);       // { dg-warning "-Warray-bounds" }
      61  }
      62  
      63  
      64  NOIPA void p1_p3 (int i)
      65  {
      66    int *p1 = a4 + 1;
      67    int *p3 = a4 + 3;
      68    int *q = i ? p1 : p3;
      69    A (q, -4);      // { dg-warning "-Warray-bounds" }
      70    A (q, -3); A (q, -2); A (q, -1); A (q, 0);
      71    A (q, 1);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      72    A (q, 2);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      73    A (q, 3);       // { dg-warning "-Warray-bounds" }
      74  }
      75  
      76  NOIPA void p3_p1 (int i)
      77  {
      78    int *p3 = a4 + 3;
      79    int *p1 = a4 + 1;
      80    int *q = i ? p1 : p3;
      81    A (q, -4);      // { dg-warning "-Warray-bounds" }
      82    A (q, -3); A (q, -2); A (q, -1); A (q, 0);
      83    A (q, 1);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      84    A (q, 2);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      85    A (q, 3);       // { dg-warning "-Warray-bounds" }
      86  }
      87  
      88  
      89  NOIPA void p1_p4 (int i)
      90  {
      91    int *p1 = a4 + 1;
      92    int *p4 = a4 + 4;
      93    int *q = i ? p1 : p4;
      94    A (q, -5);      // { dg-warning "-Warray-bounds" }
      95    A (q, -4); A (q, -3); A (q, -2); A (q, -1);
      96    A (q, 0);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      97    A (q, 1);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      98    A (q, 2);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
      99    A (q, 3);       // { dg-warning "-Warray-bounds" }
     100  }
     101  
     102  NOIPA void p4_p1 (int i)
     103  {
     104    int *p4 = a4 + 4;
     105    int *p1 = a4 + 1;
     106    int *q = i ? p1 : p4;
     107    A (q, -5);      // { dg-warning "-Warray-bounds" }
     108    A (q, -4); A (q, -3); A (q, -2); A (q, -1);
     109    A (q, 0);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
     110    A (q, 1);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
     111    A (q, 2);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
     112    A (q, 3);       // { dg-warning "-Warray-bounds" }
     113  }
     114  
     115  
     116  NOIPA void p0_p1_p2 (int i)
     117  {
     118    int *p0 = a4 + 0;
     119    int *p1 = a4 + 1;
     120    int *p2 = a4 + 2;
     121    int *q = i < 0 ? p1 : 0 < i ? p2 : p0;
     122    A (q, -3);      // { dg-warning "-Warray-bounds" }
     123    A (q, -2); A (q, -1); A (q, 0); A (q, 1);
     124    A (q, 2);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
     125    A (q, 3);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
     126    A (q, 4);       // { dg-warning "-Warray-bounds" }
     127  }
     128  
     129  
     130  NOIPA void p0_p1_p2_p3_p4 (int i)
     131  {
     132    int *p0 = a4 + 0;
     133    int *p1 = a4 + 1;
     134    int *p2 = a4 + 2;
     135    int *p3 = a4 + 3;
     136    int *p4 = a4 + 4;
     137    int *q = i < -1 ? p1 : i < 0 ? p2 : 1 < i ? p4 : 0 < i ? p3 : p0;
     138    A (q, -5);      // { dg-warning "-Warray-bounds" }
     139    A (q, -4); A (q, -3); A (q, -2); A (q, -1);
     140    A (q, 0);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
     141    A (q, 1);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
     142    A (q, 2);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
     143    A (q, 3);       // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
     144    A (q, 4);       // { dg-warning "-Warray-bounds" }
     145  }