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"]

Reply via email to