(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
string-opt-1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2" } */
       3  
       4  char *buffer;
       5  char *test;
       6  
       7  #define SIZE 100
       8  
       9  char *
      10  __attribute__((noinline))
      11  my_memcpy (char *d, char *s, unsigned l)
      12  {
      13    return __builtin_memcpy (d, s, l);
      14  }
      15  
      16  char *
      17  __attribute__((noinline))
      18  my_mempcpy (char *d, char *s, unsigned l)
      19  {
      20    return __builtin_mempcpy (d, s, l);
      21  }
      22  
      23  void
      24  run_test (char *d, char *s, unsigned l)
      25  {
      26    char *r = my_mempcpy (d, s, l);
      27    if (r != d + l)
      28      __builtin_abort ();
      29  
      30    r = my_memcpy (d, s, l);
      31    if (r != d)
      32      __builtin_abort ();
      33  }
      34  
      35  int
      36  main (void)
      37  {
      38    const char* const foo = "hello world";
      39    unsigned l = __builtin_strlen (foo) + 1;
      40  
      41    buffer = __builtin_malloc (SIZE);
      42    __builtin_memcpy (buffer, foo, l);
      43    test = __builtin_malloc (SIZE);
      44  
      45    run_test (test, buffer, l);
      46  
      47    return 0;
      48  }
      49  
      50  /* { dg-final { scan-assembler "mempcpy" } } */
      51  /* { dg-final { scan-assembler "memcpy" } } */