(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
strlenopt-67.c
       1  /* PR tree-optimization/90989 - incorrrect strlen result after second strcpy
       2     into the same destination.
       3     { dg-do compile }
       4     { dg-options "-O2 -Wall -fdump-tree-optimized" } */
       5  
       6  // #include "strlenopt.h"
       7  
       8  char a[4];
       9  
      10  int f4 (void)
      11  {
      12    char b[4];
      13    __builtin_strcpy (b, "12");
      14  
      15    int i = __builtin_strcmp (a, b);
      16  
      17    __builtin_strcpy (b, "123");
      18    if (__builtin_strlen (b) != 3)
      19      __builtin_abort ();
      20  
      21    return i;
      22  }
      23  
      24  int f6 (void)
      25  {
      26    char b[6];
      27    __builtin_strcpy (b, "1234");
      28  
      29    int i = __builtin_strcmp (a, b);
      30  
      31    __builtin_strcpy (b, "12345");
      32    if (__builtin_strlen (b) != 5)
      33      __builtin_abort ();
      34  
      35    return i;
      36  }
      37  
      38  int f8 (void)
      39  {
      40    char b[8];
      41    __builtin_strcpy (b, "1234");
      42  
      43    int i = __builtin_strcmp (a, b);
      44  
      45    __builtin_strcpy (b, "1234567");
      46    if (__builtin_strlen (b) != 7)
      47      __builtin_abort ();
      48  
      49    return i;
      50  }
      51  
      52  /* { dg-final { scan-tree-dump-times "abort|strlen" 0 "optimized" } } */