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

    <tr>
        <th>Summary</th>
        <td>
            ice in fold over pack within lambda capture: TransformLambdaExpr
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    From #62442:
```c++
int i = [](auto) { return [](auto... a) { return ([a]{}, ..., 0); }; }(0)();
```
```
0.      Program arguments: /opt/compiler-explorer/clang-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 -O2 <source>
1.      <source>:1:75: current parser token ')'
2.      <source>:1:27: instantiating function definition '(anonymous class)::operator()(int)::(anonymous class)::operator()<>'
 #0 0x000055803ab7b73f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x356d73f)
 #1 0x000055803ab7976c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x356b76c)
 #2 0x000055803aacace8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f31f18f8420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x000055803db3e503 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformLambdaExpr(clang::LambdaExpr*) SemaTemplateInstantiate.cpp:0:0
 #5 0x000055803db40c32 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
 #6 0x000055803db48865 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXFoldExpr(clang::CXXFoldExpr*) SemaTemplateInstantiate.cpp:0:0
 #7 0x000055803db40f72 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
 #8 0x000055803db41d55 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) SemaTemplateInstantiate.cpp:0:0
 #9 0x000055803db43447 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) SemaTemplateInstantiate.cpp:0:0
#10 0x000055803db712a3 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#11 0x000055803db761e5 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x65681e5)
#12 0x000055803dbbed70 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x65b0d70)
#13 0x000055803d1ddd75 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5bcfd75)
#14 0x000055803dac1869 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x64b3869)
#15 0x000055803d598c97 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5f8ac97)
#16 0x000055803d90aeee CreateFunctionRefExpr(clang::Sema&, clang::FunctionDecl*, clang::NamedDecl*, clang::Expr const*, bool, clang::SourceLocation, clang::DeclarationNameLoc const&) SemaOverload.cpp:0:0
#17 0x000055803d950978 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6342978)
#18 0x000055803d5f5fc5 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5fe7fc5)
#19 0x000055803d6171eb clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x60091eb)
#20 0x000055803d0f705a clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5ae905a)
#21 0x000055803d0eeac7 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5ae0ac7)
#22 0x000055803d0f1c9e clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5ae3c9e)
#23 0x000055803d0f1e9d clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5ae3e9d)
#24 0x000055803d0af2bc clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5aa12bc)
#25 0x000055803d0c2f66 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5ab4f66)
#26 0x000055803d08b8d7 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5a7d8d7)
#27 0x000055803d08ca2f clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (.part.0) Parser.cpp:0:0
#28 0x000055803d0944b4 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5a864b4)
#29 0x000055803d095a6d clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5a87a6d)
#30 0x000055803d096004 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5a88004)
#31 0x000055803d084dba clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5a76dba)
#32 0x000055803bcd9495 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x46cb495)
#33 0x000055803b5c6991 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3fb8991)
#34 0x000055803b548e23 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3f3ae23)
#35 0x000055803b6a6e43 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4098e43)
#36 0x000055803847a72c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0xe6c72c)
```

Changing from a comma fold to an arithmetic fold gives a slightly different stack trace:
```c++
int i = [](auto) { return [](auto... a) { return (([a]{}, 0) + ...); }; }(0)();
```
```
 #4 0x000056382f4c4214 clang::TemplateArgument::isPackExpansion() const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6cc3214)
 #5 0x000056382edd6197 clang::Sema::collectUnexpandedParameterPacks(clang::TemplateArgument, llvm::SmallVectorImpl<std::pair<llvm::PointerUnion<clang::TemplateTypeParmType const*, clang::NamedDecl*>, clang::SourceLocation>>&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x65d5197)
 #6 0x000056382ed3b59a clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXFoldExpr(clang::CXXFoldExpr*) SemaTemplateInstantiate.cpp:0:0
```

Changing to function call or initializer pack expansion gives "error: pack expansion does not contain any unexpanded parameter packs" without ice #62442.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUWl1z4yjW_jXKDWUXAn1e5MJxOvN2vT2bVCezO3cpBEc20xJoAWWS_fVbSHZsZMeTnnVmt6vSbZsvPc9zDocDglkrVwrgMkqvovT6gvVurc0lcOba3lxUWrxc3hjdoojQjCQJiegiwtcRXkQZHv94RK7831AqlUMSRfQajQNGpGC90xEpUZRfIQOuNyqsm8_niE0bkCJKr5hvlF9F-XVElmg-n_sPHJEyolfIl24-SDEUkmKsmuA7-hPPI1zeGb0yrEXMrPoWlLMRXaCI3OjOReSG67aTDZgZPHeNNmB8WcPUauZMr75F5KaSals2aoBmK_E7M_UsQbMVmmk_GOs6P2Tvut7NLZq1TfPUotnsuchmzLYz-6Ice47otVQOGjS7R7PZivOZ07rhayZVRK9PYvKNrWKdXWuHZjXXjTYzIdlKaeskt2hWKz3jhtl1WGydiOj1xnwEo9ktQRFdWt0bDhH9NCoVe6WCYrqII7rIU68W740B5VDHjAWDnP4G3nr5YI98HIG8MQLJ_QhSWceUk8xJtUJ1r7iTWiEBtVRy-DoMVzCl1Uure4t4w6wdTL2I6EJ3YJjTZmN-UkjlXivf348uPbAtZO_uGOFnjDFO0wJTVuVVTmvkjTf2ty92_HJnpHL3jvFvD4ZxiEixa2TY74_aOgOsjUjm3XdENzj4f-BoEbnCzzTNRE5rj_4VdDwBXeYZPwZ62QBTfXer7uVKsSYiRa-GSCBQo_1TzgaxyjMeQCQBRMYZhwItvXt-Ba6fwLyMmP6PKdH4J20sGrZZauXg2c1510V0gYd_r4-gm0fkNY3ruKiLhGD0-GjAOm3g0bgNuUZWEbl5LrLHLJk1UvXPs5Xqx4rOrQ0wMbd6jgcucZIQHDBJ9pmIikKKKRolGER-MAAPhilba9N6D9v3RsVasN3gMBuPfIC2a5iDz68zQptxtgxjbcb5wtpKsE_PnVdm72H75Qsv1z207HBIOK5YGlJJMKfkw6kckviz8LMJ_KLI0g-Hv_z11xvdiEMWQcX3k8mntqjzH8kWxQR-LNKPt8Vnv1awRv4L3mKxRJXWzXezKSdsaJLkH87m65AF3bvWhWT2y7_PMH5pwCGVPCbs48PVUred7pU4JBPW_DkLeVrxhFYWQ-BvfrDNt76y7hDIHoC90p_7xskv8ATNFslikyZ-kdYhrpV1w5p-npUyS7MihvR1ffHMSMisApHj48z2RLrZZFDXrwnUhO2QhX3RnI11AeldZ94ENpl-not0hUWOA9I0IB0LIfI3zGl69Q_p1vd9XUsuYZOE3Y9OepryLiPaJpyPBuqILp-0FGibEn46F8-04rXIQ-OGyQPjcZGVx3leg-g5jHP_4aWbkDtispPUz2q_pKJFVga8wkwiLQte5m_wGjcj8IuF23qEv0_sb6wFscdqZ7OFMezl62Cvt6l66wVS3Fa_LT8rB6ZmHPy42zl81M1PdZxEq7N4SF0wXuaBkmFSU2IGAGhpYG-Sf4X6cOEeFB53G-_2k6nYkxX0qFTvDSp-WGaGGv-YL5oH0dPDvX0C02gmjkf4MCEqU1zmxXGXuuplI5asaR70bfUbcHdbL_2u73Da3HPti46Rfc8s2jnjz71jVQPHfXI73IEzTkc803ykCSnzIvCiMB1L67Tmb8TTV_GOuNT_llpvgfiINSqtIa95GLvDpDCL8xiq45ouuLtVP7CmZ_JLjMsYqn0NSZiN4jrHKduHcDecKO19v9PW1fLZQwNrpVbDwv8cirrYhEXbN-64EGSJnOnhnKs7gxKnLGAXJqUYgPH8JLsls25HLSS139i3G37_v1Ti0OenUX-_qw-Cvvu9Yw4Ou57N2ikDzHiwlhEysXbMS_hYPf77IlBeQiACnYoApTgpwmI4nfd7jvdIMaF2Ph5QioBHmLpiVpOKn-SxlwEsagdm-1ubhRIL54ysegc2pLZrdNqth-9it12s9V568WavG22-MrWCz0q6s5qdxaTigVxhRow5qbPsD-X6yei-O7S1VCtfe98BP-S3U2xzOnqMf6D3dITpojBdhv4SBaukzrJAwTATxkVViNPR1Ctxa_a2wkP-Ph50f5cg72tx0ioLzsFaXydr6WU4l065KEQYZfOJTpyR-r0TM5Dr6MnBh6g19bDjas07Ztwc-18jh6MbBRLmurhMkio5yf_T8-gWezr8NZzP5QNFllRJ4APlRIOUZacXmQfdDcdchzvw2479s4c7Z8JM6jU8DcnmpyNR5DX9_VmLvoHPbafNdlk624lZyoqcZcHKRCdJZZlhfNoBbqSx7gdWoMA4MD-dJJ5FIqrDtHpx__DmkcGH7KFYnokqyJDD14AVF2VSBvvSpRbwE6gxod-m8MB7B5ui4ZDuLPCSjFdJGWzxaJCrVSnPyjIOjlOMX2KVOILvjMhoXRVlGQfIkhBZUgChoXDjs8YzYQ7HtXubyvn8k9aUAaEB-iAZqjKWQULDneeAc0fi6TUZmb48CEieL6gmuCwgCVEHCUiR5CwnHHEeP7bMj1EcP5tcs72Ds80GPCgjS_SkpTgjeMh4TvbSz8klmOH_5Zqp1XDZwugWMcR12zJU60YgpxFTiBnp1i04ycfSlXwCixiyjVytXfOChKxrGO59WMf4N-SGiw9_2c2gI5eD8Cjg1XhL6AwXhIL3-xktSJ3whMTBajJ9MTSWSnvH-LdPzx1TdhenBpuf5zCFc0riJLiJkO4jBSGy-K1Dd66bBrj7RYEHKEDcMcNacGA86skW7IBgcO5037Km-Ttwp83ntmsiuhxuFPmqjkm_ZO7a3mnpM_Bf1BAsl0ee4Xevd8y0_jOYIW-dUv_RiRb9tF2az_WySqTx3hF9cO9g1J1Wacl-yHsHpwOF07uLWZw1DdIGyd0bd9T5IABbj9_Ei4gQMMYTWEwbCA0WKT28RXVMKsTUC-pfXRJ1W58cOtqIEPS7dGvdOyQ5vN5FnF-ISypKWrILuIyzguRlVlJ6sb4UiRBAGS05z1Jc8Bjyso7LPKdlmZMKX8hLggnFCSnjkqaUzMsySwhnOClrXNZAogRDy2Qz9z4812Z1Ia3t4TIjSZpdNKyCxm4vTZpL32hW9SsbJbiR1tldNyddA5cetlRjONVPW8k8KalQM1zdQZx1rjc-jqIjt30uetNcrp3rhhtc5CYiNyvp1n0157qNyM0w18aPWWf0b8C9sw-gbURuBtz_DgAA__-3h9vb">