! RUN: %flang_fc1 -fsyntax-only %s module associated_func_call implicit none private public :: type_t public :: test_function_i abstract interface function test_function_i() result(passes) implicit none logical passes end function end interface type type_t private procedure(test_function_i), pointer, nopass :: test_function_ => null() contains generic :: operator(==) => equals procedure, private :: equals end type interface type_t module function construct(test_function) result(test_description) implicit none procedure(test_function_i), intent(in), pointer :: test_function type(type_t) test_description end function end interface interface elemental module function equals(lhs, rhs) result(lhs_eq_rhs) implicit none class(type_t), intent(in) :: lhs, rhs logical lhs_eq_rhs end function end interface contains module procedure construct test_description%test_function_ => test_function end procedure module procedure equals lhs_eq_rhs = associated(lhs%test_function_, rhs%test_function_) end procedure end module associated_func_call