<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/86907>86907</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Flang][OpenMP] Issues in copyprivate
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang:openmp
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            luporl
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          harishch4
      </td>
    </tr>
</table>

<pre>
    Here is a list of test cases that are failing in flang-new but are working in other compilers.
Godbolt [link](https://godbolt.org/z/b3hKvKjEj)
```
subroutine test1
    use omp_lib
    implicit none
    character xz
    common/c/xz
 !$omp threadprivate(/c/)
    !$omp parallel num_threads(4)
 !$omp single
        xz = 'c'
        !$omp end single copyprivate(/c/)
    !$omp end parallel
end

error: COMMON block must be declared in the same scoping unit in which the OpenMP directive or clause appears
          !$omp end single copyprivate(/c/)
```

```
!fails in gfortran but all other compilers accepting this

subroutine test2
    real z
    !$omp parallel private(z) num_threads(2)
    !$omp single
        z = -2
 !$omp end single copyprivate(z,z)
    !$omp end parallel
end 
```

```
subroutine test3
    use omp_lib
    !$omp parallel private(xz) num_threads(2)
    xz = f()
    !$omp end parallel
contains
    function f() result(rz)
        !$omp single
        rz = 42
        !$omp end single copyprivate(rz)
 end function
end subroutine

error: COPYPRIVATE variable 'rz' is not PRIVATE or THREADPRIVATE in outer context
          !$omp end single copyprivate(rz)
 ^^
```


```
subroutine test4
    use omp_lib
 implicit none
    call test
contains
    subroutine test
 real, pointer :: xz
        !$omp parallel private(xz) num_threads(2)
 xz => fz()
        !$omp end parallel
    end subroutine
 function fz()
        real, pointer :: fz
        nullify (fz)
 !$omp single
        allocate (fz)
        fz = 42
        !$omp end single copyprivate(fz)
    end function
end subroutine

 error: COPYPRIVATE variable 'fz' is not PRIVATE or THREADPRIVATE in outer context
          !$omp end single copyprivate(fz)
 ^^
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8lt1vozgQwP-aycuoFTGwIQ95SJvmdrXqtVqtTrqnlTFDcGtsZJt-5K8_GeiSck2_TroIKcLzwcz4N_Zw5-ROE60gPQPGVNsYq4AxSDcz3vrK2FXFrXSVqJJZborH1VeyhNIhRyWdR1OiJ-dRcEcOfcU9cktYcqmk3qHUWCqudyea7jFve-G9sbeD0PiKLApTN1KRdacQbSBa_2GK3CiPkJ4pqW8h3QDLKu8bB_Ea2BbYdternBq7A7bdA9vmcfX97vvNxQ2wZe8GvkTD0726Nrem9VJTF_K8X0VEbB2hqZtfSubjoqwbJYX0qI2mcVlU3HLhyeLD_mDV1LXRwLYC2Pa3ANgcWGLqBn1liReNlXfcE7Bs0PwdavAxajfccqVIoW7rX72pA5Ylo_qo66TeqYP4wu9hjxBvENhCAFs8l42WpIvBGoVpHt8bXDB7CrCXky6Ggvev1hoL8RrPry4vr_7EXBlxi3XrPOaEBQnFLRVh931F6HhN6IRpAhGtlj4I7ispqk581ZC-vMZCWhJe3hEai0LxsGO8aYhb9zy9TyU4AeXlRTYPULsQ3q401luue6KVmmKMXAhqfMjIV9Idep1AyMboLXGF-1dxGDPYA1tO6GBH9uslQHo-Tti_aDpasj2w8_1HiMD3l3ZSk_iNxny1MA9vVmZojrLj4J35CKM9l_qAtbLVwkujn_ygJdcqDyyzz8v09mbYPqCEfbhRDz8VlJ6CGjdhLO2RDr3--_rHt7_WPy_wjlvJc0Xh2AiOF-GU18bjk4Kx-PPrj4v15mkhnN-t78DXnh78JzrxMANIL8LzCjbvgCd5DZ5jR3po4WB8bLMn3xgEoWGBnWNjpA5VCHdTvH52LfxXXHtWIb7Acj_l9S1mg_wlBA7QfdHnkbTKSVq6VUqWjwgsK_fvvZi4UkZwT1Or4Vd-uhMmzj7SDPhmN5T_VzeUH-mGWbGKi2W85DNazRfz-ZeIzaNoVq3KgpJllGdlzvIo47ng80WSLHOWZUsqF9lMrljEkihmWZRG8yQ6FXnK5wvOSaQ5lWkGSUQ1l-pUqbs6jFgz6VxLq-zLMlrMFM9JuWFi7KY7iNemIV03w-RoV8HwJG93DpIozIludOWlV928ue1M0w2kZ_0tD-kGv4UPdZfsQWlmrVWryfwnfdXmp8LUwLbB9_B30lhzQ8ID23YxO2DbLux_AgAA___8iTGw">