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