aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2015-08-10 07:13:01 +0200
committerUros Bizjak <uros@gcc.gnu.org>2015-08-10 07:13:01 +0200
commit9ca287086f04612d8e53546ab5fb64d8b93c7f66 (patch)
tree9945bd544ac372857988de1ec77a57d427603c6d /gcc
parentf48dc6463d744261ee537a48fc34f9a9f6cc3e41 (diff)
downloadgcc-9ca287086f04612d8e53546ab5fb64d8b93c7f66.zip
gcc-9ca287086f04612d8e53546ab5fb64d8b93c7f66.tar.gz
gcc-9ca287086f04612d8e53546ab5fb64d8b93c7f66.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/gfortran.dg/ieee/large_4.f9054
2 files changed, 61 insertions, 2 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 24dd966..0e707eb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-08-10 Uros Bizjak <ubizjak@gmail.com>
+
+ PR fortran/64022
+ * gfortran.dg/ieee/large_4.f90: New test.
+
2015-08-08 Bud Davis <jmdavis@link.com>
PR fortran/59746
@@ -93,8 +98,8 @@
2015-08-05 Nick Clifton <nickc@redhat.com>
* 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 <rguenther@suse.de>
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 0000000..c653d29
--- /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