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 the BSD Telnet Kerberos 4 checksum routine. 6 See also PR 5230. */ 7 8 /* { dg-do run } */ 9 /* { dg-options "-O2" } */ 10 11 extern void abort (void); 12 extern void exit (int); 13 14 #if __INT_MAX__ >= 2147483647 15 /* At least 32-bit integers. */ 16 typedef int type32; 17 #else 18 typedef long type32; 19 #endif 20 21 type32 cksum(const unsigned char * src,unsigned long size)22cksum (const unsigned char *src, unsigned long size) 23 { 24 type32 ck = 0; 25 26 switch (size & 3) 27 { 28 while (size > 0) 29 { 30 case 0: 31 ck ^= (type32)*src++ << 24; 32 --size; 33 case 3: 34 ck ^= (type32)*src++ << 16; 35 --size; 36 case 2: 37 ck ^= (type32)*src++ << 8; 38 --size; 39 case 1: 40 ck ^= (type32)*src++; 41 --size; 42 } 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