(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
strlenopt-39.c
       1  /* PR tree-optimization/83444
       2     { dg-do compile { target i?86-*-* x86_64-*-* } }
       3     { dg-options "-O2 -fdump-tree-optimized" } */
       4  
       5  #include "strlenopt.h"
       6  
       7  #define STR "1234567"
       8  
       9  const char str[] = STR;
      10  
      11  char dst[10];
      12  
      13  void copy_from_global_str (void)
      14  {
      15    strcpy (dst, str);
      16  
      17    if (strlen (dst) != sizeof str - 1)
      18      abort ();
      19  }
      20  
      21  void copy_from_local_str (void)
      22  {
      23    const char s[] = STR;
      24  
      25    strcpy (dst, s);
      26  
      27    if (strlen (dst) != sizeof s - 1)
      28      abort ();
      29  }
      30  
      31  void copy_from_local_memstr (void)
      32  {
      33    struct {
      34      char s[sizeof STR];
      35    } x = { STR };
      36  
      37    strcpy (dst, x.s);
      38  
      39    if (strlen (dst) != sizeof x.s - 1)
      40      abort ();
      41  }
      42  
      43  void copy_to_local_str (void)
      44  {
      45    char d[sizeof STR];
      46  
      47    strcpy (d, str);
      48  
      49    if (strlen (d) != sizeof str - 1)
      50      abort ();
      51  }
      52  
      53  void copy_to_local_memstr (void)
      54  {
      55    struct {
      56      char d[sizeof STR];
      57    } x;
      58  
      59    strcpy (x.d, str);
      60  
      61    if (strlen (x.d) != sizeof str- 1)
      62      abort ();
      63  }
      64  
      65  /* Verify that all calls to strlen have been eliminated.
      66    { dg-final { scan-tree-dump-not "(abort|strlen) \\(\\)" "optimized" } } */