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

    <tr>
        <th>Summary</th>
        <td>
            [LLDB] Unreliable CPPLanguageRuntime::FindLibCppStdFunctionCallableInfo 
        </td>
    </tr>

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

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

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

<pre>
    `CPPLanguageRuntime::FindLibCppStdFunctionCallableInfo` fails to extract the callable information from an `std::function` which is constructed from a lambda inside a function which has multiple parameters due to this part of it's implementation:

https://github.com/llvm/llvm-project/blob/8ebd4019500cbec28426f19e6440484d53ecaecd/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp#L293-L311

As a consequence, `std::function` summary cannot print the target function's description, and stepping into `operator()` does not work.

I have augmented LLDB's logging locally to confirm that this is indeed where things go wrong:
```c++
#include <functional>

std::function<void()> GetFunc() {
    return []{ printf("func\n"); };
}
std::function<void()> GetFunc1(int a) {
    return [=]{ printf("func1(%d)\n", a); };
}
std::function<void()> GetFunc2(int a, int b) {
    return [=]{ printf("func2(%d,%d)\n", a, b); };
}

int main() {
    auto f1 = GetFunc();
    auto f2 = GetFunc1(10);
    auto f3 = GetFunc2(10, 10);
    
 printf("Breakpoint here\n");
    /*
        vtable_name='vtable for std::__1::__function::__func<GetFunc()::$_0, std::__1::allocator<GetFunc()::$_0>, void ()>'
 first_template_parameter='GetFunc()::$_0'

        vtable_name='vtable for std::__1::__function::__func<GetFunc1(int)::$_0, std::__1::allocator<GetFunc1(int)::$_0>, void ()>'
 first_template_parameter='GetFunc1(int)::$_0'

 vtable_name='vtable for std::__1::__function::__func<GetFunc2(int, int)::$_0, std::__1::allocator<GetFunc2(int, int)::$_0>, void ()>'
 first_template_parameter='GetFunc2(int'
    */
    return 0;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk2P6yYU_TVkc_UijO3EWWQxcV6qJ2UxatV1hOHapg-DC3im8-8rbOdjPqU3nUaOg8m9h8M5XAz3XjUGcUvyHcn3Cz6E1rpthyZodHJRWfm0JSta3t8fuWkG3uDvgwmqQ5LekfTuoIw8qqrs-z-CPAxGBGVNybXmlcYfprZkRaHmSnsIFvCf4LgIEFoEMQeBMrV1HY-JUDvbATdAVtQHOQ1Rz6gR6bFVogXlQVjjgxtEQDkngeZdJTko45VE4HDOm5Na7qEbdFC9Rui54x0GdB7kgJFaaJWP3QFsDSoQtvagul5jlGIkF9nQPaHzvQ2h97GPHQg7NCq0Q7UUtiPsoPXD-edb7-xfKAJhh0rbirBDgZXMaLLJKRUVClZkbFUnG1xlGc2KTOYpCo5CjgAyZng7OIGEHe710CjjCTu89IIdyns9-Pgd2y_NWoq-Jyw9sk367Zgmye1E7jzwUU_8e0ATByrf1d8PXcfdEwhujA3QO2UmNwN3DYaL5qN8Er1wqp-eS-BGgg_Y98o0oEywcRTbo-PBOsIKwjZxCGnRQwR_tO7n8pboD2j5AwIfmugJSjge97txJG2bJqJqG1fVU_RTWFMr10FoeZjMjZeRiBIeW3QYO03jobHw6Kxprvau6HQJwnbxmnpZqozQg0QgaXmeJ9ck_X7L8bVqaflglZznl36H3zDEOpk6gKxnfAAAh2FwBqZSJOvdpG89hrIISPLSEMZGpB2Q9Z6kZ3rr_S8SSAgronv8Ixrp_h0mydjMZcQ8kypHrP_OjF2ZlXGhQPUpiuxCsXyTaTnivkt3usfhO67MW3bxIVioEyDp_rmrF7BrFLuNiuIl9O3A9DaQzYElvA6fW7ez3jnkP3sbOccV_my13CTGDevu-hw_DyFuxSfD476-J2w9dUBtHVx8O52Sc-Nq4fWZpOULFe7G7TE7jTN4DcN1rNdY_B9kpt9jclwncFkohK1n-rVyPpwCdr3mAU-XbX2axPt01rce_z8izPX1SSHezv4CMd6h9VyQr1WCnYccq_mTgnwI8gW6XPDXt5Uyvt1f7jr0jc3i_M5YyG0qN-mGL3CbrFnB2GqVF4t2WzFaCL7JeV2khSyyfMVkQmmVFSiwEGyhtoyyLKF0lWT5Oi2WecYFFpSmG1FxuhEko9hxpZfxXLG0rlko7wfcJknCNslC8wq1H89xjBl8hPHfWP_5fuG242GkGhpPMqqVD_4KE1TQ4wFwfJ_me_jTONRqdPzT5z5YDE5vf_mQNJKOZ5h5Vg9b9m8AAAD__9EJI6w">