blob: ed5722ed16741d54e2c04d833071e5544f6b80cc [file] [log] [blame]
! { dg-do compile }
!
! Checks that PRIVATE/PUBLIC not allowed in submodules. Also, IMPORT
! is not allowed in a module procedure interface body.
!
! Contributed by Paul Thomas <pault@gcc.gnu.org>
!
module foo_interface
implicit none
type foo
character(len=16), private :: byebye = "adieu, world! "
end type foo
! This interface is required to trigger the output of an .smod file.
! See http://j3-fortran.org/doc/meeting/207/15-209.txt
interface
integer module function trigger_smod ()
end function
end interface
end module
module foo_interface_brother
use foo_interface
implicit none
interface
module subroutine array3(this, that)
import ! { dg-error "not permitted in a module procedure interface body" }
type(foo), intent(in), dimension(:) :: this
type(foo), intent(inOUT), allocatable, dimension(:) :: that
end subroutine
end interface
end module
SUBMODULE (foo_interface) foo_interface_son
private ! { dg-error "PRIVATE statement" }
public ! { dg-error "PUBLIC statement" }
integer, public :: i ! { dg-error "PUBLIC attribute" }
integer, private :: j ! { dg-error "PRIVATE attribute" }
type :: bar
private ! { dg-error "PRIVATE statement" }
public ! { dg-error "PUBLIC statement" }
integer, private :: i ! { dg-error "PRIVATE attribute" }
integer, public :: j ! { dg-error "PUBLIC attribute" }
end type bar
contains
!
end submodule foo_interface_son
SUBMODULE (foo_interface) foo_interface_daughter
!
contains
subroutine foobar (arg)
type(foo) :: arg
arg%byebye = "hello, world! " ! Access to private component is OK
end subroutine
end SUBMODULE foo_interface_daughter
end