| ! 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 |