<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/108299>108299</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang][openmp] Seg fault accessing thread private allocatable
</td>
</tr>
<tr>
<th>Labels</th>
<td>
bug,
flang:openmp
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
psteinfeld
</td>
</tr>
</table>
<pre>
Here's a test case:
```
module omod
real,allocatable :: ralloc
!$Omp Threadprivate (ralloc)
end module
program main
use omp_lib
use omod, only: ralloc
integer, parameter :: nthread = 2
real :: table(nthread)
integer :: id
allocate(ralloc)
ralloc = 2.
!$Omp Parallel Num_threads (nthread) Copyin (ralloc)
id = omp_get_thread_num()
table(id+1) = ralloc
!$Omp End Parallel
if (sum(table)/=4.) print *, 'fail'
print *, 'ok'
End Program
```
When I compile and execute this test with gfortran or ifort (`gfortran -fopenmp bug.f90`), it prints `ok`.
When I compile and execute this test with flang-new (`gfortran -fopenmp bug.f90`), I get a segmentation fault.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVEuP2zYQ_jWjy2ANafSyDjp47RrNpS3QAj0uKGkksaFIgaQ23X9fUA9nt0mAAIZtDT9-jxE5wjk5aOYa8mfIb5FY_GhsPTvPUvesuqgx3Vv9K1sGKh0K9Ow8tsIxpBeIbxBfoIj3z_o4mW5RjGYy3VZAtCwU0FUoZVrhRaMYw-70gnatHTigBCj7fZrxr9Gy6GYrX4VnBDrvQKo2LOsON6Hdw_o9WzNYMeEkpD44Fxe8zC9KNntpq5gO6IpGq7dvfUjteWAbALOwYmLP9nCs_WoNIb0hvQ94ANZ8QOcd-LD8oD2A8tGfvTH8bU7cnW1yp734tU9_iLDOCn9bppdN0OEHcbya-U3q7_QQEVFuQUKDBvY7w4teJqDzB-CRSnZAz0ngDft-9Pp-0d3D2r4q-2DBrcw7WQV0h_SWnQLdbKX2CHQJXQcqeyEVUHlw_3_ZfH4srmLbm__ugfx7ZI2fsDXTLBWj0B3yv9wuntGP0m0n-ov0Iw69sd4KjcaiDP-DZSjiR_2pNzPracZmGU59tWqEGFeUfrPoEIrYfIYiPr0_mT_voVdCD0-av_y89icc2KNAx8PE2gsvjcZeLMp_8BB1ddpVaSUirpOSiriKq-ocjXVTVtxzFTdN34gkLps2a4osyalJsjLJRSRriimLqyShJEuT84nLLClywVTkSZn2DFnMk5DqpNTrdDJ2iKRzC9dJfKaqipRoWLl1xhA1ywBEQFcgWsNCetmShXJ-i2wdWJ6aZXCQxUo6777yeunVOq22rfkN8ud9d37DP3nYgqNoW3ZO6gH3-3rMkndDKFqsqkfvZxduJN2B7oP049KcWjMB3YPo_vM0W_MPtx7oviZzQPc93GtN_wUAAP__8o2YVg">