+! { 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
+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