Skip to content

[flang] runtime crash when optional arguments are passed as arguments to another function #145256

Closed
@shivaramaarao

Description

@shivaramaarao

consider the following program

module optional_class_module
    implicit none

    type :: MyType
        integer :: value
    contains
        procedure :: show
    end type MyType

contains

    ! Type-bound procedure for MyType
    subroutine show(this)
        class(MyType), intent(inout) :: this
        print *, "MyType value is:", this%value
    end subroutine show

    subroutine process_data_2(obj)
        class(MyType), intent(inout) :: obj
                call process_data_3(obj)
    end subroutine

    subroutine process_data_3(obj)
        class(MyType), intent(inout) :: obj
    end subroutine

    subroutine process_data(obj)
        class(MyType), intent(inout), optional :: obj

        if (present(obj)) then
            select type(obj)
            type is (MyType)
                print *, "Optional object is present."
                call obj%show()
            class default
                print *, "Unknown type passed."
            end select
        else
            print *, "No object was passed."
        end if
        call process_data_2(obj)
    end subroutine process_data

end module optional_class_module


program test_optional_class
    use optional_class_module
    implicit none

    type(MyType) :: a

    a%value = 42

    print *, "--- Call with object ---"
    call process_data(a)

    print *, "--- Call without object ---"
    call process_data()
end program test_optional_class

The program crashes at runtime with flang. It passes with other compilers

 --- Call with object ---
 Optional object is present.
 MyType value is: 42
 --- Call without object ---
 No object was passed.
Segmentation fault (core dumped)

Metadata

Metadata

Assignees

No one assigned

    Labels

    flangFlang issues not falling into any other categoryquestionA question, not bug report. Check out https://llvm.org/docs/GettingInvolved.html instead!

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions