]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
This commit was manufactured by cvs2svn to create branch
authorNo Author <no-author@gcc.gnu.org>
Fri, 5 Dec 2003 15:56:37 +0000 (15:56 +0000)
committerNo Author <no-author@gcc.gnu.org>
Fri, 5 Dec 2003 15:56:37 +0000 (15:56 +0000)
'gcc-3_3-branch'.

From-SVN: r74335

gcc/testsuite/g++.dg/other/struct-va_list.C [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/20031201-1.c [new file with mode: 0644]

diff --git a/gcc/testsuite/g++.dg/other/struct-va_list.C b/gcc/testsuite/g++.dg/other/struct-va_list.C
new file mode 100644 (file)
index 0000000..769b909
--- /dev/null
@@ -0,0 +1,8 @@
+// { dg-do compile }
+// PR target/13302
+
+#include <stdarg.h>
+
+struct NumArgState{
+    va_list ap;
+};
diff --git a/gcc/testsuite/gcc.c-torture/execute/20031201-1.c b/gcc/testsuite/gcc.c-torture/execute/20031201-1.c
new file mode 100644 (file)
index 0000000..7c8e0ea
--- /dev/null
@@ -0,0 +1,76 @@
+/* Copyright (C) 2003  Free Software Foundation.
+   PR target/13256
+   STRICT_LOW_PART was handled incorrectly in delay slots.
+   Origin: Hans-Peter Nilsson.  */
+
+typedef struct { unsigned int e0 : 16; unsigned int e1 : 16; } s1;
+typedef struct { unsigned int e0 : 16; unsigned int e1 : 16; } s2;
+typedef struct { s1 i12; s2 i16; } io;
+static int test_length = 2;
+static io *i;
+static int m = 1;
+static int d = 1;
+static unsigned long test_t0;
+static unsigned long test_t1;
+void test(void) __attribute__ ((__noinline__));
+extern int f1 (void *port) __attribute__ ((__noinline__));
+extern void f0 (void) __attribute__ ((__noinline__));
+int
+f1 (void *port)
+{
+  int fail_count = 0;
+  unsigned long tlen;
+  s1 x0 = {0};
+  s2 x1 = {0};
+
+  i = port;
+  x0.e0 = x1.e0 = 32;
+  i->i12 = x0;
+  i->i16 = x1;
+  do f0(); while (test_t1);
+  x0.e0 = x1.e0 = 8;
+  i->i12 = x0;
+  i->i16 = x1;
+  test ();
+  if (m)
+    {
+      unsigned long e = 1000000000 / 460800 * test_length;
+      tlen = test_t1 - test_t0;
+      if (((tlen-e) & 0x7FFFFFFF) > 1000)
+       f0();
+    }
+  if (d)
+    {
+      unsigned long e = 1000000000 / 460800 * test_length;
+      tlen = test_t1 - test_t0;
+      if (((tlen - e) & 0x7FFFFFFF) > 1000)
+       f0();
+    }
+  return fail_count != 0 ? 1 : 0;
+}
+
+int
+main ()
+{
+  io io0;
+  f1 (&io0);
+  abort ();
+}
+
+void
+test (void)
+{
+  io *iop = i;
+  if (iop->i12.e0 != 8 || iop->i16.e0 != 8)
+    abort ();
+  exit (0);
+}
+
+void
+f0 (void)
+{
+  static int washere = 0;
+  io *iop = i;
+  if (washere++ || iop->i12.e0 != 32 || iop->i16.e0 != 32)
+    abort ();
+}