1! { dg-do run } 2! 3! PR 42144: [OOP] deferred TBPs do not work 4! 5! Contributed by Damian Rouson <damian@rouson.net> 6 7module field_module 8 implicit none 9 private 10 public :: field 11 type ,abstract :: field 12 end type 13end module 14 15module periodic_5th_order_module 16 use field_module ,only : field 17 implicit none 18 type ,extends(field) :: periodic_5th_order 19 end type 20end module 21 22module field_factory_module 23 implicit none 24 private 25 public :: field_factory 26 type, abstract :: field_factory 27 contains 28 procedure(create_interface), deferred :: create 29 end type 30 abstract interface 31 function create_interface(this) 32 use field_module ,only : field 33 import :: field_factory 34 class(field_factory), intent(in) :: this 35 class(field) ,pointer :: create_interface 36 end function 37 end interface 38end module 39 40module periodic_5th_factory_module 41 use field_factory_module , only : field_factory 42 implicit none 43 private 44 public :: periodic_5th_factory 45 type, extends(field_factory) :: periodic_5th_factory 46 contains 47 procedure :: create=>new_periodic_5th_order 48 end type 49contains 50 function new_periodic_5th_order(this) 51 use field_module ,only : field 52 use periodic_5th_order_module ,only : periodic_5th_order 53 class(periodic_5th_factory), intent(in) :: this 54 class(field) ,pointer :: new_periodic_5th_order 55 end function 56end module 57 58program main 59 use field_module ,only : field 60 use field_factory_module ,only : field_factory 61 use periodic_5th_factory_module ,only : periodic_5th_factory 62 implicit none 63 class(field) ,pointer :: u 64 class(field_factory), allocatable :: field_creator 65 allocate (periodic_5th_factory :: field_creator) 66 u => field_creator%create() 67end program 68