<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56453>56453</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
OpenMP 5.0 target offloading: omp_alloc() undefined in nvlink step
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
vincentadamthefirst
</td>
</tr>
</table>
<pre>
I am currently trying to allocate memory on a target device in OpenMP offloading. For this I use a recently built Clang-15 and CUDA 11.6 (bundled with nvhpc 22.3).
A simple test program:
```c++
#include <omp.h>
int main() {
#pragma omp target teams distribute
for (int index = 0; index < 100; index++) {
float *shm = (float *) omp_alloc(20 * 20 * sizeof(float), omp_pteam_mem_alloc);
#pragma omp parallel num_threads(20 * 20) shared(shm) default(none)
{
int threadNum = omp_get_thread_num();
shm[threadNum] = threadNum;
#pragma omp barrier
// some work on shared memory & write-back
}
}
}
```
Compiled using
```bash
clang++ -O3 -std=c++17 -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-version=51 --cuda-path=/opt/nvidia/hpc_sdk/Linux_x86_64/22.3/cuda/11.6/ main.cpp
```
I expect a successful compilation but I get
```console
nvlink error : Undefined reference to 'omp_alloc' in '/tmp/test-008605-nvptx64-nvidia-cuda-sm_80-400196.cubin'
/usr/local/bin/clang-linker-wrapper: error: 'nvlink' failed
clang-15: error: linker command failed with exit code 1 (use -v to see invocation)
```
when it comes to the linking step. Am I missing something crucial? Is `omp_alloc()` not fully supported yet? (According to [the docs](https://clang.llvm.org/docs/OpenMPSupport.html#openmp-5-0-implementation-details) it should be). I have no problems when using the directives that more or less work the same (`#pragma omp allocate(shm) allocator(omp_pteam_mem_alloc)`)...
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx9Vl1v6zYM_TXOC2HDH0ncPOQht12AAtvugOE-B7Ilx1ptyZDktN2v36Gdr_b2zjBiWyIp8pA8TGXl-_aZRE_16JwyoXun4N61OVKwJLrO1iIo6lVv3TtZQ4KCcEcVSKqTrhVpQ98HZf74i2zTdFZIqCa0t45Cqz090-gVlJyqZ-PVqLtAj50wxzhbkTCSHn887SjLkjVF-UM1GtkpSa86tGRO7VBTnidFlG-SKH2K0t38uyOv-6FTFJQPNDh7dKKPit29TLRO57uO8m98z6t5oU3djVJRVDzafkjaqPjtXk-bQL3QBt7gWIrKm-bgxLEXBK0LDEGJ3pPUPjhdjUHNooSrAQYwwda0keoNxz1RGhXfrp-PlKW3hbOT9yfS-WJgA4ztfNtPZmD3usYacOgwJQsbecqrdH54_a-yzUUeslH-OIkP7PkBib0obuDJB_g-hDsIBznVkRn7Q2idEtLfH8Ze-FY4JbEKN_lbqkaMHQ59MNYoPuFDVD-FyRfDNZv_c5xjZWeB9PnQA86fE3N1916dT159uxqIVk-TjdtC8WUyK-GcVu5ne1G-x03e9operXvhFpjDvPRElK_p1emg4krUL58jfLotXD9uL5cCvYedS1JzB4werfRJsBK-nZdq7qC5ZCj-XlDsg0Sk51LPSoobi75EbJeXeK5YDylzGsLbehmbk5ZaxPUoxU3spJzX1kBslVE8bcaDCOiSJ0BhB-RzPyviBf158PIFb79rM74d3h7Wh_USn3PT7lkbD-5uxpHbKqmH4X_ifyb1Nqg6gDT8WNfK-2bsqJ5QEQGOgUICeAWhfN3s1njbnfvQnDptXkg5h2ZECood_UCvNdoAYKcaBcoDiYHqory8a6KSeQ0P-Bz6gX9BM3GaPqzTVfwFerHvDw9pvEzTbLNO6rFi9igvlbYfvcMvc2mH57S5nxIYs3vKxa9ODAPqD_5NvvILDMzuszuN4Jq4Sz3I84P0bIhx6plTZ_mZRdWbDtgA4WVMHEzI8Ylj9or5-8QUzwm_9OeXaXltlaHJTq88K4dWTYfyqPBBDQnteqSl195PS5DDBMBb7cZaI_BiT8-eYPaerPjQdUrGBkKaMR_8OAzWBfj-jgRDB0K7urZOnmfS1N6KpK09uhu7bQiDZ-qfWnUCJ-m6U59YhwbZT4L5fh5Sf8_Wkzb0yERxrvhVnMbTNOkxoyYsYqkCEPTMYgjat3bsJFXMYQmCbMVJwWeeOxW0PE3oTA074SI15l3QJ0aqBUuDKBShAjtU80wjLOUFSIUxANIf2Ogydm9Mel5BqvOHX5A3G9kkSbKQ20Juio1YBB06tT1P51WSXkbWbVBz4XzKBo3X_kALnPuH87sYXbf9iPUR1TVWCUqCqxuQnx8xcPkHAOAT1TAqxn-1Xq6KRbut4VpdLstCNqtGZWWa1-uyyVZyudmk681m0YlKdX6LNCO9C73N0zxPy3STlUWZF4lqllmRFptcVEVWlWW0TBVYpbumfOG2kw_VePTY7DCZ_W1ToDqPRqmLfTGG1rrtCX8JOPdS9MhMo50Pi8n17eT3f7730o4">