Test for PR tree-optimization/17892.
authorFariborz Jahanian <fjahanian@gcc.gnu.org>
Wed, 10 Nov 2004 19:06:53 +0000 (19:06 +0000)
committerFariborz Jahanian <fjahanian@gcc.gnu.org>
Wed, 10 Nov 2004 19:06:53 +0000 (19:06 +0000)
From-SVN: r90447

gcc/testsuite/gcc.c-torture/execute/ieee/unsafe-fp-assoc-1.c [new file with mode: 0644]

diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/unsafe-fp-assoc-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/unsafe-fp-assoc-1.c
new file mode 100644 (file)
index 0000000..c15653c
--- /dev/null
@@ -0,0 +1,37 @@
+extern void abort();
+
+typedef union {
+       struct {
+  unsigned int hi;
+  unsigned int lo;
+ } i;
+       double d;
+} hexdouble;
+
+static const double twoTo52 = 0x1.0p+52;
+
+void func ( double x )
+{
+      hexdouble argument;
+      register double y, z;
+      unsigned int xHead;
+      argument.d = x;
+      xHead = argument.i.hi & 0x7fffffff;
+      if (__builtin_expect(!!(xHead < 0x43300000u), 1))
+       {
+                  y = ( x - twoTo52 ) + twoTo52;
+                  if ( y != x )
+                   abort();
+                  z = x - 0.5;                 
+                  y = ( z - twoTo52 ) + twoTo52;
+                  if ( y == (( x - twoTo52 ) + twoTo52) )
+                   abort();
+       }
+     return;
+}
+
+int main()
+{
+       func((double)1.00);
+       return 0;
+}