blob: da9c4045916dfdfe64ffb4c48f3a486e47424e29 [file] [log] [blame]
! { dg-do run }
!
! PR fortran/47339
! PR fortran/43062
!
! Run-time test for Fortran 2003 NAMELISTS
! Version for non-strings
!
program nml_test
implicit none
character(len=1000) :: str
character(len=5), allocatable :: a(:)
character(len=5), allocatable :: b
character(len=5), pointer :: ap(:)
character(len=5), pointer :: bp
character(len=5) :: c
character(len=5) :: d(3)
type t
character(len=5) :: c1
character(len=5) :: c2(3)
end type t
type(t) :: e,f(2)
type(t),allocatable :: g,h(:)
type(t),pointer :: i,j(:)
namelist /nml/ a, b, c, d, ap, bp,e,f,g,h,i,j
a = ["aa01", "aa02"]
allocate(b,ap(2),bp)
ap = ['98', '99']
b = '7'
bp = '101'
c = '8'
d = ['-1', '-2', '-3']
e%c1 = '-701'
e%c2 = ['-702','-703','-704']
f(1)%c1 = '33001'
f(2)%c1 = '33002'
f(1)%c2 = ['44001','44002','44003']
f(2)%c2 = ['44011','44012','44013']
allocate(g,h(2),i,j(2))
g%c1 = '-601'
g%c2 = ['-602','6703','-604']
h(1)%c1 = '35001'
h(2)%c1 = '35002'
h(1)%c2 = ['45001','45002','45003']
h(2)%c2 = ['45011','45012','45013']
i%c1 = '-501'
i%c2 = ['-502','-503','-504']
j(1)%c1 = '36001'
j(2)%c1 = '36002'
j(1)%c2 = ['46001','46002','46003']
j(2)%c2 = ['46011','46012','46013']
! SAVE NAMELIST
str = repeat('X', len(str))
write(str,nml=nml)
! RESET NAMELIST
a = repeat('X', len(a))
ap = repeat('X', len(ap))
b = repeat('X', len(b))
bp = repeat('X', len(bp))
c = repeat('X', len(c))
d = repeat('X', len(d))
e%c1 = repeat('X', len(e%c1))
e%c2 = repeat('X', len(e%c2))
f(1)%c1 = repeat('X', len(f(1)%c1))
f(2)%c1 = repeat('X', len(f(2)%c1))
f(1)%c2 = repeat('X', len(f(1)%c2))
f(2)%c2 = repeat('X', len(f(2)%c2))
g%c1 = repeat('X', len(g%c1))
g%c2 = repeat('X', len(g%c1))
h(1)%c1 = repeat('X', len(h(1)%c1))
h(2)%c1 = repeat('X', len(h(1)%c1))
h(1)%c2 = repeat('X', len(h(1)%c1))
h(2)%c2 = repeat('X', len(h(1)%c1))
i%c1 = repeat('X', len(i%c1))
i%c2 = repeat('X', len(i%c1))
j(1)%c1 = repeat('X', len(j(1)%c1))
j(2)%c1 = repeat('X', len(j(2)%c1))
j(1)%c2 = repeat('X', len(j(1)%c2))
j(2)%c2 = repeat('X', len(j(2)%c2))
! Read back
read(str,nml=nml)
! Check result
if (any (a /= ['aa01','aa02'])) STOP 1
if (any (ap /= ['98', '99'])) STOP 2
if (b /= '7') STOP 3
if (bp /= '101') STOP 4
if (c /= '8') STOP 5
if (any (d /= ['-1', '-2', '-3'])) STOP 6
if (e%c1 /= '-701') STOP 7
if (any (e%c2 /= ['-702','-703','-704'])) STOP 8
if (f(1)%c1 /= '33001') STOP 9
if (f(2)%c1 /= '33002') STOP 10
if (any (f(1)%c2 /= ['44001','44002','44003'])) STOP 11
if (any (f(2)%c2 /= ['44011','44012','44013'])) STOP 12
if (g%c1 /= '-601') STOP 13
if (any(g%c2 /= ['-602','6703','-604'])) STOP 14
if (h(1)%c1 /= '35001') STOP 15
if (h(2)%c1 /= '35002') STOP 16
if (any (h(1)%c2 /= ['45001','45002','45003'])) STOP 17
if (any (h(2)%c2 /= ['45011','45012','45013'])) STOP 18
if (i%c1 /= '-501') STOP 19
if (any (i%c2 /= ['-502','-503','-504'])) STOP 20
if (j(1)%c1 /= '36001') STOP 21
if (j(2)%c1 /= '36002') STOP 22
if (any (j(1)%c2 /= ['46001','46002','46003'])) STOP 23
if (any (j(2)%c2 /= ['46011','46012','46013'])) STOP 24
! Check argument passing (dummy processing)
call test2(a,b,c,d,ap,bp,e,f,g,h,i,j,2)
call test3(a,b,c,d,ap,bp,e,f,g,h,i,j,2,len(a))
call test4(a,b,c,d,ap,bp,e,f,g,h,i,j,2)
contains
subroutine test2(x1,x2,x3,x4,x1p,x2p,x6,x7,x8,x9,x10,x11,n)
character(len=5), allocatable :: x1(:)
character(len=5), allocatable :: x2
character(len=5), pointer :: x1p(:)
character(len=5), pointer :: x2p
character(len=5) :: x3
character(len=5) :: x4(3)
integer :: n
character(len=5) :: x5(n)
type(t) :: x6,x7(2)
type(t),allocatable :: x8,x9(:)
type(t),pointer :: x10,x11(:)
type(t) :: x12(n)
namelist /nml2/ x1, x2, x3, x4,x5,x1p,x2p,x6,x7,x8,x9,x10,x11,x12
x5 = [ 'x5-42', 'x5-53' ]
x12(1)%c1 = '37001'
x12(2)%c1 = '37002'
x12(1)%c2 = ['47001','47002','47003']
x12(2)%c2 = ['47011','47012','47013']
! SAVE NAMELIST
str = repeat('X', len(str))
write(str,nml=nml2)
! RESET NAMELIST
x1 = repeat('X', len(x1))
x1p = repeat('X', len(x1p))
x2 = repeat('X', len(x2))
x2p = repeat('X', len(x2p))
x3 = repeat('X', len(x3))
x4 = repeat('X', len(x4))
x6%c1 = repeat('X', len(x6%c1))
x6%c2 = repeat('X', len(x6%c2))
x7(1)%c1 = repeat('X', len(x7(1)%c1))
x7(2)%c1 = repeat('X', len(x7(2)%c1))
x7(1)%c2 = repeat('X', len(x7(1)%c2))
x7(2)%c2 = repeat('X', len(x7(2)%c2))
x8%c1 = repeat('X', len(x8%c1))
x8%c2 = repeat('X', len(x8%c1))
x9(1)%c1 = repeat('X', len(x9(1)%c1))
x9(2)%c1 = repeat('X', len(x9(1)%c1))
x9(1)%c2 = repeat('X', len(x9(1)%c1))
x9(2)%c2 = repeat('X', len(x9(1)%c1))
x10%c1 = repeat('X', len(x10%c1))
x10%c2 = repeat('X', len(x10%c1))
x11(1)%c1 = repeat('X', len(x11(1)%c1))
x11(2)%c1 = repeat('X', len(x11(2)%c1))
x11(1)%c2 = repeat('X', len(x11(1)%c2))
x11(2)%c2 = repeat('X', len(x11(2)%c2))
x5 = repeat('X', len(x5))
x12(1)%c1 = repeat('X', len(x12(2)%c2))
x12(2)%c1 = repeat('X', len(x12(2)%c2))
x12(1)%c2 = repeat('X', len(x12(2)%c2))
x12(2)%c2 = repeat('X', len(x12(2)%c2))
! Read back
read(str,nml=nml2)
! Check result
if (any (x1 /= ['aa01','aa02'])) STOP 25
if (any (x1p /= ['98', '99'])) STOP 26
if (x2 /= '7') STOP 27
if (x2p /= '101') STOP 28
if (x3 /= '8') STOP 29
if (any (x4 /= ['-1', '-2', '-3'])) STOP 30
if (x6%c1 /= '-701') STOP 31
if (any (x6%c2 /= ['-702','-703','-704'])) STOP 32
if (x7(1)%c1 /= '33001') STOP 33
if (x7(2)%c1 /= '33002') STOP 34
if (any (x7(1)%c2 /= ['44001','44002','44003'])) STOP 35
if (any (x7(2)%c2 /= ['44011','44012','44013'])) STOP 36
if (x8%c1 /= '-601') STOP 37
if (any(x8%c2 /= ['-602','6703','-604'])) STOP 38
if (x9(1)%c1 /= '35001') STOP 39
if (x9(2)%c1 /= '35002') STOP 40
if (any (x9(1)%c2 /= ['45001','45002','45003'])) STOP 41
if (any (x9(2)%c2 /= ['45011','45012','45013'])) STOP 42
if (x10%c1 /= '-501') STOP 43
if (any (x10%c2 /= ['-502','-503','-504'])) STOP 44
if (x11(1)%c1 /= '36001') STOP 45
if (x11(2)%c1 /= '36002') STOP 46
if (any (x11(1)%c2 /= ['46001','46002','46003'])) STOP 47
if (any (x11(2)%c2 /= ['46011','46012','46013'])) STOP 48
if (any (x5 /= [ 'x5-42', 'x5-53' ])) STOP 49
if (x12(1)%c1 /= '37001') STOP 50
if (x12(2)%c1 /= '37002') STOP 51
if (any (x12(1)%c2 /= ['47001','47002','47003'])) STOP 52
if (any (x12(2)%c2 /= ['47011','47012','47013'])) STOP 53
end subroutine test2
subroutine test3(x1,x2,x3,x4,x1p,x2p,x6,x7,x8,x9,x10,x11,n,ll)
integer :: n, ll
character(len=ll), allocatable :: x1(:)
character(len=ll), allocatable :: x2
character(len=ll), pointer :: x1p(:)
character(len=ll), pointer :: x2p
character(len=ll) :: x3
character(len=ll) :: x4(3)
character(len=ll) :: x5(n)
type(t) :: x6,x7(2)
type(t),allocatable :: x8,x9(:)
type(t),pointer :: x10,x11(:)
type(t) :: x12(n)
namelist /nml2/ x1, x2, x3, x4,x5,x1p,x2p,x6,x7,x8,x9,x10,x11,x12
x5 = [ 'x5-42', 'x5-53' ]
x12(1)%c1 = '37001'
x12(2)%c1 = '37002'
x12(1)%c2 = ['47001','47002','47003']
x12(2)%c2 = ['47011','47012','47013']
! SAVE NAMELIST
str = repeat('X', len(str))
write(str,nml=nml2)
! RESET NAMELIST
x1 = repeat('X', len(x1))
x1p = repeat('X', len(x1p))
x2 = repeat('X', len(x2))
x2p = repeat('X', len(x2p))
x3 = repeat('X', len(x3))
x4 = repeat('X', len(x4))
x6%c1 = repeat('X', len(x6%c1))
x6%c2 = repeat('X', len(x6%c2))
x7(1)%c1 = repeat('X', len(x7(1)%c1))
x7(2)%c1 = repeat('X', len(x7(2)%c1))
x7(1)%c2 = repeat('X', len(x7(1)%c2))
x7(2)%c2 = repeat('X', len(x7(2)%c2))
x8%c1 = repeat('X', len(x8%c1))
x8%c2 = repeat('X', len(x8%c1))
x9(1)%c1 = repeat('X', len(x9(1)%c1))
x9(2)%c1 = repeat('X', len(x9(1)%c1))
x9(1)%c2 = repeat('X', len(x9(1)%c1))
x9(2)%c2 = repeat('X', len(x9(1)%c1))
x10%c1 = repeat('X', len(x10%c1))
x10%c2 = repeat('X', len(x10%c1))
x11(1)%c1 = repeat('X', len(x11(1)%c1))
x11(2)%c1 = repeat('X', len(x11(2)%c1))
x11(1)%c2 = repeat('X', len(x11(1)%c2))
x11(2)%c2 = repeat('X', len(x11(2)%c2))
x5 = repeat('X', len(x5))
x12(1)%c1 = repeat('X', len(x12(2)%c2))
x12(2)%c1 = repeat('X', len(x12(2)%c2))
x12(1)%c2 = repeat('X', len(x12(2)%c2))
x12(2)%c2 = repeat('X', len(x12(2)%c2))
! Read back
read(str,nml=nml2)
! Check result
if (any (x1 /= ['aa01','aa02'])) STOP 54
if (any (x1p /= ['98', '99'])) STOP 55
if (x2 /= '7') STOP 56
if (x2p /= '101') STOP 57
if (x3 /= '8') STOP 58
if (any (x4 /= ['-1', '-2', '-3'])) STOP 59
if (x6%c1 /= '-701') STOP 60
if (any (x6%c2 /= ['-702','-703','-704'])) STOP 61
if (x7(1)%c1 /= '33001') STOP 62
if (x7(2)%c1 /= '33002') STOP 63
if (any (x7(1)%c2 /= ['44001','44002','44003'])) STOP 64
if (any (x7(2)%c2 /= ['44011','44012','44013'])) STOP 65
if (x8%c1 /= '-601') STOP 66
if (any(x8%c2 /= ['-602','6703','-604'])) STOP 67
if (x9(1)%c1 /= '35001') STOP 68
if (x9(2)%c1 /= '35002') STOP 69
if (any (x9(1)%c2 /= ['45001','45002','45003'])) STOP 70
if (any (x9(2)%c2 /= ['45011','45012','45013'])) STOP 71
if (x10%c1 /= '-501') STOP 72
if (any (x10%c2 /= ['-502','-503','-504'])) STOP 73
if (x11(1)%c1 /= '36001') STOP 74
if (x11(2)%c1 /= '36002') STOP 75
if (any (x11(1)%c2 /= ['46001','46002','46003'])) STOP 76
if (any (x11(2)%c2 /= ['46011','46012','46013'])) STOP 77
if (any (x5 /= [ 'x5-42', 'x5-53' ])) STOP 78
if (x12(1)%c1 /= '37001') STOP 79
if (x12(2)%c1 /= '37002') STOP 80
if (any (x12(1)%c2 /= ['47001','47002','47003'])) STOP 81
if (any (x12(2)%c2 /= ['47011','47012','47013'])) STOP 82
end subroutine test3
subroutine test4(x1,x2,x3,x4,x1p,x2p,x6,x7,x8,x9,x10,x11,n)
character(len=*), allocatable :: x1(:)
character(len=*), allocatable :: x2
character(len=*), pointer :: x1p(:)
character(len=*), pointer :: x2p
character(len=*) :: x3
character(len=*) :: x4(3)
integer :: n
character(len=5) :: x5(n)
type(t) :: x6,x7(2)
type(t),allocatable :: x8,x9(:)
type(t),pointer :: x10,x11(:)
type(t) :: x12(n)
namelist /nml2/ x1, x2, x3, x4,x5,x1p,x2p,x6,x7,x8,x9,x10,x11,x12
x5 = [ 'x5-42', 'x5-53' ]
x12(1)%c1 = '37001'
x12(2)%c1 = '37002'
x12(1)%c2 = ['47001','47002','47003']
x12(2)%c2 = ['47011','47012','47013']
! SAVE NAMELIST
str = repeat('X', len(str))
write(str,nml=nml2)
! RESET NAMELIST
x1 = repeat('X', len(x1))
x1p = repeat('X', len(x1p))
x2 = repeat('X', len(x2))
x2p = repeat('X', len(x2p))
x3 = repeat('X', len(x3))
x4 = repeat('X', len(x4))
x6%c1 = repeat('X', len(x6%c1))
x6%c2 = repeat('X', len(x6%c2))
x7(1)%c1 = repeat('X', len(x7(1)%c1))
x7(2)%c1 = repeat('X', len(x7(2)%c1))
x7(1)%c2 = repeat('X', len(x7(1)%c2))
x7(2)%c2 = repeat('X', len(x7(2)%c2))
x8%c1 = repeat('X', len(x8%c1))
x8%c2 = repeat('X', len(x8%c1))
x9(1)%c1 = repeat('X', len(x9(1)%c1))
x9(2)%c1 = repeat('X', len(x9(1)%c1))
x9(1)%c2 = repeat('X', len(x9(1)%c1))
x9(2)%c2 = repeat('X', len(x9(1)%c1))
x10%c1 = repeat('X', len(x10%c1))
x10%c2 = repeat('X', len(x10%c1))
x11(1)%c1 = repeat('X', len(x11(1)%c1))
x11(2)%c1 = repeat('X', len(x11(2)%c1))
x11(1)%c2 = repeat('X', len(x11(1)%c2))
x11(2)%c2 = repeat('X', len(x11(2)%c2))
x5 = repeat('X', len(x5))
x12(1)%c1 = repeat('X', len(x12(2)%c2))
x12(2)%c1 = repeat('X', len(x12(2)%c2))
x12(1)%c2 = repeat('X', len(x12(2)%c2))
x12(2)%c2 = repeat('X', len(x12(2)%c2))
! Read back
read(str,nml=nml2)
! Check result
if (any (x1 /= ['aa01','aa02'])) STOP 83
if (any (x1p /= ['98', '99'])) STOP 84
if (x2 /= '7') STOP 85
if (x2p /= '101') STOP 86
if (x3 /= '8') STOP 87
if (any (x4 /= ['-1', '-2', '-3'])) STOP 88
if (x6%c1 /= '-701') STOP 89
if (any (x6%c2 /= ['-702','-703','-704'])) STOP 90
if (x7(1)%c1 /= '33001') STOP 91
if (x7(2)%c1 /= '33002') STOP 92
if (any (x7(1)%c2 /= ['44001','44002','44003'])) STOP 93
if (any (x7(2)%c2 /= ['44011','44012','44013'])) STOP 94
if (x8%c1 /= '-601') STOP 95
if (any(x8%c2 /= ['-602','6703','-604'])) STOP 96
if (x9(1)%c1 /= '35001') STOP 97
if (x9(2)%c1 /= '35002') STOP 98
if (any (x9(1)%c2 /= ['45001','45002','45003'])) STOP 99
if (any (x9(2)%c2 /= ['45011','45012','45013'])) STOP 100
if (x10%c1 /= '-501') STOP 101
if (any (x10%c2 /= ['-502','-503','-504'])) STOP 102
if (x11(1)%c1 /= '36001') STOP 103
if (x11(2)%c1 /= '36002') STOP 104
if (any (x11(1)%c2 /= ['46001','46002','46003'])) STOP 105
if (any (x11(2)%c2 /= ['46011','46012','46013'])) STOP 106
if (any (x5 /= [ 'x5-42', 'x5-53' ])) STOP 107
if (x12(1)%c1 /= '37001') STOP 108
if (x12(2)%c1 /= '37002') STOP 109
if (any (x12(1)%c2 /= ['47001','47002','47003'])) STOP 110
if (any (x12(2)%c2 /= ['47011','47012','47013'])) STOP 111
end subroutine test4
end program nml_test