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

    <tr>
        <th>Summary</th>
        <td>
            Stack overflow in clang-query 17, ItaniumMangle.cpp
        </td>
    </tr>

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

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

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

<pre>
    On our machines (Linux) clang-tidy (llvm 17) crashes when processing

```c++
template <class RET> struct Context {
  using Ptr = Context<RET> *;
};

template <typename Callable> void scheduleCoro(Callable &&coro_function) {
 [coro_function{coro_function}](
      typename Context<decltype(coro_function())>::Ptr ctx) -> int {
    return 0;
 };
}
```

To reproduce

```
clang-query-17 a.cpp 
```

with stack dump

```
...
#238 0x000000000095b3e8 (anonymous namespace)::CXXNameMangler::mangleTemplateArg(clang::TemplateArgument, bool) ItaniumMangle.cpp:0:0
#239 0x000000000095b837 (anonymous namespace)::CXXNameMangler::mangleTemplateArgs(clang::TemplateName, llvm::ArrayRef<clang::TemplateArgument>) ItaniumMangle.cpp:0:0
#240 0x000000000096205f (anonymous namespace)::CXXNameMangler::manglePrefix(clang::NestedNameSpecifier*) ItaniumMangle.cpp:0:0
#241 0x0000000000949566 (anonymous namespace)::CXXNameMangler::mangleType(clang::QualType) ItaniumMangle.cpp:0:0
#242 0x0000000000953f7d (anonymous namespace)::CXXNameMangler::mangleBareFunctionType(clang::FunctionProtoType const*, bool, clang::FunctionDecl const*) ItaniumMangle.cpp:0:0
#243 0x000000000095eed0 (anonymous namespace)::CXXNameMangler::mangleFunctionEncoding(clang::GlobalDecl) ItaniumMangle.cpp:0:0
#244 0x000000000095d1ca (anonymous namespace)::CXXNameMangler::mangleLocalName(clang::GlobalDecl, llvm::SmallVector<llvm::StringRef, 4u> const*) ItaniumMangle.cpp:0:0
#245 0x000000000095dc2d (anonymous namespace)::CXXNameMangler::mangleName(clang::GlobalDecl) ItaniumMangle.cpp:0:0
#246 0x000000000095e8f2 (anonymous namespace)::CXXNameMangler::mangleExpression(clang::Expr const*, unsigned int, bool)::'lambda0'(clang::NamedDecl const*)::operator()(clang::NamedDecl const*) const ItaniumMangle.cpp:0:0
#247 0x0000000000957a1e (anonymous namespace)::CXXNameMangler::mangleExpression(clang::Expr const*, unsigned int, bool) ItaniumMangle.cpp:0:0
#248 0x0000000000956421 (anonymous namespace)::CXXNameMangler::mangleExpression(clang::Expr const*, unsigned int, bool) ItaniumMangle.cpp:0:0
#249 0x0000000000949478 (anonymous namespace)::CXXNameMangler::mangleType(clang::QualType) ItaniumMangle.cpp:0:0
#250 0x000000000095b3e8 (anonymous namespace)::CXXNameMangler::mangleTemplateArg(clang::TemplateArgument, bool) ItaniumMangle.cpp:0:0
#251 0x000000000095b837 (anonymous namespace)::CXXNameMangler::mangleTemplateArgs(clang::TemplateName, llvm::ArrayRef<clang::TemplateArgument>) ItaniumMangle.cpp:0:0
#252 0x000000000096205f (anonymous namespace)::CXXNameMangler::manglePrefix(clang::NestedNameSpecifier*) ItaniumMangle.cpp:0:0
#253 0x0000000000949566 (anonymous namespace)::CXXNameMangler::mangleType(clang::QualType) ItaniumMangle.cpp:0:0
#254 0x0000000000953f7d (anonymous namespace)::CXXNameMangler::mangleBareFunctionType(clang::FunctionProtoType const*, bool, clang::FunctionDecl const*) ItaniumMangle.cpp:0:0
#255 0x000000000095eed0 (anonymous namespace)::CXXNameMangler::mangleFunctionEncoding(clang::GlobalDecl) ItaniumMangle.cpp:0:0
...
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWN1u4zYTfRr6hohBkZIlX-jCke0PH7Ddppug2LuCoka2uhSp8ieJ376gZMe2kk3dpEDTNZTYmtHQ5xzNcEbm1jYbBZCj5Bolywn3bqtN_s0a3XKl7yelrnb5zwprb3DLxbZRYDGi2adG-UdE51hIrjZXrql2wSzlfYujtHcYbrdg8cMWFO6MFmBtozaILBFZ7P_PyHAIRK_D0VsdtJ3kDjBihZDcWvxldYfYCltnvHC40MrBo8Mo3Qdg7MPK-MYZjNjycAFixT4Q0QVi-4tRujx-fvZ9bteB4i3ggkvJSwkh_F43FbZiC5WXUGijEc0OfozoDNGZ0Eb_VnslXKNVYH8Eh5Lrc286Pl-iZIlodiATXkccT1wqEDKYEc1G35YhOg8HWyG2QGwRdBCuvztXAX-jzsTC2IDzRmHyJAQ-UyVdjm7PqVp3GhvojK68gBfv5XA6pMUfHszuKkoxn4quw68s-9C4LbaOi2-48m33ysrT6XRvp4yyDJNH8vSaJyWDLCQiV1rtWu0tDjLajgvoJQr6FF-_fuYt_MTVRoIZbG1_crdPhYXZBJkDh8F94vAtKIdogUutZdD4_46rxrfDcoEnYgvS_x1hzscwM5b-IzDtyzhDYMAY6nHwLIzhuy9QD0X1XV5sdSGlmJxTmlGS1G-ndGOgbh7PyXwG66AKAbcdiKZuwIRKvhBfdI4vniez2Tsk31feEd0vnsvBehkeOkoBVqfV2_FccwPr_Q7wHNvBc2O008GNhVbW9eodErfALwQsQciTay9jxkbMACrydmYHKCsldBUaxhmz_0ldchlgXoouHqGrIsHfju6TFlwO1fU9WKdVd9tyKX8F4bRBrDixO9OoTShHWuDYh13676qejHkJ-o58ep3SZYhm4zzIavp2RKvHzoSRoe9wJ7iC_SydvepnmCr0uZN9ebga0VTytqw4QTQdbS-8hWqc8INLd2B4uGf73vqXYcPni1RKRyqlPIJ_T6WLII-b7Cym0QeHPB_v_nH6nrngvbt_Qv4Tc0oS_XBzSkI_9pySsI81pyTjfvnDzCnJuGN-mDnl-Ejz0qPRpMpZNWdzPoE8SqOIZITOosk2r5O5yMo6rYmY11FZR3VJIK5jBlkEFZtNmpwSGhNGKYlJTKNplHHBy6qMgNZJRSsUE2h5I6eh_qbabCaNtR7ybEZjMpG8BGn7nwYoVfCAeyeiFCXLiclDzFXpNxbFRDbW2eMqrnES8tv-cU7fg6mlfsCNwidPhf2vBMVzZSbeyHzrXGf77r1GdL1p3NaXU6FbRNf9TjG8XXVG_w7CIbrukVlE1z3yPwMAAP__ickekA">