================
@@ -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

Reply via email to