aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>2009-06-11 07:47:35 +0000
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2009-06-11 07:47:35 +0000
commit4ec80803fba73fe898bfc42c57b236c1ca98aaf1 (patch)
tree2d008f94cf845d6abdbd7421b8647fc1e6ef2916 /gcc/testsuite
parente8d4f3fcb274af7dc592a5f95ca76da533505920 (diff)
downloadgcc-4ec80803fba73fe898bfc42c57b236c1ca98aaf1.zip
gcc-4ec80803fba73fe898bfc42c57b236c1ca98aaf1.tar.gz
gcc-4ec80803fba73fe898bfc42c57b236c1ca98aaf1.tar.bz2
re PR fortran/38718 (some simplifiers for elemental intrinsics missing; required for init expressions)
PR fortran/38718 * intrinsic.c (add_functions): Add simplifiers for ISNAN, IS_IOSTAT_END and IS_IOSTAT_EOR. * intrinsic.h (gfc_simplify_is_iostat_end, * gfc_simplify_is_iostat_eor, gfc_simplify_isnan): New prototypes. * intrinsic.c (gfc_simplify_is_iostat_end, * gfc_simplify_is_iostat_eor, gfc_simplify_isnan): New functions. * gfortran.dg/is_iostat_end_eor_2.f90: New test. * gfortran.dg/nan_5.f90: New test. From-SVN: r148367
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/is_iostat_end_eor_2.f9039
-rw-r--r--gcc/testsuite/gfortran.dg/nan_5.f9028
3 files changed, 73 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0a0f7bb..e736898 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2009-06-11 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
+ PR fortran/38718
+ * gfortran.dg/is_iostat_end_eor_2.f90: New test.
+ * gfortran.dg/nan_5.f90: New test.
+
2009-06-10 Nathan Froyd <froydnj@codesourcery.com>
* gcc.target/arm/neon-modes-1.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/is_iostat_end_eor_2.f90 b/gcc/testsuite/gfortran.dg/is_iostat_end_eor_2.f90
new file mode 100644
index 0000000..eda9d31
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/is_iostat_end_eor_2.f90
@@ -0,0 +1,39 @@
+! Check that we correctly simplify IS_IOSTAT_END and IS_IOSTAT_EOR.
+! Not very useful, but required by the standards
+!
+! This test relies on the error numbers for END and EOR being -1 and -2.
+! This is good to actual
+!
+! { dg-do compile }
+!
+
+ use iso_fortran_env, only : iostat_end, iostat_eor
+ implicit none
+
+ integer(kind=merge(4, 0, is_iostat_end(-1))) :: a
+ integer(kind=merge(4, 0, is_iostat_end(-1_1))) :: b
+ integer(kind=merge(4, 0, is_iostat_end(-1_2))) :: c
+ integer(kind=merge(4, 0, is_iostat_end(-1_4))) :: d
+ integer(kind=merge(4, 0, is_iostat_end(-1_8))) :: e
+
+ integer(kind=merge(4, 0, is_iostat_eor(-2))) :: f
+ integer(kind=merge(4, 0, is_iostat_eor(-2_1))) :: g
+ integer(kind=merge(4, 0, is_iostat_eor(-2_2))) :: h
+ integer(kind=merge(4, 0, is_iostat_eor(-2_4))) :: i
+ integer(kind=merge(4, 0, is_iostat_eor(-2_8))) :: j
+
+ integer(kind=merge(0, 4, is_iostat_eor(-1))) :: k
+ integer(kind=merge(0, 4, is_iostat_end(-2))) :: l
+
+ integer(kind=merge(0, 4, is_iostat_eor(0))) :: m
+ integer(kind=merge(0, 4, is_iostat_end(0))) :: n
+
+ integer(kind=merge(4, 0, is_iostat_end(0))) :: o ! { dg-error "not supported for type" }
+ integer(kind=merge(4, 0, is_iostat_eor(0))) :: p ! { dg-error "not supported for type" }
+
+ integer(kind=merge(4, 0, is_iostat_eor(iostat_eor))) :: q
+ integer(kind=merge(4, 0, is_iostat_end(iostat_end))) :: r
+ integer(kind=merge(0, 4, is_iostat_end(iostat_eor))) :: s
+ integer(kind=merge(0, 4, is_iostat_eor(iostat_end))) :: t
+
+ end
diff --git a/gcc/testsuite/gfortran.dg/nan_5.f90 b/gcc/testsuite/gfortran.dg/nan_5.f90
new file mode 100644
index 0000000..64886be
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/nan_5.f90
@@ -0,0 +1,28 @@
+! Check that we correctly simplify ISNAN
+!
+! { dg-do compile }
+!
+! { dg-options "-fno-range-check" }
+! { dg-options "-fno-range-check -mieee" { target alpha*-*-* sh*-*-* } }
+! { dg-skip-if "NaN not supported" { spu-*-* } { "*" } { "" } }
+
+ implicit none
+ real, parameter :: inf = 2 * huge(inf)
+ real, parameter :: nan1 = 0. / 0.
+ real, parameter :: nan2 = 1.5 * nan1
+ real, parameter :: nan3 = inf / inf
+ real, parameter :: nan4 = inf - inf
+ real, parameter :: nan5 = 0. * inf
+ real, parameter :: normal = 42.
+
+ integer(kind=merge(4, 0, isnan(nan1))) :: a
+ integer(kind=merge(4, 0, isnan(nan2))) :: b
+ integer(kind=merge(4, 0, isnan(nan3))) :: c
+ integer(kind=merge(4, 0, isnan(nan4))) :: d
+ integer(kind=merge(4, 0, isnan(nan5))) :: e
+
+ integer(kind=merge(0, 4, isnan(inf))) :: f
+ integer(kind=merge(0, 4, isnan(-inf))) :: g
+ integer(kind=merge(0, 4, isnan(normal))) :: h
+
+ end