1! { dg-do run } 2! Test for import in modules 3! PR fortran/29601 4 5subroutine bar(r) 6 implicit none 7 integer(8) :: r 8 if(r /= 42) call abort() 9 r = 13 10end subroutine bar 11 12subroutine foo(a) 13 implicit none 14 type myT 15 sequence 16 character(len=3) :: c 17 end type myT 18 type(myT) :: a 19 if(a%c /= "xyz") call abort() 20 a%c = "abc" 21end subroutine 22 23subroutine new(a,b) 24 implicit none 25 type gType 26 sequence 27 integer(8) :: c 28 end type gType 29 real(8) :: a 30 type(gType) :: b 31 if(a /= 99.0 .or. b%c /= 11) call abort() 32 a = -123.0 33 b%c = -44 34end subroutine new 35 36module general 37 implicit none 38 integer,parameter :: ikind = 8 39 type gType 40 sequence 41 integer(ikind) :: c 42 end type gType 43end module general 44 45module modtest 46 use general 47 implicit none 48 type myT 49 sequence 50 character(len=3) :: c 51 end type myT 52 integer, parameter :: dp = 8 53 interface 54 subroutine bar(x) 55 import :: dp 56 integer(dp) :: x 57 end subroutine bar 58 subroutine foo(c) 59 import :: myT 60 type(myT) :: c 61 end subroutine foo 62 subroutine new(x,y) 63 import :: ikind,gType 64 real(ikind) :: x 65 type(gType) :: y 66 end subroutine new 67 end interface 68 contains 69 subroutine test 70 integer(dp) :: y 71 y = 42 72 call bar(y) 73 if(y /= 13) call abort() 74 end subroutine test 75 subroutine test2() 76 type(myT) :: z 77 z%c = "xyz" 78 call foo(z) 79 if(z%c /= "abc") call abort() 80 end subroutine test2 81end module modtest 82 83program all 84 use modtest 85 implicit none 86 call test() 87 call test2() 88 call test3() 89contains 90 subroutine test3() 91 real(ikind) :: r 92 type(gType) :: t 93 r = 99.0 94 t%c = 11 95 call new(r,t) 96 if(r /= -123.0 .or. t%c /= -44) call abort() 97 end subroutine test3 98end program all 99