! RUN: %S/test_errors.sh %s %t %f18 ! C1568 The procedure-name shall have been declared to be a separate module ! procedure in the containing program unit or an ancestor of that program unit. module m1 interface module subroutine sub1(arg1) integer, intent(inout) :: arg1 end subroutine module integer function fun1() end function end interface type t end type integer i end module submodule(m1) s1 contains !ERROR: 'missing1' was not declared a separate module procedure module procedure missing1 end !ERROR: 'missing2' was not declared a separate module procedure module subroutine missing2 end !ERROR: 't' was not declared a separate module procedure module procedure t end !ERROR: 'i' was not declared a separate module procedure module subroutine i end end submodule module m2 interface module subroutine sub1(arg1) integer, intent(inout) :: arg1 end subroutine module integer function fun1() end function end interface type t end type !ERROR: Declaration of 'i' conflicts with its use as module procedure integer i contains !ERROR: 'missing1' was not declared a separate module procedure module procedure missing1 end !ERROR: 'missing2' was not declared a separate module procedure module subroutine missing2 end !ERROR: 't' is already declared in this scoping unit !ERROR: 't' was not declared a separate module procedure module procedure t end !ERROR: 'i' was not declared a separate module procedure module subroutine i end end module ! Separate module procedure defined in same module as declared module m3 interface module subroutine sub end subroutine end interface contains module procedure sub end procedure end module ! Separate module procedure defined in a submodule module m4 interface module subroutine a end subroutine module subroutine b end subroutine end interface end module submodule(m4) s4a contains module procedure a end procedure end submodule submodule(m4:s4a) s4b contains module procedure b end procedure end