(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Warray-bounds-43.c
       1  /* Test to verify that --param ssa_name_def_chain_limit can be used to
       2     limit the maximum number of SSA_NAME assignments the warning follows.
       3     { dg-do compile }
       4     { dg-options "-O2 -Wall --param ssa-name-def-chain-limit=4" }  */
       5  
       6  #define NOIPA __attribute__ ((noipa))
       7  
       8  const char a9[] = "123456789";
       9  
      10  void sink (const char*, ...);
      11  
      12  NOIPA int g2 (int i)
      13  {
      14    if (i < 1) i = 1;
      15  
      16    const char *p0 = a9;
      17    const char *p1 = p0 + i;
      18    const char *p2 = p1 + i;
      19  
      20    sink (p0, p1, p2);
      21  
      22    return p2[8];     // { dg-warning "\\\[-Warray-bounds" }
      23  }
      24  
      25  NOIPA int g3 (int i)
      26  {
      27    if (i < 1) i = 1;
      28  
      29    const char *p0 = a9;
      30    const char *p1 = p0 + i;
      31    const char *p2 = p1 + i;
      32    const char *p3 = p2 + i;
      33  
      34    sink (p0, p1, p2, p3);
      35  
      36    return p3[7];     // { dg-warning "\\\[-Warray-bounds" }
      37  }
      38  
      39  NOIPA int g4 (int i)
      40  {
      41    if (i < 1) i = 1;
      42  
      43    const char *p0 = a9;
      44    const char *p1 = p0 + i;
      45    const char *p2 = p1 + i;
      46    const char *p3 = p2 + i;
      47    const char *p4 = p3 + i;
      48  
      49    sink (p0, p1, p2, p3, p4);
      50  
      51    return p4[6];     // { dg-warning "\\\[-Warray-bounds" }
      52  }
      53  
      54  NOIPA int g5 (int i)
      55  {
      56    if (i < 1) i = 1;
      57  
      58    const char *p0 = a9;
      59    const char *p1 = p0 + i;
      60    const char *p2 = p1 + i;
      61    const char *p3 = p2 + i;
      62    const char *p4 = p3 + i;
      63    const char *p5 = p4 + i;
      64  
      65    sink (p0, p1, p2, p3, p4, p5);
      66  
      67    return p5[5];
      68  }
      69  
      70  NOIPA int g6 (int i)
      71  {
      72    if (i < 1) i = 1;
      73  
      74    const char *p0 = a9;
      75    const char *p1 = p0 + i;
      76    const char *p2 = p1 + i;
      77    const char *p3 = p2 + i;
      78    const char *p4 = p3 + i;
      79    const char *p5 = p4 + i;
      80    const char *p6 = p5 + i;
      81  
      82    sink (p0, p1, p2, p3, p4, p5, p6);
      83  
      84    return p6[4];
      85  }
      86  
      87  NOIPA int g7 (int i)
      88  {
      89    if (i < 1) i = 1;
      90  
      91    const char *p0 = a9;
      92    const char *p1 = p0 + i;
      93    const char *p2 = p1 + i;
      94    const char *p3 = p2 + i;
      95    const char *p4 = p3 + i;
      96    const char *p5 = p4 + i;
      97    const char *p6 = p5 + i;
      98    const char *p7 = p6 + i;
      99  
     100    sink (p0, p1, p2, p3, p4, p5, p6, p7);
     101  
     102    return p7[3];
     103  }
     104  
     105  NOIPA int g8 (int i)
     106  {
     107    if (i < 1) i = 1;
     108  
     109    const char *p0 = a9;
     110    const char *p1 = p0 + i;
     111    const char *p2 = p1 + i;
     112    const char *p3 = p2 + i;
     113    const char *p4 = p3 + i;
     114    const char *p5 = p4 + i;
     115    const char *p6 = p5 + i;
     116    const char *p7 = p6 + i;
     117    const char *p8 = p7 + i;
     118  
     119    sink (p0, p1, p2, p3, p4, p5, p6, p7, p8);
     120  
     121    return p8[2];
     122  }