On Wed, Jan 30, 2019 at 10:37 AM Uros Bizjak <ubiz...@gmail.com> wrote:
> > Your decription suggests that this fixes PR fortran/88678. > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88678 > > Actually, additional patch is needed to fully fix PR88678. > support_fpu_trap enables and disables exceptions and this may fire > spurious exceptions. Just assume that all supported flags can generate > exceptions, as is done in the additional patch, posted to PR88678. The remaining ieee_*.f90 tests and large_1.f90 test failures on powerpc64 are fixed by the attached patch. 2019-01-30 Uroš Bizjak <ubiz...@gmail.com> PR fortran/88678 * config/fpu-glibc.h (support_fpu_trap): Do not try to enable exceptions to determine if exception is supported. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32} (with appropriate config.host tweak to select fpu-glibc.header), alphaev68-linux-gnu and as reported in the PR, on powerpc64le-linux-gnu by Peter. OK for mainline? Uros.
diff --git a/libgfortran/config/fpu-glibc.h b/libgfortran/config/fpu-glibc.h index c24bb6cbcd92..df2588e038d8 100644 --- a/libgfortran/config/fpu-glibc.h +++ b/libgfortran/config/fpu-glibc.h @@ -121,41 +129,7 @@ get_fpu_trap_exceptions (void) int support_fpu_trap (int flag) { - int exceptions = 0; - int old; - - if (!support_fpu_flag (flag)) - return 0; - -#ifdef FE_INVALID - if (flag & GFC_FPE_INVALID) exceptions |= FE_INVALID; -#endif - -#ifdef FE_DIVBYZERO - if (flag & GFC_FPE_ZERO) exceptions |= FE_DIVBYZERO; -#endif - -#ifdef FE_OVERFLOW - if (flag & GFC_FPE_OVERFLOW) exceptions |= FE_OVERFLOW; -#endif - -#ifdef FE_UNDERFLOW - if (flag & GFC_FPE_UNDERFLOW) exceptions |= FE_UNDERFLOW; -#endif - -#ifdef FE_DENORMAL - if (flag & GFC_FPE_DENORMAL) exceptions |= FE_DENORMAL; -#endif - -#ifdef FE_INEXACT - if (flag & GFC_FPE_INEXACT) exceptions |= FE_INEXACT; -#endif - - old = feenableexcept (exceptions); - if (old == -1) - return 0; - fedisableexcept (exceptions & ~old); - return 1; + return support_fpu_flag (flag); }