zyn0217 wrote: I remembered @LYP951018 shared me with a case involving PackIndexingExprs that was incorrectly rejected due to the mishandling of PackExpansionExprs:
```cpp namespace init_capture_pack { void init_capture() { auto L = [](auto... x) { return [x...](auto... y) { return [... w = y]() { return w...[3]; }; }; }; static_assert(L()(0, 1, 2, 3)() == 3); } ``` I have prepared for a fix on my branch https://github.com/zyn0217/llvm-project/commit/72fc2fcf472066a78c1496119aabf23a93c06ca0, which somehow relies on this "the unexpanded pack should have size 1" feature. I applied this PR locally only to find we ran into a crash with the case afterward. ``` bool clang::Sema::DiagnoseUnexpandedParameterPack(Expr *, 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: ../llvm-project-Build/BuildDebug/bin/clang -fsyntax-only -fno-crash-diagnostics -std=c++20 /clangd-test/pack-indexing.cpp -DCRASH 1. /clangd-test/pack-indexing.cpp:11:19: current parser token ')' 2. /clangd-test/pack-indexing.cpp:1:1: parsing namespace 'init_capture_pack' 3. /clangd-test/pack-indexing.cpp:3:21: parsing function body 'init_capture_pack::init_capture' 4. /clangd-test/pack-indexing.cpp:3:21: in compound statement ('{}') 5. /clangd-test/pack-indexing.cpp:4:12: instantiating function definition 'init_capture_pack::init_capture()::(anonymous class)::operator()<>' #11 0x00007f68109c9dad clang::Sema::DiagnoseUnexpandedParameterPack(clang::Expr*, clang::Sema::UnexpandedParameterPackContext) /repo/llvm-project/clang/lib/Sema/SemaTemplateVariadic.cpp:427:43 #12 0x00007f681049bdd1 clang::Sema::BuildReturnStmt(clang::SourceLocation, clang::Expr*, bool) /repo/llvm-project/clang/lib/Sema/SemaStmt.cpp:3782:7 #13 0x00007f681091c6a3 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::RebuildReturnStmt(clang::SourceLocation, clang::Expr*) /repo/llvm-project/clang/lib/Sema/TreeTransform.h:1501:22 #14 0x00007f68109045d7 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) /repo/llvm-project/clang/lib/Sema/TreeTransform.h:8288:23 #15 0x00007f68108be03e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) /repo/llvm-project-Build/BuildDebug/tools/clang/include/clang/AST/StmtNodes.inc:926:1 #16 0x00007f68108dabbb clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) /repo/llvm-project/clang/lib/Sema/TreeTransform.h:7859:38 ``` https://github.com/llvm/llvm-project/pull/101385 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits