| ! { dg-do compile } |
| ! { dg-options "-fdump-tree-original" } |
| ! { dg-require-visibility "" } |
| ! |
| ! 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" } } |