Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/duff-1.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
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 | |
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 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 | |
38 const char testpat[] = "The quick brown fox jumped over the lazy dog."; | |
39 | |
40 int | |
41 main() | |
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 } |