Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
26746 Discussions

iford 19.0 bug recursive procedure with optional, value dummy argument



I get a segmentation fault, when running the following program compiled with iford 19.0 without any compiler options on linux.

! ifort (IFORT) 20181018
program ifort_bug_recursive_procedure_optional_value_dummy_argument
    implicit none

    ! works fine
    call sub(10, 0, 5)

    ! forrtl: severe (174): SIGSEGV, segmentation fault occurred
    call sub(10, 0)
    recursive subroutine sub(max, current, depth) ! iford bug if depth absent
        integer, intent(in) :: max
        integer, intent(in) :: current
        integer, value, optional :: depth
        ! integer, intent(in), optional :: depth ! fixes the bug

        logical :: step_in
        step_in = .true.
        if (present(depth)) then
            if (current > depth) return
            if (depth == 0) step_in = .false.
        end if

        if(step_in.and.(max >= current)) then
            print *, current
            ! if (present(depth)) then ! fixes the bug
                call sub(max, current+1, depth)
            ! else
            !     call sub(max, current+1)
            ! end if
        end if

    end subroutine sub
end program ifort_bug_recursive_procedure_optional_value_dummy_argument


0 Kudos
3 Replies
Honored Contributor II

This looks like a bug in Intel Fortran compiler, you can submit a support request:

Valued Contributor I

I tested versions 12.1 and 14.0.3, they compile with a warning

warning #7937: The OPTIONAL attribute should not be used for arguments with the VALUE attribute.   [DEPTH]
  recursive subroutine sub(max, current, depth) ! iford bug if depth absent

but the executable then only prints until 5, not until 10.

Since version 15.0.3, I do see the segmentation fault. nagfor and gfortran (at least since 5.4) work as expected, printing until 10, PGI 18.10 also generates a segmentation fault.

Black Belt Retired Employee

OPTIONAL and VALUE are allowed together if BIND is not used - there was some debate about this in the standards committee more than a decade ago (my first WG5 meeting!). However, it looks as if ifort isn't taking this into account when following the rules for how a not-present dummy argument is passed to a procedure where that argument is OPTIONAL. I agree that a bug report is in order.