https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107441
Bug ID: 107441
Summary: optional arguments are identified as "present" when
missing
Product: gcc
Version: 12.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: kaiserkarl31 at yahoo dot com
Target Milestone: ---
If the first argument to a function is of type "character" (of any length, from
what I can tell, including ":" and "*") and the second parameter is both passed
by value and optional, the second argument will be identified as "present" even
when absent. The following short program reproduces the problem with gfortran
12.2.1:
program bugdemo
implicit none
character :: s
integer :: t
s = 'a'
t = testoptional(s)
print*, 'testoptional: ', t
contains
function testoptional(w, x) result(t)
character, intent(in) :: w
integer, intent(in), value, optional :: x
integer :: t
print*, 'present(x) is ', present(x)
t = 0
end function testoptional
end program bugdemo
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
When compiled and run with gfortran 12.2.1, this gives the following output:
present(x) is T
testoptional: 0
[clearly, the first line should have "F" instead of "T"]