<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/139440>139440</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
-fwhole-program-vtables breaks in combination with -ffat-lto-objects
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Jannik2099
</td>
</tr>
</table>
<pre>
the following
```cpp
#include <stdexcept>
struct Foo : std::runtime_error {
Foo() : runtime_error("") {}
};
Foo foo{};
```
when built into an object file with
`clang++ -flto=thin -fwhole-program-vtables -ffat-lto-objects -fPIC -fvisibility=hidden -c foo.cpp -o foo.o`
and then linked into a shared library with
`clang++ -flto=thin -shared foo.o -o foo.so`
will fail with
`ld.lld: error: undefined hidden symbol: vtable for Foo`
Removing either the `-fwhole-program-vtables` or `-ffat-lto-objects` when compiling the object file works fine.
Note that this isn't related to this specific underlying type, I only discovered it with `std::runtime_error` first. Reproduces on libstdc++ and libc++ (when linking dynamically)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVNuu6jYQ_RrnZRQUHAjkIQ-wKdLpQ1WdH6h8mZDpNnZkT6D5-8oJqD1tt1TJEvLc1pq1cFRKdPOIndifxf5SqImHELuflff0Kau2LXSwc8cDQh-cC0_yN1Gd8mmq9ZhxzFdZkzdusgii_khs8Q-DI4v6p7U8cZwMwzUEEPUJEltRn0R9ipNnuuNvGGOIIA5nUZ0AIBcKeRSyXcp_qFricjnt0nG4ZIzDRdTnFSyj9CG8cmv0TXeteA7oQU_kGMhzAOUh6N_RMPTkEJ7Ew9pknPI3Ic9CnqHsHQdRX3ggD2X_HILDcozhFtW9fLDSDhOUfa-4dBzKdWCO_PrtA8r-QYk0OeJZ1JeBrEUPpclEN2YcoVw4b8LKUXkLnEk68p9oXywhDSqiBUc6qjj_L56vlmX2GyS9UJ7kHPSK3N8mObtxLrsDq9r1CSZvsSePFl6003zXweXUujb0IS6WvfX9jvfwIH8DJB4w5lVANNUXoommgux-LviHejm1mGXCfSSXR-ZZP5gV4meCzG-zgv8SGIEHxcADJaDkhTwwRHSK0QKHNZ5GNNSTWdaLbl5mzyMK-QHfIHg3g6VkwgOzfsSLRpnkf_95M9OeYuINfMcxBjsZTBCygzqxNS9zsrGO9Psq5PH5tjkTsLNXdzLKuVnItrBdbdu6VQV228OuaXdNtd8WQ3ds2qOte72t-qPUjZGVNq067JqtrSurmoI6Wcl9td9uq2Z3qLebRjW7tjX1oTF122gUuwrvitzGucd9E-KtoJQm7LZ1u9tVhVMaXVo-C1J6fMKSzY9ufylil5tKPd2S2FWOEqe_xjCxw-6r56Ejqs8EtBiqySum4Fdl_-V9MUXXDcxjynLLq5DXG_Ew6Y0JdyGvGfL1k3Fyj5DXhWgS8vra5NHJPwMAAP__W3uV-w">