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

    <tr>
        <th>Summary</th>
        <td>
            Linking OpenMP target offloading fails with optimization enabled
        </td>
    </tr>

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

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

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

<pre>
    Building an OpenMP hello world fails to link, when Optimization is turned on:
```c
#include <omp.h>
#include <stdio.h>
int main(int argc, char** argv){
  printf("Devices: %i\n", omp_get_num_devices());
  int a[10]={0};
  for (int i=0; i<= omp_get_num_devices(); i++)
  #pragma omp target device(i) map(tofrom: a[:10])
  {
        printf("Hello from device %i, is_initial_device=%i\n", i, omp_is_initial_device());
 a[i]++;
  }
  printf("%i, %i, %i, %i\n", a[0], a[1], a[2], a[3]);
  return 0;
}
```
Building like:
```
clang -fopenmp -fopenmp-targets=nvptx64 omp_hello_device.c -O3
```
This fails with
```
nvlink error   : Size doesn't match for '__omp_rtl_device_environment' in '/tmp/omp_hello_device-1f1427-nvptx64-nvidia-cuda-sm_70-1a1851.cubin', first specified in '/tmp/a-d3fd98.cubin'
nvlink fatal   : merge_elf failed
clang: error: fatbinary command failed with exit code 1 (use -v to see invocation)
clang-linker-wrapper: error: 'clang' failed
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```
I tried with a quite recent build from main (f7c2e5fa05). I tried with a release 17 build (6009708b). Both versions show this issue. I tried on different of our systems with different GPUs equipped, with different versions of CUDA (11.6/11.8/12.1.1). The result is consistent with clang 17 or newer.
I tried a clang/16.0.6 build, which succeeds to build with any optimization level.

@jhuber6 did you see something like this before?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVkGPozoS_jXOpQQCEwI55NDpbHZX2tWM9GbOkcHlUDPGZmyTTM-vfzLQSbqn9d7lRSgYXPXVV5-rbIT3dDaIO1buWXlYiTF01u2-Dc6GX7hqrHzZ7UfSkswZhIFPA5r_f4YOtbZwtU5LUIK0h2BBk_nO-DNcO4yGgXr6JQJZA-QhjM6gBGtY8cSyA8ue2Cabr3Z55gWZVo8SgRXPth_SjhX_-mjOB0n2YZZMgF6QYbyOQ-HObeTRdsIx_sT4U3x1YXzLqv3sATA4MkExXjPOD3ihFj0rnoDxklj5bBjnEcL2w-mM4WTG_iQXq-iyjVdxA5uisnKfZ6w8sOLAqn3GqsODhbIOFnrEikPGin0cPLPi8BdBJiO-n67tKxTjxeDEuRfREYJwZwww-8UIjG-hFwPjdbDK2T5mFbmx4mmm94B0l2P-PYryn2mJI8ICPmvDn4H8iQwFEnqhGzN-qxu9ive77e_yRXY0MZsyvYsWJfxguV55fHi_c4iwc8LzOH8Y84dxsYhyj-swVitkt1c3IreanR9vnaHpO_5e2PNjq4U5Q6LsgKYfboNkXjnPioO5DOHnZj0JNnXWolXaQvKp-BD0S0d-6bwrhe5DG3OJHQnonHUAEAvhD_qFIC16w3gVmya03VKb1ekU47vwulInNBdy1vRoAuMVkIlWjB9DPzB-fE82yVW-5lWyJJOYC0kSSTtKkfj-VGVJLvK6zNN2bGKrVlF_Rc4H8AO2pAjl-xgikYWS2_ru85iYEkHoJbEe3RlPqNUkCsoH6eP0pEEcKBEaMsK9QGv7Xhi52E8qAv6kAK2VCHns1tEjJJe4tXlEIHOx7bSf3Vpowk8iGXTJ1YlhQPcmHOPVzIFXf0NsBvlHWL0rg_9CcPSKJeDHSAHBYYsmQBMLeG7yuIFGeFW1HEslspLxbQrvvB1qFB4hrxZfxutNlm2rrG4m-70NHVzQebLGg-_sFUKsVfJ-xDucNSBJKXSRhVVgRwf-xQfs54J-mP33568e8MdIw4ByOl_ezt-CWQXPXw9R9DrP0w3jxzxP63jjaZ7mE70vXczdjzrEQ6m1xpMPEWUCnVs1r8A6MHhFl76VUMCymsd8k2bpZtZgPvOo7cCPbYsop9NwlmeWzbyAfTwPNV5QL9jL_zr71o0Nug1IkvBix2l1ve0xdK87zKxkg8o6ZMVxJXeF3BZbscJdXmXbTcmzYrPqdrzO6rJSvK0wqzYK1VqISmWZqJREbJoV7XjG11mRlfnkk4oWt6Ipik1dynYj1mydYS9Ip1pf-tS682pav129zni90qJB7adPBs4NXufFjdtueVi5XfRJmvHs2TrT5IO_owQKGnf_I_M95rR8TCxHmFVKWzFtp_eN7a1uaESjUa5Gp3ddCEM8shk_Mn48U-jGJm1tz_gxhltuyeDsN2wD48eJpGf8OCXxZwAAAP__PenCXA">