mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
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.
This commit is contained in:
parent
c35db50ff5
commit
c6be839efd
@ -1,5 +1,10 @@
|
|||||||
2017-01-09 Joseph Myers <joseph@codesourcery.com>
|
2017-01-09 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/microblaze/localplt.data (__pread64):
|
* sysdeps/unix/sysv/linux/microblaze/localplt.data (__pread64):
|
||||||
Add libc.so PLT entry.
|
Add libc.so PLT entry.
|
||||||
(__tls_get_addr): Make ld.so PLT entry optional.
|
(__tls_get_addr): Make ld.so PLT entry optional.
|
||||||
|
@ -208,6 +208,9 @@ fe_tests (void)
|
|||||||
test_exceptions ("feclearexcept (FE_ALL_EXCEPT) clears all exceptions",
|
test_exceptions ("feclearexcept (FE_ALL_EXCEPT) clears all exceptions",
|
||||||
NO_EXC, 0);
|
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 */
|
/* raise all exceptions and test if all are raised */
|
||||||
feraiseexcept (FE_ALL_EXCEPT);
|
feraiseexcept (FE_ALL_EXCEPT);
|
||||||
test_exceptions ("feraiseexcept (FE_ALL_EXCEPT) raises all exceptions",
|
test_exceptions ("feraiseexcept (FE_ALL_EXCEPT) raises all exceptions",
|
||||||
@ -657,8 +660,9 @@ feholdexcept_tests (void)
|
|||||||
#ifdef FE_DIVBYZERO
|
#ifdef FE_DIVBYZERO
|
||||||
feraiseexcept (FE_DIVBYZERO);
|
feraiseexcept (FE_DIVBYZERO);
|
||||||
#endif
|
#endif
|
||||||
test_exceptions ("feholdexcept_tests FE_DIVBYZERO test",
|
if (EXCEPTION_TESTS (float))
|
||||||
DIVBYZERO_EXC, 0);
|
test_exceptions ("feholdexcept_tests FE_DIVBYZERO test",
|
||||||
|
DIVBYZERO_EXC, 0);
|
||||||
res = feholdexcept (&saved);
|
res = feholdexcept (&saved);
|
||||||
if (res != 0)
|
if (res != 0)
|
||||||
{
|
{
|
||||||
@ -667,7 +671,7 @@ feholdexcept_tests (void)
|
|||||||
}
|
}
|
||||||
#if defined FE_TONEAREST && defined FE_TOWARDZERO
|
#if defined FE_TONEAREST && defined FE_TOWARDZERO
|
||||||
res = fesetround (FE_TOWARDZERO);
|
res = fesetround (FE_TOWARDZERO);
|
||||||
if (res != 0)
|
if (res != 0 && ROUNDING_TESTS (float, FE_TOWARDZERO))
|
||||||
{
|
{
|
||||||
printf ("fesetround failed: %d\n", res);
|
printf ("fesetround failed: %d\n", res);
|
||||||
++count_errors;
|
++count_errors;
|
||||||
@ -676,8 +680,9 @@ feholdexcept_tests (void)
|
|||||||
test_exceptions ("feholdexcept_tests 0 test", NO_EXC, 0);
|
test_exceptions ("feholdexcept_tests 0 test", NO_EXC, 0);
|
||||||
#ifdef FE_INVALID
|
#ifdef FE_INVALID
|
||||||
feraiseexcept (FE_INVALID);
|
feraiseexcept (FE_INVALID);
|
||||||
test_exceptions ("feholdexcept_tests FE_INVALID test",
|
if (EXCEPTION_TESTS (float))
|
||||||
INVALID_EXC, 0);
|
test_exceptions ("feholdexcept_tests FE_INVALID test",
|
||||||
|
INVALID_EXC, 0);
|
||||||
#endif
|
#endif
|
||||||
res = feupdateenv (&saved);
|
res = feupdateenv (&saved);
|
||||||
if (res != 0)
|
if (res != 0)
|
||||||
@ -693,15 +698,16 @@ feholdexcept_tests (void)
|
|||||||
++count_errors;
|
++count_errors;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
test_exceptions ("feholdexcept_tests FE_DIVBYZERO|FE_INVALID test",
|
if (EXCEPTION_TESTS (float))
|
||||||
DIVBYZERO_EXC | INVALID_EXC, 0);
|
test_exceptions ("feholdexcept_tests FE_DIVBYZERO|FE_INVALID test",
|
||||||
|
DIVBYZERO_EXC | INVALID_EXC, 0);
|
||||||
feclearexcept (FE_ALL_EXCEPT);
|
feclearexcept (FE_ALL_EXCEPT);
|
||||||
#ifdef FE_INVALID
|
#ifdef FE_INVALID
|
||||||
feraiseexcept (FE_INVALID);
|
feraiseexcept (FE_INVALID);
|
||||||
#endif
|
#endif
|
||||||
#if defined FE_TONEAREST && defined FE_UPWARD
|
#if defined FE_TONEAREST && defined FE_UPWARD
|
||||||
res = fesetround (FE_UPWARD);
|
res = fesetround (FE_UPWARD);
|
||||||
if (res != 0)
|
if (res != 0 && ROUNDING_TESTS (float, FE_UPWARD))
|
||||||
{
|
{
|
||||||
printf ("fesetround failed: %d\n", res);
|
printf ("fesetround failed: %d\n", res);
|
||||||
++count_errors;
|
++count_errors;
|
||||||
@ -724,8 +730,9 @@ feholdexcept_tests (void)
|
|||||||
test_exceptions ("feholdexcept_tests 0 2nd test", NO_EXC, 0);
|
test_exceptions ("feholdexcept_tests 0 2nd test", NO_EXC, 0);
|
||||||
#ifdef FE_INEXACT
|
#ifdef FE_INEXACT
|
||||||
feraiseexcept (FE_INEXACT);
|
feraiseexcept (FE_INEXACT);
|
||||||
test_exceptions ("feholdexcept_tests FE_INEXACT test",
|
if (EXCEPTION_TESTS (float))
|
||||||
INEXACT_EXC, 0);
|
test_exceptions ("feholdexcept_tests FE_INEXACT test",
|
||||||
|
INEXACT_EXC, 0);
|
||||||
#endif
|
#endif
|
||||||
res = feupdateenv (&saved2);
|
res = feupdateenv (&saved2);
|
||||||
if (res != 0)
|
if (res != 0)
|
||||||
@ -735,15 +742,16 @@ feholdexcept_tests (void)
|
|||||||
}
|
}
|
||||||
#if defined FE_TONEAREST && defined FE_UPWARD
|
#if defined FE_TONEAREST && defined FE_UPWARD
|
||||||
res = fegetround ();
|
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);
|
printf ("feupdateenv didn't restore rounding mode: %d\n", res);
|
||||||
++count_errors;
|
++count_errors;
|
||||||
}
|
}
|
||||||
fesetround (FE_TONEAREST);
|
fesetround (FE_TONEAREST);
|
||||||
#endif
|
#endif
|
||||||
test_exceptions ("feholdexcept_tests FE_INEXACT|FE_INVALID test",
|
if (EXCEPTION_TESTS (float))
|
||||||
INVALID_EXC | INEXACT_EXC, 0);
|
test_exceptions ("feholdexcept_tests FE_INEXACT|FE_INVALID test",
|
||||||
|
INVALID_EXC | INEXACT_EXC, 0);
|
||||||
feclearexcept (FE_ALL_EXCEPT);
|
feclearexcept (FE_ALL_EXCEPT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user