4 ! The program used to dereference a NULL pointer when trying to access
5 ! an optional dummy argument to be passed to an elemental subprocedure.
7 ! Original testcase from Andriy Kostyuk <kostyuk@fias.uni-frankfurt.de>
11 REAL(KIND
=8), DIMENSION(2) :: aa
, rr
17 ! WRITE(*,*) 'Both f1 and ff work if the optional parameter is present:'
20 ! WRITE(*,*) ' rr(1)=', rr(1), ' rr(2)=', rr(2)
21 IF (ANY(rr
/= (/ 110, 132 /))) STOP 1
25 ! WRITE(*,*) ' rr(1)=', rr(1), ' rr(2)=', rr(2)
26 IF (ANY(rr
/= (/ 110, 132 /))) STOP 2
29 ! WRITE(*,*) 'But only f1 works if the optional parameter is absent:'
33 ! WRITE(*,*) ' rr(1)=', rr(1), ' rr(2)=', rr(2)
34 IF (ANY(rr
/= (/ 110, 132 /))) STOP 3
38 ! WRITE(*,*) ' rr(1)=', rr(1), ' rr(2)=', rr(2)
39 IF (ANY(rr
/= (/ 110, 132 /))) STOP 4
44 ELEMENTAL
REAL(KIND
=8) FUNCTION ff(a
,b
)
46 REAL(KIND
=8), INTENT(IN
) :: a
47 INTEGER, INTENT(IN
), OPTIONAL
:: b
48 REAL(KIND
=8), DIMENSION(2) :: ac
54 ELEMENTAL
REAL(KIND
=8) FUNCTION f1(a
,b
)
56 REAL(KIND
=8), INTENT(IN
) :: a
57 INTEGER, INTENT(IN
), OPTIONAL
:: b
58 REAL(KIND
=8), DIMENSION(2) :: ac
61 f1
=gg(ac(1),b
)+gg(ac(2),b
) ! This is the same as in ff, but without using the elemental feature of gg
64 ELEMENTAL
REAL(KIND
=8) FUNCTION gg(a
,b
)
66 REAL(KIND
=8), INTENT(IN
) :: a
67 INTEGER, INTENT(IN
), OPTIONAL
:: b