diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-01-09 18:27:49 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-01-09 18:27:49 +0000 |
commit | c6be839efded78768ad3c70d7f2e913a9fb8603c (patch) | |
tree | b4f2c3f5989142b0cc87c72213db607efe261333 /math/test-fenv.c | |
parent | c35db50ff51480c39e5ce493561df1c4581da9fc (diff) | |
download | glibc-c6be839efded78768ad3c70d7f2e913a9fb8603c.zip glibc-c6be839efded78768ad3c70d7f2e913a9fb8603c.tar.gz glibc-c6be839efded78768ad3c70d7f2e913a9fb8603c.tar.bz2 |
Fix math/test-fenv for no-exceptions / no-rounding-modes configurations.
This patch fixes math/test-fenv.c to check EXCEPTION_TESTS and
ROUNDING_TESTS to avoid failing in cases where some exceptions or
rounding modes are defined but not supported at runtime.
Tested for mips64 soft float and for x86_64.
* math/test-fenv.c (fe_tests): Skip most tests when exceptions not
supported.
(feholdexcept_tests): Skip tests requiring exceptions or rounding
modes support if not supported.
Diffstat (limited to 'math/test-fenv.c')
-rw-r--r-- | math/test-fenv.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/math/test-fenv.c b/math/test-fenv.c index d698ec3..b24b3a1 100644 --- a/math/test-fenv.c +++ b/math/test-fenv.c @@ -208,6 +208,9 @@ fe_tests (void) test_exceptions ("feclearexcept (FE_ALL_EXCEPT) clears all exceptions", NO_EXC, 0); + /* Skip further tests here if exceptions not supported. */ + if (!EXCEPTION_TESTS (float) && FE_ALL_EXCEPT != 0) + return; /* raise all exceptions and test if all are raised */ feraiseexcept (FE_ALL_EXCEPT); test_exceptions ("feraiseexcept (FE_ALL_EXCEPT) raises all exceptions", @@ -657,8 +660,9 @@ feholdexcept_tests (void) #ifdef FE_DIVBYZERO feraiseexcept (FE_DIVBYZERO); #endif - test_exceptions ("feholdexcept_tests FE_DIVBYZERO test", - DIVBYZERO_EXC, 0); + if (EXCEPTION_TESTS (float)) + test_exceptions ("feholdexcept_tests FE_DIVBYZERO test", + DIVBYZERO_EXC, 0); res = feholdexcept (&saved); if (res != 0) { @@ -667,7 +671,7 @@ feholdexcept_tests (void) } #if defined FE_TONEAREST && defined FE_TOWARDZERO res = fesetround (FE_TOWARDZERO); - if (res != 0) + if (res != 0 && ROUNDING_TESTS (float, FE_TOWARDZERO)) { printf ("fesetround failed: %d\n", res); ++count_errors; @@ -676,8 +680,9 @@ feholdexcept_tests (void) test_exceptions ("feholdexcept_tests 0 test", NO_EXC, 0); #ifdef FE_INVALID feraiseexcept (FE_INVALID); - test_exceptions ("feholdexcept_tests FE_INVALID test", - INVALID_EXC, 0); + if (EXCEPTION_TESTS (float)) + test_exceptions ("feholdexcept_tests FE_INVALID test", + INVALID_EXC, 0); #endif res = feupdateenv (&saved); if (res != 0) @@ -693,15 +698,16 @@ feholdexcept_tests (void) ++count_errors; } #endif - test_exceptions ("feholdexcept_tests FE_DIVBYZERO|FE_INVALID test", - DIVBYZERO_EXC | INVALID_EXC, 0); + if (EXCEPTION_TESTS (float)) + test_exceptions ("feholdexcept_tests FE_DIVBYZERO|FE_INVALID test", + DIVBYZERO_EXC | INVALID_EXC, 0); feclearexcept (FE_ALL_EXCEPT); #ifdef FE_INVALID feraiseexcept (FE_INVALID); #endif #if defined FE_TONEAREST && defined FE_UPWARD res = fesetround (FE_UPWARD); - if (res != 0) + if (res != 0 && ROUNDING_TESTS (float, FE_UPWARD)) { printf ("fesetround failed: %d\n", res); ++count_errors; @@ -724,8 +730,9 @@ feholdexcept_tests (void) test_exceptions ("feholdexcept_tests 0 2nd test", NO_EXC, 0); #ifdef FE_INEXACT feraiseexcept (FE_INEXACT); - test_exceptions ("feholdexcept_tests FE_INEXACT test", - INEXACT_EXC, 0); + if (EXCEPTION_TESTS (float)) + test_exceptions ("feholdexcept_tests FE_INEXACT test", + INEXACT_EXC, 0); #endif res = feupdateenv (&saved2); if (res != 0) @@ -735,15 +742,16 @@ feholdexcept_tests (void) } #if defined FE_TONEAREST && defined FE_UPWARD res = fegetround (); - if (res != FE_UPWARD) + if (res != FE_UPWARD && ROUNDING_TESTS (float, FE_UPWARD)) { printf ("feupdateenv didn't restore rounding mode: %d\n", res); ++count_errors; } fesetround (FE_TONEAREST); #endif - test_exceptions ("feholdexcept_tests FE_INEXACT|FE_INVALID test", - INVALID_EXC | INEXACT_EXC, 0); + if (EXCEPTION_TESTS (float)) + test_exceptions ("feholdexcept_tests FE_INEXACT|FE_INVALID test", + INVALID_EXC | INEXACT_EXC, 0); feclearexcept (FE_ALL_EXCEPT); } |