<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/145256>145256</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [flang] runtime crash when optional arguments are passed as arguments to another function
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          shivaramaarao
      </td>
    </tr>
</table>

<pre>
    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)
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVsGOozgQ_RpzsRK5TQjhwIGdVqQ97O5hZ8-RgQp41tjIZXfUf78yhoSke3q6V0KKYrtevar3XCAQZacBSpL9RrLnRHjXG1tiL1-EFYMQVpikNu1r2RiNsgVLXQ_0bJQyF6k7OlrTWTEQVpE9mx9WDab1CqgZnTRaqFOjBOIprhJWUUqpHEYlG-moNjqszcvudQRK0oqkFf3j9fvruJyfYrSDDuyy_yKUX7Ybo52QGsPf0ZoGWm-vQNiby3wOdBtzXMEJq1bB8zHCn2jY39TG63aFeDb2nhf62hrvpIaYhh9cL5HwYsV7Kp_wwxzIC8K_TcVoR_hBauMd4cXCdoq_BY9WakcJr0IQ4TyCxOKpxBDEediLebNrV0Kpj-yuBa42puIQT61w4sQJP5j6x8z_a8RD3I33tXih1H2O9C7HLMqN0K9JvgH4epNvXL-Y_P-nDovLjbinsbb4mRJ-GC1gDJ5z8SLcOx0OIiho3GTi97hcL5FEekfprTKPzvprIWfqHyGFRDoT2QaL_UTaiUE2e3_tG9rCWXjlPpH5H_2vNhcdiY8CEdol5STPVPIKBxTCA-wj5J9mKeMi8B1MeV4L-Maj_GOP3ltiUjAc-MXci888MqkDdKf7o3Muj1-fnbMfrnovDhM3f4llOlCSPtMdv-08Nm-z2dBvoScX6fqlj5vN5maDNx0j_CBitz6Dabz7NGxEhTiGP-jcwzuIsOp7D9eYxgrsAalw1Hrt5ACxuLMSutvS3130CM4lux4sbcwwSgUWH6DpT_vDKvrRLWLLS209vqMS9KP-sIq-72dW_Q3dANqJkJRO9y1c-8ZYoK0fRmhnUVb0k7ZM2yItRALlU56x_a54yoqkL3Ng-yyv8129Z3VRFzvID81u16bnOi_aOk1kyRnP2J6nLOVZdthyYILleV5kon1K85zsGAxCqq1SL8PW2C6RiB7Kp13Gs32iRA0Kp48NzqfOB-mz58SWIWBT-w7JjimJDm8QTjo1faHEiOz5quAkKr30oG-TVdjOh44gFXYZJlTgat0ZKnRU-Ox1E-ISb1XZOzfG9-mR8GMnXe_rbWMGwo-By_yzGa0JOhB-nGpDwo9zeS8l_y8AAP__T7Hd7w">