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