view gcc/testsuite/gfortran.dg/submodule_5.f08 @ 128:fe568345ddd5

fix CbC-example
author mir3636
date Wed, 11 Apr 2018 19:32:28 +0900
parents 04ced10e8804
children
line wrap: on
line source

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