<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/88906>88906</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] name mangling for lambda's in local classes broken since clang-13
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
daantimmer
</td>
</tr>
</table>
<pre>
Minimal Reproducible Example:
```cpp
#include <iostream>
#include <functional>
int main(){
class Test{
public:
std::function<void()> a{[]{ std::cout << "a\n"; }};
std::function<void()> b{[]{ std::cout << "b\n"; }};
std::function<void()> c{[]{ std::cout << "c\n"; }};
};
Test test{};
test.a();
test.b();
test.c();
}
// output:
c
c
c
// expected:
a
b
c
```
godbolt setup with clang-trunk, clang-12 and gcc-trunk: https://godbolt.org/z/EM36r4Ybo
So, if you have a local class with lambda's the name mangling seems to be missing/going wrong. Resulting in only one actual lambda being declared.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVEtv6yoQ_jV4M2pkg19ZeNG8dt303s1d8pg43GKwDPRxfv0RjtMmUXVU6UiIEd88vuFjBPde9xaxI9WGVLuMx3ByU6c4t0EPA06ZcOqje9JWD9zAM46TU1FqYRD273wYDRL2SPIdyS97nZ-XHMcFoUxbaaJCIGyrnQ8T8oGw_XfuY7QyaGe5-QqYd20DDFxbQltC16TZnGEAabj38C_6cAUCjFEYLT-bAx9UOrDHCwNh21en1VKP7YGn_FkG0my-4qWLIXVG2BYIpZxUW0soJWwDpNmlxTY_5hA_4hB_xSF_xCH_wAF3p7NNEkNYdL4JSOCKXzq4hcX3sLyDU8HrKaIHQg_gYhhj-HxE-Z25ScD3EWVA9ZnCz0bcplxm9LpC75RwJoDHEEd40-GURsv2D2GK9oXQ7XIsKHCroJdy8bBHOIUw-sQ5d7FUWrmpJ_Twi9DD_onVU_mfcNeE_7hUVB_hw0U48VcEDsZJbpaRnlswfBCKE9p4CCcEyweEgdveaNuDRxw8BAcCYdDea9vP9Mn3Njnbr-AZfTQhAdqCs-YDnEXgMkRuluIgMPkVSsMnVKtMdUyt2Zpn2BVNwWjTNus8O3Utr9p1s86LqqyZZJJSRlt1ZEVVMNpWmOmO5rTMy6IuyrJm-UoqWrSKtlVd84rmkpQ5DlyblTGvQ9In095H7Np2ndeZ4QKNn78iSmex03xWu2zqUvyDiL0nZW60D_6rQtDBzP_XOaPa3Yl0dNO1itpei4wexORe0ILXVuLliVkWJ9PdvaoOpyhW0g2EHhL7Yh7Gyf2PMhB6mC_jCT3M9_kdAAD__0Zii0s">