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

    <tr>
        <th>Summary</th>
        <td>
            [OpenMP] copyin clause at `#pragma omp parallel for` not working
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          utsumi-fj
      </td>
    </tr>
</table>

<pre>
    If copyin clauses are specified to the following directives, the copyin clauses do not work.

- `#pragma omp parallel for`
- `#pragma omp parallel for simd`
- `#pragma omp parallel sections`

The execution result of the following program compiled with -fopenmp is incorrect.

test.c

```c
#include <stdio.h>

#define N 10

int x;
#pragma omp threadprivate(x)

int main() {
  int a[N];
  int b[N];
  x = 5;

#pragma omp parallel for copyin(x)
  for (int i = 0; i < N; i++)
    a[i] = i + x;

  for (int i = 0; i < N; i++)
    if (a[i] != i + 5)
      puts("FAIL: omp parallel for copyin");

#pragma omp parallel for simd copyin(x)
  for (int i = 0; i < N; i++)
    b[i] = i + x;

  for (int i = 0; i < N; i++)
    if (b[i] != i + 5)
      puts("FAIL: omp parallel for simd copyin");

#pragma omp parallel sections copyin(x)
  {
#pragma omp section
    {
      if (x != 5)
        puts("FAIL: omp parallel sections copyin");
    }

#pragma omp section
    {
      if (x != 5)
        puts("FAIL: omp parallel sections copyin");
    }
  }
}
```

The compilation command and the execution result are below. The messages starting with `FAIL` are emitted, which is incorrect.

```
$ clang --version
clang version 15.0.0 (/work/utsumi/llvm-project/clang 8527f32f0a16a77edb0b53a5ab8074e518eeff54)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /work/utsumi/install_main/bin
$ clang -fopenmp test.c
$ ./a.out
FAIL: omp parallel for copyin
FAIL: omp parallel for copyin
FAIL: omp parallel for copyin
FAIL: omp parallel for copyin
FAIL: omp parallel for copyin
FAIL: omp parallel for copyin
FAIL: omp parallel for copyin
FAIL: omp parallel for copyin
FAIL: omp parallel for copyin
FAIL: omp parallel for simd copyin
FAIL: omp parallel for simd copyin
FAIL: omp parallel for simd copyin
FAIL: omp parallel for simd copyin
FAIL: omp parallel for simd copyin
FAIL: omp parallel for simd copyin
FAIL: omp parallel for simd copyin
FAIL: omp parallel for simd copyin
FAIL: omp parallel for simd copyin
FAIL: omp parallel sections copyin
```

The result of gcc is below.

```
$ gcc-11.2.0 -fopenmp test.c
$ ./a.out
$
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVl1vozgU_TXk5QoEJiTkgYe22UiVdrv7MO8jgw3xDNjINk3m3--1aUhI22mk7a72YSSSkPvlc4_hXJeK_Sgea6hU_0NIqFo6GG6Aag6m55WoBWdgFdg9h1q1rToI2QATmldWPHMTkAfvu8pnCqSycFD6exTE2yC-G79DCFZxQNJe06ajoLoeeqpp2_IWy2vnvCUOjOjYTcHG4VTSTMHj9xeEzI-8GpwTNDdDa0HVV232WjWadthc14sWiTgIu4ewVj2XuIgwIGSltONi1qXlxkbVpcUt76-TlaSY2g6MQ5A-GMuEivZB-tssh6SM10JyeIJkhl5IC8cgvZ_iLjq3e80p67V4ppYHJD8GZHOd21Eh0YUeCNYvVQCchwbZ_VOQbafio7l8bT4i8C1kZxRvYJlt2fiEzBCBd6DJrSF8wRgL-tsHePK3Abn315QCHqRAND4BY8n9JRv_pLKoXc65PknOS2SzSIB-sMaTSHZ3j78H6d37LROXejNR7tn-RLbKf5mt8rPYmvV9O2WnN_xtyqbne579knRGePEenFs7nnq67ubDfl6BmvUzLrh9v7n_EbxLpNPNSc2uJXUUSupFFe87Khm4j31Lbt2MKTlKbQQut-PG0AZnh7FUWye_Xm1xFd_CKvYJvBPWcubGzmEvqv37InwNkizddMKyYfjMtZnoHY0vJkiyKI5i8Nzt3PjCH-Ry6PAF2LXtcxfiUPiGa-HfMTPPyLpOSR3TZEXXa87KuMxSmtEyj9dLniU553WdLac9-kJ1w63bk2O--rpahoP8LtVBhq2QwzFs5HAi1Ck5dIrx1kX3yojj6HqUSBLuJNsK7VxvYBVjyNdR63elkK94OM2x2bhCd4TxNFKDHU0fyduvoM8IulS_X5H_VeS1EP5c3s7nxKaqnPKM8vWB6mBsmCQRQVm59ZVD01W5BStStkk3dGGFbXmBQ_dPLPXHX27yzg7fQO2Hh-zpcI4yuxh0W-yt7Q2ygzDwalB4hzJCBX8RvdfaJ4wZ3Ol_l2XZcr3YFxVd5VUe1zklm5JWVUqSnJB1SbIVWW6SfNFSZMs44DhuJD-AL-FGT7ZdiILEhMQolnGepEkeMbauN2wZs7zelMuaBcuYo5S1kcMRKd0sdOEhlUNj0NkKY83ZSY0RjeSeJ1efDnavdDGqY1h_W_jFCw_-b3nh2SQ">