]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix math/test-nearbyint-except for no-exceptions configurations.
authorJoseph Myers <joseph@codesourcery.com>
Mon, 2 Jan 2017 20:47:17 +0000 (20:47 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Mon, 2 Jan 2017 20:47:17 +0000 (20:47 +0000)
The test math/test-nearbyint-except conditions some of its tests on an
EXCEPTION_TESTS call, not not all that need such a condition.  This
patch fixes it to use such a conditional for all its tests and to
return 77 (UNSUPPORTED) if none of the floating-point types tested
support exceptions.

Tested for mips64 soft float (where the test previously failed and is
now UNSUPPORTED); also tested for x86_64 to make sure the test still
PASSes in exceptions-supported cases.

* math/test-nearbyint-except.c: Include <stdbool.h>.
(any_supported): New variable.
(TEST_FUNC): Return early if !EXCEPTION_TESTS (FLOAT).  Otherwise
set any_supported.
(do_test): Return 77 if no floating-point type supported
exceptions.

ChangeLog
math/test-nearbyint-except.c

index e6b850ce693b76da234a76d2ee8de14391f51dbc..b3b6df53ad0872cde5539bd1c6a7c29fce255728 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2017-01-02  Joseph Myers  <joseph@codesourcery.com>
 
+       * math/test-nearbyint-except.c: Include <stdbool.h>.
+       (any_supported): New variable.
+       (TEST_FUNC): Return early if !EXCEPTION_TESTS (FLOAT).  Otherwise
+       set any_supported.
+       (do_test): Return 77 if no floating-point type supported
+       exceptions.
+
        * sysdeps/mips/math-tests.h (SNAN_TESTS_PRESERVE_PAYLOAD): Do not
        condition on [__mips_hard_float].
 
index 61b999f179aa9d793e460c87cc3f9ac70526535a..e33846c1d0974c89af96e1dcaf06188a237ddbd2 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <fenv.h>
 #include <math.h>
+#include <stdbool.h>
 #include <stdio.h>
 
 #include <math-tests.h>
 # define FE_INVALID 0
 #endif
 
+static bool any_supported = false;
+
 #define TEST_FUNC(NAME, FLOAT, SUFFIX)                                 \
 static int                                                             \
 NAME (void)                                                            \
 {                                                                      \
   int result = 0;                                                      \
+  if (!EXCEPTION_TESTS (FLOAT))                                                \
+    return 0;                                                          \
+  any_supported = true;                                                        \
   volatile FLOAT a, b __attribute__ ((unused));                                \
   a = 1.0;                                                             \
   /* nearbyint must not clear already-raised exceptions.  */           \
@@ -44,7 +50,7 @@ NAME (void)                                                           \
       result = 1;                                                      \
     }                                                                  \
   /* But it mustn't lose exceptions from sNaN arguments.  */           \
-  if (SNAN_TESTS (FLOAT) && EXCEPTION_TESTS (FLOAT))                   \
+  if (SNAN_TESTS (FLOAT))                                              \
     {                                                                  \
       static volatile FLOAT snan = __builtin_nans ## SUFFIX ("");      \
       volatile FLOAT c __attribute__ ((unused));                       \
@@ -75,6 +81,8 @@ do_test (void)
 #ifndef NO_LONG_DOUBLE
   result |= ldouble_test ();
 #endif
+  if (!any_supported)
+    return 77;
   return result;
 }