The fallback implementation of fesetexceptflag currently fails if any
exceptions are specified. It should always succeed, because the
exception state is always that all exceptions (if any are defined in
<fenv.h> but not supported in this configuration) are always clear,
just as fallback fetestexcept always succeeds and fallback fesetenv
always succeeds unless asked to set FE_NOMASK_ENV.
This patch fixes it accordingly. Together with the patch to
test-fexcept.c to allow feraiseexcept to fail in another place, this
stops that test from failing for MIPS soft-float.
Tested for mips64 soft-float.
[BZ #21028]
* math/fsetexcptflg.c (__fesetexceptflag): Always return 0.
* math/test-fexcept.c (test_set): Allow failure of feraiseexcept
if EXCEPTION_TESTS returns false.
+2017-01-05 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #21028]
+ * math/fsetexcptflg.c (__fesetexceptflag): Always return 0.
+ * math/test-fexcept.c (test_set): Allow failure of feraiseexcept
+ if EXCEPTION_TESTS returns false.
+
2017-01-05 Adhemerval Zanella <adhemerval.zanella@linaro.org>
[BZ #20558]
int
__fesetexceptflag (const fexcept_t *flagp, int excepts)
{
- /* This always fails unless nothing needs to be done. */
- return (excepts != 0);
+ /* This always succeeds, as all exceptions are always clear
+ (including in the saved state) so nothing needs to be done. */
+ return 0;
}
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
strong_alias (__fesetexceptflag, __old_fesetexceptflag)
if (ret != 0)
{
puts ("feraiseexcept failed");
- result = 1;
+ if (initial == 0 || EXCEPTION_TESTS (float))
+ {
+ puts ("failure of feraiseexcept was unexpected");
+ result = 1;
+ }
+ else
+ puts ("failure of feraiseexcept OK, skipping further tests");
return result;
}
ret = fesetexceptflag (saved, mask);