]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libffi/testsuite/libffi.call/float2.c
libffi: Sync with libffi 3.4.2
[thirdparty/gcc.git] / libffi / testsuite / libffi.call / float2.c
index 55b9fba86f851e89464212311f0adea4ca8094d6..57cd9e30f92866a25e49ae849aa5ef4255202218 100644 (file)
@@ -3,7 +3,7 @@
    Limitations:        none.
    PR:         none.
    Originator: From the original ffitest.c  */
-/* { dg-do run { target { ! hppa*-*-hpux* } } } */
+/* { dg-do run } */
 
 #include "ffitest.h"
 #include "float.h"
@@ -22,6 +22,7 @@ int main (void)
   void *values[MAX_ARGS];
   float f;
   long double ld;
+  long double original;
 
   args[0] = &ffi_type_float;
   values[0] = &f;
@@ -32,24 +33,26 @@ int main (void)
 
   f = 3.14159;
 
-#if 1
-  /* This is ifdef'd out for now. long double support under SunOS/gcc
-     is pretty much non-existent.  You'll get the odd bus error in library
-     routines like printf().  */
+#if defined(__sun) && defined(__GNUC__)
+  /* long double support under SunOS/gcc is pretty much non-existent.
+     You'll get the odd bus error in library routines like printf() */
+#else
   printf ("%Lf\n", ldblit(f));
 #endif
+
   ld = 666;
   ffi_call(&cif, FFI_FN(ldblit), &ld, values);
 
-#if 1
-  /* This is ifdef'd out for now. long double support under SunOS/gcc
-     is pretty much non-existent.  You'll get the odd bus error in library
-     routines like printf().  */
+#if defined(__sun) && defined(__GNUC__)
+  /* long double support under SunOS/gcc is pretty much non-existent.
+     You'll get the odd bus error in library routines like printf() */
+#else
   printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON);
 #endif
 
   /* These are not always the same!! Check for a reasonable delta */
-  if (fabsl(ld - ldblit(f)) < LDBL_EPSILON)
+  original = ldblit(f);
+  if (((ld > original) ? (ld - original) : (original - ld)) < LDBL_EPSILON)
     puts("long double return value tests ok!");
   else
     CHECK(0);