================
@@ -4006,6 +4007,37 @@ class TreeTransform {
                                       NumExpansions);
   }
 
+  void RebuildLambdaExprImpl(SourceLocation StartLoc, SourceLocation EndLoc,
+                             LambdaScopeInfo *LSI) {}
+
+  ExprResult RebuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
+                               LambdaScopeInfo *LSI) {
+    CXXRecordDecl *Class = LSI->Lambda;
+    CXXMethodDecl *CallOperator = LSI->CallOperator;
+    CallOperator->setLexicalDeclContext(Class);
+    Decl *TemplateOrNonTemplateCallOperatorDecl =
+        CallOperator->getDescribedFunctionTemplate()
+            ? CallOperator->getDescribedFunctionTemplate()
+            : cast<Decl>(CallOperator);
+    // FIXME: Is this really the best choice? Keeping the lexical decl context
+    // set as CurContext seems more faithful to the source.
+    TemplateOrNonTemplateCallOperatorDecl->setLexicalDeclContext(Class);
----------------
zyn0217 wrote:

I copied these lines from `BuildLambdaExpr()` because the default argument 
instantiation needs the function decl context to be set to get a correct name 
mangling.

The code is not organized perfectly. However, I didn't devise another approach 
for propagating the flag after the instantiation.

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

Reply via email to