================
@@ -16304,11 +16308,13 @@
TreeTransform<Derived>::TransformLambdaExpr(LambdaExpr *E) {
// (A ClassTemplateSpecializationDecl is always a dependent context.)
while (DC->isRequiresExprBody() || isa<CXXExpansionStmtDecl>(DC))
DC = DC->getParent();
- if ((getSema().isUnevaluatedContext() ||
- getSema().isConstantEvaluatedContext()) &&
- !(dyn_cast_or_null<CXXRecordDecl>(DC->getParent()) &&
- cast<CXXRecordDecl>(DC->getParent())->isGenericLambda()) &&
- (DC->isFileContext() || !DC->getParent()->isDependentContext()))
+ if (getDerived().IsLambdaAlwaysDependent())
+ DependencyKind = CXXRecordDecl::LDK_AlwaysDependent;
----------------
zyn0217 wrote:
This is very wrong: so we stop crashing because we would never build a correct
CallExpr to the lambda object, and for sure this will also prevent semantic
analysis for those expressions forever!
And in fact the underlying problem is never the dependency one, it's a depth
mismatching issue as in
https://github.com/llvm/llvm-project/issues/176405#issuecomment-3888447293.
That is, our template deduction stopped working for this case, and that's why
we don't have a correct instantiated parameter list even we have enough
template arguments.
https://github.com/llvm/llvm-project/pull/222541
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits