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

    <tr>
        <th>Summary</th>
        <td>
            [clang, CUDA, modules] Issues Compiling a CUDA Source File with C++ Modules
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    Hi All,

I ran into issues compiling a simple CUDA source file  that includes a header (see `mymodule.h`) if modules are enabled.  Further investigation showed that the issue persists even after removing all CUDA related code (see `main.cu`). Compiling it with `c++20` errors out due to an ambiguous call to `operator new`, while the compiler crashes with `c++17`. Here the compilation logs and generated  `*.pcm` files: [logs-and-module-cache.tar.gz](https://github.com/user-attachments/files/18732220/logs-and-module-cache.tar.gz)

File `main.cu`
```cpp
#include "mymodule.h"
#include <iostream>

int main() {
  std::cout << GetMessage() << std::endl;
  // Problem shows up even with all CUDA related code removed.
  return 0;
}
```

File `mymodule.h`
```cpp
#ifndef MYMODULE_H
#define MYMODULE_H
#include <string>
// uncommenting the following line somehow "fixes" the issue.
//#include <iostream> 

inline std::string GetMessage() { 
 return "Hello world!";
}

#endif // MYMODULE_H
```

File `module.modulemap`
```
module mymodule {
  header "mymodule.h"
  export *
}
```

Compiler invocation:
```bash
clang++ \
  -v \
  -std=c++20 \
  -x cuda \
  --cuda-gpu-arch=sm_86 \
  -lcuda \
  -lcudart \
 -fmodules \
  -fmodule-map-file=module.modulemap \
 -fmodules-cache-path=/tmp/clang-modules \
  -o main \
 main.cu
```

LLVM commit
```
commit 2b55ef187cb6029eed43d7f4c0a3640c32691b31 (HEAD -> main, origin/main, origin/HEAD)
Author: Florian Hahn <flo@fhahn.com>
Date:   Wed Jan 29 10:50:01 2025 +0000

    [VPlan] Add helper to run VPlan passes, verify after run (NFC). (#123640)
...
```

LLVM configuration
```bash
cmake -G Ninja \
    -DCMAKE_BUILD_TYPE=Release \
 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
    -DLLVM_ENABLE_PROJECTS="clang" \
    -DLLVM_TARGETS_TO_BUILD="host;NVPTX" \
 <path-to-llvm-project-dir>/llvm
```

System Info
- OS: `Ubuntu 20.04.1 LTS`
- Compiler used to compile llvm: `g++ (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0`
- CUDA: `12.6`
- GPU: single NVIDIA Geforce RTX 3060 with compute capability 8.6

I am happy to provide more information if needed.
Thank you in advance for taking a look and any hints on how to best debug and fix it.

Best,
Lukas

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8Vktz4yrT_jVk0yUVRrZjL7yQZTvJ-XKrxJlvziqFRUviBIEKkDN5F-9vfwthO7eZU5WKDDRNX57ufrhzstaICzJZksnqjPe-MXZx3b9wt7Qo_atEh_ZsZ8Tb4lJCrhRhBaE5ofkVWK5Bam9AOtejg9K0nVRS18DBybZTCMXTKgdnelsiVFIhgG-4B6lL1Qt0wKFBLtACYTOHCGRK27fWiF5h2pApJWwOsoK444BbBNR8p1CkAJve-gYtSL1H52XNvTQaXGNeUcR3fIPROOjQOum8A9yjBl55tGCxNfvBXKWipRYV9yigNAI_msSlTss-2pNCcfJTeniVvgkyJWFLwpaMkikFtNZYB6b3IHoEb4Br4O1O1r3pHZThQW_CNdOh5d5Y0Pg66C_gtQmBCqbHgKKF0nLXoPv62OicTGkKl2g_yscwKFM74FpAjTo8gQJgeCBPu7INRoZ8OJLlQCbLIJ1wLZIY6aTkZYOp5zat_0MmK8JmjfddkCZsQ9imlr7pd2lpWsI2vUObcO952bSovSNsE3WzzWh2njHGKGGbf32CzSOoNsH1zxGnefg__JVdF5YsO-AHCGMf4MLYl9OskMZ5i7wl2To-ILWHoJywWcAWOV8SmgM4L4JvWV6GnJGsIFkBF-hv0Dle41E67p-EUQtFsqghxgXurdkpbAcUOui7iLchb79H2QBCFOmgxKLvrQYalZLz1Ufvv0ToU5n8NkiVFljBzd83d6un6_XzZdwWWEmN37Y_BM15K3V9CFl0q9elaUNyA-oD1CqjlHkNKxW0OdNiY15DQir5K6SevRdfetLzx-TAMTtR2zHA0ZLfJOJ8GW4c40UYu0SlDLwaqwRhowCFjyEcPEQtZHXM02f3_xDiGOD4aXn3JdCE5vEIjrk4wenU1L7BEwB_dcZ6ICz_U4qLY9lLvTflUM4hHB_kdtw1hOal4rqOrQDIpBjUJ_v3n0McV6fO9H7wC8pe8Pd1EpZJ3fUJt2VDspVrn2fT93P1WXxYBh_iRlId-_NJ4rCTtLxLQi8g2eprNL_djh0h6bgPFhC28W1H2GZwMvn2ghnK-Lg-9otvsby-_nET-mIr_ZfDuAlsN5lgNZqdl7spZXNEMc7EeTUuKc-mY1pmbDof7bJRGAeX63wFSYBrbCEFGCvr8GvzbSPIxraWD0M1NNqNMlZyDZe80aEAKmXImFYNb_TQSoeKW3GPQRjg_1HAX1wDm8OIkiyfhH90BIyyCRC2pJQevASA0MV_3CuuyWQFuRDQoOrQhjFjew3DEXTcuVCcBezRyurtOAj7UEOz200xzLehyLIRC_5HF9I0_WNodSXr3kaU_gaiLX9BSC7gVup_3iEEkKyKm_z_1s_Lp6vr1fP27_s1yVYPqJA7PEHjILP-eX_3sH0u7m7ur67X4XuT364eSba6u_2kMpj0vL7Nl9fr5_uHu7_WxfZxwBI7lAr7Lr7NHy7W28fn7V20Jco3xnmSLW9_3G9_frhGsiLgM_EmUWrfJp01_2DpEyFtyB7bhN3voXp8cx5buNKVITRP4O5xmLtT-rTrte-B0ZSO0xFcbx_jnQROTaB3gc2YIxmA4YV4-1T7bHZQNMrSLKXJtB-W7L9snNJx6Jjx4KT8aZUfdIxYOj1uX9w_hV0nda0Qbn9cra5yuMDKBPr2sP0JGZ3SOMyCNb1HKHnHd1JJ_wazdHpkhryFhnfdW7C7s2YvBUJrLILUlbFtZCiyAo0o4uzbNly_wJvpQWrgYs91YIzGgucvkVEqY14GQsP1GzRSewdGQxg63sAOnQeBu74eRCr5C6RPozlLdD6y1oHXEpqfiUUm5tmcn-FidJ7NR7Mxm7KzZkHLgHo-ns_EdDITczoRbCYmTJyz6YiOx2dyEYqPshENS8bS0ZxOcDLPJiWiYNmcjCm2XKo0pCk1tj4bRuBixKYTSs8U36FyA91-x2Rg3nYx4GnX146MqQpU9V2Fl14NHP1wo4gJZMWRGIeav4okvPhAwge28RjZ9zDUhtQVB9TcxLtnvVWLf2F3A97i5wh3wjaR8geGFx3bL9j_AgAA__-VRLEI">