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

Reply via email to