diff gcc/testsuite/gcc.dg/duff-1.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/gcc.dg/duff-1.c	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,50 @@
+/* Duff's device is legal C; test to make sure the compiler
+   doesn't complain about it.
+
+   Jason Thorpe <thorpej@wasabisystems.com>
+   Derived from PR 3846.  */
+
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+extern void abort (void);
+extern void exit (int);
+
+typedef __SIZE_TYPE__ size_t;
+extern int memcmp (const void *, const void *, size_t);
+
+void
+duffcpy (char *dst, const char *src, unsigned long size)
+{
+  switch (size & 3)
+    {
+    for (;;)
+      {
+	*dst++ = *src++;
+    case 3:
+	*dst++ = *src++;
+    case 2:
+	*dst++ = *src++;
+    case 1:
+	*dst++ = *src++;
+    case 0:
+	if (size <= 3)
+	  break;
+	size -= 4;
+      }
+    }
+}
+
+const char testpat[] = "The quick brown fox jumped over the lazy dog.";
+
+int
+main()
+{
+  char buf[64];
+
+  duffcpy (buf, testpat, sizeof (testpat));
+  if (memcmp (buf, testpat, sizeof (testpat)) != 0)
+    abort ();
+
+  exit (0);
+}