va-arg-24.c: New.
authorZack Weinberg <zack@codesourcery.com>
Sun, 18 Apr 2004 12:05:01 +0000 (12:05 +0000)
committerAldy Hernandez <aldyh@gcc.gnu.org>
Sun, 18 Apr 2004 12:05:01 +0000 (12:05 +0000)
* gcc.c-torture/execute/va-arg-24.c: New.

Co-Authored-By: Aldy Hernandez <aldyh@redhat.com>
From-SVN: r80817

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/va-arg-24.c [new file with mode: 0644]

index 041e31d8e1f386b19989834d54ef8565890a331c..62af4dd517981cd8706394b12bdffe0814f27494 100644 (file)
@@ -1,3 +1,8 @@
+2004-04-18  Zack Weinberg  <zack@codesourcery.com>
+           Aldy Hernandez  <aldyh@redhat.com>
+
+       * gcc.c-torture/execute/va-arg-24.c: New.
+
 2004-04-17  Zack Weinberg  <zack@codesourcery.com>
            Aldy Hernandez  <aldyh@redhat.com>
 
diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-24.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-24.c
new file mode 100644 (file)
index 0000000..811b11f
--- /dev/null
@@ -0,0 +1,96 @@
+/* The purpose of this code is to test argument passing of a tuple of
+   11 integers, with the break point between named and unnamed arguments
+   at every possible position. */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static int errors = 0;
+
+static void
+verify (const char *tcase, int n[11])
+{
+  int i;
+  for (i = 0; i <= 10; i++)
+    if (n[i] != i)
+      {
+       printf (" %s: n[%d] = %d expected %d\n", tcase, i, n[i], i);
+       errors++;
+      }
+}
+
+#define STR(x) #x
+
+#define p(i) int q##i,
+#define P(i) n[i] = q##i;
+
+#define p0 p(0)
+#define p1 p(1)
+#define p2 p(2)
+#define p3 p(3)
+#define p4 p(4)
+#define p5 p(5)
+#define p6 p(6)
+#define p7 p(7)
+#define p8 p(8)
+#define p9 p(9)
+
+#define P0 P(0)
+#define P1 P(1)
+#define P2 P(2)
+#define P3 P(3)
+#define P4 P(4)
+#define P5 P(5)
+#define P6 P(6)
+#define P7 P(7)
+#define P8 P(8)
+#define P9 P(9)
+
+#define TCASE(x, params, vecinit)              \
+static void                                    \
+varargs##x (params ...)                                \
+{                                              \
+  va_list ap;                                  \
+  int n[11];                                   \
+  int i;                                       \
+                                               \
+  va_start (ap, q##x);                         \
+  vecinit                                      \
+  for (i = x + 1; i <= 10; i++)                        \
+    n[i] = va_arg (ap, int);                   \
+  va_end (ap);                                 \
+                                               \
+  verify (STR(varargs##x), n);                 \
+}
+
+#define TEST(x) varargs##x (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
+
+TCASE(0, p0                          , P0                           )
+TCASE(1, p0 p1                       , P0 P1                        )
+TCASE(2, p0 p1 p2                    , P0 P1 P2                     )
+TCASE(3, p0 p1 p2 p3                 , P0 P1 P2 P3                  )
+TCASE(4, p0 p1 p2 p3 p4                      , P0 P1 P2 P3 P4               )
+TCASE(5, p0 p1 p2 p3 p4 p5           , P0 P1 P2 P3 P4 P5            )
+TCASE(6, p0 p1 p2 p3 p4 p5 p6        , P0 P1 P2 P3 P4 P5 P6         )
+TCASE(7, p0 p1 p2 p3 p4 p5 p6 p7      , P0 P1 P2 P3 P4 P5 P6 P7             )
+TCASE(8, p0 p1 p2 p3 p4 p5 p6 p7 p8   , P0 P1 P2 P3 P4 P5 P6 P7 P8   )
+TCASE(9, p0 p1 p2 p3 p4 p5 p6 p7 p8 p9, P0 P1 P2 P3 P4 P5 P6 P7 P8 P9)
+
+int main(void)
+{
+  TEST(0);
+  TEST(1);
+  TEST(2);
+  TEST(3);
+  TEST(4);
+  TEST(5);
+  TEST(6);
+  TEST(7);
+  TEST(8);
+  TEST(9);
+
+  if (errors)
+    abort ();
+  exit (0);
+}