1 /* Duff's device is legal C; test to make sure the compiler 2 doesn't complain about it. 3 4 Roger Sayle <roger@eyesopen.com> 5 Derived from duff-2.c. */ 6 7 /* { dg-do run } */ 8 /* { dg-options "-O2" } */ 9 10 extern void abort (void); 11 extern void exit (int); 12 13 #if __INT_MAX__ >= 2147483647 14 /* At least 32-bit integers. */ 15 typedef int type32; 16 #else 17 typedef long type32; 18 #endif 19 20 type32 cksum(const unsigned char * src,unsigned long size)21cksum (const unsigned char *src, unsigned long size) 22 { 23 type32 ck = 0; 24 25 switch (size & 3) 26 { 27 do 28 { 29 case 0: 30 ck ^= (type32)*src++ << 24; 31 --size; 32 case 3: 33 ck ^= (type32)*src++ << 16; 34 --size; 35 case 2: 36 ck ^= (type32)*src++ << 8; 37 --size; 38 case 1: 39 ck ^= (type32)*src++; 40 --size; 41 } 42 while (size > 0); 43 } 44 45 return ck; 46 } 47 48 const char testpat[] = "The quick brown fox jumped over the lazy dog."; 49 50 int main()51main() 52 { 53 type32 ck; 54 55 ck = cksum ((const unsigned char *) testpat, sizeof (testpat)); 56 if (ck != 925902908) 57 abort (); 58 59 exit (0); 60 } 61