From: Uros Bizjak Date: Mon, 10 Aug 2015 05:13:01 +0000 (+0200) Subject: re PR fortran/64022 ([F2003][IEEE] ieee_support_flag does not handle kind=10 and... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9ca287086f04612d8e53546ab5fb64d8b93c7f66;p=gcc.git re PR fortran/64022 ([F2003][IEEE] ieee_support_flag does not handle kind=10 and kind=16 REAL variables) PR fortran/64022 * gfortran.dg/ieee/large_4.f90: New test. From-SVN: r226755 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 24dd966e719..0e707eb8999 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-08-10 Uros Bizjak + + PR fortran/64022 + * gfortran.dg/ieee/large_4.f90: New test. + 2015-08-08 Bud Davis PR fortran/59746 @@ -93,8 +98,8 @@ 2015-08-05 Nick Clifton * gcc.target/rl78: New directory. - * gcc.target/rl78/rl78.exp: New file: Test driver. - * gcc.target/rl78/test_addm3.c: New file: Test adds. + * gcc.target/rl78/rl78.exp: New file: Test driver. + * gcc.target/rl78/test_addm3.c: New file: Test adds. 2015-08-05 Richard Biener diff --git a/gcc/testsuite/gfortran.dg/ieee/large_4.f90 b/gcc/testsuite/gfortran.dg/ieee/large_4.f90 new file mode 100644 index 00000000000..c653d299ce9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ieee/large_4.f90 @@ -0,0 +1,54 @@ +! { dg-do run } + +program test_underflow_control + use ieee_arithmetic + use iso_fortran_env + + ! kx and ky will be large real kinds, if supported, and single/double + ! otherwise + integer, parameter :: kx = & + max(ieee_selected_real_kind(precision(0.d0) + 1), kind(0.)) + integer, parameter :: ky = & + max(ieee_selected_real_kind(precision(0._kx) + 1), kind(0.d0)) + + logical l + real(kind=kx), volatile :: x + real(kind=ky), volatile :: y + + if (ieee_support_underflow_control(x)) then + + x = tiny(x) + call ieee_set_underflow_mode(.true.) + x = x / 2000._kx + if (x == 0) call abort + call ieee_get_underflow_mode(l) + if (.not. l) call abort + + x = tiny(x) + call ieee_set_underflow_mode(.false.) + x = x / 2000._kx + if (x > 0) call abort + call ieee_get_underflow_mode(l) + if (l) call abort + + end if + + if (ieee_support_underflow_control(y)) then + + y = tiny(y) + call ieee_set_underflow_mode(.true.) + y = y / 2000._ky + if (y == 0) call abort + call ieee_get_underflow_mode(l) + if (.not. l) call abort + + y = tiny(y) + call ieee_set_underflow_mode(.false.) + y = y / 2000._ky + if (y > 0) call abort + call ieee_get_underflow_mode(l) + if (l) call abort + + end if + +end program