<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/78282>78282</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang][Semantics] Threadprivate symbols are ignored in presence of default clause
</td>
</tr>
<tr>
<th>Labels</th>
<td>
bug,
flang:semantics
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
NimishMishra
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
NimishMishra
</td>
</tr>
</table>
<pre>
Current default clause lowering proceeds in two steps: (1) in the semantics phase, the symbols are modified to contain relevant flag associated with the default data sharing attribute on the region, and (2) in the lowering phase, the corresponding symbols are collected and lowering.
Step (1) of this process currently allows incorrect modification of the symbol that is threadprivate. Consider the example:
```
PROGRAM main
COMMON /PLATQ_COMMON/ &
& Px(8),Py(8),Pz(8)
!$OMP THREADPRIVATE (/PLATQ_COMMON/)
!$OMP PARALLEL DO DEFAULT(PRIVATE)
DO I=1, 4
PX(I) = 4
CALL SUB1()
ENDDO
!$OMP END PARALLEL DO
CONTAINS
SUBROUTINE SUB1()
COMMON /PLATQ_COMMON/ &
& Px(8),Py(8),Pz(8)
!$OMP THREADPRIVATE (/PLATQ_COMMON/)
print *, PX
END SUBROUTINE
END PROGRAM
```
Currently, LLVM flang does not treat PX as threadprivate when **default clause is present**:
```
omp.parallel {
%24 = fir.alloca i32 {adapt.valuebyref, pinned}
%25 = fir.declare %24 {uniq_name = "_QFEi"} : (!fir.ref<i32>) -> !fir.ref<i32>
omp.wsloop for (%arg0) : i32 = (%c1_i32) to (%c4_i32) inclusive step (%c1_i32) {
fir.store %arg0 to %25 : !fir.ref<i32>
%26 = fir.load %25 : !fir.ref<i32>
%27 = fir.convert %26 : (i32) -> i64
%28 = fir.array_coor %13(%12) %27 : (!fir.ref<!fir.array<8xf32>>, !fir.shape<1>, i64) -> !fir.ref<f32>
fir.store %cst to %28 : !fir.ref<f32>
fir.call @_QFPsub1() fastmath<contract> : () -> ()
omp.yield
}
omp.terminator
}
```
However, should default clause be removed, then correct privatization follows:
```
omp.parallel {
%24 = fir.alloca i32 {adapt.valuebyref, pinned}
%25 = fir.declare %24 {uniq_name = "_QFEi"} : (!fir.ref<i32>) -> !fir.ref<i32>
%26 = omp.threadprivate %2 : !fir.ref<!fir.array<96xi8>> -> !fir.ref<!fir.array<96xi8>>
%27 = fir.convert %26 : (!fir.ref<!fir.array<96xi8>>) -> !fir.ref<!fir.array<?xi8>>
%28 = fir.coordinate_of %27, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8>
%29 = fir.convert %28 : (!fir.ref<i8>) -> !fir.ref<!fir.array<8xf32>>
%30 = fir.shape %c8 : (index) -> !fir.shape<1>
%31 = fir.declare %29(%30) {uniq_name = "_QFEpx"} : (!fir.ref<!fir.array<8xf32>>, !fir.shape<1>) -> !fir.ref<!fir.array<8xf32>>
omp.wsloop for (%arg0) : i32 = (%c1_i32) to (%c4_i32) inclusive step (%c1_i32) {
fir.store %arg0 to %25 : !fir.ref<i32>
%32 = fir.load %25 : !fir.ref<i32>
%33 = fir.convert %32 : (i32) -> i64
%34 = fir.array_coor %31(%30) %33 : (!fir.ref<!fir.array<8xf32>>, !fir.shape<1>, i64) -> !fir.ref<f32>
fir.store %cst to %34 : !fir.ref<f32>
fir.call @_QFPsub1() fastmath<contract> : () -> ()
omp.yield
}
omp.terminator
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWFtv4jgU_jXm5WhQ4gQIDzykXHYq0ZbpZTRvlZM4xCtjZ21D2_n1K9shBEo73Wo0D1tVQGyfc77znVsSojVbC0onaHCBML5mG6arK6YrRRDGaDDrka2ppJp0d3qZLF4m061SVBgoaEm23EDOyVZT4PKJKibWUCuZU1poYALMkwRtaK1RlALCSYjw2K1XFDTdEGFYrqGuiKYIT_3yyyaTXANRFDayYCWjBRgJuRSGMAGKcrojwkDJyRqI1jJnxNACnpipnIY9sIIYAroiDhUxRrFsayhIb17RNZPCWiWisNhwB9vBmS60XCpFdS1FYbe6QHPJOc0tCqtsL91HwQwFqf-8M7RuKZAlmIppz5XWkHtO-QsQzuWT5c4Zy03DQU4Mk8LL7TkCUxEDTIOpFCVFrdiOGNqHqRSaFVS5o_SZbGpOUZR2waBh0Py7y9XtzV-36RVsCBN-BaY3V1c314DwYrVM7789-muEF-D-EB42mvAQYPWMcJIgPEZ4unrp_P65_92cDRGOb65WcP_1dp7OVreX39P7uWXltZ2D1InsKr1Nl8v5EmY3MJsv0oflPcJJo6uVArD7lyiahTZ8cbsKsPqBcHJpw4Ci2dHONF0u4e7hInSIDprm17PZzSmO-fWsi6Xl7fo-vby-a2XvHi5ubx7uL6_n5zTDO0S3HDeEf5hnf_7zXPsQ14oJAwinlr_Vj8OWdfzglV93ZPgsOpth_nO6T3Orcrn8fmWLWKyhkFSDkAaMosTA6geQk6yGp4oKDyY9aTyujKimwvjt91Ndbup-TRThnHJAo4uuxwgPcOySomSqbysxJ8AibM-RgtSmvyN8S7MXRUvrQc2EoAUazU6VDFolBc25bRCN6tHFVrB_HgXZUHcEYfz4bTFntueOZtB0SYRDK2utRFMWYRTZvIYvKLLxe73XsW7de9JcyhpKqcBrGxC1Dny-p94fZ9ru5OGjVYLHtsU2S_F-iYmcbzXbUdfDX0mcsAfOYW2kd9fa9Eo9H-mvoHvqhi11XJLiv0qPWulcih1VptXpiG2AOyLZMH4tnxyirxR5ecylVHYjjLzzoXe8sfQ6WM2FE0bRNHkuPVAbwOneBV2RmqJoGjbLFsnZ8JZdL4_IzbXZc5u8Zqc8w47jhHAOKA4evy1Weps1vQhKos2GmApFUztkFcmNg7L3r4V20rmadHthlBdHFdAWhN02VG2YIEaqTnPan2iLE7ol-1U-0R1VlhtdyS0vTu81Mju-N3JHi2Y0C9iPS98v2E8_L0vpxumnWsL_oBscCspF4qih2r3XqXOSwOPhM0t8Ap8x-PbhUxC_qMuPaj3r9sl5FC3ehJF0YEhV2LSkj7L0EH2FDvLgI6iOrNgaFgV9fiMsyRkk47OEJOdjnnzU926_OTYYBa1B136cp625s-iP2tSJtvBsSo99k4yCZjqcze76-Z30_kT__DwtJ7Pyz4zK3zAjG1SfnJFRdC71IvzRGRnFb8zIKDwKf2Ppj87Ic_chh1HpkL83Kn_zjPzFcGxz8GMTsldMomIcjUmPTsJRMIjDOAjiXjXJSJEPR3EyHI5GQRZnoyLGWVIOh1FG8ywve2yCAxwHYTgM42AYx_3RIMJlFI_icRxQGkYoDuiGMN7nfLfpS7XuMa23dDJKcIJ7nGSU6-ZFQbZd2_LFU4Sxu3dHUdo-yDdvDtTE6vmSbdcaxQFn2uiDZsMMd28dvPRghgYXd62CwQzuj6ZU9yGbrYVUtLDP6P6GP6f2gfj43qC3VXxSGeNeObhHm8WamWqb9XO5QXhhgTRfX2ol_6a5QXjh_NUIL5zL_wYAAP__kxGycw">