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 PR 3846. */ 6 7/* { dg-do run } */ 8/* { dg-options "-O2" } */ 9 10extern void abort (void); 11extern void exit (int); 12 13typedef __SIZE_TYPE__ size_t; 14extern int memcmp (const void *, const void *, size_t); 15 16void 17duffcpy (char *dst, const char *src, unsigned long size) 18{ 19 switch (size & 3) 20 { 21 for (;;) 22 { 23 *dst++ = *src++; 24 case 3: 25 *dst++ = *src++; 26 case 2: 27 *dst++ = *src++; 28 case 1: 29 *dst++ = *src++; 30 case 0: 31 if (size <= 3) 32 break; 33 size -= 4; 34 } 35 } 36} 37 38const char testpat[] = "The quick brown fox jumped over the lazy dog."; 39 40int 41main() 42{ 43 char buf[64]; 44 45 duffcpy (buf, testpat, sizeof (testpat)); 46 if (memcmp (buf, testpat, sizeof (testpat)) != 0) 47 abort (); 48 49 exit (0); 50} 51