! { dg-do compile } ! ! Test the fix for pr117434, in which the F2008 addition of being permitted to ! pass an external, internal or module procedure to a dummy procedure pointer ! gave the error "Expected a procedure pointer for argument ‘’ at (1). ! ! This testcase tests that interface checking is OK in this situation. ! ! Contributed by Damian Rouson ! module julienne_test_description_m implicit none abstract interface logical function test_function_i(arg) integer, intent(in) :: arg end function end interface type test_description_t procedure(test_function_i), pointer, nopass :: test_function_ end type contains type(test_description_t) function new_test_description(test_function) procedure(test_function_i), intent(in), pointer :: test_function new_test_description%test_function_ => test_function end function end module use julienne_test_description_m implicit none type(test_description_t) test_description test_description = new_test_description(test1) test_description = new_test_description(test2) ! { dg-error "Type mismatch in function" } test_description = new_test_description(test3) ! { dg-error "wrong number of arguments" } test_description = new_test_description(test4) ! { dg-error "Rank mismatch in argument" } test_description = new_test_description(test5) ! { dg-error "Rank mismatch in function result" } contains logical function test1(arg) integer, intent(in) :: arg if (arg == 3) then test1 = .true. else test1 = .false. endif end function real function test2(arg) integer, intent(in) :: arg if (arg == 3) then test2 = 1.0 else test2 = 0.0 endif end function logical function test3() test3 = .false. end function logical function test4(arg) integer, intent(in) :: arg(:) if (sum (arg) == 3) then test4 = .true. else test4 = .false. endif end function function test5(arg) result(res) integer, intent(in) :: arg logical :: res(2) if (arg == 3) then res = .true. else res = .false. endif end function end