! { dg-do compile } ! PR fortran/45783 ! PR fortran/45795 ! This used to fail because of incorrect compile-time typespec on the ! SELECT TYPE selector. ! This is the test-case from PR 45795. ! Contributed by Salvatore Filippone, sfilippone@uniroma2.it. module base_mod type :: base integer :: m, n end type base end module base_mod module s_base_mod use base_mod type, extends(base) :: s_base contains procedure, pass(a) :: cp_to_foo => s_base_cp_to_foo end type s_base type, extends(s_base) :: s_foo integer :: nnz integer, allocatable :: ia(:), ja(:) real, allocatable :: val(:) contains procedure, pass(a) :: cp_to_foo => s_cp_foo_to_foo end type s_foo interface subroutine s_base_cp_to_foo(a,b,info) import :: s_base, s_foo class(s_base), intent(in) :: a class(s_foo), intent(inout) :: b integer, intent(out) :: info end subroutine s_base_cp_to_foo end interface interface subroutine s_cp_foo_to_foo(a,b,info) import :: s_foo class(s_foo), intent(in) :: a class(s_foo), intent(inout) :: b integer, intent(out) :: info end subroutine s_cp_foo_to_foo end interface end module s_base_mod subroutine trans2(a,b) use s_base_mod implicit none class(s_base), intent(out) :: a class(base), intent(in) :: b type(s_foo) :: tmp integer err_act, info info = 0 select type(b) class is (s_base) call b%cp_to_foo(tmp,info) class default info = -1 write(*,*) 'Invalid dynamic type' end select if (info /= 0) write(*,*) 'Error code ',info return end subroutine trans2