<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/102939>102939</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang][openmp] Bad code for "private" directive with pointers and targets
</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 program:
```
program bug
integer, pointer :: pvar
integer, target :: tvar
tvar = 2
pvar => tvar
!$omp parallel private (pvar, tvar)
tvar = 1
pvar => tvar
!$omp end parallel
if (pvar/=2) stop 'fail'
print *, 'ok'
end program
```
I compile this program with `flang-new -fopenmp bug.f90`. When I execute it, I get the output:
```
Fortran STOP: fail
IEEE arithmetic exceptions signaled: INEXACT
```
When I compile and execute the same program with `gfortran -fopenmp bug.f90`, I get the output:
```
ok
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUU9GOmzoQ_ZrhZZQIBkLCAw_ZTaKbl3uv1JXaVwMDuGuwZZvs9u8rE5Jtu1uplSI5Hs-cOWeGI5yT3chcwuYBNodITL7XtjTOsxxbVk1U6eZb-Q9bBto6FOjZeTRWd1YMkO4hPkC8hzxefvN1ecZq6q4BRDl67tgCPaLR4WIxVKd7NBdhl6wfkrywHftbjn_Lmf8jpAekW8QsEUiPP2UCJUCZHgwaYYVSrNBYeRGeEWg39w2d5rN4B5_8OTyPzb3FXXD71uQE6YGACnReGwTatkIqoO29g5WjR6B94AO01c_3xxl6mfZHoz5jrQcjFaPvpbul4ov0PUIet0qM3WrkF1y12vA4mLCUdVsEhDV-7nnEM_Ir15NnlD4QOGOYvO8Z9eTN5H-35ZO23ooRPz39939Y0izqSup4PKKw0vcDe1kjv9ZsvNSjw_C5CcVNKDj_e_yyf3z6EHxhdhMnxubOMjBzYuB3Yrt2YfSB1r8Rpp9_CUdNmTZFWoiIy2RLabZL8yKP-rKORS7yJM3aoqpESpXIKG5yUdV5ThnlkSwppizeJZRsaZfka6K6yOI8S7ZUNJuYIYt5EFKtlboMa227SDo3cZnEVKRFpETFys3uJAp2IgJ6BKJ5sZDur0JDeHOIbBlQVtXUOchiJZ13b7heejX7_Fq6OcDmYaneHPBBNFjrhrHVFoFoMQoQYSMt115e-Droxb5u3snVpi6arCp7740LM6UT0KmTvp-qda0HoFMgsRwrY_VXrj3QaVbqgE6L2EtJ3wMAAP___4Zd1g">