(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Wstringop-truncation-2.c
       1  /* PR tree-optimization/84468 - bogus -Wstringop-truncation despite
       2     assignment after conditional strncpy
       3     { dg-do compile }
       4     { dg-options "-O2 -Wstringop-truncation -g" } */
       5  
       6  extern char* strncpy (char*, const char*, __SIZE_TYPE__);
       7  
       8  char a[4];
       9  
      10  void f1 (char *s)
      11  {
      12    int i = 0;
      13  
      14    if (s[0] == '0')
      15      {
      16        i += 1;
      17        strncpy (a, s, sizeof a);                   /* { dg-bogus "\\\[-Wstringop-truncation]" } */
      18      }
      19    else
      20      i += 2;
      21  
      22    a[sizeof a - 1] = 0;
      23  }
      24  
      25  void f2 (char *s)
      26  {
      27    int i = 0;
      28  
      29    if (s[0] == '0')
      30      {
      31        i += 1;
      32        if (s[1] == '1')
      33  	{
      34  	  i += 2;
      35  	  strncpy (a, s, sizeof a);               /* { dg-bogus "\\\[-Wstringop-truncation]" } */
      36  	}
      37        else
      38  	i += 3;
      39      }
      40    else
      41      i += 4;
      42  
      43    a[sizeof a - 1] = 0;
      44  }
      45  
      46  void f3 (char *s)
      47  {
      48    int i = 0;
      49  
      50    if (s[0] == '0')
      51      {
      52        i += 1;
      53        if (s[1] == '1')
      54  	{
      55  	  i += 2;
      56  	  if (s[2] == '2')
      57  	    strncpy (a, s, sizeof a);             /* { dg-bogus "\\\[-Wstringop-truncation]" } */
      58  	  else
      59  	    i += 3;
      60  	}
      61        else
      62  	i += 4;
      63      }
      64    else
      65      i += 5;
      66  
      67    a[sizeof a - 1] = 0;
      68  }
      69  
      70  void f4 (char *s)
      71  {
      72    int i = 0;
      73  
      74    if (s[0] == '0')
      75      {
      76        i += 1;
      77        if (s[1] == '1')
      78  	{
      79  	  i += 2;
      80  	  if (s[2] == '2')
      81  	    {
      82  	      i += 3;
      83  	      if (s[3] == '3')
      84  		strncpy (a, s, sizeof a);         /* { dg-bogus "\\\[-Wstringop-truncation]" } */
      85  	      else
      86  		i += 4;
      87  	    }
      88  	  else
      89  	    i += 5;
      90  	}
      91        else
      92  	i += 6;
      93      }
      94    else
      95      i += 7;
      96  
      97    a[sizeof a - 1] = 0;
      98  }
      99  
     100  void f4_warn (char *s)
     101  {
     102    int i = 0;
     103  
     104    if (s[0] == '0')
     105      {
     106        i += 1;
     107        if (s[1] == '1')
     108  	{
     109  	  i += 2;
     110  	  if (s[2] == '2')
     111  	    {
     112  	      i += 3;
     113  	      if (s[3] == '3')
     114  		strncpy (a, s, sizeof a);         /* { dg-warning "\\\[-Wstringop-truncation]" } */
     115  	      else
     116  		i += 4;
     117  	    }
     118  	  else
     119  	    i += 5;
     120  	}
     121        else
     122  	i += 6;
     123      }
     124    else
     125      i += 7;
     126  }