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

    <tr>
        <th>Summary</th>
        <td>
            Assertion failure with nested parameter packs and lambdas
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang,
            crash-on-valid
      </td>
    </tr>

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

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

<pre>
    https://godbolt.org/z/4Pj4GhY9s
```
template <typename... Ts> void g(Ts... p1s) {
  (void)[&](auto... p2s) { ([&] { p1s; p2s; }, ...); };

void f1() {
  g();
}
```

Looks like (according to GCC and Clang without assertions) this is probably valid (though I'm not entirely sure how/why - not sure how the lambda pack applies/doesn't to the function template pack) 

The crash backtrace is:
```
clang++: /root/llvm-project/clang/lib/Sema/SemaTemplateVariadic.cpp:407: bool clang::Sema::DiagnoseUnexpandedParameterPack(clang::Expr*, clang::Sema::UnexpandedParameterPackContext): Assertion `!Unexpanded.empty() && "Unable to find unexpanded parameter packs"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-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 <source>
1.      <eof> parser at end of file
2.      <source>:1:32: instantiating function definition 'g<>'
 #0 0x00005555a36d685f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3fee85f)
 #1 0x00005555a36d459c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3fec59c)
 #2 0x00005555a3621d28 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f04e7246420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f04e6d1300b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #5 0x00007f04e6cf2859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #6 0x00007f04e6cf2729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #7 0x00007f04e6d03fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #8 0x00005555a69239c2 (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x723b9c2)
 #9 0x00005555a640e83e clang::Sema::ActOnFinishFullExpr(clang::Expr*, clang::SourceLocation, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6d2683e)
#10 0x00005555a669107e clang::Sema::ActOnExprStmt(clang::ActionResult<clang::Expr*, true>, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6fa907e)
#11 0x00005555a68af229 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#12 0x00005555a687863f clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformLambdaExpr(clang::LambdaExpr*) SemaTemplateInstantiate.cpp:0:0
#13 0x00005555a68791fa clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#14 0x00005555a688144f clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXFoldExpr(clang::CXXFoldExpr*) SemaTemplateInstantiate.cpp:0:0
#15 0x00005555a6879449 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#16 0x00005555a68adfcf clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) SemaTemplateInstantiate.cpp:0:0
#17 0x00005555a68af229 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#18 0x00005555a687863f clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformLambdaExpr(clang::LambdaExpr*) SemaTemplateInstantiate.cpp:0:0
#19 0x00005555a68791fa clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#20 0x00005555a68aa5a2 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCStyleCastExpr(clang::CStyleCastExpr*) SemaTemplateInstantiate.cpp:0:0
#21 0x00005555a6879374 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#22 0x00005555a68adfcf clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) SemaTemplateInstantiate.cpp:0:0
#23 0x00005555a68af229 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#24 0x00005555a68b48ae clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x71cc8ae)
#25 0x00005555a6903baa clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x721bbaa)
#26 0x00005555a6901eff clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7219eff)
#27 0x00005555a5efdd70 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#28 0x00005555a5efe45a clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x681645a)
#29 0x00005555a5d99913 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66b1913)
#30 0x00005555a5d8d49a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66a549a)
#31 0x00005555a48fb2f8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x52132f8)
#32 0x00005555a4161839 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4a79839)
#33 0x00005555a40e5a46 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49fda46)
#34 0x00005555a4245517 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4b5d517)
#35 0x00005555a0c62b66 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x157ab66)
#36 0x00005555a0c5e98a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#37 0x00005555a3f4c53d void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#38 0x00005555a3622210 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f3a210)
#39 0x00005555a3f4cdff clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#40 0x00005555a3f1413c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x482c13c)
#41 0x00005555a3f14bdd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x482cbdd)
#42 0x00005555a3f1c97d clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x483497d)
#43 0x00005555a0c61010 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x1579010)
#44 0x00005555a0b6d4a5 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x14854a5)
#45 0x00007f04e6cf4083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#46 0x00005555a0c596ce _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x15716ce)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWt9v2zjy_2uYF8KGROrnQx5cp-63--2iQZMu9p4MiqRsbiVSR1Jtcn_9gZRsi4rTS4B4gd07IK1tajic-cyHwxFJYozYSc6vQfoOpDdXpLd7pa_Zj6oh4pvgV5Vij9d7azsD8AqgDUCbnWKVauxS6R1Am38BtElu_0g-7P9RGhDdgGgFsmj88z8tb7uGWA4BXtvHjkvS8uVyCe8NwO_hdyUY3AFU3BvX2MUGoBKC_N3QGUKACicDUOlsRBlIbwAqSG-Vl0cHeSd4lPANThd-50XwOwjyG4DWcLlcOlVjAx6HAfkNHL55e-rYKQvt2A1N0y5n3R3-_6TUNwMb8Y07uwilSjMhd9Aq-GG9hkQyuG6I3MEfwu5VbyExhmsrlPT-2L0wUBjYaVWRqnmE30kjmFPlpHd7-BGgvIVSWcilFZo3j9D0msO9-gHQ5sf-ES7800MjtHsOG9JWjMCO0G-QdF0juAFowxQ3EqDcOuOcWN1L6iyBx8i5Hh6OiYf3ew6pJmYPK0K_WU0oh8Kz5Bwq1DkL0Dv3h1cQoI1WygK0aZrv7aLT6g9O3c9RbtOICqDNHW_J-HE_2vIb0YIwQZe06wBeJVHu9FVKNXDoi1cAr3xH_-1GkJ1Uhn-V_KEjknF2SzRpueX61ntVTLq9f-g0QCvHk7PKnlGyVtLyB-vZsYKrQySh8x7Fp05L3nb28UAtlAGUQYDQV0mqhjv0ayEZ7I_ysDuM4iNgAEIA5bAmouFsOQB7--n96u49NH3VCgsJrPod1LxT2odzNnOF3ffVkqp2BP4p_sKY3rPCU1RI2vSMe1bMYu0w6jTvtKLcGM6gUb0eml1PYoyigljOoO4lNFSLzo4m31lHQNa33ZEt0RJE5a1WO01aSPSub7m0ZmSK6jwzVNuJhusFf-gapbk-sGVxmjoLq3v5DaBNJeSJTI50cLFjP4iuFwlc7OBCOb2k65z23na9XRq4aB0WcLF4KLIFMe3CPEpLHgC-EdLyBi7u4GKxo3RhlWronggJ8M1PzXPCRpLO7JWFi5qqRukFGwhpBTVwUUu18MAGzQCvRzTx-wGf2OED8Jqr2iXNjmjDNSRu9jOoaliLhg-SaJQ8KcCrGOAVRg5NIY0l0gpiXTI6TnTGayHFwFmU7wBeu44oH3MfQDiC0UMURVGapinBGcuKtIaeQn5imEczfLnVQlof4PuBJcVJSJMfW2Ws5qT15F9DIe0wFYo3CjNA76IHXHNepLWbjkf745n9SVrSc_avG05k332Wd2InSQNQ0Uu_RDLYKDfKJaylaUkDa1FoLYoZKuDa8eQLp-o714-Def9HJGvcoMWIZCAzpqUxU0b-33EIPA6R11HCc5RkCYrgdqu5sUrzrbajn0MifiiybZYsGiH7h8VO9sODzu41J2xp1DLyvsRJgqLAk2Q6TMZiHEUV1EQY_gL91GnOvObEdQw0p4FmWqMiLSGp1Issn2hGrmOgOZtrzo9Rf7HOHIU68xCHCNcse51O7LoEOospS7IS4ZKit2ZnjnBVUhSMWwbjJhEvMD-_Xq6o_Sw3Qgqz3_RNMyyvL1hwfe76pChxJrqHbn1_-vnmczFjKCswP3rrEkeQ-bKsjKP8Z946j-5sa0M_Vz7PfuGmbyzA6_MIWN37hH1B_2pSRnnoX5AZs4LUCJVT_-415_eaSFMr3bqVARVEKvnYqt5AV8ubzif6chQf67SPx5VG6WEV8rpGPWvVdqqX7ClS4ZPVFIxpGXhSz5_mN-cWCt3KiwzXF3frky-wn9J82r56tSt45koZ1-Tirvxkrr7S_CQ0v4iT5PKRWP_--0Y17KkXwYPXO5POY5Ekl58tbxeLbDbZWU0vH4unk3wyuS80uBvhRhhKNPt_Idmrgcr_nlmx-PtkxfIvnRVRNCMYSQm6PMHu7GPD18TYM4lx9uz1LsXziOA8-QtFBP0vN74MKPy3zI1oVqdUSUGeKfTv-srYl0bu176x4hP_zpuDJatxf-uTMBZSJY312yFvXu3nMaUFCap9FNYvZYQrQs47OcFrM-4T3Ry3iWaOP3lfmzw8daZNEJ6Lv83lKK4qQgL_s5n_Ma_r8_7fcu14d8slE3J3QmPYoi8uZ3PJ6zqwOahFUl4zlkc_ewOV7HPt503jrf0qhd1osnOUm8Xt2PH-60HikBEAKpYd0XYZHSbS-VlTzIzjSfoMoZ417rgh_rbvukWcJWkY_aBmSFlZljGeGnvr91Un3-9V56fuQN4pdp878s-e31odvs47wQ9a9d0XXvt3-ezZw4RfFesb_rHtlLZ3llh-mSyQZVVcxniKQ7ibm7KCJSV5gsPq7v4MXQaHLr0Pk5E0KYPYhTu4SVFXqC5gsAww_oHLYaflUAlw2ls-Nl2EZSmKMaqLwNKgkEjiLC5wsD5utJKWS3bG1MsYmZC8LHAZGBks4knEU5JkcLaqumGHxEf5eUSf9-oiXE7KmpEkCxwJlu0EJWka5zAoB73JJ3--H9epeRUR-DtUkG_tQJWyNM4DB4IlOaIZqrIMUhpvW-J0TA5QVlqTR59Y1nRP9KF2WI2bhmEbWsPh3PwSfsRpTqosDEQW-pHysiDwgP46vvepYuLNXUua5jdOrdIf264565RPNqcuTsd4qhEUTkyL71yfXaBwsHriOqEpZsOtg5Pew0HYVntw_dPDcf9YiFLSNBWh37a1DDP-MPZIonW8Vm1LJJvP6rNBNHaUU50bnTgMJvhYLeRuXEeGCB87bLf04SGOhx8VMYJujRcfUQyEXcPWaiKsOTyeqSNN4yaF0pPnTmRSrXkWDZj7LgDlw3UCgPITVKg4nJL9oqrz8ShmZ1sIxdEkFOdOsIYnX3p5R2rePAZw_jx0lziuwwTFUcD8ck4xFhaV_3UUmVWPz3EhCU-V6ziJMX0WOB878mTJPKAZZPNZRycwSRjrn4wxFV0F1c7EtzddEgpEY0ynhEriOS4VY6_F5RdVmedB-UVVs9fPaZ59mpqPPOiIcBTw580vx3Eky5-DZsVYgCaaoUnL_Fk0bybfg8rhTMnwXBT-RDTfvkApcFLmIX54VqDEUTy-fx5KlIP9Pq2sxqTwn5ftty9KyihMzUlQHUZVxhKSQmf1mw-eFGlC0mDw-RWFJCow3G4bUblcTLTdTix56dUCpyQYZV53lRnlcNB_AYTjjE52lA6X_K7YNWYlLskVv46zvHBv1kl8tb8uI84JiWiZ0wqRlBZ1lVOSprws06Ik5EpcowjhCMcZinAZxUua8aRIOSorXNecEZBEvCWiWTo-LZXeXfk7atdZnGTRVUMq3hh_fRWh0VwE0Nr98veqlFz4u5OuOb250tf-wlvV7wxIokYYa06KrbANvz7d36uJaHrN_R1NKLmxT6_k-ctuQyFkrnrdzO_KvuLGnXfo3wEAAP__utd5kw">