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

    <tr>
        <th>Summary</th>
        <td>
            Linker errors relating to vftable with C++20 modules on Windows
        </td>
    </tr>

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

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

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

<pre>
    The following simple repro will generate multiple definition linker errors on Windows (regardless of link.exe or lld-link.exe, so appears the issue is with clang emitting symbols for every TU importing the module in question).

```
// mod.mxx
export module mod;
export struct poly
{
  virtual ~poly() = default;
};
```
```
// a.cxx
import mod;
poly p1;
```
```
// b.cxx
import mod;
poly p2;

int main() { return 0; }
```

Tested with multiple build systems (CMake and build2), on
- trunk (c44e9ff691a10cd900b93d9ff4e0ada355ca82d7)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUU82SmzwQfBpxmTIlBBg4cPi8Lp--3DaVs0ADViwkoh__XPLsKQHezab2kFS5xoie6ekRPdw5OWrElpQHUh4THvzZ2PbCJ8u1TjojHu3rGWEwSpmb1CM4Oc0KweJsDdykUjCiRss9whSUlxEUOEgtvTQalNQXtIDWGuvAaPgmtTA3B4TVFkduhULnwAxLZop3BGNBKbF7ngl7AWeAzzNy68CfEaRzIUa4SX-GXnE9Ak7S-0XgY-qMcjAYC3hF-4DXryCn2dgFjvWTEUEhSA0_Arqok7AmJfRI6H9b3NPttx7ZibBTrEun-319h_dI-eSajCD54QPivA29h9mox8ZSbQkAV2l94Ap-LiirCWuA5Md4czwo_0ZFquP78x-aPpXI0_4pcJ35g7LYDebs3yi7v6Bk75RrovYwcamfo1UHsOiD1UBJfoA41qcdl_iKzqNYP-6bp7oglQD3cB6nxT0vX_gFgWuxQoywJlrF6JVkB94GfYmZfVFgMwz7JuMZ7UVDadfkohmGAikXPC_LntdMVJFhqU1Em4smb3iCbVZlTVNkWVkm57aqq6zZF5T2gtKsw6zDri7yfj8URSf6LJEto6ygFWVZxcqyTKs8jy1wX7Maa16QguLEpUqVuk6psWOymLltqqKoEsU7VG5ZRsY03lanE8bibto21uy6MDpSUCWdd-8sXnqF7f8fts2i4qvnDVwHzzuF66W-EHYg7MDo5t7fFzMJVrVn72dH8s0Bo_Tn0KW9mQg7xY7b32625jv2nrDTotMRdlrnuLbsVwAAAP__7xJVJg">