<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/145195>145195</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LTO][MinGW] Cannot build a DLL containing auto-exported emulated-TLS variable for MinGW target if LTO enabled
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
kikairoya
</td>
</tr>
</table>
<pre>
When building a DLL with LTO, the linker cannot resolve auto-exported emulated-TLS `thread_local` variables.
```
// pass
// RUN: clang++ -fuse-ld=lld %s -shared -o %t.dll -target x86_64-windows-gnu -femulated-tls -flto -Wl,--exclude-all-symbols
// RUN: clang++ -fuse-ld=lld %s -shared -o %t.dll -target x86_64-windows-gnu -fno-emulated-tls -flto
// RUN: clang++ -fuse-ld=lld %s -shared -o %t.dll -target x86_64-windows-gnu -femulated-tls -flto -DUSE_DLLEXPORT
// RUN: clang++ -fuse-ld=lld %s -shared -o %t.dll -target x86_64-windows-gnu -femulated-tls -fno-lto
// RUN: llvm-readobj --coff-exports %t.dll | FileCheck %s
// CHECK: Name: __emutls_v.tls_var
// fail
// RUN: clang++ -fuse-ld=lld %s -shared -o %t.dll -target x86_64-windows-gnu -femulated-tls -flto
int thread_local tls_var;
#ifdef USE_DLLEXPORT
__declspec(dllexport) int other_var;
#endif
int main() {}
```
result:
```
ld.lld: error: <root>: undefined symbol: tls_var
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
```
The linker reports `tls_var` as undefined, although `__emutls_v.tls_var` should be referenced instead in emulated-TLS mode.
Maybe related to: https://github.com/llvm/llvm-project/issues/134725 https://github.com/llvm/llvm-project/issues/79715
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVV2P2ygU_TXk5YqI4NhJHvyQj8mutGm7aqfqvkXYXMd0riECnJn59yscz6Yz7T5VaiVkjMHnHu7XUSGYk0UsWb5h-W6i-tg6Xz6YB2W8e1aTyunn8kuLFqrekDb2BAp2hwM8mtjC4f4Dk1uILQIZ-4AeamWti-AxOLogqD46jk9n5yNqwK4nFVHz-8MnYIWIrUelj-RqRawQcFHeqIowTJlYp1GIcYg1k3sm93BWIdxWHz-_Z9kaalL2xOSGyQ3wpg_ISbNsR6SByTwAD63yqIG7tI5TTQQ8Kn_CCE_L4ljM-aOx2j0GfrI98OY_opEC8IaiA_6FmNxyjk819Rq5IuLhuasc_QI-1vEfUPo9fth9_nR33B0Od__8_eHj_S_nYB2n6L4zS3TpeMomV30FzmvXNGPehZsdttjC3hBuW6wfBjo3nO2fd9u_EtJ71WGaj0fs-kjheJkOT-XHpLyeb5Sh3xGAKwljI3xbPfBCMdsMpDLTaGzgbaiOR401hTPWTC410dVDTK4gAbrYon-FglabZjTXKWOZXKbDbLFhi93bAhVrj6GnyLK3tUt6SskRa0DvnU8vLNt65yLL7tKqtxobY1HDtaTSt5vTv_HqK4yXluO6Tlk9RAT1tTHhk4lQO40wAyaXfUDgF4gOAiIYe3G1isZZJlff3-L-1s08jhlUiBc6hQAVboRT-1MUW9ef2nTsB1lTCAit60lDheCxQY-2Rg3Ghogqza8bY-c0jg3wnXoe_hk2Ibp06zbGc0g-HjLvZGLbV9PadUzuUxGMEz979xXryOTehNBjYHI_y-YLmf8EwGK1mOVMrCe6zPQqW6kJlrNFLvJc5JmctOWsKbJcVFijVLJaFljlupE6m2M9a9SynphSCpmLQkohhJzJqZwXmDeIWZ0JvUDN5gI7ZWiaOEydP00G6-Vsns9W-YRUhRQGtZLS4iMMu0zKJF6-HIhX_SmwuSATYrjBRBNpkLmkWfmO5Zt3xv7xheU72F41axC4Ud1qZ6MydpC7_5ewF72CxnkY4GAsZtMkbQS0aVtPek_lT8TtevdLKf8NAAD__0uwbwI">