testsuite: Unify the C and C++ testsuites
authorJosh Triplett <josh@joshtriplett.org>
Sun, 16 Mar 2014 23:53:42 +0000 (16:53 -0700)
committerJosh Triplett <josh@joshtriplett.org>
Mon, 17 Mar 2014 03:34:46 +0000 (20:34 -0700)
These two testsuites differ only in the source file glob and a couple of
additional compiler options; unify the remaining bits.

testsuite/Makefile.am
testsuite/libffi.call/call.exp
testsuite/libffi.call/ffitestcxx.h [new file with mode: 0644]
testsuite/libffi.call/unwindtest.cc [new file with mode: 0644]
testsuite/libffi.call/unwindtest_ffi_call.cc [new file with mode: 0644]
testsuite/libffi.special/ffitestcxx.h [deleted file]
testsuite/libffi.special/special.exp [deleted file]
testsuite/libffi.special/unwindtest.cc [deleted file]
testsuite/libffi.special/unwindtest_ffi_call.cc [deleted file]

index edc6e61ae4db3bee3d90bbbf85b3c61631b5e84b..44738c9e914c2c8ce84d53ff67fcd0dfc2d94d52 100644 (file)
@@ -82,9 +82,9 @@ libffi.call/struct6.c libffi.call/return_ll.c libffi.call/struct9.c   \
 libffi.call/return_sc.c libffi.call/struct7.c                          \
 libffi.call/cls_align_uint64.c libffi.call/cls_4byte.c                 \
 libffi.call/strlen_win32.c libffi.call/cls_6_1_byte.c                  \
-libffi.call/cls_7_1_byte.c libffi.special/unwindtest.cc                        \
-libffi.special/special.exp libffi.special/unwindtest_ffi_call.cc       \
-libffi.special/ffitestcxx.h lib/wrapper.exp lib/target-libpath.exp     \
+libffi.call/cls_7_1_byte.c libffi.call/unwindtest.cc                   \
+libffi.call/unwindtest_ffi_call.cc     \
+libffi.call/ffitestcxx.h lib/wrapper.exp lib/target-libpath.exp        \
 lib/libffi.exp libffi.call/cls_struct_va1.c                            \
 libffi.call/cls_uchar_va.c libffi.call/cls_uint_va.c                   \
 libffi.call/cls_ulong_va.c libffi.call/cls_ushort_va.c                 \
index c1ad7375a9811976e50f010e5122bb78cd8ff122..90e400f6b6ef80af03a4758a50d2b77f71f14496 100644 (file)
@@ -20,6 +20,9 @@ libffi-init
 global srcdir subdir
 
 run-many-tests [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] ""
+if { [string match $using_gcc "yes"] } {
+  run-many-tests [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] "-shared-libgcc -lstdc++"
+}
 
 dg-finish
 
diff --git a/testsuite/libffi.call/ffitestcxx.h b/testsuite/libffi.call/ffitestcxx.h
new file mode 100644 (file)
index 0000000..c6da7ef
--- /dev/null
@@ -0,0 +1,55 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <ffi.h>
+#include "fficonfig.h"
+
+#define MAX_ARGS 256
+
+
+/* Define __UNUSED__ that also other compilers than gcc can run the tests.  */
+#undef __UNUSED__
+#if defined(__GNUC__)
+#define __UNUSED__ __attribute__((__unused__))
+#else
+#define __UNUSED__
+#endif
+
+#define CHECK(x) (!(x) ? abort() : (void)0)
+
+/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
+   file open.  */
+#ifdef HAVE_MMAP_ANON
+# undef HAVE_MMAP_DEV_ZERO
+
+# include <sys/mman.h>
+# ifndef MAP_FAILED
+#  define MAP_FAILED -1
+# endif
+# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
+#  define MAP_ANONYMOUS MAP_ANON
+# endif
+# define USING_MMAP
+
+#endif
+
+#ifdef HAVE_MMAP_DEV_ZERO
+
+# include <sys/mman.h>
+# ifndef MAP_FAILED
+#  define MAP_FAILED -1
+# endif
+# define USING_MMAP
+
+#endif
+
+
+/* MinGW kludge.  */
+#ifdef _WIN64
+#define PRIdLL "I64d"
+#define PRIuLL "I64u"
+#else
+#define PRIdLL "lld"
+#define PRIuLL "llu"
+#endif
+
diff --git a/testsuite/libffi.call/unwindtest.cc b/testsuite/libffi.call/unwindtest.cc
new file mode 100644 (file)
index 0000000..a78f4e7
--- /dev/null
@@ -0,0 +1,125 @@
+/* Area:       ffi_closure, unwind info
+   Purpose:    Check if the unwind information is passed correctly.
+   Limitations:        none.
+   PR:         none.
+   Originator: Jeff Sturm <jsturm@one-point.com>  */
+
+/* { dg-do run } */
+
+#include "ffitestcxx.h"
+
+#if defined HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#if defined HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+void
+closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
+               void** args __UNUSED__, void* userdata __UNUSED__)
+{
+  throw 9;
+}
+
+typedef void (*closure_test_type)();
+
+void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp,
+                     void** args, void* userdata __UNUSED__)
+ {
+    *(ffi_arg*)resp =
+      (int)*(float *)args[0] +(int)(*(float *)args[1]) +
+      (int)(*(float *)args[2]) + (int)*(float *)args[3] +
+      (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) +
+      (int)*(float *)args[6] + (int)(*(int *)args[7]) +
+      (int)(*(double*)args[8]) + (int)*(int *)args[9] +
+      (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
+      (int)*(int *)args[12] + (int)(*(int *)args[13]) +
+      (int)(*(int *)args[14]) + *(int *)args[15] + (int)(intptr_t)userdata;
+
+    printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
+          (int)*(float *)args[0], (int)(*(float *)args[1]),
+          (int)(*(float *)args[2]), (int)*(float *)args[3],
+          (int)(*(signed short *)args[4]), (int)(*(float *)args[5]),
+          (int)*(float *)args[6], (int)(*(int *)args[7]),
+          (int)(*(double *)args[8]), (int)*(int *)args[9],
+          (int)(*(int *)args[10]), (int)(*(float *)args[11]),
+          (int)*(int *)args[12], (int)(*(int *)args[13]),
+          (int)(*(int *)args[14]), *(int *)args[15],
+          (int)(intptr_t)userdata, (int)*(ffi_arg*)resp);
+
+    throw (int)*(ffi_arg*)resp;
+}
+
+typedef int (*closure_test_type1)(float, float, float, float, signed short,
+                                 float, float, int, double, int, int, float,
+                                 int, int, int, int);
+
+int main (void)
+{
+  ffi_cif cif;
+  void *code;
+  ffi_closure *pcl = (ffi_closure *)ffi_closure_alloc(sizeof(ffi_closure), &code);
+  ffi_type * cl_arg_types[17];
+
+  {
+    cl_arg_types[1] = NULL;
+
+    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0,
+                      &ffi_type_void, cl_arg_types) == FFI_OK);
+    CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn, NULL, code) == FFI_OK);
+
+    try
+      {
+       (*((closure_test_type)(code)))();
+      } catch (int exception_code)
+      {
+       CHECK(exception_code == 9);
+      }
+
+    printf("part one OK\n");
+    /* { dg-output "part one OK" } */
+    }
+
+    {
+
+      cl_arg_types[0] = &ffi_type_float;
+      cl_arg_types[1] = &ffi_type_float;
+      cl_arg_types[2] = &ffi_type_float;
+      cl_arg_types[3] = &ffi_type_float;
+      cl_arg_types[4] = &ffi_type_sshort;
+      cl_arg_types[5] = &ffi_type_float;
+      cl_arg_types[6] = &ffi_type_float;
+      cl_arg_types[7] = &ffi_type_uint;
+      cl_arg_types[8] = &ffi_type_double;
+      cl_arg_types[9] = &ffi_type_uint;
+      cl_arg_types[10] = &ffi_type_uint;
+      cl_arg_types[11] = &ffi_type_float;
+      cl_arg_types[12] = &ffi_type_uint;
+      cl_arg_types[13] = &ffi_type_uint;
+      cl_arg_types[14] = &ffi_type_uint;
+      cl_arg_types[15] = &ffi_type_uint;
+      cl_arg_types[16] = NULL;
+
+      /* Initialize the cif */
+      CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
+                        &ffi_type_sint, cl_arg_types) == FFI_OK);
+
+      CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1,
+                                 (void *) 3 /* userdata */, code)  == FFI_OK);
+      try
+       {
+         (*((closure_test_type1)code))
+           (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
+            19, 21, 1);
+         /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
+       } catch (int exception_code)
+       {
+         CHECK(exception_code == 255);
+       }
+      printf("part two OK\n");
+      /* { dg-output "\npart two OK" } */
+    }
+    exit(0);
+}
diff --git a/testsuite/libffi.call/unwindtest_ffi_call.cc b/testsuite/libffi.call/unwindtest_ffi_call.cc
new file mode 100644 (file)
index 0000000..57191f2
--- /dev/null
@@ -0,0 +1,54 @@
+/* Area:       ffi_call, unwind info
+   Purpose:    Check if the unwind information is passed correctly.
+   Limitations:        none.
+   PR:         none.
+   Originator: Andreas Tobler <andreast@gcc.gnu.org> 20061213  */
+
+/* { dg-do run } */
+
+#include "ffitestcxx.h"
+
+static int checking(int a __UNUSED__, short b __UNUSED__,
+                   signed char c __UNUSED__)
+{
+  throw 9;
+}
+
+int main (void)
+{
+  ffi_cif cif;
+  ffi_type *args[MAX_ARGS];
+  void *values[MAX_ARGS];
+  ffi_arg rint;
+
+  signed int si;
+  signed short ss;
+  signed char sc;
+
+  args[0] = &ffi_type_sint;
+  values[0] = &si;
+  args[1] = &ffi_type_sshort;
+  values[1] = &ss;
+  args[2] = &ffi_type_schar;
+  values[2] = &sc;
+
+  /* Initialize the cif */
+  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
+                    &ffi_type_sint, args) == FFI_OK);
+
+  si = -6;
+  ss = -12;
+  sc = -1;
+  {
+    try
+      {
+       ffi_call(&cif, FFI_FN(checking), &rint, values);
+      } catch (int exception_code)
+      {
+       CHECK(exception_code == 9);
+      }
+    printf("part one OK\n");
+    /* { dg-output "part one OK" } */
+  }
+  exit(0);
+}
diff --git a/testsuite/libffi.special/ffitestcxx.h b/testsuite/libffi.special/ffitestcxx.h
deleted file mode 100644 (file)
index c6da7ef..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <ffi.h>
-#include "fficonfig.h"
-
-#define MAX_ARGS 256
-
-
-/* Define __UNUSED__ that also other compilers than gcc can run the tests.  */
-#undef __UNUSED__
-#if defined(__GNUC__)
-#define __UNUSED__ __attribute__((__unused__))
-#else
-#define __UNUSED__
-#endif
-
-#define CHECK(x) (!(x) ? abort() : (void)0)
-
-/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
-   file open.  */
-#ifdef HAVE_MMAP_ANON
-# undef HAVE_MMAP_DEV_ZERO
-
-# include <sys/mman.h>
-# ifndef MAP_FAILED
-#  define MAP_FAILED -1
-# endif
-# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
-#  define MAP_ANONYMOUS MAP_ANON
-# endif
-# define USING_MMAP
-
-#endif
-
-#ifdef HAVE_MMAP_DEV_ZERO
-
-# include <sys/mman.h>
-# ifndef MAP_FAILED
-#  define MAP_FAILED -1
-# endif
-# define USING_MMAP
-
-#endif
-
-
-/* MinGW kludge.  */
-#ifdef _WIN64
-#define PRIdLL "I64d"
-#define PRIuLL "I64u"
-#else
-#define PRIdLL "lld"
-#define PRIuLL "llu"
-#endif
-
diff --git a/testsuite/libffi.special/special.exp b/testsuite/libffi.special/special.exp
deleted file mode 100644 (file)
index f7155bf..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (C) 2003, 2006, 2009, 2010 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-dg-init
-libffi-init
-
-global srcdir subdir
-
-if { [string match $using_gcc "yes"] } {
-  run-many-tests [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] "-shared-libgcc -lstdc++"
-}
-
-dg-finish
-
-# Local Variables:
-# tcl-indent-level:4
-# End:
diff --git a/testsuite/libffi.special/unwindtest.cc b/testsuite/libffi.special/unwindtest.cc
deleted file mode 100644 (file)
index a78f4e7..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Area:       ffi_closure, unwind info
-   Purpose:    Check if the unwind information is passed correctly.
-   Limitations:        none.
-   PR:         none.
-   Originator: Jeff Sturm <jsturm@one-point.com>  */
-
-/* { dg-do run } */
-
-#include "ffitestcxx.h"
-
-#if defined HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#if defined HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-void
-closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
-               void** args __UNUSED__, void* userdata __UNUSED__)
-{
-  throw 9;
-}
-
-typedef void (*closure_test_type)();
-
-void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp,
-                     void** args, void* userdata __UNUSED__)
- {
-    *(ffi_arg*)resp =
-      (int)*(float *)args[0] +(int)(*(float *)args[1]) +
-      (int)(*(float *)args[2]) + (int)*(float *)args[3] +
-      (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) +
-      (int)*(float *)args[6] + (int)(*(int *)args[7]) +
-      (int)(*(double*)args[8]) + (int)*(int *)args[9] +
-      (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
-      (int)*(int *)args[12] + (int)(*(int *)args[13]) +
-      (int)(*(int *)args[14]) + *(int *)args[15] + (int)(intptr_t)userdata;
-
-    printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
-          (int)*(float *)args[0], (int)(*(float *)args[1]),
-          (int)(*(float *)args[2]), (int)*(float *)args[3],
-          (int)(*(signed short *)args[4]), (int)(*(float *)args[5]),
-          (int)*(float *)args[6], (int)(*(int *)args[7]),
-          (int)(*(double *)args[8]), (int)*(int *)args[9],
-          (int)(*(int *)args[10]), (int)(*(float *)args[11]),
-          (int)*(int *)args[12], (int)(*(int *)args[13]),
-          (int)(*(int *)args[14]), *(int *)args[15],
-          (int)(intptr_t)userdata, (int)*(ffi_arg*)resp);
-
-    throw (int)*(ffi_arg*)resp;
-}
-
-typedef int (*closure_test_type1)(float, float, float, float, signed short,
-                                 float, float, int, double, int, int, float,
-                                 int, int, int, int);
-
-int main (void)
-{
-  ffi_cif cif;
-  void *code;
-  ffi_closure *pcl = (ffi_closure *)ffi_closure_alloc(sizeof(ffi_closure), &code);
-  ffi_type * cl_arg_types[17];
-
-  {
-    cl_arg_types[1] = NULL;
-
-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0,
-                      &ffi_type_void, cl_arg_types) == FFI_OK);
-    CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn, NULL, code) == FFI_OK);
-
-    try
-      {
-       (*((closure_test_type)(code)))();
-      } catch (int exception_code)
-      {
-       CHECK(exception_code == 9);
-      }
-
-    printf("part one OK\n");
-    /* { dg-output "part one OK" } */
-    }
-
-    {
-
-      cl_arg_types[0] = &ffi_type_float;
-      cl_arg_types[1] = &ffi_type_float;
-      cl_arg_types[2] = &ffi_type_float;
-      cl_arg_types[3] = &ffi_type_float;
-      cl_arg_types[4] = &ffi_type_sshort;
-      cl_arg_types[5] = &ffi_type_float;
-      cl_arg_types[6] = &ffi_type_float;
-      cl_arg_types[7] = &ffi_type_uint;
-      cl_arg_types[8] = &ffi_type_double;
-      cl_arg_types[9] = &ffi_type_uint;
-      cl_arg_types[10] = &ffi_type_uint;
-      cl_arg_types[11] = &ffi_type_float;
-      cl_arg_types[12] = &ffi_type_uint;
-      cl_arg_types[13] = &ffi_type_uint;
-      cl_arg_types[14] = &ffi_type_uint;
-      cl_arg_types[15] = &ffi_type_uint;
-      cl_arg_types[16] = NULL;
-
-      /* Initialize the cif */
-      CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
-                        &ffi_type_sint, cl_arg_types) == FFI_OK);
-
-      CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1,
-                                 (void *) 3 /* userdata */, code)  == FFI_OK);
-      try
-       {
-         (*((closure_test_type1)code))
-           (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
-            19, 21, 1);
-         /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
-       } catch (int exception_code)
-       {
-         CHECK(exception_code == 255);
-       }
-      printf("part two OK\n");
-      /* { dg-output "\npart two OK" } */
-    }
-    exit(0);
-}
diff --git a/testsuite/libffi.special/unwindtest_ffi_call.cc b/testsuite/libffi.special/unwindtest_ffi_call.cc
deleted file mode 100644 (file)
index 57191f2..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Area:       ffi_call, unwind info
-   Purpose:    Check if the unwind information is passed correctly.
-   Limitations:        none.
-   PR:         none.
-   Originator: Andreas Tobler <andreast@gcc.gnu.org> 20061213  */
-
-/* { dg-do run } */
-
-#include "ffitestcxx.h"
-
-static int checking(int a __UNUSED__, short b __UNUSED__,
-                   signed char c __UNUSED__)
-{
-  throw 9;
-}
-
-int main (void)
-{
-  ffi_cif cif;
-  ffi_type *args[MAX_ARGS];
-  void *values[MAX_ARGS];
-  ffi_arg rint;
-
-  signed int si;
-  signed short ss;
-  signed char sc;
-
-  args[0] = &ffi_type_sint;
-  values[0] = &si;
-  args[1] = &ffi_type_sshort;
-  values[1] = &ss;
-  args[2] = &ffi_type_schar;
-  values[2] = &sc;
-
-  /* Initialize the cif */
-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
-                    &ffi_type_sint, args) == FFI_OK);
-
-  si = -6;
-  ss = -12;
-  sc = -1;
-  {
-    try
-      {
-       ffi_call(&cif, FFI_FN(checking), &rint, values);
-      } catch (int exception_code)
-      {
-       CHECK(exception_code == 9);
-      }
-    printf("part one OK\n");
-    /* { dg-output "part one OK" } */
-  }
-  exit(0);
-}