dwblaikie wrote:

> @dwblaikie Feel free to checkout this patch locally and see if it resolves 
> the original issue  - I won't merge it until you confirm it works or discover 
> another issue that goes beyond the scope of this patch. (e.g. another 
> aforementioned issue)

First glance it seems it does not resolve the original issue (still seeing a 
crash, with this patch applied, on the original source). I'll try to reduce 
another test case.


> > Hmm, actually - does this fix address /other/ ways a pack could appear, 
> > like this? https://godbolt.org/z/oez8TbGqM
> > Presumably a pack could appear in a variety of expressions, not just 
> > wrapped in parens - could be in a function call (as in the above example), 
> > or nested arbitrarily more deeply in the expression in any number of other 
> > expressions?
> 
> It fixes it as well, although with an unused-expression warning.

Oh, that surprises me - not sure how ignoring parens could help the case where 
it's a function call... 

Oh, I was looking at the wrong parens, it's the line 9 `(ts)` parens. OK, 
change /that/ into a function call (and this time I've actually applied this 
patch locally and tested this, and it does seem to still crash, even with this 
patch applied):

```
template<typename... Ts>
void f1(Ts... ts);
template <typename... Ts>
void f1(Ts... ts) {
  [&](auto... indexes) {
    ([&] {
        f1(ts);
        indexes;
      }, ...);
  };
}
void f2() { f1(); }
```

But perhaps this ^ is what you're referring to \/ when you mention "if you turn 
the capture of the inner lambda to a pack, e.g. `ts`"

> Aside: it crashes again if you turn the capture of the inner lambda to a 
> pack, e.g. `ts` - that is a different story and is being tracked in #18873, 
> which indicates that the capture of packs is still broken as of now.

But is it a different story? Whet I run the above example, with this patch 
applied, I get an identical stack trace:

```
...
#12 0x00005637d1f3b0f1 
clang::Sema::DiagnoseUnexpandedParameterPack(clang::Expr*, 
clang::Sema::UnexpandedParameterPackContext) 
#13 0x00005637d155c166 clang::Sema::ActOnFinishFullExpr(clang::Expr*, 
clang::SourceLocation, bool, bool, bool) 
#14 0x00005637d19cf202 
clang::Sema::ActOnExprStmt(clang::ActionResult<clang::Expr*, true>, bool) 
#15 0x00005637d1e352f8 clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, 
clang::TreeTransform<(anonymous namespace)::TemplateIn
stantiator>::StmtDiscardKind)
...
```





https://github.com/llvm/llvm-project/pull/86401
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to