http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46067
--- Comment #7 from janus at gcc dot gnu.org 2010-10-21 07:54:43 UTC --- And here is yet another variant, which uses a procedure as actual argument to another procedure (instead of procedure pointers). Same symptoms (accepts-invalid). module m type test_type integer :: id = 1 end type contains real function fun1 (t,x) real, intent(in) :: x type(test_type) :: t print *," id = ", t%id fun1 = cos(x) end function end module use m implicit none call test(fun1) contains subroutine test(proc) interface real function proc(t,x) import :: test_type real, intent(in) :: x class(test_type) :: t end function end interface type(test_type) :: funs real :: r r = proc(funs,0.) print *, " proc(0) ",r end subroutine end