(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
duff-3.c
       1  /* Duff's device is legal C; test to make sure the compiler
       2     doesn't complain about it.
       3  
       4     Jason Thorpe <thorpej@wasabisystems.com>
       5     Derived from Tom Duff's original usenet message about the device.  */
       6  
       7  /* { dg-do run } */
       8  /* { dg-options "-O2" } */
       9  
      10  extern void abort (void);
      11  extern void exit (int);
      12  
      13  typedef __SIZE_TYPE__ size_t;
      14  extern int memcmp (const void *, const void *, size_t);
      15  
      16  void
      17  duffcpy (char *dst, const char *src, unsigned long size)
      18  {
      19    unsigned long n = (size + 7) / 8;
      20  
      21    switch (size % 8)
      22      {
      23      case 0:	do {	*dst++ = *src++;
      24      case 7:		*dst++ = *src++;
      25      case 6:		*dst++ = *src++;
      26      case 5:		*dst++ = *src++;
      27      case 4:		*dst++ = *src++;
      28      case 3:		*dst++ = *src++;
      29      case 2:		*dst++ = *src++;
      30      case 1:		*dst++ = *src++;
      31  		} while (--n > 0);
      32      }
      33  }
      34  
      35  const char testpat[] = "The quick brown fox jumped over the lazy dog.";
      36  
      37  int
      38  main()
      39  {
      40    char buf[64];
      41  
      42    duffcpy (buf, testpat, sizeof (testpat));
      43    if (memcmp (buf, testpat, sizeof (testpat)) != 0)
      44      abort ();
      45  
      46    exit (0);
      47  }