[libffi] Fix several libffi testsuite failures on 64-bit SPARC and PowerPC (PR libffi/56033)

Rainer Orth <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.java.patches
Message-ID <[email protected]>
As reported in the PR, the recent libffi import into the gcc tree caused
a couple of testsuite failures on 64-bit big-endian targets (like SPARC
or PowerPC).

The following patch (mostly by Dominique) fixes them and finally gets us
clean libffi testsuite results.

Tested on sparc-sun-solaris2.11 on mainline and 4.8 branch and
x86_64-unknown-linux-gnu on mainline by myself and powerpc-apple-darwin9
by Dominique.

Ok for mainline and 4.8 branch where those failures represent
regressions from 4.7?

	Rainer


2013-05-15  Dominique d'Humieres  <[email protected]>
	    Rainer Orth  <[email protected]>

	PR libffi/56033
	* testsuite/libffi.call/cls_struct_va1.c (test_fn): Cast resp to
	ffi_arg *.
	* testsuite/libffi.call/cls_uint_va.c (cls_ret_T_fn): Likewise.
	* testsuite/libffi.call/va_1.c (main): Change res to ffi_arg.
	* testsuite/libffi.call/va_struct1.c (main): Likewise.


-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
pr56033.patch (text/x-patch, 1.8 KB)
# HG changeset patch
# Parent 04b67cdd4c35eb3ae10f94cfca092b7dd2dc358a
Patch for libffi/56033

diff --git a/libffi/testsuite/libffi.call/cls_struct_va1.c b/libffi/testsuite/libffi.call/cls_struct_va1.c
--- a/libffi/testsuite/libffi.call/cls_struct_va1.c
+++ b/libffi/testsuite/libffi.call/cls_struct_va1.c
@@ -35,7 +35,7 @@ test_fn (ffi_cif* cif __UNUSED__, void* 
   printf ("%d %d %d %d %d %d %d %d %d %d\n", n, s1.a, s1.b,
 	  l1.a, l1.b, l1.c, l1.d, l1.e,
 	  s2.a, s2.b);
-  * (int*) resp = 42;
+  * (ffi_arg*) resp = 42;
 }
 
 int
diff --git a/libffi/testsuite/libffi.call/cls_uint_va.c b/libffi/testsuite/libffi.call/cls_uint_va.c
--- a/libffi/testsuite/libffi.call/cls_uint_va.c
+++ b/libffi/testsuite/libffi.call/cls_uint_va.c
@@ -13,9 +13,9 @@ typedef unsigned int T;
 static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
 			 void* userdata __UNUSED__)
  {
-   *(T *)resp = *(T *)args[0];
+   *(ffi_arg *)resp = *(T *)args[0];
 
-   printf("%d: %d %d\n", *(T *)resp, *(T *)args[0], *(T *)args[1]);
+   printf("%d: %d %d\n", (int)*(ffi_arg *)resp, *(T *)args[0], *(T *)args[1]);
  }
 
 typedef T (*cls_ret_T)(T, ...);
diff --git a/libffi/testsuite/libffi.call/va_1.c b/libffi/testsuite/libffi.call/va_1.c
--- a/libffi/testsuite/libffi.call/va_1.c
+++ b/libffi/testsuite/libffi.call/va_1.c
@@ -94,7 +94,7 @@ main (void)
   struct large_tag l1;
 
   int n;
-  int res;
+  ffi_arg res;
 
   unsigned char uc;
   signed char sc;
diff --git a/libffi/testsuite/libffi.call/va_struct1.c b/libffi/testsuite/libffi.call/va_struct1.c
--- a/libffi/testsuite/libffi.call/va_struct1.c
+++ b/libffi/testsuite/libffi.call/va_struct1.c
@@ -61,7 +61,7 @@ main (void)
   struct large_tag l1;
 
   int n;
-  int res;
+  ffi_arg res;
 
   s_type.size = 0;
   s_type.alignment = 0;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.