re PR fortran/52846 ([F2008] Support submodules)
2015-07-17 Paul Thomas <pault@gcc.gnu.org> PR fortran/52846 * decl.c (gfc_match_end): Pick out declared submodule name from the composite identifier. * gfortran.h : Add 'submodule_name' to gfc_use_list structure. * module.c (gfc_match_submodule): Define submodule_name and add static 'submodule_name'. (gfc_match_submodule): Build up submodule filenames, using '@' as a delimiter. Store the output filename in 'submodule_name'. Similarly, the submodule identifier is built using '.' as an identifier. (gfc_dump_module): If current state is COMP_SUBMODULE, write to file 'submodule_name', using SUBMODULE_EXTENSION. (gfc_use_module): Similarly, use the 'submodule_name' field in the gfc_use_list structure and SUBMODULE_EXTENSION to read the implicitly used submodule files. 2015-07-17 Paul Thomas <pault@gcc.gnu.org> PR fortran/52846 * lib/fortran-modules.exp (proc cleanup-submodules): New procedure. * gfortran.dg/submodule_1.f08: Change extension and clean up the submodule files. * gfortran.dg/submodule_2.f08: ditto * gfortran.dg/submodule_6.f08: ditto * gfortran.dg/submodule_7.f08: ditto * gfortran.dg/submodule_8.f08: New test * gfortran.dg/submodule_9.f08: New test From-SVN: r225957
This commit is contained in:
parent
d0e8d89223
commit
4d511a3ba7
44
gcc/testsuite/gfortran.dg/submodule_8.f08
Normal file
44
gcc/testsuite/gfortran.dg/submodule_8.f08
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
! { dg-do run }
|
||||||
|
!
|
||||||
|
! Checks that F2008:11.2.3 para 2 is correctly implemented so that
|
||||||
|
! no error results from using 'mod_s' for both a module name and
|
||||||
|
! a submodule name. The submodule is now identified as 'mod_a.mod_s'
|
||||||
|
! internally and the submodule file as 'mod_a@mod_s.smod'.
|
||||||
|
!
|
||||||
|
! Contributed by Reinhold Bader <reinhold.bader@lrz.de>
|
||||||
|
!
|
||||||
|
module mod_a
|
||||||
|
implicit none
|
||||||
|
interface
|
||||||
|
module subroutine p()
|
||||||
|
end subroutine
|
||||||
|
end interface
|
||||||
|
end module
|
||||||
|
|
||||||
|
submodule (mod_a) mod_s
|
||||||
|
implicit none
|
||||||
|
integer :: i=-2
|
||||||
|
contains
|
||||||
|
module procedure p
|
||||||
|
if (i .ne. -2) then
|
||||||
|
call abort
|
||||||
|
end if
|
||||||
|
end procedure
|
||||||
|
end submodule
|
||||||
|
|
||||||
|
module mod_s
|
||||||
|
use mod_a
|
||||||
|
implicit none
|
||||||
|
integer :: i=2
|
||||||
|
end module
|
||||||
|
|
||||||
|
program a_s
|
||||||
|
use mod_s
|
||||||
|
implicit none
|
||||||
|
if (i==2) then
|
||||||
|
call p()
|
||||||
|
else
|
||||||
|
call abort
|
||||||
|
end if
|
||||||
|
end program
|
||||||
|
! { dg-final { cleanup-submodules "mod_a@mod_s" } }
|
40
gcc/testsuite/gfortran.dg/submodule_9.f08
Normal file
40
gcc/testsuite/gfortran.dg/submodule_9.f08
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
! { dg-do compile }
|
||||||
|
!
|
||||||
|
! Checks that the name clash between the two submodules 'mod_s' is an error.
|
||||||
|
!
|
||||||
|
! Contributed by Reinhold Bader <reinhold.bader@lrz.de>
|
||||||
|
!
|
||||||
|
module mod_a
|
||||||
|
implicit none
|
||||||
|
interface
|
||||||
|
module subroutine p()
|
||||||
|
end subroutine
|
||||||
|
end interface
|
||||||
|
end module
|
||||||
|
|
||||||
|
submodule (mod_a) mod_s ! { dg-error "already being used as a MODULE" }
|
||||||
|
end submodule
|
||||||
|
|
||||||
|
submodule (mod_a:mod_s) b
|
||||||
|
end submodule
|
||||||
|
|
||||||
|
submodule (mod_a:b) mod_s ! { dg-error "already being used as a MODULE" }
|
||||||
|
implicit none
|
||||||
|
integer :: i=-2
|
||||||
|
contains
|
||||||
|
module procedure p
|
||||||
|
write(*,*) 'FAIL'
|
||||||
|
end procedure
|
||||||
|
end submodule
|
||||||
|
|
||||||
|
module mod_s
|
||||||
|
use mod_a
|
||||||
|
implicit none
|
||||||
|
integer :: i=2
|
||||||
|
end module
|
||||||
|
|
||||||
|
program a_s
|
||||||
|
use mod_s
|
||||||
|
implicit none
|
||||||
|
call p()
|
||||||
|
end program
|
Loading…
x
Reference in New Issue
Block a user