20010226-1.c: Early exit for too-small long double.
authorRichard Henderson <rth@redhat.com>
Wed, 25 Sep 2002 17:14:48 +0000 (10:14 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 25 Sep 2002 17:14:48 +0000 (10:14 -0700)
        * gcc.c-torture/execute/ieee/20010226-1.c: Early exit for
        too-small long double.

From-SVN: r57502

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/ieee/20010226-1.c

index 4f958459e4886bf4c643db1aafedb4b4d710c00e..b4021bc765fb7758c6ae03bb3a5c8337c8fab218 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-25  Richard Henderson  <rth@redhat.com>
+
+       * gcc.c-torture/execute/ieee/20010226-1.c: Early exit for
+       too-small long double.
+
 2002-09-23  Hans-Peter Nilsson  <hp@axis.com>
 
        * gcc.dg/20020919-1.c: New test.
index 91c8da3b4d9c8f014b5c34f71abf2664cb828e89..daa2745e93944c11530228f6e7a466ac70b65ed2 100644 (file)
@@ -1,17 +1,24 @@
+#include <float.h>
+
 long double dfrom = 1.1;
 long double m1;
 long double m2;
 unsigned long mant_long;
 
-int main( )
+int main()
 {
-  m1 = dfrom / 2.0;
+  /* Some targets don't support a conforming long double type.  This is
+     common with very small parts which set long double == float.   Look
+     to see if the type has at least 32 bits of precision.  */
+  if (LDBL_EPSILON > 0x1p-31L)
+    return 0;
 
+  m1 = dfrom / 2.0;
   m2 = m1 * 4294967296.0;
   mant_long = ((unsigned long) m2) & 0xffffffff;
 
-  if ( mant_long == 0x8ccccccc)
-    exit (0);
+  if (mant_long == 0x8ccccccc)
+    return 0;
   else
     abort();
 }