summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Green <green@moxielogic.com>2019-11-22 18:54:30 -0500
committerAnthony Green <green@moxielogic.com>2019-11-22 18:54:30 -0500
commit332a539e88d26a0524c10a39283a3099d071ca10 (patch)
tree748a6c3894f8a8840aa841e5447a78812fb7196f
parent1761a10645dadc0840bf1ff3a4998f9a342e8cad (diff)
downloadlibffi-332a539e88d26a0524c10a39283a3099d071ca10.tar.gz
Move closure tests so we can easily XFAIL them for some targets
-rw-r--r--testsuite/libffi.closures/closure.exp50
-rw-r--r--testsuite/libffi.closures/closure_fn0.c (renamed from testsuite/libffi.call/closure_fn0.c)0
-rw-r--r--testsuite/libffi.closures/closure_fn1.c (renamed from testsuite/libffi.call/closure_fn1.c)0
-rw-r--r--testsuite/libffi.closures/closure_fn2.c (renamed from testsuite/libffi.call/closure_fn2.c)0
-rw-r--r--testsuite/libffi.closures/closure_fn3.c (renamed from testsuite/libffi.call/closure_fn3.c)0
-rw-r--r--testsuite/libffi.closures/closure_fn4.c (renamed from testsuite/libffi.call/closure_fn4.c)0
-rw-r--r--testsuite/libffi.closures/closure_fn5.c (renamed from testsuite/libffi.call/closure_fn5.c)0
-rw-r--r--testsuite/libffi.closures/closure_fn6.c (renamed from testsuite/libffi.call/closure_fn6.c)0
-rw-r--r--testsuite/libffi.closures/closure_loc_fn0.c (renamed from testsuite/libffi.call/closure_loc_fn0.c)0
-rw-r--r--testsuite/libffi.closures/closure_simple.c (renamed from testsuite/libffi.call/closure_simple.c)0
-rw-r--r--testsuite/libffi.closures/cls_12byte.c (renamed from testsuite/libffi.call/cls_12byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_16byte.c (renamed from testsuite/libffi.call/cls_16byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_18byte.c (renamed from testsuite/libffi.call/cls_18byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_19byte.c (renamed from testsuite/libffi.call/cls_19byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_1_1byte.c (renamed from testsuite/libffi.call/cls_1_1byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_20byte.c (renamed from testsuite/libffi.call/cls_20byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_20byte1.c (renamed from testsuite/libffi.call/cls_20byte1.c)0
-rw-r--r--testsuite/libffi.closures/cls_24byte.c (renamed from testsuite/libffi.call/cls_24byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_2byte.c (renamed from testsuite/libffi.call/cls_2byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_3_1byte.c (renamed from testsuite/libffi.call/cls_3_1byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_3byte1.c (renamed from testsuite/libffi.call/cls_3byte1.c)0
-rw-r--r--testsuite/libffi.closures/cls_3byte2.c (renamed from testsuite/libffi.call/cls_3byte2.c)0
-rw-r--r--testsuite/libffi.closures/cls_3float.c (renamed from testsuite/libffi.call/cls_3float.c)0
-rw-r--r--testsuite/libffi.closures/cls_4_1byte.c (renamed from testsuite/libffi.call/cls_4_1byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_4byte.c (renamed from testsuite/libffi.call/cls_4byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_5_1_byte.c (renamed from testsuite/libffi.call/cls_5_1_byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_5byte.c (renamed from testsuite/libffi.call/cls_5byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_64byte.c (renamed from testsuite/libffi.call/cls_64byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_6_1_byte.c (renamed from testsuite/libffi.call/cls_6_1_byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_6byte.c (renamed from testsuite/libffi.call/cls_6byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_7_1_byte.c (renamed from testsuite/libffi.call/cls_7_1_byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_7byte.c (renamed from testsuite/libffi.call/cls_7byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_8byte.c (renamed from testsuite/libffi.call/cls_8byte.c)0
-rw-r--r--testsuite/libffi.closures/cls_9byte1.c (renamed from testsuite/libffi.call/cls_9byte1.c)0
-rw-r--r--testsuite/libffi.closures/cls_9byte2.c (renamed from testsuite/libffi.call/cls_9byte2.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_double.c (renamed from testsuite/libffi.call/cls_align_double.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_float.c (renamed from testsuite/libffi.call/cls_align_float.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_longdouble.c (renamed from testsuite/libffi.call/cls_align_longdouble.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_longdouble_split.c (renamed from testsuite/libffi.call/cls_align_longdouble_split.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_longdouble_split2.c (renamed from testsuite/libffi.call/cls_align_longdouble_split2.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_pointer.c (renamed from testsuite/libffi.call/cls_align_pointer.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_sint16.c (renamed from testsuite/libffi.call/cls_align_sint16.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_sint32.c (renamed from testsuite/libffi.call/cls_align_sint32.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_sint64.c (renamed from testsuite/libffi.call/cls_align_sint64.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_uint16.c (renamed from testsuite/libffi.call/cls_align_uint16.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_uint32.c (renamed from testsuite/libffi.call/cls_align_uint32.c)0
-rw-r--r--testsuite/libffi.closures/cls_align_uint64.c (renamed from testsuite/libffi.call/cls_align_uint64.c)0
-rw-r--r--testsuite/libffi.closures/cls_dbls_struct.c (renamed from testsuite/libffi.call/cls_dbls_struct.c)0
-rw-r--r--testsuite/libffi.closures/cls_double.c (renamed from testsuite/libffi.call/cls_double.c)0
-rw-r--r--testsuite/libffi.closures/cls_double_va.c (renamed from testsuite/libffi.call/cls_double_va.c)0
-rw-r--r--testsuite/libffi.closures/cls_float.c (renamed from testsuite/libffi.call/cls_float.c)0
-rw-r--r--testsuite/libffi.closures/cls_longdouble.c (renamed from testsuite/libffi.call/cls_longdouble.c)0
-rw-r--r--testsuite/libffi.closures/cls_longdouble_va.c (renamed from testsuite/libffi.call/cls_longdouble_va.c)0
-rw-r--r--testsuite/libffi.closures/cls_many_mixed_args.c (renamed from testsuite/libffi.call/cls_many_mixed_args.c)0
-rw-r--r--testsuite/libffi.closures/cls_many_mixed_float_double.c (renamed from testsuite/libffi.call/cls_many_mixed_float_double.c)0
-rw-r--r--testsuite/libffi.closures/cls_multi_schar.c (renamed from testsuite/libffi.call/cls_multi_schar.c)0
-rw-r--r--testsuite/libffi.closures/cls_multi_sshort.c (renamed from testsuite/libffi.call/cls_multi_sshort.c)0
-rw-r--r--testsuite/libffi.closures/cls_multi_sshortchar.c (renamed from testsuite/libffi.call/cls_multi_sshortchar.c)0
-rw-r--r--testsuite/libffi.closures/cls_multi_uchar.c (renamed from testsuite/libffi.call/cls_multi_uchar.c)0
-rw-r--r--testsuite/libffi.closures/cls_multi_ushort.c (renamed from testsuite/libffi.call/cls_multi_ushort.c)0
-rw-r--r--testsuite/libffi.closures/cls_multi_ushortchar.c (renamed from testsuite/libffi.call/cls_multi_ushortchar.c)0
-rw-r--r--testsuite/libffi.closures/cls_pointer.c (renamed from testsuite/libffi.call/cls_pointer.c)0
-rw-r--r--testsuite/libffi.closures/cls_pointer_stack.c (renamed from testsuite/libffi.call/cls_pointer_stack.c)0
-rw-r--r--testsuite/libffi.closures/cls_schar.c (renamed from testsuite/libffi.call/cls_schar.c)0
-rw-r--r--testsuite/libffi.closures/cls_sint.c (renamed from testsuite/libffi.call/cls_sint.c)0
-rw-r--r--testsuite/libffi.closures/cls_sshort.c (renamed from testsuite/libffi.call/cls_sshort.c)0
-rw-r--r--testsuite/libffi.closures/cls_struct_va1.c (renamed from testsuite/libffi.call/cls_struct_va1.c)0
-rw-r--r--testsuite/libffi.closures/cls_uchar.c (renamed from testsuite/libffi.call/cls_uchar.c)0
-rw-r--r--testsuite/libffi.closures/cls_uchar_va.c (renamed from testsuite/libffi.call/cls_uchar_va.c)0
-rw-r--r--testsuite/libffi.closures/cls_uint.c (renamed from testsuite/libffi.call/cls_uint.c)0
-rw-r--r--testsuite/libffi.closures/cls_uint_va.c (renamed from testsuite/libffi.call/cls_uint_va.c)0
-rw-r--r--testsuite/libffi.closures/cls_ulong_va.c (renamed from testsuite/libffi.call/cls_ulong_va.c)0
-rw-r--r--testsuite/libffi.closures/cls_ulonglong.c (renamed from testsuite/libffi.call/cls_ulonglong.c)0
-rw-r--r--testsuite/libffi.closures/cls_ushort.c (renamed from testsuite/libffi.call/cls_ushort.c)0
-rw-r--r--testsuite/libffi.closures/cls_ushort_va.c (renamed from testsuite/libffi.call/cls_ushort_va.c)0
-rw-r--r--testsuite/libffi.closures/ffitest.h138
76 files changed, 188 insertions, 0 deletions
diff --git a/testsuite/libffi.closures/closure.exp b/testsuite/libffi.closures/closure.exp
new file mode 100644
index 0000000..eafbef0
--- /dev/null
+++ b/testsuite/libffi.closures/closure.exp
@@ -0,0 +1,50 @@
+# Copyright (C) 2003, 2006, 2009, 2010, 2014, 2019 Free Software Foundation, Inc.
+# Copyright (C) 2019 Anthony Green
+
+# 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 $compiler_vendor "microsoft"] } {
+ # -wd4005 macro redefinition
+ # -wd4244 implicit conversion to type of smaller size
+ # -wd4305 truncation to smaller type
+ # -wd4477 printf %lu of uintptr_t
+ # -wd4312 implicit conversion to type of greater size
+ # -wd4311 pointer truncation to unsigned long
+ # -EHsc C++ Exception Handling (no SEH exceptions)
+ set additional_options "-wd4005 -wd4244 -wd4305 -wd4477 -wd4312 -wd4311 -EHsc";
+} else {
+ set additional_options "";
+}
+
+set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/*.c]]
+
+if { [libffi_feature_test "#if FFI_CLOSURES"] } {
+ run-many-tests $tlist ""
+} else {
+ foreach test $tlist {
+ unsupported "$test"
+ }
+}
+
+dg-finish
+
+# Local Variables:
+# tcl-indent-level:4
+# End:
diff --git a/testsuite/libffi.call/closure_fn0.c b/testsuite/libffi.closures/closure_fn0.c
index a579ff6..a579ff6 100644
--- a/testsuite/libffi.call/closure_fn0.c
+++ b/testsuite/libffi.closures/closure_fn0.c
diff --git a/testsuite/libffi.call/closure_fn1.c b/testsuite/libffi.closures/closure_fn1.c
index 9123173..9123173 100644
--- a/testsuite/libffi.call/closure_fn1.c
+++ b/testsuite/libffi.closures/closure_fn1.c
diff --git a/testsuite/libffi.call/closure_fn2.c b/testsuite/libffi.closures/closure_fn2.c
index 08ff9d9..08ff9d9 100644
--- a/testsuite/libffi.call/closure_fn2.c
+++ b/testsuite/libffi.closures/closure_fn2.c
diff --git a/testsuite/libffi.call/closure_fn3.c b/testsuite/libffi.closures/closure_fn3.c
index 9b54d80..9b54d80 100644
--- a/testsuite/libffi.call/closure_fn3.c
+++ b/testsuite/libffi.closures/closure_fn3.c
diff --git a/testsuite/libffi.call/closure_fn4.c b/testsuite/libffi.closures/closure_fn4.c
index d4a1530..d4a1530 100644
--- a/testsuite/libffi.call/closure_fn4.c
+++ b/testsuite/libffi.closures/closure_fn4.c
diff --git a/testsuite/libffi.call/closure_fn5.c b/testsuite/libffi.closures/closure_fn5.c
index 9907442..9907442 100644
--- a/testsuite/libffi.call/closure_fn5.c
+++ b/testsuite/libffi.closures/closure_fn5.c
diff --git a/testsuite/libffi.call/closure_fn6.c b/testsuite/libffi.closures/closure_fn6.c
index 73c54fd..73c54fd 100644
--- a/testsuite/libffi.call/closure_fn6.c
+++ b/testsuite/libffi.closures/closure_fn6.c
diff --git a/testsuite/libffi.call/closure_loc_fn0.c b/testsuite/libffi.closures/closure_loc_fn0.c
index b3afa0b..b3afa0b 100644
--- a/testsuite/libffi.call/closure_loc_fn0.c
+++ b/testsuite/libffi.closures/closure_loc_fn0.c
diff --git a/testsuite/libffi.call/closure_simple.c b/testsuite/libffi.closures/closure_simple.c
index 5a4e728..5a4e728 100644
--- a/testsuite/libffi.call/closure_simple.c
+++ b/testsuite/libffi.closures/closure_simple.c
diff --git a/testsuite/libffi.call/cls_12byte.c b/testsuite/libffi.closures/cls_12byte.c
index ea0825d..ea0825d 100644
--- a/testsuite/libffi.call/cls_12byte.c
+++ b/testsuite/libffi.closures/cls_12byte.c
diff --git a/testsuite/libffi.call/cls_16byte.c b/testsuite/libffi.closures/cls_16byte.c
index 89a08a2..89a08a2 100644
--- a/testsuite/libffi.call/cls_16byte.c
+++ b/testsuite/libffi.closures/cls_16byte.c
diff --git a/testsuite/libffi.call/cls_18byte.c b/testsuite/libffi.closures/cls_18byte.c
index 9f75da8..9f75da8 100644
--- a/testsuite/libffi.call/cls_18byte.c
+++ b/testsuite/libffi.closures/cls_18byte.c
diff --git a/testsuite/libffi.call/cls_19byte.c b/testsuite/libffi.closures/cls_19byte.c
index 278794b..278794b 100644
--- a/testsuite/libffi.call/cls_19byte.c
+++ b/testsuite/libffi.closures/cls_19byte.c
diff --git a/testsuite/libffi.call/cls_1_1byte.c b/testsuite/libffi.closures/cls_1_1byte.c
index 82492c0..82492c0 100644
--- a/testsuite/libffi.call/cls_1_1byte.c
+++ b/testsuite/libffi.closures/cls_1_1byte.c
diff --git a/testsuite/libffi.call/cls_20byte.c b/testsuite/libffi.closures/cls_20byte.c
index 3f8bb28..3f8bb28 100644
--- a/testsuite/libffi.call/cls_20byte.c
+++ b/testsuite/libffi.closures/cls_20byte.c
diff --git a/testsuite/libffi.call/cls_20byte1.c b/testsuite/libffi.closures/cls_20byte1.c
index 6562727..6562727 100644
--- a/testsuite/libffi.call/cls_20byte1.c
+++ b/testsuite/libffi.closures/cls_20byte1.c
diff --git a/testsuite/libffi.call/cls_24byte.c b/testsuite/libffi.closures/cls_24byte.c
index 1d82f6e..1d82f6e 100644
--- a/testsuite/libffi.call/cls_24byte.c
+++ b/testsuite/libffi.closures/cls_24byte.c
diff --git a/testsuite/libffi.call/cls_2byte.c b/testsuite/libffi.closures/cls_2byte.c
index 81bb0a6..81bb0a6 100644
--- a/testsuite/libffi.call/cls_2byte.c
+++ b/testsuite/libffi.closures/cls_2byte.c
diff --git a/testsuite/libffi.call/cls_3_1byte.c b/testsuite/libffi.closures/cls_3_1byte.c
index b782746..b782746 100644
--- a/testsuite/libffi.call/cls_3_1byte.c
+++ b/testsuite/libffi.closures/cls_3_1byte.c
diff --git a/testsuite/libffi.call/cls_3byte1.c b/testsuite/libffi.closures/cls_3byte1.c
index a02c463..a02c463 100644
--- a/testsuite/libffi.call/cls_3byte1.c
+++ b/testsuite/libffi.closures/cls_3byte1.c
diff --git a/testsuite/libffi.call/cls_3byte2.c b/testsuite/libffi.closures/cls_3byte2.c
index c7251ce..c7251ce 100644
--- a/testsuite/libffi.call/cls_3byte2.c
+++ b/testsuite/libffi.closures/cls_3byte2.c
diff --git a/testsuite/libffi.call/cls_3float.c b/testsuite/libffi.closures/cls_3float.c
index 48888f8..48888f8 100644
--- a/testsuite/libffi.call/cls_3float.c
+++ b/testsuite/libffi.closures/cls_3float.c
diff --git a/testsuite/libffi.call/cls_4_1byte.c b/testsuite/libffi.closures/cls_4_1byte.c
index 2d6d8b6..2d6d8b6 100644
--- a/testsuite/libffi.call/cls_4_1byte.c
+++ b/testsuite/libffi.closures/cls_4_1byte.c
diff --git a/testsuite/libffi.call/cls_4byte.c b/testsuite/libffi.closures/cls_4byte.c
index 4ac3787..4ac3787 100644
--- a/testsuite/libffi.call/cls_4byte.c
+++ b/testsuite/libffi.closures/cls_4byte.c
diff --git a/testsuite/libffi.call/cls_5_1_byte.c b/testsuite/libffi.closures/cls_5_1_byte.c
index ad9d51c..ad9d51c 100644
--- a/testsuite/libffi.call/cls_5_1_byte.c
+++ b/testsuite/libffi.closures/cls_5_1_byte.c
diff --git a/testsuite/libffi.call/cls_5byte.c b/testsuite/libffi.closures/cls_5byte.c
index 4e0c000..4e0c000 100644
--- a/testsuite/libffi.call/cls_5byte.c
+++ b/testsuite/libffi.closures/cls_5byte.c
diff --git a/testsuite/libffi.call/cls_64byte.c b/testsuite/libffi.closures/cls_64byte.c
index a55edc2..a55edc2 100644
--- a/testsuite/libffi.call/cls_64byte.c
+++ b/testsuite/libffi.closures/cls_64byte.c
diff --git a/testsuite/libffi.call/cls_6_1_byte.c b/testsuite/libffi.closures/cls_6_1_byte.c
index b4dcdba..b4dcdba 100644
--- a/testsuite/libffi.call/cls_6_1_byte.c
+++ b/testsuite/libffi.closures/cls_6_1_byte.c
diff --git a/testsuite/libffi.call/cls_6byte.c b/testsuite/libffi.closures/cls_6byte.c
index 7406780..7406780 100644
--- a/testsuite/libffi.call/cls_6byte.c
+++ b/testsuite/libffi.closures/cls_6byte.c
diff --git a/testsuite/libffi.call/cls_7_1_byte.c b/testsuite/libffi.closures/cls_7_1_byte.c
index 14a7e96..14a7e96 100644
--- a/testsuite/libffi.call/cls_7_1_byte.c
+++ b/testsuite/libffi.closures/cls_7_1_byte.c
diff --git a/testsuite/libffi.call/cls_7byte.c b/testsuite/libffi.closures/cls_7byte.c
index 1645cc6..1645cc6 100644
--- a/testsuite/libffi.call/cls_7byte.c
+++ b/testsuite/libffi.closures/cls_7byte.c
diff --git a/testsuite/libffi.call/cls_8byte.c b/testsuite/libffi.closures/cls_8byte.c
index f6c1ea5..f6c1ea5 100644
--- a/testsuite/libffi.call/cls_8byte.c
+++ b/testsuite/libffi.closures/cls_8byte.c
diff --git a/testsuite/libffi.call/cls_9byte1.c b/testsuite/libffi.closures/cls_9byte1.c
index 0b85722..0b85722 100644
--- a/testsuite/libffi.call/cls_9byte1.c
+++ b/testsuite/libffi.closures/cls_9byte1.c
diff --git a/testsuite/libffi.call/cls_9byte2.c b/testsuite/libffi.closures/cls_9byte2.c
index edf991d..edf991d 100644
--- a/testsuite/libffi.call/cls_9byte2.c
+++ b/testsuite/libffi.closures/cls_9byte2.c
diff --git a/testsuite/libffi.call/cls_align_double.c b/testsuite/libffi.closures/cls_align_double.c
index aad5f3c..aad5f3c 100644
--- a/testsuite/libffi.call/cls_align_double.c
+++ b/testsuite/libffi.closures/cls_align_double.c
diff --git a/testsuite/libffi.call/cls_align_float.c b/testsuite/libffi.closures/cls_align_float.c
index 37e0855..37e0855 100644
--- a/testsuite/libffi.call/cls_align_float.c
+++ b/testsuite/libffi.closures/cls_align_float.c
diff --git a/testsuite/libffi.call/cls_align_longdouble.c b/testsuite/libffi.closures/cls_align_longdouble.c
index b3322d8..b3322d8 100644
--- a/testsuite/libffi.call/cls_align_longdouble.c
+++ b/testsuite/libffi.closures/cls_align_longdouble.c
diff --git a/testsuite/libffi.call/cls_align_longdouble_split.c b/testsuite/libffi.closures/cls_align_longdouble_split.c
index cc1c43b..cc1c43b 100644
--- a/testsuite/libffi.call/cls_align_longdouble_split.c
+++ b/testsuite/libffi.closures/cls_align_longdouble_split.c
diff --git a/testsuite/libffi.call/cls_align_longdouble_split2.c b/testsuite/libffi.closures/cls_align_longdouble_split2.c
index 5d3bec0..5d3bec0 100644
--- a/testsuite/libffi.call/cls_align_longdouble_split2.c
+++ b/testsuite/libffi.closures/cls_align_longdouble_split2.c
diff --git a/testsuite/libffi.call/cls_align_pointer.c b/testsuite/libffi.closures/cls_align_pointer.c
index 8fbf36a..8fbf36a 100644
--- a/testsuite/libffi.call/cls_align_pointer.c
+++ b/testsuite/libffi.closures/cls_align_pointer.c
diff --git a/testsuite/libffi.call/cls_align_sint16.c b/testsuite/libffi.closures/cls_align_sint16.c
index 039b874..039b874 100644
--- a/testsuite/libffi.call/cls_align_sint16.c
+++ b/testsuite/libffi.closures/cls_align_sint16.c
diff --git a/testsuite/libffi.call/cls_align_sint32.c b/testsuite/libffi.closures/cls_align_sint32.c
index c96c6d1..c96c6d1 100644
--- a/testsuite/libffi.call/cls_align_sint32.c
+++ b/testsuite/libffi.closures/cls_align_sint32.c
diff --git a/testsuite/libffi.call/cls_align_sint64.c b/testsuite/libffi.closures/cls_align_sint64.c
index 9aa7bdd..9aa7bdd 100644
--- a/testsuite/libffi.call/cls_align_sint64.c
+++ b/testsuite/libffi.closures/cls_align_sint64.c
diff --git a/testsuite/libffi.call/cls_align_uint16.c b/testsuite/libffi.closures/cls_align_uint16.c
index 97620b7..97620b7 100644
--- a/testsuite/libffi.call/cls_align_uint16.c
+++ b/testsuite/libffi.closures/cls_align_uint16.c
diff --git a/testsuite/libffi.call/cls_align_uint32.c b/testsuite/libffi.closures/cls_align_uint32.c
index 5766fad..5766fad 100644
--- a/testsuite/libffi.call/cls_align_uint32.c
+++ b/testsuite/libffi.closures/cls_align_uint32.c
diff --git a/testsuite/libffi.call/cls_align_uint64.c b/testsuite/libffi.closures/cls_align_uint64.c
index a52cb89..a52cb89 100644
--- a/testsuite/libffi.call/cls_align_uint64.c
+++ b/testsuite/libffi.closures/cls_align_uint64.c
diff --git a/testsuite/libffi.call/cls_dbls_struct.c b/testsuite/libffi.closures/cls_dbls_struct.c
index e451dea..e451dea 100644
--- a/testsuite/libffi.call/cls_dbls_struct.c
+++ b/testsuite/libffi.closures/cls_dbls_struct.c
diff --git a/testsuite/libffi.call/cls_double.c b/testsuite/libffi.closures/cls_double.c
index 84ad4cb..84ad4cb 100644
--- a/testsuite/libffi.call/cls_double.c
+++ b/testsuite/libffi.closures/cls_double.c
diff --git a/testsuite/libffi.call/cls_double_va.c b/testsuite/libffi.closures/cls_double_va.c
index e077f92..e077f92 100644
--- a/testsuite/libffi.call/cls_double_va.c
+++ b/testsuite/libffi.closures/cls_double_va.c
diff --git a/testsuite/libffi.call/cls_float.c b/testsuite/libffi.closures/cls_float.c
index 0090fed..0090fed 100644
--- a/testsuite/libffi.call/cls_float.c
+++ b/testsuite/libffi.closures/cls_float.c
diff --git a/testsuite/libffi.call/cls_longdouble.c b/testsuite/libffi.closures/cls_longdouble.c
index d24e72e..d24e72e 100644
--- a/testsuite/libffi.call/cls_longdouble.c
+++ b/testsuite/libffi.closures/cls_longdouble.c
diff --git a/testsuite/libffi.call/cls_longdouble_va.c b/testsuite/libffi.closures/cls_longdouble_va.c
index 39b438b..39b438b 100644
--- a/testsuite/libffi.call/cls_longdouble_va.c
+++ b/testsuite/libffi.closures/cls_longdouble_va.c
diff --git a/testsuite/libffi.call/cls_many_mixed_args.c b/testsuite/libffi.closures/cls_many_mixed_args.c
index 7fd6c82..7fd6c82 100644
--- a/testsuite/libffi.call/cls_many_mixed_args.c
+++ b/testsuite/libffi.closures/cls_many_mixed_args.c
diff --git a/testsuite/libffi.call/cls_many_mixed_float_double.c b/testsuite/libffi.closures/cls_many_mixed_float_double.c
index 62b0697..62b0697 100644
--- a/testsuite/libffi.call/cls_many_mixed_float_double.c
+++ b/testsuite/libffi.closures/cls_many_mixed_float_double.c
diff --git a/testsuite/libffi.call/cls_multi_schar.c b/testsuite/libffi.closures/cls_multi_schar.c
index 71df7b6..71df7b6 100644
--- a/testsuite/libffi.call/cls_multi_schar.c
+++ b/testsuite/libffi.closures/cls_multi_schar.c
diff --git a/testsuite/libffi.call/cls_multi_sshort.c b/testsuite/libffi.closures/cls_multi_sshort.c
index 4c39153..4c39153 100644
--- a/testsuite/libffi.call/cls_multi_sshort.c
+++ b/testsuite/libffi.closures/cls_multi_sshort.c
diff --git a/testsuite/libffi.call/cls_multi_sshortchar.c b/testsuite/libffi.closures/cls_multi_sshortchar.c
index 1c3aeb5..1c3aeb5 100644
--- a/testsuite/libffi.call/cls_multi_sshortchar.c
+++ b/testsuite/libffi.closures/cls_multi_sshortchar.c
diff --git a/testsuite/libffi.call/cls_multi_uchar.c b/testsuite/libffi.closures/cls_multi_uchar.c
index 009c02c..009c02c 100644
--- a/testsuite/libffi.call/cls_multi_uchar.c
+++ b/testsuite/libffi.closures/cls_multi_uchar.c
diff --git a/testsuite/libffi.call/cls_multi_ushort.c b/testsuite/libffi.closures/cls_multi_ushort.c
index dd10ca7..dd10ca7 100644
--- a/testsuite/libffi.call/cls_multi_ushort.c
+++ b/testsuite/libffi.closures/cls_multi_ushort.c
diff --git a/testsuite/libffi.call/cls_multi_ushortchar.c b/testsuite/libffi.closures/cls_multi_ushortchar.c
index 2588e97..2588e97 100644
--- a/testsuite/libffi.call/cls_multi_ushortchar.c
+++ b/testsuite/libffi.closures/cls_multi_ushortchar.c
diff --git a/testsuite/libffi.call/cls_pointer.c b/testsuite/libffi.closures/cls_pointer.c
index d82a87a..d82a87a 100644
--- a/testsuite/libffi.call/cls_pointer.c
+++ b/testsuite/libffi.closures/cls_pointer.c
diff --git a/testsuite/libffi.call/cls_pointer_stack.c b/testsuite/libffi.closures/cls_pointer_stack.c
index 1f1d915..1f1d915 100644
--- a/testsuite/libffi.call/cls_pointer_stack.c
+++ b/testsuite/libffi.closures/cls_pointer_stack.c
diff --git a/testsuite/libffi.call/cls_schar.c b/testsuite/libffi.closures/cls_schar.c
index 82986b1..82986b1 100644
--- a/testsuite/libffi.call/cls_schar.c
+++ b/testsuite/libffi.closures/cls_schar.c
diff --git a/testsuite/libffi.call/cls_sint.c b/testsuite/libffi.closures/cls_sint.c
index c7e13b7..c7e13b7 100644
--- a/testsuite/libffi.call/cls_sint.c
+++ b/testsuite/libffi.closures/cls_sint.c
diff --git a/testsuite/libffi.call/cls_sshort.c b/testsuite/libffi.closures/cls_sshort.c
index 846d57e..846d57e 100644
--- a/testsuite/libffi.call/cls_sshort.c
+++ b/testsuite/libffi.closures/cls_sshort.c
diff --git a/testsuite/libffi.call/cls_struct_va1.c b/testsuite/libffi.closures/cls_struct_va1.c
index 6d1fdae..6d1fdae 100644
--- a/testsuite/libffi.call/cls_struct_va1.c
+++ b/testsuite/libffi.closures/cls_struct_va1.c
diff --git a/testsuite/libffi.call/cls_uchar.c b/testsuite/libffi.closures/cls_uchar.c
index c1317e7..c1317e7 100644
--- a/testsuite/libffi.call/cls_uchar.c
+++ b/testsuite/libffi.closures/cls_uchar.c
diff --git a/testsuite/libffi.call/cls_uchar_va.c b/testsuite/libffi.closures/cls_uchar_va.c
index 6491c5b..6491c5b 100644
--- a/testsuite/libffi.call/cls_uchar_va.c
+++ b/testsuite/libffi.closures/cls_uchar_va.c
diff --git a/testsuite/libffi.call/cls_uint.c b/testsuite/libffi.closures/cls_uint.c
index 885cff5..885cff5 100644
--- a/testsuite/libffi.call/cls_uint.c
+++ b/testsuite/libffi.closures/cls_uint.c
diff --git a/testsuite/libffi.call/cls_uint_va.c b/testsuite/libffi.closures/cls_uint_va.c
index b04cfd1..b04cfd1 100644
--- a/testsuite/libffi.call/cls_uint_va.c
+++ b/testsuite/libffi.closures/cls_uint_va.c
diff --git a/testsuite/libffi.call/cls_ulong_va.c b/testsuite/libffi.closures/cls_ulong_va.c
index 0315082..0315082 100644
--- a/testsuite/libffi.call/cls_ulong_va.c
+++ b/testsuite/libffi.closures/cls_ulong_va.c
diff --git a/testsuite/libffi.call/cls_ulonglong.c b/testsuite/libffi.closures/cls_ulonglong.c
index 62f2cae..62f2cae 100644
--- a/testsuite/libffi.call/cls_ulonglong.c
+++ b/testsuite/libffi.closures/cls_ulonglong.c
diff --git a/testsuite/libffi.call/cls_ushort.c b/testsuite/libffi.closures/cls_ushort.c
index a00100e..a00100e 100644
--- a/testsuite/libffi.call/cls_ushort.c
+++ b/testsuite/libffi.closures/cls_ushort.c
diff --git a/testsuite/libffi.call/cls_ushort_va.c b/testsuite/libffi.closures/cls_ushort_va.c
index 37aa106..37aa106 100644
--- a/testsuite/libffi.call/cls_ushort_va.c
+++ b/testsuite/libffi.closures/cls_ushort_va.c
diff --git a/testsuite/libffi.closures/ffitest.h b/testsuite/libffi.closures/ffitest.h
new file mode 100644
index 0000000..cfce1ad
--- /dev/null
+++ b/testsuite/libffi.closures/ffitest.h
@@ -0,0 +1,138 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <fcntl.h>
+#include <ffi.h>
+#include "fficonfig.h"
+
+#if defined HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#if defined HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+#define MAX_ARGS 256
+
+#define CHECK(x) (void)(!(x) ? (abort(), 1) : 0)
+
+/* Define macros so that compilers other than gcc can run the tests. */
+#undef __UNUSED__
+#if defined(__GNUC__)
+#define __UNUSED__ __attribute__((__unused__))
+#define __STDCALL__ __attribute__((stdcall))
+#define __THISCALL__ __attribute__((thiscall))
+#define __FASTCALL__ __attribute__((fastcall))
+#define __MSABI__ __attribute__((ms_abi))
+#else
+#define __UNUSED__
+#define __STDCALL__ __stdcall
+#define __THISCALL__ __thiscall
+#define __FASTCALL__ __fastcall
+#endif
+
+#ifndef ABI_NUM
+#define ABI_NUM FFI_DEFAULT_ABI
+#define ABI_ATTR
+#endif
+
+/* 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. */
+#if defined(_WIN64) | defined(_WIN32)
+#define PRIdLL "I64d"
+#define PRIuLL "I64u"
+#else
+#define PRIdLL "lld"
+#define PRIuLL "llu"
+#endif
+
+/* Tru64 UNIX kludge. */
+#if defined(__alpha__) && defined(__osf__)
+/* Tru64 UNIX V4.0 doesn't support %lld/%lld, but long is 64-bit. */
+#undef PRIdLL
+#define PRIdLL "ld"
+#undef PRIuLL
+#define PRIuLL "lu"
+#define PRId8 "hd"
+#define PRIu8 "hu"
+#define PRId64 "ld"
+#define PRIu64 "lu"
+#define PRIuPTR "lu"
+#endif
+
+/* PA HP-UX kludge. */
+#if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR)
+#define PRIuPTR "lu"
+#endif
+
+/* IRIX kludge. */
+#if defined(__sgi)
+/* IRIX 6.5 <inttypes.h> provides all definitions, but only for C99
+ compilations. */
+#define PRId8 "hhd"
+#define PRIu8 "hhu"
+#if (_MIPS_SZLONG == 32)
+#define PRId64 "lld"
+#define PRIu64 "llu"
+#endif
+/* This doesn't match <inttypes.h>, which always has "lld" here, but the
+ arguments are uint64_t, int64_t, which are unsigned long, long for
+ 64-bit in <sgidefs.h>. */
+#if (_MIPS_SZLONG == 64)
+#define PRId64 "ld"
+#define PRIu64 "lu"
+#endif
+/* This doesn't match <inttypes.h>, which has "u" here, but the arguments
+ are uintptr_t, which is always unsigned long. */
+#define PRIuPTR "lu"
+#endif
+
+/* Solaris < 10 kludge. */
+#if defined(__sun__) && defined(__svr4__) && !defined(PRIuPTR)
+#if defined(__arch64__) || defined (__x86_64__)
+#define PRIuPTR "lu"
+#else
+#define PRIuPTR "u"
+#endif
+#endif
+
+/* MSVC kludge. */
+#if defined _MSC_VER
+#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
+#define PRIuPTR "lu"
+#define PRIu8 "u"
+#define PRId8 "d"
+#define PRIu64 "I64u"
+#define PRId64 "I64d"
+#endif
+#endif
+
+#ifndef PRIuPTR
+#define PRIuPTR "u"
+#endif