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

    <tr>
        <th>Summary</th>
        <td>
            template lambda mangling bug
        </td>
    </tr>

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

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

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

<pre>
    Working on adding lambda template-head mangling to gcc I came across a discrepency in substitution counts.  I think this is a clang bug -- the clang symbol demangles incorrectly, but the gcc symbol demangles as expected. It looks like clang is failing to add something to the substitution table.
(The gcc changes will shortly be committed, not yet taught gcc's demangler about this change)

```
template<typename T> class U;

template<template<typename> typename...T> class Y{};
inline auto l_var4 = []<template<typename> typename... T> (Y<T...> &a) {};

void f () 
{
  Y<U,U> y;
  l_var4 (y);
}
```

```
// CLANG
// build/bin/clang++ -std=c++20 -S -o - clang-bug.cc | grep '^_Z'
// _ZNK6l_var4MUlTpTtTyER1YIJDpT_EEE_clIJ1US6_EEEDaS3_:

// llvm-cxxfilt _ZNK6l_var4MUlTpTtTyER1YIJDpT_EEE_clIJ1US6_EEEDaS3_
//auto l_var4::'lambda'<template<typename $T> typename ...$TT>(Y<$TT...>&)::operator()<U, l_var4::'lambda'<template<typename $T> typename ...$TT>(Y<$TT...>&)::operator()>(Y<$TT...>) const

// GCC (with new mangling, to be committed)
// obj/x86_64/gcc/cc1plus -quiet -std=c++20 -o - clang-bug.cc| grep '^_Z'
// _ZNK6l_var4MUlTpTtTyER1YIJDpT_EEE_clIJ1US7_EEEDaS4_:

// llvm-cxxfilt  _ZNK6l_var4MUlTpTtTyER1YIJDpT_EEE_clIJ1US7_EEEDaS4_ 
//auto l_var4::'lambda'<template<typename $T> typename ...$TT>(Y<$TT...>&)::operator()<U, U>(Y<$TT...>&) const
```  

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNVVuPmzoQ_jXmZQQCEyB54GE3yVbb28PZRNX2JTLgEHcNptjsLv_-jIFESTeqqqpSK1nGl5lvbh-eTBV9-kW1T6IuQdXAisKuJKuygoHhVSOZ4e6BswIqVpfS3hoFZZ7DPeSs4sDyVmkNDAqh85Y3vM57EDXoLtNGmM4IxM1VVxvtASqZg6if7KxBWLVcIi5kXQmui8d8OtB9lSkJBR_MchSuc9W2PDeyJ3SJCmaQtp68kWUa-GuDsrzw4N6AVOpJgxRPR3S0vGfiGA1GDVpV3Lo2HFjgC_8NyyT3iL8i_g2h881kOD8gGNp7EVKCPqgWnYMMjaiqEgatW09rZaDn6C3ryoOxeoQm-uRtCyxTQzDo1AhI6GIyNc6xP41he6wKCZemx3TbImxIuLahYSG2JLw91z4Xf6tp9Y5rz_POcB5JckuS1QlN1JguLHeH-ZG7Z9bOgIQrINEtiVa_BD56iel7RJkNHozbmGG88IO1cX5WooC9VRlExptkEgGwOFtM8dYC9SddOPlH573N5QkUDVzL6PVDeocDlh9vPr-7OMk6IbGwd5mocR74ROgtDnC1KTAn-bilPrgP4CpwR9K5yHEPSUOSJZT4o6B7CYnWu6_2e25g9_Xzh3gM4dNWbpqN2fTr_4LH-_erZrNbr9e7XN6_D7YPsd2s2EO4I-HNRSgjkJTPlZu_vu6FNL-FegZ2VndrDAdNxmfCun-1_BjgbHPOAbA1xzN7ONFg2I5UQCYMxbLgquEtM6odKz-V-e-Zvyq-wN-81uZK3t8tl5Z7L8IcoOYvp5fTxoBZvHwgFheqKvuGn9d5vItnuBgei7s8DxrZaXC_dwIfkrc0-5Fjf45iyUSG2a9Q7Hdg4V8j2fYnehcVPz4XMIXg8DSI4zhZREEUOEUaFotwwRzsIZKnR8-PrfXUTLFgTtfK9GBMo4eIbSJKpE6XeUgT3NgcTx-3adU37Gu4FVp3XOMimsdh4BzSeM79GQ2SeRTxxGf-Po4Z3WdZmOxZVGS-I1nGpU7ti02p5eUAgWt8wB2RUp_SwKdxMAsXQeDN5whFg9gPYpazWUZmPnYsIT3rh6fa0mnTwSWMQOOlFBo7_OkSW4goa87TsUE4WFrsj2nX1sxgk3MG2-ng-_80WIeC">