! { dg-do compile } ! ! Check whether MODULE PROCEDUREs are properly treated ! They need to be contained in a procedure, i.e. an ! interface in another procedure is invalid; they may, however, ! come from a use-associated procedure. ! (The PROCEDURE statement allows also for non-module procedures ! if there is an explicit interface.) ! ! PR fortran/33228 ! module inclmod implicit none interface subroutine wrong1(a) integer :: a end subroutine wrong1 end interface interface gen_incl module procedure ok1 end interface gen_incl external wrong2 external wrong3 real wrong3 contains subroutine ok1(f) character :: f end subroutine ok1 end module inclmod module a use inclmod implicit none interface gen subroutine ok1_a(a,b) integer :: a,b end subroutine ok1_a module procedure ok1, ok2_a end interface gen contains subroutine ok2_a(a,b,c) integer :: a,b,c end subroutine ok2_a end module a module b use inclmod interface gen_wrong_0 module procedure gen_incl ! { dg-error "Cannot change attributes" } end interface gen_wrong_0 end module b module c use inclmod interface gen_wrong_1 module procedure wrong1 ! { dg-error "is not a module procedure" } end interface gen_wrong_1 end module c module d use inclmod interface gen_wrong_2 module procedure wrong2 ! { dg-error "Cannot change attributes" } end interface gen_wrong_2 end module d module e use inclmod interface gen_wrong_3 module procedure wrong3 ! { dg-error "Cannot change attributes" } end interface gen_wrong_3 end module e module f implicit none interface subroutine wrong_a(a) integer :: a end subroutine wrong_a end interface interface gen_wrong_4 module procedure wrong_a ! { dg-error "is not a module procedure" } end interface gen_wrong_4 end module f module g implicit none external wrong_b interface gen_wrong_5 module procedure wrong_b ! { dg-error "has no explicit interface" } end interface gen_wrong_5 end module g module h implicit none external wrong_c real wrong_c interface gen_wrong_6 module procedure wrong_c ! { dg-error "has no explicit interface" } end interface gen_wrong_6 end module h end