4 ! Test that a NULL actual argument to an optional dummy is not present
5 ! (see also F2018:15.5.2.12 on argument presence)
7 program test_null_actual_is_absent
10 character :: c(4) = "#"
15 integer, intent(in
) :: i(4)
17 integer, allocatable
:: aa
18 integer, pointer :: pp
=> NULL()
19 print *, "Scalar integer"
23 call two (kk
, NULL(aa
))
24 call two (kk
, NULL(pp
))
25 print *, "Elemental integer"
29 call two (i
, NULL(aa
))
30 call two (i
, NULL(pp
))
31 print *, "Scalar integer; value"
34 call two_val (kk
, NULL())
35 call two_val (kk
, NULL(aa
))
36 call two_val (kk
, NULL(pp
))
37 print *, "Elemental integer; value"
40 call two_val (i
, NULL())
41 call two_val (i
, NULL(aa
))
42 call two_val (i
, NULL(pp
))
45 elemental
subroutine two (i
, j
)
46 integer, intent(in
) :: i
47 integer, intent(in
), optional
:: j
48 if (present (j
)) error
stop 11
51 elemental
subroutine two_val (i
, j
)
52 integer, intent(in
) :: i
53 integer, value
, optional
:: j
54 if (present (j
)) error
stop 12
58 character, intent(in
) :: y(4)
60 character, allocatable
:: aa
61 character, pointer :: pp
=> NULL()
62 print *, "Scalar character"
65 call four (zz
, NULL())
66 call four (zz
, NULL(aa
))
67 call four (zz
, NULL(pp
))
68 print *, "Elemental character"
72 call four (y
, NULL(aa
))
73 call four (y
, NULL(pp
))
74 print *, "Scalar character; value"
75 call four_val (zz
, aa
)
76 call four_val (zz
, pp
)
77 call four_val (zz
, NULL())
78 call four_val (zz
, NULL(aa
))
79 call four_val (zz
, NULL(pp
))
80 print *, "Elemental character; value"
83 call four_val (y
, NULL())
84 call four_val (y
, NULL(aa
))
85 call four_val (y
, NULL(pp
))
88 elemental
subroutine four (i
, j
)
89 character, intent(in
) :: i
90 character, intent(in
), optional
:: j
91 if (present (j
)) error
stop 21
94 elemental
subroutine four_val (i
, j
)
95 character, intent(in
) :: i
96 character, value
, optional
:: j
97 if (present (j
)) error
stop 22