OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc2/] [gcc/] [testsuite/] [gfortran.dg/] [typebound_generic_5.f03] - Diff between revs 302 and 384

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 302 Rev 384
! { dg-do run }
! { dg-do run }
! Check that generic bindings targetting ELEMENTAL procedures work.
! Check that generic bindings targetting ELEMENTAL procedures work.
MODULE m
MODULE m
  IMPLICIT NONE
  IMPLICIT NONE
  TYPE :: t
  TYPE :: t
  CONTAINS
  CONTAINS
    PROCEDURE, NOPASS :: double
    PROCEDURE, NOPASS :: double
    PROCEDURE, NOPASS :: double_here
    PROCEDURE, NOPASS :: double_here
    GENERIC :: double_it => double
    GENERIC :: double_it => double
    GENERIC :: double_inplace => double_here
    GENERIC :: double_inplace => double_here
  END TYPE t
  END TYPE t
CONTAINS
CONTAINS
  ELEMENTAL INTEGER FUNCTION double (val)
  ELEMENTAL INTEGER FUNCTION double (val)
    IMPLICIT NONE
    IMPLICIT NONE
    INTEGER, INTENT(IN) :: val
    INTEGER, INTENT(IN) :: val
    double = 2 * val
    double = 2 * val
  END FUNCTION double
  END FUNCTION double
  ELEMENTAL SUBROUTINE double_here (val)
  ELEMENTAL SUBROUTINE double_here (val)
    IMPLICIT NONE
    IMPLICIT NONE
    INTEGER, INTENT(INOUT) :: val
    INTEGER, INTENT(INOUT) :: val
    val = 2 * val
    val = 2 * val
  END SUBROUTINE double_here
  END SUBROUTINE double_here
END MODULE m
END MODULE m
PROGRAM main
PROGRAM main
  USE m
  USE m
  IMPLICIT NONE
  IMPLICIT NONE
  TYPE(t) :: obj
  TYPE(t) :: obj
  INTEGER :: arr(42), arr2(42), arr3(42), arr4(42)
  INTEGER :: arr(42), arr2(42), arr3(42), arr4(42)
  INTEGER :: i
  INTEGER :: i
  arr = (/ (i, i = 1, 42) /)
  arr = (/ (i, i = 1, 42) /)
  arr2 = obj%double (arr)
  arr2 = obj%double (arr)
  arr3 = obj%double_it (arr)
  arr3 = obj%double_it (arr)
  arr4 = arr
  arr4 = arr
  CALL obj%double_inplace (arr4)
  CALL obj%double_inplace (arr4)
  IF (ANY (arr2 /= 2 * arr) .OR. &
  IF (ANY (arr2 /= 2 * arr) .OR. &
      ANY (arr3 /= 2 * arr) .OR. &
      ANY (arr3 /= 2 * arr) .OR. &
      ANY (arr4 /= 2 * arr)) THEN
      ANY (arr4 /= 2 * arr)) THEN
    CALL abort ()
    CALL abort ()
  END IF
  END IF
END PROGRAM main
END PROGRAM main
! { dg-final { cleanup-modules "m" } }
! { dg-final { cleanup-modules "m" } }
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.