<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/140737>140737</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang][OpenMP] refine semantic checks for atomic
</td>
</tr>
<tr>
<th>Labels</th>
<td>
ABI,
flang:openmp
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tblah
</td>
</tr>
</table>
<pre>
```
module m1
integer::n=2
type w
integer x(2,2,2),v,e
end type
type(w)::g
contains
subroutine s1
!$omp atomic capture
g%x(n,n,n)=g%x(n,n,n)+f(g%e)
g%v=g%x(n,n,n)
!$omp end atomic
end subroutine
end module
```
This is from the deleted Fujitsu test [0455_0029](https://github.com/fujitsu/compiler-test-suite/blob/a0e269d5d279c3a0781bb74940cf5ec16b4ab109/Fortran/0455/0455_0029.f90).
Currently flang doesn't like that `g%e` is used on the rhs of `g%x(n,n,n)=g%x(n,n,n)+f(g%e)`. But as a different component of the derived type and non-overlapping with `g%x` I believe this is valid.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycUz2vrDYQ_TVDY-3KDJiPgoLdFdIroqRIHxk8gN8zNrLN3tx_H3mX6L4iSREJy3g8H-ccz8gQ9GKJOhA3EI9MHnF1voujkWs2OvXZQcXPj_ebU4chtuXAe20jLeSh6KHoLRQPBN7Hz53Yx9ct-xOwQcD7uVrA-xPwTsB7sool_zMMsPlIDq98C_B-cjZKbQPwPhyjd0fUllhItQFzwNJtO5PRbXpik9zj4VOqBVCkohbwfq4Wisc_mvE2AzbpitLxHfz8N--fyybs79InkS-Ep-EtVQr6Sb_fVx2YDmz2bmNxJabIUCTFhuO7juFgkUJkIG68FOIPzrEF8QBs1hj3kJTBAXBYdFyP8Tq5DXCY35GAw-S2XRvyl5TkEg4dCXAYjRsBB8kJq1YJhXU7FZLXTT6OddmWfJoFTXk1lnLMeQs4DM5HLy3gkFCc2wvMdW45YHtNrHh_P7wnG80nm420C1OOggWsIzP6B7G4ysig4m95K554H4EUc_ZF3a-Buflvj__5ZBW_stsRmQxMMqXnmRIklqRwNv25-dTZ6ye9-41Jq5h19uKe5I3cd20X9qHj-oWl4uwbG8loeiYi70d7SqPVNVNdodqilRl1eV3WtchrFNnaqYYrzMeZ1xMqMZdYTkKWY940NTZlVWW6Q46CC-R5WQgU13bmTdmMoqhnKtVUQclpk9pcjXluV-eXTIdwUJeXvC7qzMiRTHgNKmJ_-waYhgoQX_JD0bud7LYns3hkvktZLuOxBCi50SGGr7xRR_Ma-XeoeIC4_bqT_eU3EA_maX5NGm3SxjRcK00_ApudP3s-O7zp_qMnU51zu-zefacpAg4vMgFwOPk8O_wrAAD__2OUWyw">