! Test alternate entry points for functions when the result types
|
! Test alternate entry points for functions when the result types
|
! of all entry points match
|
! of all entry points match
|
|
|
function f1 (a)
|
function f1 (a)
|
integer a, b
|
integer a, b
|
integer, pointer :: f1, e1
|
integer, pointer :: f1, e1
|
allocate (f1)
|
allocate (f1)
|
f1 = 15 + a
|
f1 = 15 + a
|
return
|
return
|
entry e1 (b)
|
entry e1 (b)
|
allocate (e1)
|
allocate (e1)
|
e1 = 42 + b
|
e1 = 42 + b
|
end function
|
end function
|
function f2 ()
|
function f2 ()
|
real, pointer :: f2, e2
|
real, pointer :: f2, e2
|
entry e2 ()
|
entry e2 ()
|
allocate (e2)
|
allocate (e2)
|
e2 = 45
|
e2 = 45
|
end function
|
end function
|
function f3 ()
|
function f3 ()
|
double precision, pointer :: f3, e3
|
double precision, pointer :: f3, e3
|
entry e3 ()
|
entry e3 ()
|
allocate (f3)
|
allocate (f3)
|
f3 = 47
|
f3 = 47
|
end function
|
end function
|
function f4 (a) result (r)
|
function f4 (a) result (r)
|
double precision a, b
|
double precision a, b
|
double precision, pointer :: r, s
|
double precision, pointer :: r, s
|
allocate (r)
|
allocate (r)
|
r = 15 + a
|
r = 15 + a
|
return
|
return
|
entry e4 (b) result (s)
|
entry e4 (b) result (s)
|
allocate (s)
|
allocate (s)
|
s = 42 + b
|
s = 42 + b
|
end function
|
end function
|
function f5 () result (r)
|
function f5 () result (r)
|
integer, pointer :: r, s
|
integer, pointer :: r, s
|
entry e5 () result (s)
|
entry e5 () result (s)
|
allocate (r)
|
allocate (r)
|
r = 45
|
r = 45
|
end function
|
end function
|
function f6 () result (r)
|
function f6 () result (r)
|
real, pointer :: r, s
|
real, pointer :: r, s
|
entry e6 () result (s)
|
entry e6 () result (s)
|
allocate (s)
|
allocate (s)
|
s = 47
|
s = 47
|
end function
|
end function
|
|
|
program entrytest
|
program entrytest
|
interface
|
interface
|
function f1 (a)
|
function f1 (a)
|
integer a
|
integer a
|
integer, pointer :: f1
|
integer, pointer :: f1
|
end function
|
end function
|
function e1 (b)
|
function e1 (b)
|
integer b
|
integer b
|
integer, pointer :: e1
|
integer, pointer :: e1
|
end function
|
end function
|
function f2 ()
|
function f2 ()
|
real, pointer :: f2
|
real, pointer :: f2
|
end function
|
end function
|
function e2 ()
|
function e2 ()
|
real, pointer :: e2
|
real, pointer :: e2
|
end function
|
end function
|
function f3 ()
|
function f3 ()
|
double precision, pointer :: f3
|
double precision, pointer :: f3
|
end function
|
end function
|
function e3 ()
|
function e3 ()
|
double precision, pointer :: e3
|
double precision, pointer :: e3
|
end function
|
end function
|
function f4 (a)
|
function f4 (a)
|
double precision a
|
double precision a
|
double precision, pointer :: f4
|
double precision, pointer :: f4
|
end function
|
end function
|
function e4 (b)
|
function e4 (b)
|
double precision b
|
double precision b
|
double precision, pointer :: e4
|
double precision, pointer :: e4
|
end function
|
end function
|
function f5 ()
|
function f5 ()
|
integer, pointer :: f5
|
integer, pointer :: f5
|
end function
|
end function
|
function e5 ()
|
function e5 ()
|
integer, pointer :: e5
|
integer, pointer :: e5
|
end function
|
end function
|
function f6 ()
|
function f6 ()
|
real, pointer :: f6
|
real, pointer :: f6
|
end function
|
end function
|
function e6 ()
|
function e6 ()
|
real, pointer :: e6
|
real, pointer :: e6
|
end function
|
end function
|
end interface
|
end interface
|
double precision d
|
double precision d
|
if (f1 (6) .ne. 21) call abort ()
|
if (f1 (6) .ne. 21) call abort ()
|
if (e1 (7) .ne. 49) call abort ()
|
if (e1 (7) .ne. 49) call abort ()
|
if (f2 () .ne. 45) call abort ()
|
if (f2 () .ne. 45) call abort ()
|
if (e2 () .ne. 45) call abort ()
|
if (e2 () .ne. 45) call abort ()
|
if (f3 () .ne. 47) call abort ()
|
if (f3 () .ne. 47) call abort ()
|
if (e3 () .ne. 47) call abort ()
|
if (e3 () .ne. 47) call abort ()
|
d = 17
|
d = 17
|
if (f4 (d) .ne. 32) call abort ()
|
if (f4 (d) .ne. 32) call abort ()
|
if (e4 (d) .ne. 59) call abort ()
|
if (e4 (d) .ne. 59) call abort ()
|
if (f5 () .ne. 45) call abort ()
|
if (f5 () .ne. 45) call abort ()
|
if (e5 () .ne. 45) call abort ()
|
if (e5 () .ne. 45) call abort ()
|
if (f6 () .ne. 47) call abort ()
|
if (f6 () .ne. 47) call abort ()
|
if (e6 () .ne. 47) call abort ()
|
if (e6 () .ne. 47) call abort ()
|
end
|
end
|
|
|