<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJztWktz2zgS_jXyBWUVH3oefJAsOdHGTry2slM1FxZIgiISkOACoGXtr99ukJJom5Jjj-NsalalOCLR6P7QTzTIUMabs2XKSCKFkGuer0gkY0YiWmoWE5qTzsC55KHMCkPVihlyetrx5-RcFhskjqmhxEgSszseARfKBYu7MIcUiudGloasU5YTmSRC0hinAPXkakY-XH_teOeECpPKcpUSAyCsaFXmmiQ8Z92OM-s4E2BWf-0lgU_H8wtFVxklgIvUwAyjmSYx10bxsDSMFFRRIZiAtSmS0aLjjahY041GuYCi408IjwOqFN10-lO4zMssoFHECsPiTn_W8cYdz9uLRT7ABNZFOMyeEafjT-3Pc_JgKt7teFP7HTdgD6f7CwKrzTVwQm5rsv8g4wYsjkD8BxNvGBXLTcE63oTc3MpJANoPCqPs1GwdKKkpXuPs9dPpzWXEjXXEdiH_vDpfKsqNBn3Ad7a4qgZb1mOxNOSjPGqA95QoLWmAlgCDIkyO-tziK6TewbPU9b3H9A9wd4azVn-AHw90D67HwQ2YYSoDJwIfNuhShmesS5Zpqa1vW0dMK4ctFSMZ05quWOWs7SydrT_av5M4JpeL6Zer6-Xk5sN8Gczm068fYIHuzvO7ZAEyeP6daP4fRhySMxZr9LyQkZTmMYQKEMuCKbFBmEI0A42DdzAaQ-gQxYSNNplb0IUoVzx_AOeRUloi9qtmoJWElsJsoxUsfpj-HGIHscL9AO4GqJFqngY8plQ5InLfbT7PueFU1Dx-jEXKou9IAlYFvantuq05Feh20z04d6GtqnczIGCEjKggCwwXb0xqPGBZiPeLIyhmj4XiqiC7HpYdBN-zIgqKUqdBNRBAZBSRBDcGHA7mL2cXiS0M5jl4v3Xx6q5iKw6-s-YmJSw3akMKieHv3Du7j9cP--4IMn68XfQiJqeHl_V_f_pt_GluTY5ZfkKmVDPIUk3LVx90qin4SX5w9BawweAIf9vyg4S-Z8c-0wyvy_x7Ltf5c0jcdiSh48R0dAhJY7RG4jxA4vVfDsRrB-L3fS8-qJLGaDuQ16jEP2ac0VHjjN7WOL0jSNyjbuK-sZv0D1mn3-v1DltnN_p21hn8ep1cSmlzT1ngXraAn5BCPmpzbdSPBsu42z2cJK4qpoTdww5aV7XiR9gvV09phkmPDUeDoec8DZPZJr9hybmtZf5s8fmi2otGimVQmiD54ab7nHyUIm7QvURTV_IOF-KQcGOgOAD7VAOPSRv-MbFTgMas9jQP8dd1dlnJgN4FWhdys7ysxd2WYcZN1QnVMhHsXuzzQp-K7B6XeQXFTEawfXTu4-OUH6U2FTW68NechoJhwbC3djrClsAw6KV0pKiJ0uM850oBvd0qR80-MFEyIykI3HeEXXKNOw2msJ2oxmzD0epKdXHcEzz2I7uPrhqWgzX6eGN6aBq0wNAFUMV2KrEKoqZqIGpaGscKGgXytD6SUyzHuTSwyV-_UQy31pmXxDAGVlYIHnGDTnc8pBvSDoR0wly3x35JSL_GPE3EP8c8LYXmJ5pnJ-1Ixh0Mfyfz7BD_mHkupFpTZc-QEq60OYVG-w5kkDsqStYWlBD_uOmuudjzFlVG5u9ZY8siRmXpsijQDIftfgj9l9BQe6KytadalehBLcm6UQqKKv-3pfz_kTT5vnnxHcywT3tHzbBd2VvF2-jF8fZCCe7Pjui_nNLfN4e_U0RXKfoZV6pW9gsNTcs8ShtnXuyeRaXBY68gwDOf_ROIwHV8pxe4Y-oPaBQEf37-5Lr_zqJClBr_eUM8YL8taMSupebIQ-M5r-XrOdm6Phm-psrwSCDR_ObT51vgCFr_F4uMVH-AI1wyGjO1wIER2I9mPDqXErUAK9fz-Ty7-XRrBnd2giVzljzfVAwW8eU3H2hu6eJ2FMxBwO0gWIRwGc7ngXB79YahxRhef0Adz6mqfMzuwQU8d99TtChPSFkQPGIk9oyxedp9qAe4KfPmg5ftEaNJ8UgqEBxbIuc4i4la4SkeNgbD45RfkkQz3EyEtgWfoKN2-lPHPiOYPC38r-LmNrk9qK6v4eY94rYvEq_h5h9Y6ehV3Hrt3NzXYeu36K3KYa_hNngdtmvFCmqPvMH7ay_Uz_TtzOwOsMEN8TnLSsmy0MTrPSPtAkJYIJl97FfPwpPzhvBrpj7gwHFOU_uABzWB8jG9RrB1xiTO7iP7uOg7UzlMJpqtbGrGHvg4z08wgwkIZWguUMN_z-IYs2cbnJ_fzgiq325v8lttc99f_S3N_huq_zdr9n6N91e9X4v6d4-nT-IzPx77Y3pCS5NKdbZhp6KUJ6USZ6kxhX3rwLuA7wr0VYZdyGJwIcTd9j_YOspvsEWCS651iYetF31_5Pgn6VnSHzpeRMENeuHAHYyHAy9hQ0q9kA7GsT84ETRkQp_h2x6el7M1sSzwJY_-7OSvI-BnnuPB1_Wdoe-6bjcJvWG_7_jjgT9KetTp9ByWUS66yKcr1epEnVmWYbnSMCjQVfaDVGu-yhmrAUdUCRkyZaQQHEHbY2bvWyyZSuD2_tY_ZH6eMg0bw4QzEdcLNNwIy6v5ngG-l5Fxbd9HsO8YJNvXFXhen6Iqmmvgf2JXe2aX-l_jWgj2>53803</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [libomptarget] mishandling of size 0 in data transfer
        </td>
    </tr>

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

    <tr>
      <th>Assignees</th>
      <td>
            carlobertolli,
            jdoerfert,
            JonChesterfield
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ye-luo
      </td>
    </tr>
</table>

<pre>
    The following code caused an `Libomptarget --> Copying data to device failed.` printout when offloading to AMD GPU, although the code runs fine.
```
    #pragma omp target teams distribute parallel for map(always, to : id_array[:num_accepted])"
    for (int i = 0; i < num_accepted; i++)
    {
      const int iw           = id_array[i];
      RealType* RSoA_dev_ptr = mw_rosa_ptr[iw];
      for (int id = 0; id < QMCTraits::DIM; id++)
        RSoA_dev_ptr[iat + rsoa_stride * id] = mw_pos_ptr[iw + mw_pos_stride * id];
    }
```
`num_accepted` is determined at runtime. Thus causing the failure message when `num_accepted` is 0.

Add LIBOMPTARGET_DEBUG=1 printout. I think size 0 needs to be handled properly at llibomptarget instead of relying on the plugin.

```
Libomptarget --> Use default device id 0
Libomptarget --> Call to omp_get_num_devices returning 1
Libomptarget --> Call to omp_get_num_devices returning 1
Libomptarget --> Call to omp_get_initial_device returning 1
Libomptarget --> Checking whether device 0 is ready.
Libomptarget --> Is the device 0 (local ID 0) initialized? 1
Libomptarget --> Device 0 is ready to use.
Libomptarget --> __kmpc_push_target_tripcount(0, 0)
Libomptarget --> Entering target region with entry point 0x000000000025b518 and device Id -1
Libomptarget --> Use default device id 0
Libomptarget --> Call to omp_get_num_devices returning 1
Libomptarget --> Call to omp_get_num_devices returning 1
Libomptarget --> Call to omp_get_initial_device returning 1
Libomptarget --> Checking whether device 0 is ready.
Libomptarget --> Is the device 0 (local ID 0) initialized? 1
Libomptarget --> Device 0 is ready to use.
Libomptarget --> Entry  0: Base=0x0000000000000000, Begin=0x0000000000000000, Size=8, Type=0x320, Name=unknown
Libomptarget --> Entry  1: Base=0x000000000b00da80, Begin=0x000000000b00da80, Size=0, Type=0x25, Name=unknown
Libomptarget --> Entry  2: Base=0x0000000003532d00, Begin=0x0000000003532d00, Size=0, Type=0x220, Name=unknown
Libomptarget --> Entry  3: Base=0x0000000000000008, Begin=0x0000000000000008, Size=8, Type=0x320, Name=unknown
Libomptarget --> Entry  4: Base=0x0000000000000010, Begin=0x0000000000000010, Size=8, Type=0x320, Name=unknown
Libomptarget --> Entry  5: Base=0x0000000003554440, Begin=0x0000000003554440, Size=0, Type=0x220, Name=unknown
Libomptarget --> Entry  6: Base=0x0000000000000010, Begin=0x0000000000000010, Size=8, Type=0x320, Name=unknown
Libomptarget --> Looking up mapping(HstPtrBegin=0x000000000b00da80, Size=0)...
Libomptarget --> Mapping exists with HstPtrBegin=0x000000000b00da80, TgtPtrBegin=0x00007f4e78672000, Size=0, DynRefCount=INF (incremented), HoldRefCount=0, Name=unknown
Libomptarget --> Moving 0 bytes (hst:0x000000000b00da80) -> (tgt:0x00007f4e78672000)
Target AMDGPU RTL --> Submit data 0 bytes, (hst:000000000b00da80) -> (tgt:00007f4e78672000).
Target AMDGPU RTL --> Malloced 0xd
Target AMDGPU RTL --> HostMalloc: Unable to alloc 0 bytes for temp scratch
Target AMDGPU RTL --> Error when copying data from host to device. Pointers: host = 0x000000000b00da80, device = 0x00007f4e78672000, size = 0
Libomptarget --> Copying data to device failed.
Libomptarget --> There are 0 bytes allocated at target address 0x0000000000000000 - is not new
Libomptarget --> Looking up mapping(HstPtrBegin=0x0000000003532d00, Size=0)...
Libomptarget --> Mapping exists (implicit) with HstPtrBegin=0x0000000003532d00, TgtPtrBegin=0x00007f4fe114e000, Size=0, DynRefCount=INF (incremented), HoldRefCount=0, Name=unknown
Libomptarget --> There are 0 bytes allocated at target address 0x00007f4fe114e000 - is not new
Libomptarget --> Looking up mapping(HstPtrBegin=0x0000000003554440, Size=0)...
Libomptarget --> Mapping exists (implicit) with HstPtrBegin=0x0000000003554440, TgtPtrBegin=0x00007f4e78667000, Size=0, DynRefCount=INF (incremented), HoldRefCount=0, Name=unknown
Libomptarget --> There are 0 bytes allocated at target address 0x00007f4e78667000 - is not new
Libomptarget --> Forwarding first-private value 0x0000000000000000 to the target construct
Libomptarget --> Looking up mapping(HstPtrBegin=0x000000000b00da80, Size=0)...
Libomptarget --> Mapping exists with HstPtrBegin=0x000000000b00da80, TgtPtrBegin=0x00007f4e78672000, Size=0, DynRefCount=INF (update suppressed), HoldRefCount=0
Libomptarget --> Obtained target argument 0x00007f4e78672000 from host pointer 0x000000000b00da80
Libomptarget --> Looking up mapping(HstPtrBegin=0x0000000003532d00, Size=0)...
Libomptarget --> Mapping exists with HstPtrBegin=0x0000000003532d00, TgtPtrBegin=0x00007f4fe114e000, Size=0, DynRefCount=INF (update suppressed), HoldRefCount=0
Libomptarget --> Obtained target argument 0x00007f4fe114e000 from host pointer 0x0000000003532d00
Libomptarget --> Forwarding first-private value 0x0000000000000008 to the target construct
Libomptarget --> Forwarding first-private value 0x0000000000000010 to the target construct
Libomptarget --> Looking up mapping(HstPtrBegin=0x0000000003554440, Size=0)...
Libomptarget --> Mapping exists with HstPtrBegin=0x0000000003554440, TgtPtrBegin=0x00007f4e78667000, Size=0, DynRefCount=INF (update suppressed), HoldRefCount=0
Libomptarget --> Obtained target argument 0x00007f4e78667000 from host pointer 0x0000000003554440
Libomptarget --> Forwarding first-private value 0x0000000000000010 to the target construct
Libomptarget --> Launching target execution __omp_offloading_10304_19a36ac__ZNK11qmcplusplus27RealSpacePositionsOMPTarget20mw_acceptParticlePosERKNS_19RefVectorWithLeaderINS_18DynamicCoordinatesEEEmRKSt6vectorINS_10TinyVectorIdLj3EEESaIS8_EERKS6_IbSaIbEE_l149 with pointer 0x000000000256a020 (index=21).
Libomptarget --> loop trip count is 0.
Target AMDGPU RTL --> Run target team region thread_limit 0
Target AMDGPU RTL --> Arg_num: 7
Target AMDGPU RTL --> Offseted base: arg[0]:0x0000000000000000
Target AMDGPU RTL --> Offseted base: arg[1]:0x00007f4e78672000
Target AMDGPU RTL --> Offseted base: arg[2]:0x00007f4fe114e000
Target AMDGPU RTL --> Offseted base: arg[3]:0x0000000000000008
Target AMDGPU RTL --> Offseted base: arg[4]:0x0000000000000010
Target AMDGPU RTL --> Offseted base: arg[5]:0x00007f4e78667000
Target AMDGPU RTL --> Offseted base: arg[6]:0x0000000000000010
Target AMDGPU RTL --> Preparing 256 threads
Target AMDGPU RTL --> Set default num of groups 240
Target AMDGPU RTL --> Final 240 num_groups and 256 threadsPerGroup
Target AMDGPU RTL --> Bad offset of hostcall, exceeds kernarg segment size
Target AMDGPU RTL --> Kernel completed
Libomptarget --> Looking up mapping(HstPtrBegin=0x0000000003554440, Size=0)...
Libomptarget --> Mapping exists with HstPtrBegin=0x0000000003554440, TgtPtrBegin=0x00007f4e78667000, Size=0, DynRefCount=INF (decremented), HoldRefCount=0
Libomptarget --> There are 0 bytes allocated at target address 0x00007f4e78667000 - is not last
Libomptarget --> Looking up mapping(HstPtrBegin=0x0000000003532d00, Size=0)...
Libomptarget --> Mapping exists with HstPtrBegin=0x0000000003532d00, TgtPtrBegin=0x00007f4fe114e000, Size=0, DynRefCount=INF (decremented), HoldRefCount=0
Libomptarget --> There are 0 bytes allocated at target address 0x00007f4fe114e000 - is not last
Libomptarget --> Looking up mapping(HstPtrBegin=0x000000000b00da80, Size=0)...
Libomptarget --> Mapping exists with HstPtrBegin=0x000000000b00da80, TgtPtrBegin=0x00007f4e78672000, Size=0, DynRefCount=INF (decremented), HoldRefCount=0
Libomptarget --> There are 0 bytes allocated at target address 0x00007f4e78672000 - is not last
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWllz2zgS_jX0C8oqHjof_CBZcqKNnXhtZbdqXlggCYpIQIILgJY1v367QR20Tcmxx3E2NatiYpFodH_oEw0qksn6bJExkkoh5IoXSxLLhJGYVpolhBbE6buXPJJ5aahaMkNOT51gRs5luUbihBpKjCQJu-MxcKFcsKQDc0ipeGFkZcgqYwWRaSokTXAKUI-vpuTD9VfHPydUmExWy4wYAGFFq6rQJOUF6zju1HHHwGxz2VsCH8cPSkWXOSWAi2yAGUZzTRKujeJRZRgpqaJCMAFrUySnpeMPqVjRtUa5gMIJxoQnIVWKrp3eBG6LKg9pHLPSsMTpTR1_5Pj-XizyASawLsJh9pS4TjCxX8_Jg6n41PEn9ho1YA8m-xsCqy00cEJuK7L_IOMGLI5AggcTbxgVi3XJHH9Mbm7lOATth6VRdmq-CpXUFO9x9urp9OYyksY6EruQf16dLxTlRoM-4JrOr-rBlvVYLA35KI8a4D0hSksaoiXAoAiToz63-Eqpd_As9ebZY_oHuJ3BtNUf4MsD3YPrcXADZpjKwYnAhw26lOE565BFVmnr29YRs9phK8VIzrSmS1Y7aztLd-uP9v9xkpDL-eTL1fVifPNhtgins8nXD7BAb-f5HTIHGbz4TjT_kxGXFIwlGj0vYiSjRQKhAsSyZEqsEaYQzUDj4B2MJhA6RDFho00WFnQpqiUvHsB5pJSWiP2qGWglpZUw22gFix-mP4fYQazwPISnIWqknqcBj6lUgYi8d5vPC244FRseP8YiY_F3JAGrgt7Udt3WnAp0u-4cnDvXVtW7GRAwQsZUkDmGiz8iGzxgWYj3iyMopo-F4qogux6WHYbf8zIOy0pnYT0QQmSUsQQ3Bhwu5i93F4ktDGYFeL918fqpYksOvrPiJiOsMGpNSonh7967u4_fi3reEDJ-sl30PCGnh5f1f3_6bfxpZk2OWX5MJlQzyFJNy9cfdKoJ-ElxcPQWsMHgEL_b8oOEgW_HPtMc76vieyFXxXNIvHYkkesmdHgISWN0g8R9gMTvvRyI3w4k6AV-clAljdF2IK9RSXDMOMOjxhm-rXG6R5B4R93Ee2M36R2yTq_b7R62zm707azT__U6uZTS5p6qxL1sCV8hhXzU5tqoHw2WUadzOElc1UwJu4cdtK5rxY-wXyyf0gzSLhsM-wPffRom03Vxw9JzW8uC6fzzRb0XjRXLoTRB8sNN9zn5KEXSoHuJpq7kHS7EJdHaQHEA9pkGHuM2_CNipwCNWe5pHuLf1NlFLQN6F2hdyM3iciPutopybupOaCMTwe7FPi_0qcjOcZlXUMxkDNtH9z45TvlRalNTowt_LWgkGBYM-2inI2wJDINeSseKmjg7znOmFNDbrXLc7ANTJXOSgcB9R9gh17jTYArbiXrMNhytrrQpjnuCx35k99F1w3KwRh9vTA9NgxYYugCq2E4lVkHU1A3EhpYmiYJGgTytj-QUy3EhDWzyV28Uw6115iUxjIGVl4LH3KDTHQ_phrQDIZ0yz-uyXxLSrzFPE_HPMU9LofmJ5tlJO5Jx-4PfyTw7xD9mngupVlTZM6SUK21OodG-AxnkjoqKtQUlxD9uujdc7HmLqmLz96yxVZmgsnRVlmiGw3Y_hP5LZKg9UdnaUy0r9KCWZN0oBWWd_9tS_v9ImnzfvPgOZtinvaNm2K7sreJt-OJ4e6EE72dH9F9O6e-bw98pousU_Ywr1Sv7hYamVRFnjTMvds_iyuCxVxjimc_-DUTouYHbDb0RDfo0DsM_Pn_yvP_kcSkqjf_8AR6w35Y0ZtdSc-Sh8ZzX8vXdfLU5Gb6myvBYINHs5tPnW-AIWv8Xi41U_wZHuGQ0YWqOA0OwH815fC4lagFWrmezWX7z6db07-wES-YueLGuGcyTy28B0NzS-e0wnIGA2344j-A2ms1C4XU3G4YWY_i9PnV9t67yCbsHF_C9fU_RojwhZUnwiJHYM8bmafehHuCmKpovXrZHjCbDI6lQcGyJ3OMsxmqJp3jYGAyOU35JU81wMxHZFnyMjur0Jq59RzB-Wvhfxc1rcntQXV_DzX_EbV8kXsMtOLDS4au4ddu5ea_D1mvRW53DXsOt_zps14qV1B55g_dvvFA_07czszvABjfE9yxLJatSE7_7jLQLCGGBZPa132YWnpw3hF8z9QEHjnOa2Bc8qAmUj-k1hq0zJnF2H9vXRd-ZKmAy0WxpUzP2wMd5foIZTEAoQ3OBGv57FseEPdvg_Px2RlD9dnuT32qb-_7qb2n231D9v1mz92u8v-79WtS_ez19kpwFySgY0RPDjWBnkPGbL73xRwI51_bluH3hnW7fnfNic6SnaKFTpk4qJc4yY0r7OwX_Aq4laLiKOpD34EaIu-0f2GzKb7CpgluudYXHsxe9YOgGJ9nZAP4OXZoOAnfgDb3RMGX9KPJZMmBJNAqiE0EjJjTidHy_YCtiWeDPQnrTE37muz5cHswOPM_rpJE_6PXcYNQPhmmXuk7XZTnlooM4OlItT9SZhRRVSw2DAl1jP0i15suCsY24mCohI6aMFIKjSHus7H9LJFOgArN_9A9ZnGdMw0Yw5UwkG3i0MplUZ2t2Kip5YoGf2YX_F77t84A">