[PATCH] D124012: [Clang] Fix references to captured variables in dependant context.

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 19 10:18:33 PDT 2022

aaron.ballman added inline comments.

Comment at: clang/lib/Sema/SemaLambda.cpp:539-546
 void Sema::buildLambdaScope(LambdaScopeInfo *LSI, CXXMethodDecl *CallOperator,
                             SourceRange IntroducerRange,
                             LambdaCaptureDefault CaptureDefault,
                             SourceLocation CaptureDefaultLoc,
-                            bool ExplicitParams, bool ExplicitResultType,
-                            bool Mutable) {
+                            bool ExplicitParams, bool Mutable) {
   buildLambdaScopeCaptures(LSI, CallOperator, IntroducerRange, CaptureDefault,
                            CaptureDefaultLoc, ExplicitParams, Mutable);
IIRC, we added `buildLambdaScope()` quite recently, so perhaps that function should go away now and callers just call `buildLambdaScopeCaptures()` directly?

Comment at: clang/lib/Sema/SemaLambda.cpp:1377
-  ContextRAII ManglingContext(*this, Class->getDeclContext());
+  Method->setInnerLocStart(LambdaLoc);
+  CompleteLambdaCallOperator(
Out of curiosity, why isn't this part of `CompleteLambdaCallOperator()` like all the other setters? (Should template instantiation also be setting this?)

Comment at: clang/lib/Sema/SemaLambda.cpp:1378-1383
+  CompleteLambdaCallOperator(
+      Method, Intro.Range.getBegin(), ParamInfo.getTrailingRequiresClause(),
+      MethodTyInfo, ParamInfo.getDeclSpec().getConstexprSpecifier(), Params,
+      ExplicitResultType);
+  ContextRAII ManglingContext(*this, Class->getDeclContext());
The previous logic was to enter a mangling context and then check params, but the new logic checks params outside of the mangling context. Is that intentional?

  rG LLVM Github Monorepo



More information about the cfe-commits mailing list