| ! { dg-do compile } |
| ! Test the patch for PR29992. The standard requires that a |
| ! module procedure be contained in the same scope as the |
| ! interface or is use associated to it(12.3.2.1). |
| ! |
| ! Contributed by Daniel Franke <franke.daniel@gmail.com> |
| ! |
| MODULE class_foo_type |
| TYPE :: foo |
| INTEGER :: dummy |
| END TYPE |
| contains |
| SUBROUTINE bar_init_set_int(this, value) |
| TYPE(foo), INTENT(out) :: this |
| integer, intent(in) :: value |
| this%dummy = value |
| END SUBROUTINE |
| END MODULE |
| |
| MODULE class_foo |
| USE class_foo_type, ONLY: foo, bar_init_set_int |
| |
| INTERFACE foo_init |
| MODULE PROCEDURE foo_init_default ! { dg-error "does not come from a module" } |
| END INTERFACE |
| |
| INTERFACE bar_init |
| MODULE PROCEDURE bar_init_default, bar_init_set_int ! These are OK |
| END INTERFACE |
| |
| INTERFACE |
| SUBROUTINE foo_init_default(this) |
| USE class_foo_type, ONLY: foo |
| TYPE(foo), INTENT(out) :: this |
| END SUBROUTINE |
| END INTERFACE |
| |
| contains |
| SUBROUTINE bar_init_default(this) |
| TYPE(foo), INTENT(out) :: this |
| this%dummy = 42 |
| END SUBROUTINE |
| |
| END MODULE |
| ! { dg-final { cleanup-modules "class_foo_type class_foo" } } |