[PATCH, fortran ieee]: PR 88678, Many gfortran.dg/ieee/ieee_X.f90 test cases fail starting with r267465
Uros Bizjak
ubizjak@gmail.com
Wed Jan 30 19:12:00 GMT 2019
On Wed, Jan 30, 2019 at 10:37 AM Uros Bizjak <ubizjak@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 <ubizjak@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.
-------------- next part --------------
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);
}
More information about the Fortran
mailing list