<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJy1VE2PozgQ_TXkUgIZaCA5cOh0ujU5jDSHmfPIgAnedWzkj3T630_ZQJJJ90g9Wq1ksHE9yvWqnqtR3Vu972EPAz0xsAODXgmhXrk8wFF1TjDg0jLd0xZNXLCI7CLyOL9LMo02yrZ-TLvZCw6gSdtOG-w8Km0XdzTKt7dO-DFYo_zJWI3HRvnzBXFv-3ni7PUW8NsBxnZR_ohjAoMZGf03ytZ3-8EJmCjbXN0sRG69UtndJcQop-c04K6-Mvp0TmJkJC6J-f8y8tepgKiaHQDwHjwUD9nhwHX2hWEKcL4DAmhmnZYBogT1iPxijardsrzCovxlHjfYC_LDOuyhVcfR5xwNQVUlAauAwrenr1MxnPFp-shFKyhaQiXitID4DHNd4jn5cUjJbt7NCMT9ZDG4ahwXlssZGx_pGPCCN_gLvue_II5HzZYor8K_i2XrrBeU9Aneg9VvnsUtt4s6kODnKf0tgdkch9uc76h_krE9_oFae6_au3D2cGCBFzCtlf4Qc_WQP2LZH1N8ZjguOtZzyS1XElS_XKooq1BPFXADUlmgJ8oFbXzEW8wNe0fD5xJV3vL-DUZqB_99LUr3rpn96QYWz9MineJDcpJpalmXfMiMnbCedlDuMGBNpwA4mxrH7NwHmNwK-vuApHCEEqOMT0ybmXyoF_RaHYOHDt0LNR6ZtNBoKtvhU4qIZ4-T9UfjpHUQQJez0iIhCYkX0WQ4yDolDwXJ_UZa0IZWVZqVD3EaVc_YYf10Cyw2SVatZ0ZUowh8Lc_r8if-M7ax4NKd44N0C2nNaCgDEx44KsPPs4KksVRgkXY86AE7pTMa3w2Xd3xXXZ13m3xDV9Rh1nWtZYOdZeW0qAdrR-O7W-i1B24H1yRYf_wQ4rRMeFPVP6y1-MmNcQyb30uRl2W6GmqGlDdNse7arFjnaZpXyLTIcpqXxUPbkRUqkAlTR8U2Knar_34kr5eMZoSUBCuyIW1Dyi6t2qwkLI0eCDui8hPvJ1H6sNJ1cNm4g0Gj4Maaq5Eaww-SsSVCy61g9VOo_CvqIavspeE8XRrGcjXwijIvNRquosMraVYh4DpE-wuXnWmK>53661</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Clang won't compile C++20 module implementation units
        </td>
    </tr>

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

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

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

<pre>
    If I have the following module interface file

```c++
// a.cc
export module a;

import <string>;
import <string_view>;

export std::string speak(std::string_view s);
```

and the following source file for module a

```c++
// a-impl.cc
module a;

import <string>;
import <string_view>;

std::string speak(std::string_view s) {
  if (s == "Hello") {
    return "Hola";
  }
  return "???";
}
```

I compile `a.cc` to a PCM file using
```
clang++-15 -x c++-module -std=c++20 -fmodules -fbuiltin-module-map -stdlib=libc++ --precompile a.cc
```
But then if I try to compile `a-impl.cc` using
```
clang++-15 -std=c++20 -fmodules -fbuiltin-module-map -fmodule-file=a=a.pcm -stdlib=libc++ -c a-impl.cc
```
I get the error
```
a-impl.cc:2:1: error: definition of module 'a' is not available; use -fmodule-file= to specify path to precompiled module interface
module a;
^
1 error generated.
```
even though I specified the module file.

This is using a version of built from the development branch
```
clang++-15 --version
Ubuntu clang version 15.0.0-++20220208104503+215aba771264-1~exp1~20220208104559.278
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VE2PmzAQ_TXkYoEMBNgcOGw2u2oOlXpoz5WBIbh1bOSPbPbfd2wgSdOttD1UGrDxPMbzZp7dqO6t3vdkTwZ2AmIHIL0SQr1yeSBH1TkBhEsLumcturiAiO4i-ji_SzpZG2Vbb9Nq9oJGWNK20wKcR6XtEo5F-fY2CD8Gb5Q_Gatx2yh_viDufd9PHF5vAb9tYGwX5Y9oE5iYEdjPKHu4Ww9BiImyzTXMQuQ2KpPdXUGMcnouA67qK6MP1yRGRuJSmP9XkX8uBYmqOQAhvCceipvs0HCefQIsAY53QEI0WKdlgCjBPCK_eKNqt0yvsCh_me0Ge0G-24c9adVx9DVHR1BVSYlVhJEvT5-nZjjjy_ReiFYw9IROxGlB4jOZ-xLPxY9DSXbzakZJ3E8eg7PGcWG5nLHxkY0BL3iDv-B7_ovE8ahhyfIq_Ltcts56QUlf4D2x-s2zuOV2UQcS_DilfyUwu-NwmvMd808ytse_UGvvVXuXzp4cIPAioLXS72KuEfJHbPtjis8Mx0kHPZfcciWJ6pdDFWUV6qki3BCpLGEnxgVrfMZbrA38QcPXElXe8v6NjMwO_vvalO6Py-xvJ7B4nibplB-Sk6CZhS55lxmcsJ92UO4wYE-nBDhMF8cc3CeY3Ar664Ck0EKLUcYn0GYmH_pFeq2OIUKH4YUajyAtaTST7fAhRcRzxMn7rXHSOhJAl73SIqEJjRfRZGj0IaXrguZ-IS1Yw6oqzcp1nEbVM96wfrgFFpskqx5mRkyjCHwvzw_ld_xnbGPBpTvHB-kW0hpYaAMIDxyV4edZQdJYJrBJOx70gDelMxrfDZd3fFddnXebfMNWllsB9VMg9YpUs8peztLT5SwsXUf1ga8iCypzqDazclrUg7Wj8TdiuJ8P3A6uSTAMfghxWgY83eoHtBY_uTEO8MJ8KfKyTFdD3VRVs6ZFvynSdZtuuq7dpF0HRZtVUEJHV6haEKaOim1U7Fa8XmqYUVpS7MGGtg0tu7Rqs5JCGq0pHFHrid84Ufqw0nXIoXEHg07BjTVXJzOGHyTAEp85FKOutWzwwl2FbOuQ6i_yz1VA">