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/] [dynamic_dispatch_6.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 }
!
!
! PR 42144: [OOP] deferred TBPs do not work
! PR 42144: [OOP] deferred TBPs do not work
!
!
! Contributed by Damian Rouson 
! Contributed by Damian Rouson 
module field_module
module field_module
  implicit none
  implicit none
  private
  private
  public :: field
  public :: field
  type ,abstract :: field
  type ,abstract :: field
  end type
  end type
end module
end module
module periodic_5th_order_module
module periodic_5th_order_module
  use field_module ,only : field
  use field_module ,only : field
  implicit none
  implicit none
  type ,extends(field) :: periodic_5th_order
  type ,extends(field) :: periodic_5th_order
  end type
  end type
end module
end module
module field_factory_module
module field_factory_module
  implicit none
  implicit none
  private
  private
  public :: field_factory
  public :: field_factory
  type, abstract :: field_factory
  type, abstract :: field_factory
  contains
  contains
    procedure(create_interface), deferred :: create
    procedure(create_interface), deferred :: create
  end type
  end type
  abstract interface
  abstract interface
    function create_interface(this)
    function create_interface(this)
      use field_module ,only : field
      use field_module ,only : field
      import :: field_factory
      import :: field_factory
      class(field_factory), intent(in) :: this
      class(field_factory), intent(in) :: this
      class(field) ,pointer :: create_interface
      class(field) ,pointer :: create_interface
    end function
    end function
  end interface
  end interface
end module
end module
module periodic_5th_factory_module
module periodic_5th_factory_module
  use field_factory_module , only : field_factory
  use field_factory_module , only : field_factory
  implicit none
  implicit none
  private
  private
  public :: periodic_5th_factory
  public :: periodic_5th_factory
  type, extends(field_factory) :: periodic_5th_factory
  type, extends(field_factory) :: periodic_5th_factory
  contains
  contains
    procedure :: create=>new_periodic_5th_order
    procedure :: create=>new_periodic_5th_order
  end type
  end type
contains
contains
  function new_periodic_5th_order(this)
  function new_periodic_5th_order(this)
    use field_module ,only : field
    use field_module ,only : field
    use periodic_5th_order_module ,only : periodic_5th_order
    use periodic_5th_order_module ,only : periodic_5th_order
    class(periodic_5th_factory), intent(in) :: this
    class(periodic_5th_factory), intent(in) :: this
    class(field) ,pointer :: new_periodic_5th_order
    class(field) ,pointer :: new_periodic_5th_order
  end function
  end function
end module
end module
program main
program main
  use field_module ,only : field
  use field_module ,only : field
  use field_factory_module ,only : field_factory
  use field_factory_module ,only : field_factory
  use periodic_5th_factory_module ,only : periodic_5th_factory
  use periodic_5th_factory_module ,only : periodic_5th_factory
  implicit none
  implicit none
  class(field) ,pointer :: u
  class(field) ,pointer :: u
  class(field_factory), allocatable :: field_creator
  class(field_factory), allocatable :: field_creator
  allocate (periodic_5th_factory ::  field_creator)
  allocate (periodic_5th_factory ::  field_creator)
  u => field_creator%create()
  u => field_creator%create()
end program
end program
! { dg-final { cleanup-modules "field_module periodic_5th_order_module field_factory_module periodic_5th_factory_module" } }
! { dg-final { cleanup-modules "field_module periodic_5th_order_module field_factory_module periodic_5th_factory_module" } }
 
 

powered by: WebSVN 2.1.0

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