(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr58981.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2" } */
       3  /* { dg-additional-options "-minline-all-stringops" { target { i?86-*-* x86_64-*-* } } } */
       4  
       5  extern void abort (void);
       6  
       7  #define MAX_OFFSET (sizeof (long long))
       8  #define MAX_COPY (8 * sizeof (long long))
       9  #define MAX_EXTRA (sizeof (long long))
      10  
      11  #define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA)
      12  
      13  static union {
      14    char buf[MAX_LENGTH];
      15    long long align_int;
      16    long double align_fp;
      17  } u;
      18  
      19  char A[MAX_LENGTH];
      20  
      21  int
      22  main ()
      23  {
      24    int off, len, i;
      25    char *p, *q;
      26  
      27    for (i = 0; i < MAX_LENGTH; i++)
      28      A[i] = 'A';
      29  
      30    for (off = 0; off < MAX_OFFSET; off++)
      31      for (len = 1; len < MAX_COPY; len++)
      32        {
      33  	for (i = 0; i < MAX_LENGTH; i++)
      34  	  u.buf[i] = 'a';
      35  
      36  	p = __builtin_memcpy (u.buf + off, A, len);
      37  	if (p != u.buf + off)
      38  	  abort ();
      39  
      40  	q = u.buf;
      41  	for (i = 0; i < off; i++, q++)
      42  	  if (*q != 'a')
      43  	    abort ();
      44  
      45  	for (i = 0; i < len; i++, q++)
      46  	  if (*q != 'A')
      47  	    abort ();
      48  
      49  	for (i = 0; i < MAX_EXTRA; i++, q++)
      50  	  if (*q != 'a')
      51  	    abort ();
      52        }
      53  
      54    return 0;
      55  }