blob: 5636e9a5d2c8bf0e2e8bb563b2443d252755d059 [file] [log] [blame]
! { 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