URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [gfortran.dg/] [where_operator_assign_1.f90] - Rev 816
Compare with Previous | Blame | View Log
! { dg-do compile }! Tests the fix for PR30407, in which operator assignments did not work! in WHERE blocks or simple WHERE statements. This is the test provided! by the reporter.!! Contributed by Dominique d'Humieres <dominiq@lps.ens.fr>!==============================================================================MODULE kind_modIMPLICIT NONEPRIVATEINTEGER, PUBLIC, PARAMETER :: I4=SELECTED_INT_KIND(9)INTEGER, PUBLIC, PARAMETER :: TF=KIND(.TRUE._I4)END MODULE kind_mod!==============================================================================MODULE pointer_modUSE kind_mod, ONLY : I4IMPLICIT NONEPRIVATETYPE, PUBLIC :: pvtINTEGER(I4), POINTER, DIMENSION(:) :: vectEND TYPE pvtINTERFACE ASSIGNMENT(=)MODULE PROCEDURE p_to_pEND INTERFACEPUBLIC :: ASSIGNMENT(=)CONTAINS!---------------------------------------------------------------------------PURE ELEMENTAL SUBROUTINE p_to_p(a1, a2)IMPLICIT NONETYPE(pvt), INTENT(OUT) :: a1TYPE(pvt), INTENT(IN) :: a2a1%vect = a2%vectEND SUBROUTINE p_to_p!---------------------------------------------------------------------------END MODULE pointer_mod!==============================================================================PROGRAM test_progUSE pointer_mod, ONLY : pvt, ASSIGNMENT(=)USE kind_mod, ONLY : I4, TFIMPLICIT NONEINTEGER(I4), DIMENSION(12_I4), TARGET :: iaLOGICAL(TF), DIMENSION(2_I4,3_I4) :: laTYPE(pvt), DIMENSION(6_I4) :: pvINTEGER(I4) :: i! Initialisation...la(:,1_I4:3_I4:2_I4)=.TRUE._TFla(:,2_I4)=.FALSE._TFDO i=1_I4,6_I4pv(i)%vect => ia((2_I4*i-1_I4):(2_I4*i))END DOia=0_I4DO i=1_I4,3_I4WHERE(la((/1_I4,2_I4/),i))pv((2_I4*i-1_I4):(2_I4*i))= iaef((/(2_I4*i-1_I4),(2_I4*i)/))ELSEWHEREpv((2_I4*i-1_I4):(2_I4*i))= iaef((/0_I4,0_I4/))END WHEREEND DOif (any (ia .ne. (/1,-1,2,-2,0,0,0,0,5,-5,6,-6/))) call abort ()CONTAINSTYPE(pvt) ELEMENTAL FUNCTION iaef(index) RESULT(ans)USE kind_mod, ONLY : I4USE pointer_mod, ONLY : pvt, ASSIGNMENT(=)IMPLICIT NONEINTEGER(I4), INTENT(IN) :: indexALLOCATE(ans%vect(2_I4))ans%vect=(/index,-index/)END FUNCTION iaefEND PROGRAM test_prog! { dg-final { cleanup-modules "kind_mod pointer_mod" } }
