diff --git a/testsuite/libffi.closures/closure.exp b/testsuite/libffi.closures/closure.exp
new file mode 100644
index 00000000..eafbef0f
--- /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
+# .
+
+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
similarity index 100%
rename from testsuite/libffi.call/closure_fn0.c
rename to testsuite/libffi.closures/closure_fn0.c
diff --git a/testsuite/libffi.call/closure_fn1.c b/testsuite/libffi.closures/closure_fn1.c
similarity index 100%
rename from testsuite/libffi.call/closure_fn1.c
rename to testsuite/libffi.closures/closure_fn1.c
diff --git a/testsuite/libffi.call/closure_fn2.c b/testsuite/libffi.closures/closure_fn2.c
similarity index 100%
rename from testsuite/libffi.call/closure_fn2.c
rename to testsuite/libffi.closures/closure_fn2.c
diff --git a/testsuite/libffi.call/closure_fn3.c b/testsuite/libffi.closures/closure_fn3.c
similarity index 100%
rename from testsuite/libffi.call/closure_fn3.c
rename to testsuite/libffi.closures/closure_fn3.c
diff --git a/testsuite/libffi.call/closure_fn4.c b/testsuite/libffi.closures/closure_fn4.c
similarity index 100%
rename from testsuite/libffi.call/closure_fn4.c
rename to testsuite/libffi.closures/closure_fn4.c
diff --git a/testsuite/libffi.call/closure_fn5.c b/testsuite/libffi.closures/closure_fn5.c
similarity index 100%
rename from testsuite/libffi.call/closure_fn5.c
rename to testsuite/libffi.closures/closure_fn5.c
diff --git a/testsuite/libffi.call/closure_fn6.c b/testsuite/libffi.closures/closure_fn6.c
similarity index 100%
rename from testsuite/libffi.call/closure_fn6.c
rename to testsuite/libffi.closures/closure_fn6.c
diff --git a/testsuite/libffi.call/closure_loc_fn0.c b/testsuite/libffi.closures/closure_loc_fn0.c
similarity index 100%
rename from testsuite/libffi.call/closure_loc_fn0.c
rename to testsuite/libffi.closures/closure_loc_fn0.c
diff --git a/testsuite/libffi.call/closure_simple.c b/testsuite/libffi.closures/closure_simple.c
similarity index 100%
rename from testsuite/libffi.call/closure_simple.c
rename to testsuite/libffi.closures/closure_simple.c
diff --git a/testsuite/libffi.call/cls_12byte.c b/testsuite/libffi.closures/cls_12byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_12byte.c
rename to testsuite/libffi.closures/cls_12byte.c
diff --git a/testsuite/libffi.call/cls_16byte.c b/testsuite/libffi.closures/cls_16byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_16byte.c
rename to testsuite/libffi.closures/cls_16byte.c
diff --git a/testsuite/libffi.call/cls_18byte.c b/testsuite/libffi.closures/cls_18byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_18byte.c
rename to testsuite/libffi.closures/cls_18byte.c
diff --git a/testsuite/libffi.call/cls_19byte.c b/testsuite/libffi.closures/cls_19byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_19byte.c
rename to testsuite/libffi.closures/cls_19byte.c
diff --git a/testsuite/libffi.call/cls_1_1byte.c b/testsuite/libffi.closures/cls_1_1byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_1_1byte.c
rename to testsuite/libffi.closures/cls_1_1byte.c
diff --git a/testsuite/libffi.call/cls_20byte.c b/testsuite/libffi.closures/cls_20byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_20byte.c
rename to testsuite/libffi.closures/cls_20byte.c
diff --git a/testsuite/libffi.call/cls_20byte1.c b/testsuite/libffi.closures/cls_20byte1.c
similarity index 100%
rename from testsuite/libffi.call/cls_20byte1.c
rename to testsuite/libffi.closures/cls_20byte1.c
diff --git a/testsuite/libffi.call/cls_24byte.c b/testsuite/libffi.closures/cls_24byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_24byte.c
rename to testsuite/libffi.closures/cls_24byte.c
diff --git a/testsuite/libffi.call/cls_2byte.c b/testsuite/libffi.closures/cls_2byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_2byte.c
rename to testsuite/libffi.closures/cls_2byte.c
diff --git a/testsuite/libffi.call/cls_3_1byte.c b/testsuite/libffi.closures/cls_3_1byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_3_1byte.c
rename to testsuite/libffi.closures/cls_3_1byte.c
diff --git a/testsuite/libffi.call/cls_3byte1.c b/testsuite/libffi.closures/cls_3byte1.c
similarity index 100%
rename from testsuite/libffi.call/cls_3byte1.c
rename to testsuite/libffi.closures/cls_3byte1.c
diff --git a/testsuite/libffi.call/cls_3byte2.c b/testsuite/libffi.closures/cls_3byte2.c
similarity index 100%
rename from testsuite/libffi.call/cls_3byte2.c
rename to testsuite/libffi.closures/cls_3byte2.c
diff --git a/testsuite/libffi.call/cls_3float.c b/testsuite/libffi.closures/cls_3float.c
similarity index 100%
rename from testsuite/libffi.call/cls_3float.c
rename to testsuite/libffi.closures/cls_3float.c
diff --git a/testsuite/libffi.call/cls_4_1byte.c b/testsuite/libffi.closures/cls_4_1byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_4_1byte.c
rename to testsuite/libffi.closures/cls_4_1byte.c
diff --git a/testsuite/libffi.call/cls_4byte.c b/testsuite/libffi.closures/cls_4byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_4byte.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_5_1_byte.c
rename to testsuite/libffi.closures/cls_5_1_byte.c
diff --git a/testsuite/libffi.call/cls_5byte.c b/testsuite/libffi.closures/cls_5byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_5byte.c
rename to testsuite/libffi.closures/cls_5byte.c
diff --git a/testsuite/libffi.call/cls_64byte.c b/testsuite/libffi.closures/cls_64byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_64byte.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_6_1_byte.c
rename to testsuite/libffi.closures/cls_6_1_byte.c
diff --git a/testsuite/libffi.call/cls_6byte.c b/testsuite/libffi.closures/cls_6byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_6byte.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_7_1_byte.c
rename to testsuite/libffi.closures/cls_7_1_byte.c
diff --git a/testsuite/libffi.call/cls_7byte.c b/testsuite/libffi.closures/cls_7byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_7byte.c
rename to testsuite/libffi.closures/cls_7byte.c
diff --git a/testsuite/libffi.call/cls_8byte.c b/testsuite/libffi.closures/cls_8byte.c
similarity index 100%
rename from testsuite/libffi.call/cls_8byte.c
rename to testsuite/libffi.closures/cls_8byte.c
diff --git a/testsuite/libffi.call/cls_9byte1.c b/testsuite/libffi.closures/cls_9byte1.c
similarity index 100%
rename from testsuite/libffi.call/cls_9byte1.c
rename to testsuite/libffi.closures/cls_9byte1.c
diff --git a/testsuite/libffi.call/cls_9byte2.c b/testsuite/libffi.closures/cls_9byte2.c
similarity index 100%
rename from testsuite/libffi.call/cls_9byte2.c
rename to testsuite/libffi.closures/cls_9byte2.c
diff --git a/testsuite/libffi.call/cls_align_double.c b/testsuite/libffi.closures/cls_align_double.c
similarity index 100%
rename from testsuite/libffi.call/cls_align_double.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_float.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_longdouble.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_longdouble_split.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_longdouble_split2.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_pointer.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_sint16.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_sint32.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_sint64.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_uint16.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_uint32.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_align_uint64.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_dbls_struct.c
rename to testsuite/libffi.closures/cls_dbls_struct.c
diff --git a/testsuite/libffi.call/cls_double.c b/testsuite/libffi.closures/cls_double.c
similarity index 100%
rename from testsuite/libffi.call/cls_double.c
rename to testsuite/libffi.closures/cls_double.c
diff --git a/testsuite/libffi.call/cls_double_va.c b/testsuite/libffi.closures/cls_double_va.c
similarity index 100%
rename from testsuite/libffi.call/cls_double_va.c
rename to testsuite/libffi.closures/cls_double_va.c
diff --git a/testsuite/libffi.call/cls_float.c b/testsuite/libffi.closures/cls_float.c
similarity index 100%
rename from testsuite/libffi.call/cls_float.c
rename to testsuite/libffi.closures/cls_float.c
diff --git a/testsuite/libffi.call/cls_longdouble.c b/testsuite/libffi.closures/cls_longdouble.c
similarity index 100%
rename from testsuite/libffi.call/cls_longdouble.c
rename to testsuite/libffi.closures/cls_longdouble.c
diff --git a/testsuite/libffi.call/cls_longdouble_va.c b/testsuite/libffi.closures/cls_longdouble_va.c
similarity index 100%
rename from testsuite/libffi.call/cls_longdouble_va.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_many_mixed_args.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_many_mixed_float_double.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_multi_schar.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_multi_sshort.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_multi_sshortchar.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_multi_uchar.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_multi_ushort.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_multi_ushortchar.c
rename to testsuite/libffi.closures/cls_multi_ushortchar.c
diff --git a/testsuite/libffi.call/cls_pointer.c b/testsuite/libffi.closures/cls_pointer.c
similarity index 100%
rename from testsuite/libffi.call/cls_pointer.c
rename to testsuite/libffi.closures/cls_pointer.c
diff --git a/testsuite/libffi.call/cls_pointer_stack.c b/testsuite/libffi.closures/cls_pointer_stack.c
similarity index 100%
rename from testsuite/libffi.call/cls_pointer_stack.c
rename to testsuite/libffi.closures/cls_pointer_stack.c
diff --git a/testsuite/libffi.call/cls_schar.c b/testsuite/libffi.closures/cls_schar.c
similarity index 100%
rename from testsuite/libffi.call/cls_schar.c
rename to testsuite/libffi.closures/cls_schar.c
diff --git a/testsuite/libffi.call/cls_sint.c b/testsuite/libffi.closures/cls_sint.c
similarity index 100%
rename from testsuite/libffi.call/cls_sint.c
rename to testsuite/libffi.closures/cls_sint.c
diff --git a/testsuite/libffi.call/cls_sshort.c b/testsuite/libffi.closures/cls_sshort.c
similarity index 100%
rename from testsuite/libffi.call/cls_sshort.c
rename to testsuite/libffi.closures/cls_sshort.c
diff --git a/testsuite/libffi.call/cls_struct_va1.c b/testsuite/libffi.closures/cls_struct_va1.c
similarity index 100%
rename from testsuite/libffi.call/cls_struct_va1.c
rename to testsuite/libffi.closures/cls_struct_va1.c
diff --git a/testsuite/libffi.call/cls_uchar.c b/testsuite/libffi.closures/cls_uchar.c
similarity index 100%
rename from testsuite/libffi.call/cls_uchar.c
rename to testsuite/libffi.closures/cls_uchar.c
diff --git a/testsuite/libffi.call/cls_uchar_va.c b/testsuite/libffi.closures/cls_uchar_va.c
similarity index 100%
rename from testsuite/libffi.call/cls_uchar_va.c
rename to testsuite/libffi.closures/cls_uchar_va.c
diff --git a/testsuite/libffi.call/cls_uint.c b/testsuite/libffi.closures/cls_uint.c
similarity index 100%
rename from testsuite/libffi.call/cls_uint.c
rename to testsuite/libffi.closures/cls_uint.c
diff --git a/testsuite/libffi.call/cls_uint_va.c b/testsuite/libffi.closures/cls_uint_va.c
similarity index 100%
rename from testsuite/libffi.call/cls_uint_va.c
rename to 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
similarity index 100%
rename from testsuite/libffi.call/cls_ulong_va.c
rename to testsuite/libffi.closures/cls_ulong_va.c
diff --git a/testsuite/libffi.call/cls_ulonglong.c b/testsuite/libffi.closures/cls_ulonglong.c
similarity index 100%
rename from testsuite/libffi.call/cls_ulonglong.c
rename to testsuite/libffi.closures/cls_ulonglong.c
diff --git a/testsuite/libffi.call/cls_ushort.c b/testsuite/libffi.closures/cls_ushort.c
similarity index 100%
rename from testsuite/libffi.call/cls_ushort.c
rename to testsuite/libffi.closures/cls_ushort.c
diff --git a/testsuite/libffi.call/cls_ushort_va.c b/testsuite/libffi.closures/cls_ushort_va.c
similarity index 100%
rename from testsuite/libffi.call/cls_ushort_va.c
rename to 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 00000000..cfce1ad5
--- /dev/null
+++ b/testsuite/libffi.closures/ffitest.h
@@ -0,0 +1,138 @@
+#include
+#include
+#include
+#include
+#include
+#include "fficonfig.h"
+
+#if defined HAVE_STDINT_H
+#include
+#endif
+
+#if defined HAVE_INTTYPES_H
+#include
+#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
+# 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
+# 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 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 , which always has "lld" here, but the
+ arguments are uint64_t, int64_t, which are unsigned long, long for
+ 64-bit in . */
+#if (_MIPS_SZLONG == 64)
+#define PRId64 "ld"
+#define PRIu64 "lu"
+#endif
+/* This doesn't match , 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