diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gfortran.dg/merge_init_expr_2.f90')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gfortran.dg/merge_init_expr_2.f90 | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gfortran.dg/merge_init_expr_2.f90 b/gcc-4.9/gcc/testsuite/gfortran.dg/merge_init_expr_2.f90 new file mode 100644 index 000000000..9b20310ca --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gfortran.dg/merge_init_expr_2.f90 @@ -0,0 +1,58 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/56649 +! MERGE was not properly compile-time simplified +! +! Contributed by Bill Long +! +module m + implicit none + + integer, parameter :: int32 = 4 + type MPI_Datatype + integer :: i + end type MPI_Datatype + + integer,private,parameter :: dik = kind(0) + type(MPI_Datatype),parameter,private :: MPIx_I4 = MPI_Datatype( 1275069467) + type(MPI_Datatype),parameter,private :: MPIx_I8 = MPI_Datatype( 1275070491) + type(MPI_Datatype),parameter :: MPI_INTEGER = merge(MPIx_I4, MPIx_I8, & + dik==int32) +contains + subroutine foo + integer :: check1 + check1 = MPI_INTEGER%i + end subroutine foo +end module m + +module m2 + implicit none + integer, parameter :: int32 = 4 + type MPI_Datatype + integer :: i + end type MPI_Datatype + + integer,private,parameter :: dik = kind(0) + type(MPI_Datatype),parameter,private :: MPIx_I4 = MPI_Datatype( 1275069467) + type(MPI_Datatype),parameter,private :: MPIx_I8 = MPI_Datatype( 1275070491) + type(MPI_Datatype),parameter :: MPI_INTEGER(1) = merge([MPIx_I4], [MPIx_I8], & + [dik==int32]) +contains + subroutine foo + logical :: check2 + check2 = MPI_INTEGER(1)%i == 1275069467 + end subroutine foo +end module m2 + + +subroutine test + character(len=3) :: one, two, three + logical, parameter :: true = .true. + three = merge (one, two, true) +end subroutine test + +! { dg-final { scan-tree-dump-times "check1 = 1275069467;" 1 "original" } } +! { dg-final { scan-tree-dump-times "check2 = 1;" 1 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_memmove ..void .. &three, .void .. &one, 3.;" 1 "original" } } +! { dg-final { cleanup-tree-dump "original" } } |