diff options
author | Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2009-06-11 07:47:35 +0000 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2009-06-11 07:47:35 +0000 |
commit | 4ec80803fba73fe898bfc42c57b236c1ca98aaf1 (patch) | |
tree | 2d008f94cf845d6abdbd7421b8647fc1e6ef2916 /gcc/testsuite | |
parent | e8d4f3fcb274af7dc592a5f95ca76da533505920 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/is_iostat_end_eor_2.f90 | 39 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/nan_5.f90 | 28 |
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 |