OSDN Git Service

New test execute/ieee/20000320-1.c.
authorgeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Mar 2000 01:24:15 +0000 (01:24 +0000)
committergeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Mar 2000 01:24:15 +0000 (01:24 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32700 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/gcc.c-torture/ChangeLog
gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c [new file with mode: 0644]

index b135529..97f6eef 100644 (file)
@@ -1,3 +1,7 @@
+2000-03-22  Geoff Keating  <geoffk@cygnus.com>
+
+       * execute/ieee/20000320-1.c: New test for denormals.
+
 Fri Mar 10 01:15:19 2000  Hans-Peter Nilsson  <hp@bitrange.com>
 
        * execute/divconst-2.c: Rewrite to check for standards-compliant
diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c
new file mode 100644 (file)
index 0000000..798e542
--- /dev/null
@@ -0,0 +1,67 @@
+#include <limits.h>
+#if UINT_MAX != 4294967295u || (ULONG_LONG_MAX != 18446744073709551615ull && ULONG_MAX != 18446744073709551615ull)
+int main(void) { exit (0); }
+#else
+#if ULONG_MAX != 18446744073709551615ull
+typedef unsigned long long ull;
+#else
+typedef unsigned long ull;
+#endif
+typedef unsigned ul;
+
+union fl {
+  float        f;
+  ul l;
+} uf;
+union dl {
+  double d;
+  ull ll;
+} ud;
+
+int failed = 0;
+
+void c(ull d, ul f)
+{
+  ud.ll = d;
+  uf.f = (float) ud.d;
+  if (uf.l != f)
+    {
+      failed++;
+    }
+}
+
+int main()
+{
+  if (sizeof (float) != sizeof (ul)
+      || sizeof (double) != sizeof (ull))
+    exit (0);
+  
+  c(0x3690000000000000ULL, 0x00000000U);
+  c(0x3690000000000001ULL, 0x00000001U);
+  c(0x369fffffffffffffULL, 0x00000001U);
+  c(0x36A0000000000000ULL, 0x00000001U);
+  c(0x36A7ffffffffffffULL, 0x00000001U);
+  c(0x36A8000000000000ULL, 0x00000002U);
+  c(0x36AfffffffffffffULL, 0x00000002U);
+  c(0x36b0000000000000ULL, 0x00000002U);
+  c(0x36b0000000000001ULL, 0x00000002U);
+  
+  c(0x380fffffdfffffffULL, 0x007fffffU);
+  c(0x380fffffe0000000ULL, 0x00800000U);
+  c(0x380fffffe0000001ULL, 0x00800000U);
+  c(0x380fffffffffffffULL, 0x00800000U);
+  c(0x3810000000000000ULL, 0x00800000U);
+  c(0x3810000000000001ULL, 0x00800000U);
+  c(0x3810000010000000ULL, 0x00800000U);
+  c(0x3810000010000001ULL, 0x00800001U);
+  c(0x381000002fffffffULL, 0x00800001U);
+  c(0x3810000030000000ULL, 0x00800002U);
+  c(0x3810000050000000ULL, 0x00800002U);
+  c(0x3810000050000001ULL, 0x00800003U);
+    
+  if (failed)
+    abort ();
+  else
+    exit (0);
+}
+#endif