Make pr30957-1.c pass rather xfail
authorTom de Vries <tom@codesourcery.com>
Sun, 22 Feb 2015 10:54:56 +0000 (10:54 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Sun, 22 Feb 2015 10:54:56 +0000 (10:54 +0000)
2015-02-22  Tom de Vries  <tom@codesourcery.com>

* gcc.dg/pr30957-1.c: Make pr30957-1.c pass rather xfail.

From-SVN: r220893

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr30957-1.c

index e91532cb6efb08992d82d8d57a41e87cc82e4404..5ef35b9292dad4055cdf4feeaf7f6a36e94b0d22 100644 (file)
@@ -1,3 +1,7 @@
+2015-02-22  Tom de Vries  <tom@codesourcery.com>
+
+       * gcc.dg/pr30957-1.c: Make pr30957-1.c pass rather xfail.
+
 2015-02-21  Arnaud Charlet  <charlet@adacore.com>
 
        PR ada/65156
index 65b98fa533d58747a9411b354cf11c3157a1be5e..f34c6e537037643c3b9f7c875cb549f1650bf509 100644 (file)
@@ -1,12 +1,9 @@
-/* { dg-do run { xfail *-*-* } } */
-/* We don't (and don't want to) perform this optimisation on soft-float
-   targets, where each addition is a library call.  This test requires
-   -fassociative-math for enabling the variable-expansion as well as
-   -fsigned-zeros for honoring the sign of zero; but
-   they can not co-exist; also under -funsafe-math-optimizations, so we
-   expect it to fail.  */
+/* { dg-do run } */
+/* We don't (and don't want to) perform this optimisation on soft-float targets,
+   where each addition is a library call.  /
 /* { dg-require-effective-target hard_float } */
-/* { dg-options "-O2 -funroll-loops -funsafe-math-optimizations -fvariable-expansion-in-unroller -fdump-rtl-loop2_unroll" } */
+/* -fassociative-math requires -fno-trapping-math and -fno-signed-zeros. */
+/* { dg-options "-O2 -funroll-loops -fassociative-math -fno-trapping-math -fno-signed-zeros -fvariable-expansion-in-unroller -fdump-rtl-loop2_unroll" } */
 
 extern void abort (void);
 extern void exit (int);
@@ -26,12 +23,15 @@ foo (float d, int n)
 int
 main ()
 {
-  if (__builtin_copysignf (1.0, foo (0.0 / -5.0, 10)) != -1.0)
+  /* When compiling standard compliant we expect foo to return -0.0.  But the
+     variable expansion during unrolling optimization (for this testcase enabled
+     by non-compliant -fassociative-math) instantiates copy(s) of the
+     accumulator which it initializes with +0.0.  Hence we expect that foo
+     returns +0.0.  */
+  if (__builtin_copysignf (1.0, foo (0.0 / -5.0, 10)) != 1.0)
     abort ();
   exit (0);
 }
 
 /* { dg-final { scan-rtl-dump "Expanding Accumulator" "loop2_unroll" } } */
 /* { dg-final { cleanup-rtl-dump "loop*" } } */
-
-