(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
strlenopt-33g.c
       1  /* { dg-do run { target *-*-linux* *-*-gnu* *-*-uclinux* } } */
       2  /* { dg-options "-O2 -fdump-tree-strlen" } */
       3  
       4  #define USE_GNU
       5  #include "strlenopt.h"
       6  
       7  volatile int v;
       8  
       9  size_t __attribute__ ((noinline, noclone))
      10  f1 (char *b)
      11  {
      12    char a[30];
      13    v += 1;
      14    // Should be converted to stpcpy.
      15    strcpy (a, b);
      16    int len1 = strlen (a);
      17    a[0] = '_';
      18    a[1] = 0;
      19    return len1 + strlen (a);
      20  }
      21  
      22  size_t __attribute__ ((noinline, noclone))
      23  f2 (char *a, char *b)
      24  {
      25    v += 2;
      26    // Should be converted to stpcpy.
      27    strcpy (a, b);
      28    int len1 = strlen (a);
      29    a[0] = '_';
      30    a[1] = 0;
      31    return len1 + strlen (a);
      32  }
      33  
      34  int
      35  main ()
      36  {
      37    char a[30];
      38    if (f1 ("foo") != 4 || f2 (a, "foobar") != 7)
      39      abort ();
      40    return 0;
      41  }
      42  
      43  /* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen1" } } */
      44  /* { dg-final { scan-tree-dump-times "stpcpy \\(" 2 "strlen1" } } */