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

    <tr>
        <th>Summary</th>
        <td>
            [Offload] Segmentation fault when calling `olGetDeviceInfoSize` for host device name
        </td>
    </tr>

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

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

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

<pre>
    A segmentation fault occurs when calling `olGetDeviceInfoSize` to retrieve the size of the device name for the host device.

The crash happens specifically when `olGetDeviceInfoSize` is called with `OL_DEVICE_INFO_NAME` for the host device handle.

**Steps to Reproduce:**

1.  Compile the C++ code snippet provided below using Clang and linking against the LLVMOffload library.
    ```bash
    $ clang++ -std=c++17 host.cpp -I"$LLVM_HOME/include" -L"$LLVM_HOME/lib" -lLLVMOffload -ldl -lpthread -Wl,-rpath,"$LLVM_HOME/lib" -o host
 ```
2.  Execute the compiled program:
    ```bash
    $ ./host
 ```
3.  Observe the output.

**Program Output:**
```bash
Getting the storage size of the device name...
Segmentation fault (core dumped)
```

**Code Snippet:**
```cpp
#include <iostream>
#include <offload/OffloadAPI.h>
#include <string>

ol_device_handle_t getHostDevice() {
  static ol_device_handle_t HostDevice = nullptr;

  if (!HostDevice) {
    olIterateDevices(
        [](ol_device_handle_t D, void *Data) {
          ol_platform_handle_t Platform;
 olGetDeviceInfo(D, OL_DEVICE_INFO_PLATFORM, sizeof(Platform),
 &Platform);
          ol_platform_backend_t Backend;
 olGetPlatformInfo(Platform, OL_PLATFORM_INFO_BACKEND, sizeof(Backend),
 &Backend);

          if (Backend == OL_PLATFORM_BACKEND_HOST) {
            *(static_cast<ol_device_handle_t *>(Data)) = D;
            return false;
          }

          return true;
        },
        &HostDevice);
  }

  return HostDevice;
}

int main() {
  olInit();

  auto HostDevice = getHostDevice();
  if (HostDevice == nullptr) {
    std::cout << "Host device not found." << std::endl;
    return 1;
  }

  std::cout << "Getting the storage size of the device name..." << std::endl;
  size_t Size = 0;
  olGetDeviceInfoSize(HostDevice, OL_DEVICE_INFO_NAME, &Size);

 std::cout << "Getting the device name..." << std::endl;
  std::string Name(Size, '\0');
  olGetDeviceInfo(HostDevice, OL_DEVICE_INFO_NAME, Size, Name.data());
  Name.pop_back();

  std::cout << "Device name: " << Name << std::endl;

  olShutDown();
  return 0;
}
```

**Environment:**
* LLVM version: Custom build from git
    * LLVM Project Commit Hash: `1e4841881ef89aeee77cbf081de42af376bfa3fb`
* Operating System: Ubuntu 24.04.2 LTS (WSL2)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUV1tz6jgS_jXipQuXkbk-8EC4TFKbE1JDduaRku021o6QXJJMNvPrt9oywRAyew5FFVjd-vrrm9QWzsmDRpyz0QMbrXqi9qWxc4VC59aoTBwr43qpyT_mC3B4OKL2wkujoRC18mCyrLYO3kvUkAmlpD4AG8dG_YZ-hSeZ4ZMuzE7-jWwcgzdg0VuJJwRfIjj5N4Ipmv95ow1aHBEKY5u10jjfCiIWL1i8eCsRMitcCaWoKtQOXIWZLCQZ_wg8vrcvXUMSc3iXviTF7fN-tf7jabneP71stvuXxY81Kd4hAKXQuTrzYJy-O4-VI69-x8qavM6QJa0oqA0igKU5VlIFh5eMPzD-AJnJEZyWVYUeKmtOMsccUlTmHWpHQVwqoQ8gdA5K6r9oRRyE1M43OM_Pf_zYFoUyguSpFfaDiAEAORW-qXDleY0PISPA1nzf-Zwlqyw8DiaNn1FWVdB_YpwzPiQD-8ftjzXjG6kzVefIOIf-81exkmkjUl1SfZUr6KvKlxbp8U_F-LJvK-FLxpffg5iGCtH-9IPFCx4BrP-LWe1DGLMQ0pxCd7DiSFH_Z-8jxjf3kJMIYJs6tG1FmtpXtb9K8muwAdtGdJXgG2O_ofeUqaa0vbHi8G2JRxHZ2H1tKManmbEIeX2sMGd81rXTpbWkEtqFErpLKquqRjlp8wcsWUrjvEUK2PqLzITUMb5pk7h4fYrKe5rOW6kPrSReGLUPnu1Di-w9HNA_Gtd2IONTxmfAJg9NQhz5m8GdXZctwJIV6FqpyluWPAQ7ALKABmzQBb8gAxj15NEKj0HoSDtImkJozjjGp3dsrxhfwsnIHBhfrIQX18DhY9S-UsIXxh4vO1_blcATbo4exqcN9M1B8_q8eNtsf_9BIioRUzA-_UTiM2oSKlU-7i4m39NJRfYX6nzv4SH869I5Y7SELpANrzOXwOxhsfzX-mV1RewM2eXVWbsk6PwJiWpVKJmUz66p1sr-cbt7uxdp6toF49NQLPtMOE8l-jVvpJasKcohZw1YsoLVbbCArp7aUp8ph7dSNlnd-tCqe1vfaJNuCMMn1fFVQZ7VO6AtWEctBO2sIbWHo5D6pleMetLSh8VOmEXtzW233Gm5M4-QjWv9boNdxb-5GhYsWWSm9tTtLFkC4_yxcxVq46Ewtc4jOrRbnc-NqHN1iVjr-eBOUL4z9Yvn6P-hQDv3HmgGaAIVnwX3hoRumO60bTMfcCI5DuqdrPyMN7_I_LwYDlx4EUdiGCwT9oSNljH9XHL99fj5KYfOmGQiyptWmoZuOgM3kspUzUnzpSK_c351cZgldG58ekx4_-B968yurP3KvOvrgm5rKr5qonuX5FqfpDWaLtmrO5IvmhEKTmidNJqoLWvnzRHSWqocCmuOcJD-c4Jo9V-t-Q9mnma6o_TwSPd-0kwUAxxOh4PpdIDFdCYQcTLJ0iKeDnIcclEkk3FaiKRIW4J8AduKbirK6-7DeaQhBv6d1trXwIdRPIw4PL_tqHP_3D1zxme9fJ7ks2QmejgfTIZTPhgnk3GvnCdpMkFMOJ_NBvkg42IsskRMJzOcjjMxiXtyzmM-ikd8xJNkloyjMeIAJ3GRjsZFnOOMDWM8CqkipU7HyNhDTzpX43wwHAyTYU-JFJVr3hE41_gOjZSmuNGqZ-e0qZ_WB8eGsZLOuwuMl141LxftTMFGK7gz9fzk-wON5d2RnMqqV1s1L72vXJPhDeObg_RlnUaZOdJkqU7nn34V0kczLTngGN-0Hp7m_H8BAAD__yh74CY">