xref: /freebsd/contrib/llvm-project/clang/lib/Sema/SemaLambda.cpp (revision 5036d9652a5701d00e9e40ea942c278e9f77d33d)
1 //===--- SemaLambda.cpp - Semantic Analysis for C++11 Lambdas -------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //  This file implements semantic analysis for C++ lambda expressions.
10 //
11 //===----------------------------------------------------------------------===//
12 #include "clang/Sema/SemaLambda.h"
13 #include "TypeLocBuilder.h"
14 #include "clang/AST/ASTLambda.h"
15 #include "clang/AST/CXXInheritance.h"
16 #include "clang/AST/ExprCXX.h"
17 #include "clang/Basic/TargetInfo.h"
18 #include "clang/Sema/DeclSpec.h"
19 #include "clang/Sema/Initialization.h"
20 #include "clang/Sema/Lookup.h"
21 #include "clang/Sema/Scope.h"
22 #include "clang/Sema/ScopeInfo.h"
23 #include "clang/Sema/SemaCUDA.h"
24 #include "clang/Sema/SemaInternal.h"
25 #include "clang/Sema/SemaOpenMP.h"
26 #include "clang/Sema/Template.h"
27 #include "llvm/ADT/STLExtras.h"
28 #include <optional>
29 using namespace clang;
30 using namespace sema;
31 
32 /// Examines the FunctionScopeInfo stack to determine the nearest
33 /// enclosing lambda (to the current lambda) that is 'capture-ready' for
34 /// the variable referenced in the current lambda (i.e. \p VarToCapture).
35 /// If successful, returns the index into Sema's FunctionScopeInfo stack
36 /// of the capture-ready lambda's LambdaScopeInfo.
37 ///
38 /// Climbs down the stack of lambdas (deepest nested lambda - i.e. current
39 /// lambda - is on top) to determine the index of the nearest enclosing/outer
40 /// lambda that is ready to capture the \p VarToCapture being referenced in
41 /// the current lambda.
42 /// As we climb down the stack, we want the index of the first such lambda -
43 /// that is the lambda with the highest index that is 'capture-ready'.
44 ///
45 /// A lambda 'L' is capture-ready for 'V' (var or this) if:
46 ///  - its enclosing context is non-dependent
47 ///  - and if the chain of lambdas between L and the lambda in which
48 ///    V is potentially used (i.e. the lambda at the top of the scope info
49 ///    stack), can all capture or have already captured V.
50 /// If \p VarToCapture is 'null' then we are trying to capture 'this'.
51 ///
52 /// Note that a lambda that is deemed 'capture-ready' still needs to be checked
53 /// for whether it is 'capture-capable' (see
54 /// getStackIndexOfNearestEnclosingCaptureCapableLambda), before it can truly
55 /// capture.
56 ///
57 /// \param FunctionScopes - Sema's stack of nested FunctionScopeInfo's (which a
58 ///  LambdaScopeInfo inherits from).  The current/deepest/innermost lambda
59 ///  is at the top of the stack and has the highest index.
60 /// \param VarToCapture - the variable to capture.  If NULL, capture 'this'.
61 ///
62 /// \returns An std::optional<unsigned> Index that if evaluates to 'true'
63 /// contains the index (into Sema's FunctionScopeInfo stack) of the innermost
64 /// lambda which is capture-ready.  If the return value evaluates to 'false'
65 /// then no lambda is capture-ready for \p VarToCapture.
66 
67 static inline std::optional<unsigned>
68 getStackIndexOfNearestEnclosingCaptureReadyLambda(
69     ArrayRef<const clang::sema::FunctionScopeInfo *> FunctionScopes,
70     ValueDecl *VarToCapture) {
71   // Label failure to capture.
72   const std::optional<unsigned> NoLambdaIsCaptureReady;
73 
74   // Ignore all inner captured regions.
75   unsigned CurScopeIndex = FunctionScopes.size() - 1;
76   while (CurScopeIndex > 0 && isa<clang::sema::CapturedRegionScopeInfo>(
77                                   FunctionScopes[CurScopeIndex]))
78     --CurScopeIndex;
79   assert(
80       isa<clang::sema::LambdaScopeInfo>(FunctionScopes[CurScopeIndex]) &&
81       "The function on the top of sema's function-info stack must be a lambda");
82 
83   // If VarToCapture is null, we are attempting to capture 'this'.
84   const bool IsCapturingThis = !VarToCapture;
85   const bool IsCapturingVariable = !IsCapturingThis;
86 
87   // Start with the current lambda at the top of the stack (highest index).
88   DeclContext *EnclosingDC =
89       cast<sema::LambdaScopeInfo>(FunctionScopes[CurScopeIndex])->CallOperator;
90 
91   do {
92     const clang::sema::LambdaScopeInfo *LSI =
93         cast<sema::LambdaScopeInfo>(FunctionScopes[CurScopeIndex]);
94     // IF we have climbed down to an intervening enclosing lambda that contains
95     // the variable declaration - it obviously can/must not capture the
96     // variable.
97     // Since its enclosing DC is dependent, all the lambdas between it and the
98     // innermost nested lambda are dependent (otherwise we wouldn't have
99     // arrived here) - so we don't yet have a lambda that can capture the
100     // variable.
101     if (IsCapturingVariable &&
102         VarToCapture->getDeclContext()->Equals(EnclosingDC))
103       return NoLambdaIsCaptureReady;
104 
105     // For an enclosing lambda to be capture ready for an entity, all
106     // intervening lambda's have to be able to capture that entity. If even
107     // one of the intervening lambda's is not capable of capturing the entity
108     // then no enclosing lambda can ever capture that entity.
109     // For e.g.
110     // const int x = 10;
111     // [=](auto a) {    #1
112     //   [](auto b) {   #2 <-- an intervening lambda that can never capture 'x'
113     //    [=](auto c) { #3
114     //       f(x, c);  <-- can not lead to x's speculative capture by #1 or #2
115     //    }; }; };
116     // If they do not have a default implicit capture, check to see
117     // if the entity has already been explicitly captured.
118     // If even a single dependent enclosing lambda lacks the capability
119     // to ever capture this variable, there is no further enclosing
120     // non-dependent lambda that can capture this variable.
121     if (LSI->ImpCaptureStyle == sema::LambdaScopeInfo::ImpCap_None) {
122       if (IsCapturingVariable && !LSI->isCaptured(VarToCapture))
123         return NoLambdaIsCaptureReady;
124       if (IsCapturingThis && !LSI->isCXXThisCaptured())
125         return NoLambdaIsCaptureReady;
126     }
127     EnclosingDC = getLambdaAwareParentOfDeclContext(EnclosingDC);
128 
129     assert(CurScopeIndex);
130     --CurScopeIndex;
131   } while (!EnclosingDC->isTranslationUnit() &&
132            EnclosingDC->isDependentContext() &&
133            isLambdaCallOperator(EnclosingDC));
134 
135   assert(CurScopeIndex < (FunctionScopes.size() - 1));
136   // If the enclosingDC is not dependent, then the immediately nested lambda
137   // (one index above) is capture-ready.
138   if (!EnclosingDC->isDependentContext())
139     return CurScopeIndex + 1;
140   return NoLambdaIsCaptureReady;
141 }
142 
143 /// Examines the FunctionScopeInfo stack to determine the nearest
144 /// enclosing lambda (to the current lambda) that is 'capture-capable' for
145 /// the variable referenced in the current lambda (i.e. \p VarToCapture).
146 /// If successful, returns the index into Sema's FunctionScopeInfo stack
147 /// of the capture-capable lambda's LambdaScopeInfo.
148 ///
149 /// Given the current stack of lambdas being processed by Sema and
150 /// the variable of interest, to identify the nearest enclosing lambda (to the
151 /// current lambda at the top of the stack) that can truly capture
152 /// a variable, it has to have the following two properties:
153 ///  a) 'capture-ready' - be the innermost lambda that is 'capture-ready':
154 ///     - climb down the stack (i.e. starting from the innermost and examining
155 ///       each outer lambda step by step) checking if each enclosing
156 ///       lambda can either implicitly or explicitly capture the variable.
157 ///       Record the first such lambda that is enclosed in a non-dependent
158 ///       context. If no such lambda currently exists return failure.
159 ///  b) 'capture-capable' - make sure the 'capture-ready' lambda can truly
160 ///  capture the variable by checking all its enclosing lambdas:
161 ///     - check if all outer lambdas enclosing the 'capture-ready' lambda
162 ///       identified above in 'a' can also capture the variable (this is done
163 ///       via tryCaptureVariable for variables and CheckCXXThisCapture for
164 ///       'this' by passing in the index of the Lambda identified in step 'a')
165 ///
166 /// \param FunctionScopes - Sema's stack of nested FunctionScopeInfo's (which a
167 /// LambdaScopeInfo inherits from).  The current/deepest/innermost lambda
168 /// is at the top of the stack.
169 ///
170 /// \param VarToCapture - the variable to capture.  If NULL, capture 'this'.
171 ///
172 ///
173 /// \returns An std::optional<unsigned> Index that if evaluates to 'true'
174 /// contains the index (into Sema's FunctionScopeInfo stack) of the innermost
175 /// lambda which is capture-capable.  If the return value evaluates to 'false'
176 /// then no lambda is capture-capable for \p VarToCapture.
177 
178 std::optional<unsigned>
179 clang::getStackIndexOfNearestEnclosingCaptureCapableLambda(
180     ArrayRef<const sema::FunctionScopeInfo *> FunctionScopes,
181     ValueDecl *VarToCapture, Sema &S) {
182 
183   const std::optional<unsigned> NoLambdaIsCaptureCapable;
184 
185   const std::optional<unsigned> OptionalStackIndex =
186       getStackIndexOfNearestEnclosingCaptureReadyLambda(FunctionScopes,
187                                                         VarToCapture);
188   if (!OptionalStackIndex)
189     return NoLambdaIsCaptureCapable;
190 
191   const unsigned IndexOfCaptureReadyLambda = *OptionalStackIndex;
192   assert(((IndexOfCaptureReadyLambda != (FunctionScopes.size() - 1)) ||
193           S.getCurGenericLambda()) &&
194          "The capture ready lambda for a potential capture can only be the "
195          "current lambda if it is a generic lambda");
196 
197   const sema::LambdaScopeInfo *const CaptureReadyLambdaLSI =
198       cast<sema::LambdaScopeInfo>(FunctionScopes[IndexOfCaptureReadyLambda]);
199 
200   // If VarToCapture is null, we are attempting to capture 'this'
201   const bool IsCapturingThis = !VarToCapture;
202   const bool IsCapturingVariable = !IsCapturingThis;
203 
204   if (IsCapturingVariable) {
205     // Check if the capture-ready lambda can truly capture the variable, by
206     // checking whether all enclosing lambdas of the capture-ready lambda allow
207     // the capture - i.e. make sure it is capture-capable.
208     QualType CaptureType, DeclRefType;
209     const bool CanCaptureVariable =
210         !S.tryCaptureVariable(VarToCapture,
211                               /*ExprVarIsUsedInLoc*/ SourceLocation(),
212                               clang::Sema::TryCapture_Implicit,
213                               /*EllipsisLoc*/ SourceLocation(),
214                               /*BuildAndDiagnose*/ false, CaptureType,
215                               DeclRefType, &IndexOfCaptureReadyLambda);
216     if (!CanCaptureVariable)
217       return NoLambdaIsCaptureCapable;
218   } else {
219     // Check if the capture-ready lambda can truly capture 'this' by checking
220     // whether all enclosing lambdas of the capture-ready lambda can capture
221     // 'this'.
222     const bool CanCaptureThis =
223         !S.CheckCXXThisCapture(
224              CaptureReadyLambdaLSI->PotentialThisCaptureLocation,
225              /*Explicit*/ false, /*BuildAndDiagnose*/ false,
226              &IndexOfCaptureReadyLambda);
227     if (!CanCaptureThis)
228       return NoLambdaIsCaptureCapable;
229   }
230   return IndexOfCaptureReadyLambda;
231 }
232 
233 static inline TemplateParameterList *
234 getGenericLambdaTemplateParameterList(LambdaScopeInfo *LSI, Sema &SemaRef) {
235   if (!LSI->GLTemplateParameterList && !LSI->TemplateParams.empty()) {
236     LSI->GLTemplateParameterList = TemplateParameterList::Create(
237         SemaRef.Context,
238         /*Template kw loc*/ SourceLocation(),
239         /*L angle loc*/ LSI->ExplicitTemplateParamsRange.getBegin(),
240         LSI->TemplateParams,
241         /*R angle loc*/LSI->ExplicitTemplateParamsRange.getEnd(),
242         LSI->RequiresClause.get());
243   }
244   return LSI->GLTemplateParameterList;
245 }
246 
247 CXXRecordDecl *
248 Sema::createLambdaClosureType(SourceRange IntroducerRange, TypeSourceInfo *Info,
249                               unsigned LambdaDependencyKind,
250                               LambdaCaptureDefault CaptureDefault) {
251   DeclContext *DC = CurContext;
252   while (!(DC->isFunctionOrMethod() || DC->isRecord() || DC->isFileContext()))
253     DC = DC->getParent();
254 
255   bool IsGenericLambda =
256       Info && getGenericLambdaTemplateParameterList(getCurLambda(), *this);
257   // Start constructing the lambda class.
258   CXXRecordDecl *Class = CXXRecordDecl::CreateLambda(
259       Context, DC, Info, IntroducerRange.getBegin(), LambdaDependencyKind,
260       IsGenericLambda, CaptureDefault);
261   DC->addDecl(Class);
262 
263   return Class;
264 }
265 
266 /// Determine whether the given context is or is enclosed in an inline
267 /// function.
268 static bool isInInlineFunction(const DeclContext *DC) {
269   while (!DC->isFileContext()) {
270     if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(DC))
271       if (FD->isInlined())
272         return true;
273 
274     DC = DC->getLexicalParent();
275   }
276 
277   return false;
278 }
279 
280 std::tuple<MangleNumberingContext *, Decl *>
281 Sema::getCurrentMangleNumberContext(const DeclContext *DC) {
282   // Compute the context for allocating mangling numbers in the current
283   // expression, if the ABI requires them.
284   Decl *ManglingContextDecl = ExprEvalContexts.back().ManglingContextDecl;
285 
286   enum ContextKind {
287     Normal,
288     DefaultArgument,
289     DataMember,
290     InlineVariable,
291     TemplatedVariable,
292     Concept
293   } Kind = Normal;
294 
295   bool IsInNonspecializedTemplate =
296       inTemplateInstantiation() || CurContext->isDependentContext();
297 
298   // Default arguments of member function parameters that appear in a class
299   // definition, as well as the initializers of data members, receive special
300   // treatment. Identify them.
301   if (ManglingContextDecl) {
302     if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(ManglingContextDecl)) {
303       if (const DeclContext *LexicalDC
304           = Param->getDeclContext()->getLexicalParent())
305         if (LexicalDC->isRecord())
306           Kind = DefaultArgument;
307     } else if (VarDecl *Var = dyn_cast<VarDecl>(ManglingContextDecl)) {
308       if (Var->getMostRecentDecl()->isInline())
309         Kind = InlineVariable;
310       else if (Var->getDeclContext()->isRecord() && IsInNonspecializedTemplate)
311         Kind = TemplatedVariable;
312       else if (Var->getDescribedVarTemplate())
313         Kind = TemplatedVariable;
314       else if (auto *VTS = dyn_cast<VarTemplateSpecializationDecl>(Var)) {
315         if (!VTS->isExplicitSpecialization())
316           Kind = TemplatedVariable;
317       }
318     } else if (isa<FieldDecl>(ManglingContextDecl)) {
319       Kind = DataMember;
320     } else if (isa<ImplicitConceptSpecializationDecl>(ManglingContextDecl)) {
321       Kind = Concept;
322     }
323   }
324 
325   // Itanium ABI [5.1.7]:
326   //   In the following contexts [...] the one-definition rule requires closure
327   //   types in different translation units to "correspond":
328   switch (Kind) {
329   case Normal: {
330     //  -- the bodies of inline or templated functions
331     if ((IsInNonspecializedTemplate &&
332          !(ManglingContextDecl && isa<ParmVarDecl>(ManglingContextDecl))) ||
333         isInInlineFunction(CurContext)) {
334       while (auto *CD = dyn_cast<CapturedDecl>(DC))
335         DC = CD->getParent();
336       return std::make_tuple(&Context.getManglingNumberContext(DC), nullptr);
337     }
338 
339     return std::make_tuple(nullptr, nullptr);
340   }
341 
342   case Concept:
343     // Concept definitions aren't code generated and thus aren't mangled,
344     // however the ManglingContextDecl is important for the purposes of
345     // re-forming the template argument list of the lambda for constraint
346     // evaluation.
347   case DataMember:
348     //  -- default member initializers
349   case DefaultArgument:
350     //  -- default arguments appearing in class definitions
351   case InlineVariable:
352   case TemplatedVariable:
353     //  -- the initializers of inline or templated variables
354     return std::make_tuple(
355         &Context.getManglingNumberContext(ASTContext::NeedExtraManglingDecl,
356                                           ManglingContextDecl),
357         ManglingContextDecl);
358   }
359 
360   llvm_unreachable("unexpected context");
361 }
362 
363 static QualType
364 buildTypeForLambdaCallOperator(Sema &S, clang::CXXRecordDecl *Class,
365                                TemplateParameterList *TemplateParams,
366                                TypeSourceInfo *MethodTypeInfo) {
367   assert(MethodTypeInfo && "expected a non null type");
368 
369   QualType MethodType = MethodTypeInfo->getType();
370   // If a lambda appears in a dependent context or is a generic lambda (has
371   // template parameters) and has an 'auto' return type, deduce it to a
372   // dependent type.
373   if (Class->isDependentContext() || TemplateParams) {
374     const FunctionProtoType *FPT = MethodType->castAs<FunctionProtoType>();
375     QualType Result = FPT->getReturnType();
376     if (Result->isUndeducedType()) {
377       Result = S.SubstAutoTypeDependent(Result);
378       MethodType = S.Context.getFunctionType(Result, FPT->getParamTypes(),
379                                              FPT->getExtProtoInfo());
380     }
381   }
382   return MethodType;
383 }
384 
385 // [C++2b] [expr.prim.lambda.closure] p4
386 //  Given a lambda with a lambda-capture, the type of the explicit object
387 //  parameter, if any, of the lambda's function call operator (possibly
388 //  instantiated from a function call operator template) shall be either:
389 //  - the closure type,
390 //  - class type publicly and unambiguously derived from the closure type, or
391 //  - a reference to a possibly cv-qualified such type.
392 bool Sema::DiagnoseInvalidExplicitObjectParameterInLambda(
393     CXXMethodDecl *Method, SourceLocation CallLoc) {
394   if (!isLambdaCallWithExplicitObjectParameter(Method))
395     return false;
396   CXXRecordDecl *RD = Method->getParent();
397   if (Method->getType()->isDependentType())
398     return false;
399   if (RD->isCapturelessLambda())
400     return false;
401 
402   ParmVarDecl *Param = Method->getParamDecl(0);
403   QualType ExplicitObjectParameterType = Param->getType()
404                                              .getNonReferenceType()
405                                              .getUnqualifiedType()
406                                              .getDesugaredType(getASTContext());
407   QualType LambdaType = getASTContext().getRecordType(RD);
408   if (LambdaType == ExplicitObjectParameterType)
409     return false;
410 
411   // Don't check the same instantiation twice.
412   //
413   // If this call operator is ill-formed, there is no point in issuing
414   // a diagnostic every time it is called because the problem is in the
415   // definition of the derived type, not at the call site.
416   //
417   // FIXME: Move this check to where we instantiate the method? This should
418   // be possible, but the naive approach of just marking the method as invalid
419   // leads to us emitting more diagnostics than we should have to for this case
420   // (1 error here *and* 1 error about there being no matching overload at the
421   // call site). It might be possible to avoid that by also checking if there
422   // is an empty cast path for the method stored in the context (signalling that
423   // we've already diagnosed it) and then just not building the call, but that
424   // doesn't really seem any simpler than diagnosing it at the call site...
425   if (auto It = Context.LambdaCastPaths.find(Method);
426       It != Context.LambdaCastPaths.end())
427     return It->second.empty();
428 
429   CXXCastPath &Path = Context.LambdaCastPaths[Method];
430   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
431                      /*DetectVirtual=*/false);
432   if (!IsDerivedFrom(RD->getLocation(), ExplicitObjectParameterType, LambdaType,
433                      Paths)) {
434     Diag(Param->getLocation(), diag::err_invalid_explicit_object_type_in_lambda)
435         << ExplicitObjectParameterType;
436     return true;
437   }
438 
439   if (Paths.isAmbiguous(LambdaType->getCanonicalTypeUnqualified())) {
440     std::string PathsDisplay = getAmbiguousPathsDisplayString(Paths);
441     Diag(CallLoc, diag::err_explicit_object_lambda_ambiguous_base)
442         << LambdaType << PathsDisplay;
443     return true;
444   }
445 
446   if (CheckBaseClassAccess(CallLoc, LambdaType, ExplicitObjectParameterType,
447                            Paths.front(),
448                            diag::err_explicit_object_lambda_inaccessible_base))
449     return true;
450 
451   BuildBasePathArray(Paths, Path);
452   return false;
453 }
454 
455 void Sema::handleLambdaNumbering(
456     CXXRecordDecl *Class, CXXMethodDecl *Method,
457     std::optional<CXXRecordDecl::LambdaNumbering> NumberingOverride) {
458   if (NumberingOverride) {
459     Class->setLambdaNumbering(*NumberingOverride);
460     return;
461   }
462 
463   ContextRAII ManglingContext(*this, Class->getDeclContext());
464 
465   auto getMangleNumberingContext =
466       [this](CXXRecordDecl *Class,
467              Decl *ManglingContextDecl) -> MangleNumberingContext * {
468     // Get mangle numbering context if there's any extra decl context.
469     if (ManglingContextDecl)
470       return &Context.getManglingNumberContext(
471           ASTContext::NeedExtraManglingDecl, ManglingContextDecl);
472     // Otherwise, from that lambda's decl context.
473     auto DC = Class->getDeclContext();
474     while (auto *CD = dyn_cast<CapturedDecl>(DC))
475       DC = CD->getParent();
476     return &Context.getManglingNumberContext(DC);
477   };
478 
479   CXXRecordDecl::LambdaNumbering Numbering;
480   MangleNumberingContext *MCtx;
481   std::tie(MCtx, Numbering.ContextDecl) =
482       getCurrentMangleNumberContext(Class->getDeclContext());
483   if (!MCtx && (getLangOpts().CUDA || getLangOpts().SYCLIsDevice ||
484                 getLangOpts().SYCLIsHost)) {
485     // Force lambda numbering in CUDA/HIP as we need to name lambdas following
486     // ODR. Both device- and host-compilation need to have a consistent naming
487     // on kernel functions. As lambdas are potential part of these `__global__`
488     // function names, they needs numbering following ODR.
489     // Also force for SYCL, since we need this for the
490     // __builtin_sycl_unique_stable_name implementation, which depends on lambda
491     // mangling.
492     MCtx = getMangleNumberingContext(Class, Numbering.ContextDecl);
493     assert(MCtx && "Retrieving mangle numbering context failed!");
494     Numbering.HasKnownInternalLinkage = true;
495   }
496   if (MCtx) {
497     Numbering.IndexInContext = MCtx->getNextLambdaIndex();
498     Numbering.ManglingNumber = MCtx->getManglingNumber(Method);
499     Numbering.DeviceManglingNumber = MCtx->getDeviceManglingNumber(Method);
500     Class->setLambdaNumbering(Numbering);
501 
502     if (auto *Source =
503             dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
504       Source->AssignedLambdaNumbering(Class);
505   }
506 }
507 
508 static void buildLambdaScopeReturnType(Sema &S, LambdaScopeInfo *LSI,
509                                        CXXMethodDecl *CallOperator,
510                                        bool ExplicitResultType) {
511   if (ExplicitResultType) {
512     LSI->HasImplicitReturnType = false;
513     LSI->ReturnType = CallOperator->getReturnType();
514     if (!LSI->ReturnType->isDependentType() && !LSI->ReturnType->isVoidType())
515       S.RequireCompleteType(CallOperator->getBeginLoc(), LSI->ReturnType,
516                             diag::err_lambda_incomplete_result);
517   } else {
518     LSI->HasImplicitReturnType = true;
519   }
520 }
521 
522 void Sema::buildLambdaScope(LambdaScopeInfo *LSI, CXXMethodDecl *CallOperator,
523                             SourceRange IntroducerRange,
524                             LambdaCaptureDefault CaptureDefault,
525                             SourceLocation CaptureDefaultLoc,
526                             bool ExplicitParams, bool Mutable) {
527   LSI->CallOperator = CallOperator;
528   CXXRecordDecl *LambdaClass = CallOperator->getParent();
529   LSI->Lambda = LambdaClass;
530   if (CaptureDefault == LCD_ByCopy)
531     LSI->ImpCaptureStyle = LambdaScopeInfo::ImpCap_LambdaByval;
532   else if (CaptureDefault == LCD_ByRef)
533     LSI->ImpCaptureStyle = LambdaScopeInfo::ImpCap_LambdaByref;
534   LSI->CaptureDefaultLoc = CaptureDefaultLoc;
535   LSI->IntroducerRange = IntroducerRange;
536   LSI->ExplicitParams = ExplicitParams;
537   LSI->Mutable = Mutable;
538 }
539 
540 void Sema::finishLambdaExplicitCaptures(LambdaScopeInfo *LSI) {
541   LSI->finishedExplicitCaptures();
542 }
543 
544 void Sema::ActOnLambdaExplicitTemplateParameterList(
545     LambdaIntroducer &Intro, SourceLocation LAngleLoc,
546     ArrayRef<NamedDecl *> TParams, SourceLocation RAngleLoc,
547     ExprResult RequiresClause) {
548   LambdaScopeInfo *LSI = getCurLambda();
549   assert(LSI && "Expected a lambda scope");
550   assert(LSI->NumExplicitTemplateParams == 0 &&
551          "Already acted on explicit template parameters");
552   assert(LSI->TemplateParams.empty() &&
553          "Explicit template parameters should come "
554          "before invented (auto) ones");
555   assert(!TParams.empty() &&
556          "No template parameters to act on");
557   LSI->TemplateParams.append(TParams.begin(), TParams.end());
558   LSI->NumExplicitTemplateParams = TParams.size();
559   LSI->ExplicitTemplateParamsRange = {LAngleLoc, RAngleLoc};
560   LSI->RequiresClause = RequiresClause;
561 }
562 
563 /// If this expression is an enumerator-like expression of some type
564 /// T, return the type T; otherwise, return null.
565 ///
566 /// Pointer comparisons on the result here should always work because
567 /// it's derived from either the parent of an EnumConstantDecl
568 /// (i.e. the definition) or the declaration returned by
569 /// EnumType::getDecl() (i.e. the definition).
570 static EnumDecl *findEnumForBlockReturn(Expr *E) {
571   // An expression is an enumerator-like expression of type T if,
572   // ignoring parens and parens-like expressions:
573   E = E->IgnoreParens();
574 
575   //  - it is an enumerator whose enum type is T or
576   if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {
577     if (EnumConstantDecl *D
578           = dyn_cast<EnumConstantDecl>(DRE->getDecl())) {
579       return cast<EnumDecl>(D->getDeclContext());
580     }
581     return nullptr;
582   }
583 
584   //  - it is a comma expression whose RHS is an enumerator-like
585   //    expression of type T or
586   if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
587     if (BO->getOpcode() == BO_Comma)
588       return findEnumForBlockReturn(BO->getRHS());
589     return nullptr;
590   }
591 
592   //  - it is a statement-expression whose value expression is an
593   //    enumerator-like expression of type T or
594   if (StmtExpr *SE = dyn_cast<StmtExpr>(E)) {
595     if (Expr *last = dyn_cast_or_null<Expr>(SE->getSubStmt()->body_back()))
596       return findEnumForBlockReturn(last);
597     return nullptr;
598   }
599 
600   //   - it is a ternary conditional operator (not the GNU ?:
601   //     extension) whose second and third operands are
602   //     enumerator-like expressions of type T or
603   if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
604     if (EnumDecl *ED = findEnumForBlockReturn(CO->getTrueExpr()))
605       if (ED == findEnumForBlockReturn(CO->getFalseExpr()))
606         return ED;
607     return nullptr;
608   }
609 
610   // (implicitly:)
611   //   - it is an implicit integral conversion applied to an
612   //     enumerator-like expression of type T or
613   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
614     // We can sometimes see integral conversions in valid
615     // enumerator-like expressions.
616     if (ICE->getCastKind() == CK_IntegralCast)
617       return findEnumForBlockReturn(ICE->getSubExpr());
618 
619     // Otherwise, just rely on the type.
620   }
621 
622   //   - it is an expression of that formal enum type.
623   if (const EnumType *ET = E->getType()->getAs<EnumType>()) {
624     return ET->getDecl();
625   }
626 
627   // Otherwise, nope.
628   return nullptr;
629 }
630 
631 /// Attempt to find a type T for which the returned expression of the
632 /// given statement is an enumerator-like expression of that type.
633 static EnumDecl *findEnumForBlockReturn(ReturnStmt *ret) {
634   if (Expr *retValue = ret->getRetValue())
635     return findEnumForBlockReturn(retValue);
636   return nullptr;
637 }
638 
639 /// Attempt to find a common type T for which all of the returned
640 /// expressions in a block are enumerator-like expressions of that
641 /// type.
642 static EnumDecl *findCommonEnumForBlockReturns(ArrayRef<ReturnStmt*> returns) {
643   ArrayRef<ReturnStmt*>::iterator i = returns.begin(), e = returns.end();
644 
645   // Try to find one for the first return.
646   EnumDecl *ED = findEnumForBlockReturn(*i);
647   if (!ED) return nullptr;
648 
649   // Check that the rest of the returns have the same enum.
650   for (++i; i != e; ++i) {
651     if (findEnumForBlockReturn(*i) != ED)
652       return nullptr;
653   }
654 
655   // Never infer an anonymous enum type.
656   if (!ED->hasNameForLinkage()) return nullptr;
657 
658   return ED;
659 }
660 
661 /// Adjust the given return statements so that they formally return
662 /// the given type.  It should require, at most, an IntegralCast.
663 static void adjustBlockReturnsToEnum(Sema &S, ArrayRef<ReturnStmt*> returns,
664                                      QualType returnType) {
665   for (ArrayRef<ReturnStmt*>::iterator
666          i = returns.begin(), e = returns.end(); i != e; ++i) {
667     ReturnStmt *ret = *i;
668     Expr *retValue = ret->getRetValue();
669     if (S.Context.hasSameType(retValue->getType(), returnType))
670       continue;
671 
672     // Right now we only support integral fixup casts.
673     assert(returnType->isIntegralOrUnscopedEnumerationType());
674     assert(retValue->getType()->isIntegralOrUnscopedEnumerationType());
675 
676     ExprWithCleanups *cleanups = dyn_cast<ExprWithCleanups>(retValue);
677 
678     Expr *E = (cleanups ? cleanups->getSubExpr() : retValue);
679     E = ImplicitCastExpr::Create(S.Context, returnType, CK_IntegralCast, E,
680                                  /*base path*/ nullptr, VK_PRValue,
681                                  FPOptionsOverride());
682     if (cleanups) {
683       cleanups->setSubExpr(E);
684     } else {
685       ret->setRetValue(E);
686     }
687   }
688 }
689 
690 void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {
691   assert(CSI.HasImplicitReturnType);
692   // If it was ever a placeholder, it had to been deduced to DependentTy.
693   assert(CSI.ReturnType.isNull() || !CSI.ReturnType->isUndeducedType());
694   assert((!isa<LambdaScopeInfo>(CSI) || !getLangOpts().CPlusPlus14) &&
695          "lambda expressions use auto deduction in C++14 onwards");
696 
697   // C++ core issue 975:
698   //   If a lambda-expression does not include a trailing-return-type,
699   //   it is as if the trailing-return-type denotes the following type:
700   //     - if there are no return statements in the compound-statement,
701   //       or all return statements return either an expression of type
702   //       void or no expression or braced-init-list, the type void;
703   //     - otherwise, if all return statements return an expression
704   //       and the types of the returned expressions after
705   //       lvalue-to-rvalue conversion (4.1 [conv.lval]),
706   //       array-to-pointer conversion (4.2 [conv.array]), and
707   //       function-to-pointer conversion (4.3 [conv.func]) are the
708   //       same, that common type;
709   //     - otherwise, the program is ill-formed.
710   //
711   // C++ core issue 1048 additionally removes top-level cv-qualifiers
712   // from the types of returned expressions to match the C++14 auto
713   // deduction rules.
714   //
715   // In addition, in blocks in non-C++ modes, if all of the return
716   // statements are enumerator-like expressions of some type T, where
717   // T has a name for linkage, then we infer the return type of the
718   // block to be that type.
719 
720   // First case: no return statements, implicit void return type.
721   ASTContext &Ctx = getASTContext();
722   if (CSI.Returns.empty()) {
723     // It's possible there were simply no /valid/ return statements.
724     // In this case, the first one we found may have at least given us a type.
725     if (CSI.ReturnType.isNull())
726       CSI.ReturnType = Ctx.VoidTy;
727     return;
728   }
729 
730   // Second case: at least one return statement has dependent type.
731   // Delay type checking until instantiation.
732   assert(!CSI.ReturnType.isNull() && "We should have a tentative return type.");
733   if (CSI.ReturnType->isDependentType())
734     return;
735 
736   // Try to apply the enum-fuzz rule.
737   if (!getLangOpts().CPlusPlus) {
738     assert(isa<BlockScopeInfo>(CSI));
739     const EnumDecl *ED = findCommonEnumForBlockReturns(CSI.Returns);
740     if (ED) {
741       CSI.ReturnType = Context.getTypeDeclType(ED);
742       adjustBlockReturnsToEnum(*this, CSI.Returns, CSI.ReturnType);
743       return;
744     }
745   }
746 
747   // Third case: only one return statement. Don't bother doing extra work!
748   if (CSI.Returns.size() == 1)
749     return;
750 
751   // General case: many return statements.
752   // Check that they all have compatible return types.
753 
754   // We require the return types to strictly match here.
755   // Note that we've already done the required promotions as part of
756   // processing the return statement.
757   for (const ReturnStmt *RS : CSI.Returns) {
758     const Expr *RetE = RS->getRetValue();
759 
760     QualType ReturnType =
761         (RetE ? RetE->getType() : Context.VoidTy).getUnqualifiedType();
762     if (Context.getCanonicalFunctionResultType(ReturnType) ==
763           Context.getCanonicalFunctionResultType(CSI.ReturnType)) {
764       // Use the return type with the strictest possible nullability annotation.
765       auto RetTyNullability = ReturnType->getNullability();
766       auto BlockNullability = CSI.ReturnType->getNullability();
767       if (BlockNullability &&
768           (!RetTyNullability ||
769            hasWeakerNullability(*RetTyNullability, *BlockNullability)))
770         CSI.ReturnType = ReturnType;
771       continue;
772     }
773 
774     // FIXME: This is a poor diagnostic for ReturnStmts without expressions.
775     // TODO: It's possible that the *first* return is the divergent one.
776     Diag(RS->getBeginLoc(),
777          diag::err_typecheck_missing_return_type_incompatible)
778         << ReturnType << CSI.ReturnType << isa<LambdaScopeInfo>(CSI);
779     // Continue iterating so that we keep emitting diagnostics.
780   }
781 }
782 
783 QualType Sema::buildLambdaInitCaptureInitialization(
784     SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc,
785     std::optional<unsigned> NumExpansions, IdentifierInfo *Id,
786     bool IsDirectInit, Expr *&Init) {
787   // Create an 'auto' or 'auto&' TypeSourceInfo that we can use to
788   // deduce against.
789   QualType DeductType = Context.getAutoDeductType();
790   TypeLocBuilder TLB;
791   AutoTypeLoc TL = TLB.push<AutoTypeLoc>(DeductType);
792   TL.setNameLoc(Loc);
793   if (ByRef) {
794     DeductType = BuildReferenceType(DeductType, true, Loc, Id);
795     assert(!DeductType.isNull() && "can't build reference to auto");
796     TLB.push<ReferenceTypeLoc>(DeductType).setSigilLoc(Loc);
797   }
798   if (EllipsisLoc.isValid()) {
799     if (Init->containsUnexpandedParameterPack()) {
800       Diag(EllipsisLoc, getLangOpts().CPlusPlus20
801                             ? diag::warn_cxx17_compat_init_capture_pack
802                             : diag::ext_init_capture_pack);
803       DeductType = Context.getPackExpansionType(DeductType, NumExpansions,
804                                                 /*ExpectPackInType=*/false);
805       TLB.push<PackExpansionTypeLoc>(DeductType).setEllipsisLoc(EllipsisLoc);
806     } else {
807       // Just ignore the ellipsis for now and form a non-pack variable. We'll
808       // diagnose this later when we try to capture it.
809     }
810   }
811   TypeSourceInfo *TSI = TLB.getTypeSourceInfo(Context, DeductType);
812 
813   // Deduce the type of the init capture.
814   QualType DeducedType = deduceVarTypeFromInitializer(
815       /*VarDecl*/nullptr, DeclarationName(Id), DeductType, TSI,
816       SourceRange(Loc, Loc), IsDirectInit, Init);
817   if (DeducedType.isNull())
818     return QualType();
819 
820   // Are we a non-list direct initialization?
821   ParenListExpr *CXXDirectInit = dyn_cast<ParenListExpr>(Init);
822 
823   // Perform initialization analysis and ensure any implicit conversions
824   // (such as lvalue-to-rvalue) are enforced.
825   InitializedEntity Entity =
826       InitializedEntity::InitializeLambdaCapture(Id, DeducedType, Loc);
827   InitializationKind Kind =
828       IsDirectInit
829           ? (CXXDirectInit ? InitializationKind::CreateDirect(
830                                  Loc, Init->getBeginLoc(), Init->getEndLoc())
831                            : InitializationKind::CreateDirectList(Loc))
832           : InitializationKind::CreateCopy(Loc, Init->getBeginLoc());
833 
834   MultiExprArg Args = Init;
835   if (CXXDirectInit)
836     Args =
837         MultiExprArg(CXXDirectInit->getExprs(), CXXDirectInit->getNumExprs());
838   QualType DclT;
839   InitializationSequence InitSeq(*this, Entity, Kind, Args);
840   ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Args, &DclT);
841 
842   if (Result.isInvalid())
843     return QualType();
844 
845   Init = Result.getAs<Expr>();
846   return DeducedType;
847 }
848 
849 VarDecl *Sema::createLambdaInitCaptureVarDecl(
850     SourceLocation Loc, QualType InitCaptureType, SourceLocation EllipsisLoc,
851     IdentifierInfo *Id, unsigned InitStyle, Expr *Init, DeclContext *DeclCtx) {
852   // FIXME: Retain the TypeSourceInfo from buildLambdaInitCaptureInitialization
853   // rather than reconstructing it here.
854   TypeSourceInfo *TSI = Context.getTrivialTypeSourceInfo(InitCaptureType, Loc);
855   if (auto PETL = TSI->getTypeLoc().getAs<PackExpansionTypeLoc>())
856     PETL.setEllipsisLoc(EllipsisLoc);
857 
858   // Create a dummy variable representing the init-capture. This is not actually
859   // used as a variable, and only exists as a way to name and refer to the
860   // init-capture.
861   // FIXME: Pass in separate source locations for '&' and identifier.
862   VarDecl *NewVD = VarDecl::Create(Context, DeclCtx, Loc, Loc, Id,
863                                    InitCaptureType, TSI, SC_Auto);
864   NewVD->setInitCapture(true);
865   NewVD->setReferenced(true);
866   // FIXME: Pass in a VarDecl::InitializationStyle.
867   NewVD->setInitStyle(static_cast<VarDecl::InitializationStyle>(InitStyle));
868   NewVD->markUsed(Context);
869   NewVD->setInit(Init);
870   if (NewVD->isParameterPack())
871     getCurLambda()->LocalPacks.push_back(NewVD);
872   return NewVD;
873 }
874 
875 void Sema::addInitCapture(LambdaScopeInfo *LSI, VarDecl *Var, bool ByRef) {
876   assert(Var->isInitCapture() && "init capture flag should be set");
877   LSI->addCapture(Var, /*isBlock=*/false, ByRef,
878                   /*isNested=*/false, Var->getLocation(), SourceLocation(),
879                   Var->getType(), /*Invalid=*/false);
880 }
881 
882 // Unlike getCurLambda, getCurrentLambdaScopeUnsafe doesn't
883 // check that the current lambda is in a consistent or fully constructed state.
884 static LambdaScopeInfo *getCurrentLambdaScopeUnsafe(Sema &S) {
885   assert(!S.FunctionScopes.empty());
886   return cast<LambdaScopeInfo>(S.FunctionScopes[S.FunctionScopes.size() - 1]);
887 }
888 
889 static TypeSourceInfo *
890 getDummyLambdaType(Sema &S, SourceLocation Loc = SourceLocation()) {
891   // C++11 [expr.prim.lambda]p4:
892   //   If a lambda-expression does not include a lambda-declarator, it is as
893   //   if the lambda-declarator were ().
894   FunctionProtoType::ExtProtoInfo EPI(S.Context.getDefaultCallingConvention(
895       /*IsVariadic=*/false, /*IsCXXMethod=*/true));
896   EPI.HasTrailingReturn = true;
897   EPI.TypeQuals.addConst();
898   LangAS AS = S.getDefaultCXXMethodAddrSpace();
899   if (AS != LangAS::Default)
900     EPI.TypeQuals.addAddressSpace(AS);
901 
902   // C++1y [expr.prim.lambda]:
903   //   The lambda return type is 'auto', which is replaced by the
904   //   trailing-return type if provided and/or deduced from 'return'
905   //   statements
906   // We don't do this before C++1y, because we don't support deduced return
907   // types there.
908   QualType DefaultTypeForNoTrailingReturn = S.getLangOpts().CPlusPlus14
909                                                 ? S.Context.getAutoDeductType()
910                                                 : S.Context.DependentTy;
911   QualType MethodTy = S.Context.getFunctionType(DefaultTypeForNoTrailingReturn,
912                                                 std::nullopt, EPI);
913   return S.Context.getTrivialTypeSourceInfo(MethodTy, Loc);
914 }
915 
916 static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro,
917                                      Declarator &ParamInfo, Scope *CurScope,
918                                      SourceLocation Loc,
919                                      bool &ExplicitResultType) {
920 
921   ExplicitResultType = false;
922 
923   assert(
924       (ParamInfo.getDeclSpec().getStorageClassSpec() ==
925            DeclSpec::SCS_unspecified ||
926        ParamInfo.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static) &&
927       "Unexpected storage specifier");
928   bool IsLambdaStatic =
929       ParamInfo.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static;
930 
931   TypeSourceInfo *MethodTyInfo;
932 
933   if (ParamInfo.getNumTypeObjects() == 0) {
934     MethodTyInfo = getDummyLambdaType(S, Loc);
935   } else {
936     // Check explicit parameters
937     S.CheckExplicitObjectLambda(ParamInfo);
938 
939     DeclaratorChunk::FunctionTypeInfo &FTI = ParamInfo.getFunctionTypeInfo();
940 
941     bool HasExplicitObjectParameter =
942         ParamInfo.isExplicitObjectMemberFunction();
943 
944     ExplicitResultType = FTI.hasTrailingReturnType();
945     if (!FTI.hasMutableQualifier() && !IsLambdaStatic &&
946         !HasExplicitObjectParameter)
947       FTI.getOrCreateMethodQualifiers().SetTypeQual(DeclSpec::TQ_const, Loc);
948 
949     if (ExplicitResultType && S.getLangOpts().HLSL) {
950       QualType RetTy = FTI.getTrailingReturnType().get();
951       if (!RetTy.isNull()) {
952         // HLSL does not support specifying an address space on a lambda return
953         // type.
954         LangAS AddressSpace = RetTy.getAddressSpace();
955         if (AddressSpace != LangAS::Default)
956           S.Diag(FTI.getTrailingReturnTypeLoc(),
957                  diag::err_return_value_with_address_space);
958       }
959     }
960 
961     MethodTyInfo = S.GetTypeForDeclarator(ParamInfo);
962     assert(MethodTyInfo && "no type from lambda-declarator");
963 
964     // Check for unexpanded parameter packs in the method type.
965     if (MethodTyInfo->getType()->containsUnexpandedParameterPack())
966       S.DiagnoseUnexpandedParameterPack(Intro.Range.getBegin(), MethodTyInfo,
967                                         S.UPPC_DeclarationType);
968   }
969   return MethodTyInfo;
970 }
971 
972 CXXMethodDecl *Sema::CreateLambdaCallOperator(SourceRange IntroducerRange,
973                                               CXXRecordDecl *Class) {
974 
975   // C++20 [expr.prim.lambda.closure]p3:
976   // The closure type for a lambda-expression has a public inline function
977   // call operator (for a non-generic lambda) or function call operator
978   // template (for a generic lambda) whose parameters and return type are
979   // described by the lambda-expression's parameter-declaration-clause
980   // and trailing-return-type respectively.
981   DeclarationName MethodName =
982       Context.DeclarationNames.getCXXOperatorName(OO_Call);
983   DeclarationNameLoc MethodNameLoc =
984       DeclarationNameLoc::makeCXXOperatorNameLoc(IntroducerRange.getBegin());
985   CXXMethodDecl *Method = CXXMethodDecl::Create(
986       Context, Class, SourceLocation(),
987       DeclarationNameInfo(MethodName, IntroducerRange.getBegin(),
988                           MethodNameLoc),
989       QualType(), /*Tinfo=*/nullptr, SC_None,
990       getCurFPFeatures().isFPConstrained(),
991       /*isInline=*/true, ConstexprSpecKind::Unspecified, SourceLocation(),
992       /*TrailingRequiresClause=*/nullptr);
993   Method->setAccess(AS_public);
994   return Method;
995 }
996 
997 void Sema::AddTemplateParametersToLambdaCallOperator(
998     CXXMethodDecl *CallOperator, CXXRecordDecl *Class,
999     TemplateParameterList *TemplateParams) {
1000   assert(TemplateParams && "no template parameters");
1001   FunctionTemplateDecl *TemplateMethod = FunctionTemplateDecl::Create(
1002       Context, Class, CallOperator->getLocation(), CallOperator->getDeclName(),
1003       TemplateParams, CallOperator);
1004   TemplateMethod->setAccess(AS_public);
1005   CallOperator->setDescribedFunctionTemplate(TemplateMethod);
1006 }
1007 
1008 void Sema::CompleteLambdaCallOperator(
1009     CXXMethodDecl *Method, SourceLocation LambdaLoc,
1010     SourceLocation CallOperatorLoc, Expr *TrailingRequiresClause,
1011     TypeSourceInfo *MethodTyInfo, ConstexprSpecKind ConstexprKind,
1012     StorageClass SC, ArrayRef<ParmVarDecl *> Params,
1013     bool HasExplicitResultType) {
1014 
1015   LambdaScopeInfo *LSI = getCurrentLambdaScopeUnsafe(*this);
1016 
1017   if (TrailingRequiresClause)
1018     Method->setTrailingRequiresClause(TrailingRequiresClause);
1019 
1020   TemplateParameterList *TemplateParams =
1021       getGenericLambdaTemplateParameterList(LSI, *this);
1022 
1023   DeclContext *DC = Method->getLexicalDeclContext();
1024   Method->setLexicalDeclContext(LSI->Lambda);
1025   if (TemplateParams) {
1026     FunctionTemplateDecl *TemplateMethod =
1027         Method->getDescribedFunctionTemplate();
1028     assert(TemplateMethod &&
1029            "AddTemplateParametersToLambdaCallOperator should have been called");
1030 
1031     LSI->Lambda->addDecl(TemplateMethod);
1032     TemplateMethod->setLexicalDeclContext(DC);
1033   } else {
1034     LSI->Lambda->addDecl(Method);
1035   }
1036   LSI->Lambda->setLambdaIsGeneric(TemplateParams);
1037   LSI->Lambda->setLambdaTypeInfo(MethodTyInfo);
1038 
1039   Method->setLexicalDeclContext(DC);
1040   Method->setLocation(LambdaLoc);
1041   Method->setInnerLocStart(CallOperatorLoc);
1042   Method->setTypeSourceInfo(MethodTyInfo);
1043   Method->setType(buildTypeForLambdaCallOperator(*this, LSI->Lambda,
1044                                                  TemplateParams, MethodTyInfo));
1045   Method->setConstexprKind(ConstexprKind);
1046   Method->setStorageClass(SC);
1047   if (!Params.empty()) {
1048     CheckParmsForFunctionDef(Params, /*CheckParameterNames=*/false);
1049     Method->setParams(Params);
1050     for (auto P : Method->parameters()) {
1051       assert(P && "null in a parameter list");
1052       P->setOwningFunction(Method);
1053     }
1054   }
1055 
1056   buildLambdaScopeReturnType(*this, LSI, Method, HasExplicitResultType);
1057 }
1058 
1059 void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro,
1060                                                 Scope *CurrentScope) {
1061 
1062   LambdaScopeInfo *LSI = getCurLambda();
1063   assert(LSI && "LambdaScopeInfo should be on stack!");
1064 
1065   if (Intro.Default == LCD_ByCopy)
1066     LSI->ImpCaptureStyle = LambdaScopeInfo::ImpCap_LambdaByval;
1067   else if (Intro.Default == LCD_ByRef)
1068     LSI->ImpCaptureStyle = LambdaScopeInfo::ImpCap_LambdaByref;
1069   LSI->CaptureDefaultLoc = Intro.DefaultLoc;
1070   LSI->IntroducerRange = Intro.Range;
1071   LSI->AfterParameterList = false;
1072 
1073   assert(LSI->NumExplicitTemplateParams == 0);
1074 
1075   // Determine if we're within a context where we know that the lambda will
1076   // be dependent, because there are template parameters in scope.
1077   CXXRecordDecl::LambdaDependencyKind LambdaDependencyKind =
1078       CXXRecordDecl::LDK_Unknown;
1079   if (CurScope->getTemplateParamParent() != nullptr) {
1080     LambdaDependencyKind = CXXRecordDecl::LDK_AlwaysDependent;
1081   } else if (Scope *P = CurScope->getParent()) {
1082     // Given a lambda defined inside a requires expression,
1083     //
1084     // struct S {
1085     //   S(auto var) requires requires { [&] -> decltype(var) { }; }
1086     //   {}
1087     // };
1088     //
1089     // The parameter var is not injected into the function Decl at the point of
1090     // parsing lambda. In such scenarios, perceiving it as dependent could
1091     // result in the constraint being evaluated, which matches what GCC does.
1092     while (P->getEntity() && P->getEntity()->isRequiresExprBody())
1093       P = P->getParent();
1094     if (P->isFunctionDeclarationScope() &&
1095         llvm::any_of(P->decls(), [](Decl *D) {
1096           return isa<ParmVarDecl>(D) &&
1097                  cast<ParmVarDecl>(D)->getType()->isTemplateTypeParmType();
1098         }))
1099       LambdaDependencyKind = CXXRecordDecl::LDK_AlwaysDependent;
1100   }
1101 
1102   CXXRecordDecl *Class = createLambdaClosureType(
1103       Intro.Range, /*Info=*/nullptr, LambdaDependencyKind, Intro.Default);
1104   LSI->Lambda = Class;
1105 
1106   CXXMethodDecl *Method = CreateLambdaCallOperator(Intro.Range, Class);
1107   LSI->CallOperator = Method;
1108   Method->setLexicalDeclContext(CurContext);
1109 
1110   PushDeclContext(CurScope, Method);
1111 
1112   bool ContainsUnexpandedParameterPack = false;
1113 
1114   // Distinct capture names, for diagnostics.
1115   llvm::DenseMap<IdentifierInfo *, ValueDecl *> CaptureNames;
1116 
1117   // Handle explicit captures.
1118   SourceLocation PrevCaptureLoc =
1119       Intro.Default == LCD_None ? Intro.Range.getBegin() : Intro.DefaultLoc;
1120   for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E;
1121        PrevCaptureLoc = C->Loc, ++C) {
1122     if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {
1123       if (C->Kind == LCK_StarThis)
1124         Diag(C->Loc, !getLangOpts().CPlusPlus17
1125                          ? diag::ext_star_this_lambda_capture_cxx17
1126                          : diag::warn_cxx14_compat_star_this_lambda_capture);
1127 
1128       // C++11 [expr.prim.lambda]p8:
1129       //   An identifier or this shall not appear more than once in a
1130       //   lambda-capture.
1131       if (LSI->isCXXThisCaptured()) {
1132         Diag(C->Loc, diag::err_capture_more_than_once)
1133             << "'this'" << SourceRange(LSI->getCXXThisCapture().getLocation())
1134             << FixItHint::CreateRemoval(
1135                    SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));
1136         continue;
1137       }
1138 
1139       // C++20 [expr.prim.lambda]p8:
1140       //  If a lambda-capture includes a capture-default that is =,
1141       //  each simple-capture of that lambda-capture shall be of the form
1142       //  "&identifier", "this", or "* this". [ Note: The form [&,this] is
1143       //  redundant but accepted for compatibility with ISO C++14. --end note ]
1144       if (Intro.Default == LCD_ByCopy && C->Kind != LCK_StarThis)
1145         Diag(C->Loc, !getLangOpts().CPlusPlus20
1146                          ? diag::ext_equals_this_lambda_capture_cxx20
1147                          : diag::warn_cxx17_compat_equals_this_lambda_capture);
1148 
1149       // C++11 [expr.prim.lambda]p12:
1150       //   If this is captured by a local lambda expression, its nearest
1151       //   enclosing function shall be a non-static member function.
1152       QualType ThisCaptureType = getCurrentThisType();
1153       if (ThisCaptureType.isNull()) {
1154         Diag(C->Loc, diag::err_this_capture) << true;
1155         continue;
1156       }
1157 
1158       CheckCXXThisCapture(C->Loc, /*Explicit=*/true, /*BuildAndDiagnose*/ true,
1159                           /*FunctionScopeIndexToStopAtPtr*/ nullptr,
1160                           C->Kind == LCK_StarThis);
1161       if (!LSI->Captures.empty())
1162         LSI->ExplicitCaptureRanges[LSI->Captures.size() - 1] = C->ExplicitRange;
1163       continue;
1164     }
1165 
1166     assert(C->Id && "missing identifier for capture");
1167 
1168     if (C->Init.isInvalid())
1169       continue;
1170 
1171     ValueDecl *Var = nullptr;
1172     if (C->Init.isUsable()) {
1173       Diag(C->Loc, getLangOpts().CPlusPlus14
1174                        ? diag::warn_cxx11_compat_init_capture
1175                        : diag::ext_init_capture);
1176 
1177       // If the initializer expression is usable, but the InitCaptureType
1178       // is not, then an error has occurred - so ignore the capture for now.
1179       // for e.g., [n{0}] { }; <-- if no <initializer_list> is included.
1180       // FIXME: we should create the init capture variable and mark it invalid
1181       // in this case.
1182       if (C->InitCaptureType.get().isNull())
1183         continue;
1184 
1185       if (C->Init.get()->containsUnexpandedParameterPack() &&
1186           !C->InitCaptureType.get()->getAs<PackExpansionType>())
1187         DiagnoseUnexpandedParameterPack(C->Init.get(), UPPC_Initializer);
1188 
1189       unsigned InitStyle;
1190       switch (C->InitKind) {
1191       case LambdaCaptureInitKind::NoInit:
1192         llvm_unreachable("not an init-capture?");
1193       case LambdaCaptureInitKind::CopyInit:
1194         InitStyle = VarDecl::CInit;
1195         break;
1196       case LambdaCaptureInitKind::DirectInit:
1197         InitStyle = VarDecl::CallInit;
1198         break;
1199       case LambdaCaptureInitKind::ListInit:
1200         InitStyle = VarDecl::ListInit;
1201         break;
1202       }
1203       Var = createLambdaInitCaptureVarDecl(C->Loc, C->InitCaptureType.get(),
1204                                            C->EllipsisLoc, C->Id, InitStyle,
1205                                            C->Init.get(), Method);
1206       assert(Var && "createLambdaInitCaptureVarDecl returned a null VarDecl?");
1207       if (auto *V = dyn_cast<VarDecl>(Var))
1208         CheckShadow(CurrentScope, V);
1209       PushOnScopeChains(Var, CurrentScope, false);
1210     } else {
1211       assert(C->InitKind == LambdaCaptureInitKind::NoInit &&
1212              "init capture has valid but null init?");
1213 
1214       // C++11 [expr.prim.lambda]p8:
1215       //   If a lambda-capture includes a capture-default that is &, the
1216       //   identifiers in the lambda-capture shall not be preceded by &.
1217       //   If a lambda-capture includes a capture-default that is =, [...]
1218       //   each identifier it contains shall be preceded by &.
1219       if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {
1220         Diag(C->Loc, diag::err_reference_capture_with_reference_default)
1221             << FixItHint::CreateRemoval(
1222                 SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));
1223         continue;
1224       } else if (C->Kind == LCK_ByCopy && Intro.Default == LCD_ByCopy) {
1225         Diag(C->Loc, diag::err_copy_capture_with_copy_default)
1226             << FixItHint::CreateRemoval(
1227                 SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));
1228         continue;
1229       }
1230 
1231       // C++11 [expr.prim.lambda]p10:
1232       //   The identifiers in a capture-list are looked up using the usual
1233       //   rules for unqualified name lookup (3.4.1)
1234       DeclarationNameInfo Name(C->Id, C->Loc);
1235       LookupResult R(*this, Name, LookupOrdinaryName);
1236       LookupName(R, CurScope);
1237       if (R.isAmbiguous())
1238         continue;
1239       if (R.empty()) {
1240         // FIXME: Disable corrections that would add qualification?
1241         CXXScopeSpec ScopeSpec;
1242         DeclFilterCCC<VarDecl> Validator{};
1243         if (DiagnoseEmptyLookup(CurScope, ScopeSpec, R, Validator))
1244           continue;
1245       }
1246 
1247       if (auto *BD = R.getAsSingle<BindingDecl>())
1248         Var = BD;
1249       else if (R.getAsSingle<FieldDecl>()) {
1250         Diag(C->Loc, diag::err_capture_class_member_does_not_name_variable)
1251             << C->Id;
1252         continue;
1253       } else
1254         Var = R.getAsSingle<VarDecl>();
1255       if (Var && DiagnoseUseOfDecl(Var, C->Loc))
1256         continue;
1257     }
1258 
1259     // C++11 [expr.prim.lambda]p10:
1260     //   [...] each such lookup shall find a variable with automatic storage
1261     //   duration declared in the reaching scope of the local lambda expression.
1262     // Note that the 'reaching scope' check happens in tryCaptureVariable().
1263     if (!Var) {
1264       Diag(C->Loc, diag::err_capture_does_not_name_variable) << C->Id;
1265       continue;
1266     }
1267 
1268     // C++11 [expr.prim.lambda]p8:
1269     //   An identifier or this shall not appear more than once in a
1270     //   lambda-capture.
1271     if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var});
1272         !Inserted) {
1273       if (C->InitKind == LambdaCaptureInitKind::NoInit &&
1274           !Var->isInitCapture()) {
1275         Diag(C->Loc, diag::err_capture_more_than_once)
1276             << C->Id << It->second->getBeginLoc()
1277             << FixItHint::CreateRemoval(
1278                    SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));
1279         Var->setInvalidDecl();
1280       } else if (Var && Var->isPlaceholderVar(getLangOpts())) {
1281         DiagPlaceholderVariableDefinition(C->Loc);
1282       } else {
1283         // Previous capture captured something different (one or both was
1284         // an init-capture): no fixit.
1285         Diag(C->Loc, diag::err_capture_more_than_once) << C->Id;
1286         continue;
1287       }
1288     }
1289 
1290     // Ignore invalid decls; they'll just confuse the code later.
1291     if (Var->isInvalidDecl())
1292       continue;
1293 
1294     VarDecl *Underlying = Var->getPotentiallyDecomposedVarDecl();
1295 
1296     if (!Underlying->hasLocalStorage()) {
1297       Diag(C->Loc, diag::err_capture_non_automatic_variable) << C->Id;
1298       Diag(Var->getLocation(), diag::note_previous_decl) << C->Id;
1299       continue;
1300     }
1301 
1302     // C++11 [expr.prim.lambda]p23:
1303     //   A capture followed by an ellipsis is a pack expansion (14.5.3).
1304     SourceLocation EllipsisLoc;
1305     if (C->EllipsisLoc.isValid()) {
1306       if (Var->isParameterPack()) {
1307         EllipsisLoc = C->EllipsisLoc;
1308       } else {
1309         Diag(C->EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
1310             << (C->Init.isUsable() ? C->Init.get()->getSourceRange()
1311                                    : SourceRange(C->Loc));
1312 
1313         // Just ignore the ellipsis.
1314       }
1315     } else if (Var->isParameterPack()) {
1316       ContainsUnexpandedParameterPack = true;
1317     }
1318 
1319     if (C->Init.isUsable()) {
1320       addInitCapture(LSI, cast<VarDecl>(Var), C->Kind == LCK_ByRef);
1321     } else {
1322       TryCaptureKind Kind = C->Kind == LCK_ByRef ? TryCapture_ExplicitByRef
1323                                                  : TryCapture_ExplicitByVal;
1324       tryCaptureVariable(Var, C->Loc, Kind, EllipsisLoc);
1325     }
1326     if (!LSI->Captures.empty())
1327       LSI->ExplicitCaptureRanges[LSI->Captures.size() - 1] = C->ExplicitRange;
1328   }
1329   finishLambdaExplicitCaptures(LSI);
1330   LSI->ContainsUnexpandedParameterPack |= ContainsUnexpandedParameterPack;
1331   PopDeclContext();
1332 }
1333 
1334 void Sema::ActOnLambdaClosureQualifiers(LambdaIntroducer &Intro,
1335                                         SourceLocation MutableLoc) {
1336 
1337   LambdaScopeInfo *LSI = getCurrentLambdaScopeUnsafe(*this);
1338   LSI->Mutable = MutableLoc.isValid();
1339   ContextRAII Context(*this, LSI->CallOperator, /*NewThisContext*/ false);
1340 
1341   // C++11 [expr.prim.lambda]p9:
1342   //   A lambda-expression whose smallest enclosing scope is a block scope is a
1343   //   local lambda expression; any other lambda expression shall not have a
1344   //   capture-default or simple-capture in its lambda-introducer.
1345   //
1346   // For simple-captures, this is covered by the check below that any named
1347   // entity is a variable that can be captured.
1348   //
1349   // For DR1632, we also allow a capture-default in any context where we can
1350   // odr-use 'this' (in particular, in a default initializer for a non-static
1351   // data member).
1352   if (Intro.Default != LCD_None &&
1353       !LSI->Lambda->getParent()->isFunctionOrMethod() &&
1354       (getCurrentThisType().isNull() ||
1355        CheckCXXThisCapture(SourceLocation(), /*Explicit=*/true,
1356                            /*BuildAndDiagnose=*/false)))
1357     Diag(Intro.DefaultLoc, diag::err_capture_default_non_local);
1358 }
1359 
1360 void Sema::ActOnLambdaClosureParameters(
1361     Scope *LambdaScope, MutableArrayRef<DeclaratorChunk::ParamInfo> Params) {
1362   LambdaScopeInfo *LSI = getCurrentLambdaScopeUnsafe(*this);
1363   PushDeclContext(LambdaScope, LSI->CallOperator);
1364 
1365   for (const DeclaratorChunk::ParamInfo &P : Params) {
1366     auto *Param = cast<ParmVarDecl>(P.Param);
1367     Param->setOwningFunction(LSI->CallOperator);
1368     if (Param->getIdentifier())
1369       PushOnScopeChains(Param, LambdaScope, false);
1370   }
1371 
1372   // After the parameter list, we may parse a noexcept/requires/trailing return
1373   // type which need to know whether the call operator constiture a dependent
1374   // context, so we need to setup the FunctionTemplateDecl of generic lambdas
1375   // now.
1376   TemplateParameterList *TemplateParams =
1377       getGenericLambdaTemplateParameterList(LSI, *this);
1378   if (TemplateParams) {
1379     AddTemplateParametersToLambdaCallOperator(LSI->CallOperator, LSI->Lambda,
1380                                               TemplateParams);
1381     LSI->Lambda->setLambdaIsGeneric(true);
1382     LSI->ContainsUnexpandedParameterPack |=
1383         TemplateParams->containsUnexpandedParameterPack();
1384   }
1385   LSI->AfterParameterList = true;
1386 }
1387 
1388 void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro,
1389                                         Declarator &ParamInfo,
1390                                         const DeclSpec &DS) {
1391 
1392   LambdaScopeInfo *LSI = getCurrentLambdaScopeUnsafe(*this);
1393   LSI->CallOperator->setConstexprKind(DS.getConstexprSpecifier());
1394 
1395   SmallVector<ParmVarDecl *, 8> Params;
1396   bool ExplicitResultType;
1397 
1398   SourceLocation TypeLoc, CallOperatorLoc;
1399   if (ParamInfo.getNumTypeObjects() == 0) {
1400     CallOperatorLoc = TypeLoc = Intro.Range.getEnd();
1401   } else {
1402     unsigned Index;
1403     ParamInfo.isFunctionDeclarator(Index);
1404     const auto &Object = ParamInfo.getTypeObject(Index);
1405     TypeLoc =
1406         Object.Loc.isValid() ? Object.Loc : ParamInfo.getSourceRange().getEnd();
1407     CallOperatorLoc = ParamInfo.getSourceRange().getEnd();
1408   }
1409 
1410   CXXRecordDecl *Class = LSI->Lambda;
1411   CXXMethodDecl *Method = LSI->CallOperator;
1412 
1413   TypeSourceInfo *MethodTyInfo = getLambdaType(
1414       *this, Intro, ParamInfo, getCurScope(), TypeLoc, ExplicitResultType);
1415 
1416   LSI->ExplicitParams = ParamInfo.getNumTypeObjects() != 0;
1417 
1418   if (ParamInfo.isFunctionDeclarator() != 0 &&
1419       !FTIHasSingleVoidParameter(ParamInfo.getFunctionTypeInfo())) {
1420     const auto &FTI = ParamInfo.getFunctionTypeInfo();
1421     Params.reserve(Params.size());
1422     for (unsigned I = 0; I < FTI.NumParams; ++I) {
1423       auto *Param = cast<ParmVarDecl>(FTI.Params[I].Param);
1424       Param->setScopeInfo(0, Params.size());
1425       Params.push_back(Param);
1426     }
1427   }
1428 
1429   bool IsLambdaStatic =
1430       ParamInfo.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static;
1431 
1432   CompleteLambdaCallOperator(
1433       Method, Intro.Range.getBegin(), CallOperatorLoc,
1434       ParamInfo.getTrailingRequiresClause(), MethodTyInfo,
1435       ParamInfo.getDeclSpec().getConstexprSpecifier(),
1436       IsLambdaStatic ? SC_Static : SC_None, Params, ExplicitResultType);
1437 
1438   CheckCXXDefaultArguments(Method);
1439 
1440   // This represents the function body for the lambda function, check if we
1441   // have to apply optnone due to a pragma.
1442   AddRangeBasedOptnone(Method);
1443 
1444   // code_seg attribute on lambda apply to the method.
1445   if (Attr *A = getImplicitCodeSegOrSectionAttrForFunction(
1446           Method, /*IsDefinition=*/true))
1447     Method->addAttr(A);
1448 
1449   // Attributes on the lambda apply to the method.
1450   ProcessDeclAttributes(CurScope, Method, ParamInfo);
1451 
1452   // CUDA lambdas get implicit host and device attributes.
1453   if (getLangOpts().CUDA)
1454     CUDA().SetLambdaAttrs(Method);
1455 
1456   // OpenMP lambdas might get assumumption attributes.
1457   if (LangOpts.OpenMP)
1458     OpenMP().ActOnFinishedFunctionDefinitionInOpenMPAssumeScope(Method);
1459 
1460   handleLambdaNumbering(Class, Method);
1461 
1462   for (auto &&C : LSI->Captures) {
1463     if (!C.isVariableCapture())
1464       continue;
1465     ValueDecl *Var = C.getVariable();
1466     if (Var && Var->isInitCapture()) {
1467       PushOnScopeChains(Var, CurScope, false);
1468     }
1469   }
1470 
1471   auto CheckRedefinition = [&](ParmVarDecl *Param) {
1472     for (const auto &Capture : Intro.Captures) {
1473       if (Capture.Id == Param->getIdentifier()) {
1474         Diag(Param->getLocation(), diag::err_parameter_shadow_capture);
1475         Diag(Capture.Loc, diag::note_var_explicitly_captured_here)
1476             << Capture.Id << true;
1477         return false;
1478       }
1479     }
1480     return true;
1481   };
1482 
1483   for (ParmVarDecl *P : Params) {
1484     if (!P->getIdentifier())
1485       continue;
1486     if (CheckRedefinition(P))
1487       CheckShadow(CurScope, P);
1488     PushOnScopeChains(P, CurScope);
1489   }
1490 
1491   // C++23 [expr.prim.lambda.capture]p5:
1492   // If an identifier in a capture appears as the declarator-id of a parameter
1493   // of the lambda-declarator's parameter-declaration-clause or as the name of a
1494   // template parameter of the lambda-expression's template-parameter-list, the
1495   // program is ill-formed.
1496   TemplateParameterList *TemplateParams =
1497       getGenericLambdaTemplateParameterList(LSI, *this);
1498   if (TemplateParams) {
1499     for (const auto *TP : TemplateParams->asArray()) {
1500       if (!TP->getIdentifier())
1501         continue;
1502       for (const auto &Capture : Intro.Captures) {
1503         if (Capture.Id == TP->getIdentifier()) {
1504           Diag(Capture.Loc, diag::err_template_param_shadow) << Capture.Id;
1505           NoteTemplateParameterLocation(*TP);
1506         }
1507       }
1508     }
1509   }
1510 
1511   // C++20: dcl.decl.general p4:
1512   // The optional requires-clause ([temp.pre]) in an init-declarator or
1513   // member-declarator shall be present only if the declarator declares a
1514   // templated function ([dcl.fct]).
1515   if (Expr *TRC = Method->getTrailingRequiresClause()) {
1516     // [temp.pre]/8:
1517     // An entity is templated if it is
1518     // - a template,
1519     // - an entity defined ([basic.def]) or created ([class.temporary]) in a
1520     // templated entity,
1521     // - a member of a templated entity,
1522     // - an enumerator for an enumeration that is a templated entity, or
1523     // - the closure type of a lambda-expression ([expr.prim.lambda.closure])
1524     // appearing in the declaration of a templated entity. [Note 6: A local
1525     // class, a local or block variable, or a friend function defined in a
1526     // templated entity is a templated entity.  — end note]
1527     //
1528     // A templated function is a function template or a function that is
1529     // templated. A templated class is a class template or a class that is
1530     // templated. A templated variable is a variable template or a variable
1531     // that is templated.
1532 
1533     // Note: we only have to check if this is defined in a template entity, OR
1534     // if we are a template, since the rest don't apply. The requires clause
1535     // applies to the call operator, which we already know is a member function,
1536     // AND defined.
1537     if (!Method->getDescribedFunctionTemplate() && !Method->isTemplated()) {
1538       Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);
1539     }
1540   }
1541 
1542   // Enter a new evaluation context to insulate the lambda from any
1543   // cleanups from the enclosing full-expression.
1544   PushExpressionEvaluationContext(
1545       LSI->CallOperator->isConsteval()
1546           ? ExpressionEvaluationContext::ImmediateFunctionContext
1547           : ExpressionEvaluationContext::PotentiallyEvaluated);
1548   ExprEvalContexts.back().InImmediateFunctionContext =
1549       LSI->CallOperator->isConsteval();
1550   ExprEvalContexts.back().InImmediateEscalatingFunctionContext =
1551       getLangOpts().CPlusPlus20 && LSI->CallOperator->isImmediateEscalating();
1552 }
1553 
1554 void Sema::ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope,
1555                             bool IsInstantiation) {
1556   LambdaScopeInfo *LSI = cast<LambdaScopeInfo>(FunctionScopes.back());
1557 
1558   // Leave the expression-evaluation context.
1559   DiscardCleanupsInEvaluationContext();
1560   PopExpressionEvaluationContext();
1561 
1562   // Leave the context of the lambda.
1563   if (!IsInstantiation)
1564     PopDeclContext();
1565 
1566   // Finalize the lambda.
1567   CXXRecordDecl *Class = LSI->Lambda;
1568   Class->setInvalidDecl();
1569   SmallVector<Decl*, 4> Fields(Class->fields());
1570   ActOnFields(nullptr, Class->getLocation(), Class, Fields, SourceLocation(),
1571               SourceLocation(), ParsedAttributesView());
1572   CheckCompletedCXXClass(nullptr, Class);
1573 
1574   PopFunctionScopeInfo();
1575 }
1576 
1577 template <typename Func>
1578 static void repeatForLambdaConversionFunctionCallingConvs(
1579     Sema &S, const FunctionProtoType &CallOpProto, Func F) {
1580   CallingConv DefaultFree = S.Context.getDefaultCallingConvention(
1581       CallOpProto.isVariadic(), /*IsCXXMethod=*/false);
1582   CallingConv DefaultMember = S.Context.getDefaultCallingConvention(
1583       CallOpProto.isVariadic(), /*IsCXXMethod=*/true);
1584   CallingConv CallOpCC = CallOpProto.getCallConv();
1585 
1586   /// Implement emitting a version of the operator for many of the calling
1587   /// conventions for MSVC, as described here:
1588   /// https://devblogs.microsoft.com/oldnewthing/20150220-00/?p=44623.
1589   /// Experimentally, we determined that cdecl, stdcall, fastcall, and
1590   /// vectorcall are generated by MSVC when it is supported by the target.
1591   /// Additionally, we are ensuring that the default-free/default-member and
1592   /// call-operator calling convention are generated as well.
1593   /// NOTE: We intentionally generate a 'thiscall' on Win32 implicitly from the
1594   /// 'member default', despite MSVC not doing so. We do this in order to ensure
1595   /// that someone who intentionally places 'thiscall' on the lambda call
1596   /// operator will still get that overload, since we don't have the a way of
1597   /// detecting the attribute by the time we get here.
1598   if (S.getLangOpts().MSVCCompat) {
1599     CallingConv Convs[] = {
1600         CC_C,        CC_X86StdCall, CC_X86FastCall, CC_X86VectorCall,
1601         DefaultFree, DefaultMember, CallOpCC};
1602     llvm::sort(Convs);
1603     llvm::iterator_range<CallingConv *> Range(
1604         std::begin(Convs), std::unique(std::begin(Convs), std::end(Convs)));
1605     const TargetInfo &TI = S.getASTContext().getTargetInfo();
1606 
1607     for (CallingConv C : Range) {
1608       if (TI.checkCallingConvention(C) == TargetInfo::CCCR_OK)
1609         F(C);
1610     }
1611     return;
1612   }
1613 
1614   if (CallOpCC == DefaultMember && DefaultMember != DefaultFree) {
1615     F(DefaultFree);
1616     F(DefaultMember);
1617   } else {
1618     F(CallOpCC);
1619   }
1620 }
1621 
1622 // Returns the 'standard' calling convention to be used for the lambda
1623 // conversion function, that is, the 'free' function calling convention unless
1624 // it is overridden by a non-default calling convention attribute.
1625 static CallingConv
1626 getLambdaConversionFunctionCallConv(Sema &S,
1627                                     const FunctionProtoType *CallOpProto) {
1628   CallingConv DefaultFree = S.Context.getDefaultCallingConvention(
1629       CallOpProto->isVariadic(), /*IsCXXMethod=*/false);
1630   CallingConv DefaultMember = S.Context.getDefaultCallingConvention(
1631       CallOpProto->isVariadic(), /*IsCXXMethod=*/true);
1632   CallingConv CallOpCC = CallOpProto->getCallConv();
1633 
1634   // If the call-operator hasn't been changed, return both the 'free' and
1635   // 'member' function calling convention.
1636   if (CallOpCC == DefaultMember && DefaultMember != DefaultFree)
1637     return DefaultFree;
1638   return CallOpCC;
1639 }
1640 
1641 QualType Sema::getLambdaConversionFunctionResultType(
1642     const FunctionProtoType *CallOpProto, CallingConv CC) {
1643   const FunctionProtoType::ExtProtoInfo CallOpExtInfo =
1644       CallOpProto->getExtProtoInfo();
1645   FunctionProtoType::ExtProtoInfo InvokerExtInfo = CallOpExtInfo;
1646   InvokerExtInfo.ExtInfo = InvokerExtInfo.ExtInfo.withCallingConv(CC);
1647   InvokerExtInfo.TypeQuals = Qualifiers();
1648   assert(InvokerExtInfo.RefQualifier == RQ_None &&
1649          "Lambda's call operator should not have a reference qualifier");
1650   return Context.getFunctionType(CallOpProto->getReturnType(),
1651                                  CallOpProto->getParamTypes(), InvokerExtInfo);
1652 }
1653 
1654 /// Add a lambda's conversion to function pointer, as described in
1655 /// C++11 [expr.prim.lambda]p6.
1656 static void addFunctionPointerConversion(Sema &S, SourceRange IntroducerRange,
1657                                          CXXRecordDecl *Class,
1658                                          CXXMethodDecl *CallOperator,
1659                                          QualType InvokerFunctionTy) {
1660   // This conversion is explicitly disabled if the lambda's function has
1661   // pass_object_size attributes on any of its parameters.
1662   auto HasPassObjectSizeAttr = [](const ParmVarDecl *P) {
1663     return P->hasAttr<PassObjectSizeAttr>();
1664   };
1665   if (llvm::any_of(CallOperator->parameters(), HasPassObjectSizeAttr))
1666     return;
1667 
1668   // Add the conversion to function pointer.
1669   QualType PtrToFunctionTy = S.Context.getPointerType(InvokerFunctionTy);
1670 
1671   // Create the type of the conversion function.
1672   FunctionProtoType::ExtProtoInfo ConvExtInfo(
1673       S.Context.getDefaultCallingConvention(
1674       /*IsVariadic=*/false, /*IsCXXMethod=*/true));
1675   // The conversion function is always const and noexcept.
1676   ConvExtInfo.TypeQuals = Qualifiers();
1677   ConvExtInfo.TypeQuals.addConst();
1678   ConvExtInfo.ExceptionSpec.Type = EST_BasicNoexcept;
1679   QualType ConvTy =
1680       S.Context.getFunctionType(PtrToFunctionTy, std::nullopt, ConvExtInfo);
1681 
1682   SourceLocation Loc = IntroducerRange.getBegin();
1683   DeclarationName ConversionName
1684     = S.Context.DeclarationNames.getCXXConversionFunctionName(
1685         S.Context.getCanonicalType(PtrToFunctionTy));
1686   // Construct a TypeSourceInfo for the conversion function, and wire
1687   // all the parameters appropriately for the FunctionProtoTypeLoc
1688   // so that everything works during transformation/instantiation of
1689   // generic lambdas.
1690   // The main reason for wiring up the parameters of the conversion
1691   // function with that of the call operator is so that constructs
1692   // like the following work:
1693   // auto L = [](auto b) {                <-- 1
1694   //   return [](auto a) -> decltype(a) { <-- 2
1695   //      return a;
1696   //   };
1697   // };
1698   // int (*fp)(int) = L(5);
1699   // Because the trailing return type can contain DeclRefExprs that refer
1700   // to the original call operator's variables, we hijack the call
1701   // operators ParmVarDecls below.
1702   TypeSourceInfo *ConvNamePtrToFunctionTSI =
1703       S.Context.getTrivialTypeSourceInfo(PtrToFunctionTy, Loc);
1704   DeclarationNameLoc ConvNameLoc =
1705       DeclarationNameLoc::makeNamedTypeLoc(ConvNamePtrToFunctionTSI);
1706 
1707   // The conversion function is a conversion to a pointer-to-function.
1708   TypeSourceInfo *ConvTSI = S.Context.getTrivialTypeSourceInfo(ConvTy, Loc);
1709   FunctionProtoTypeLoc ConvTL =
1710       ConvTSI->getTypeLoc().getAs<FunctionProtoTypeLoc>();
1711   // Get the result of the conversion function which is a pointer-to-function.
1712   PointerTypeLoc PtrToFunctionTL =
1713       ConvTL.getReturnLoc().getAs<PointerTypeLoc>();
1714   // Do the same for the TypeSourceInfo that is used to name the conversion
1715   // operator.
1716   PointerTypeLoc ConvNamePtrToFunctionTL =
1717       ConvNamePtrToFunctionTSI->getTypeLoc().getAs<PointerTypeLoc>();
1718 
1719   // Get the underlying function types that the conversion function will
1720   // be converting to (should match the type of the call operator).
1721   FunctionProtoTypeLoc CallOpConvTL =
1722       PtrToFunctionTL.getPointeeLoc().getAs<FunctionProtoTypeLoc>();
1723   FunctionProtoTypeLoc CallOpConvNameTL =
1724     ConvNamePtrToFunctionTL.getPointeeLoc().getAs<FunctionProtoTypeLoc>();
1725 
1726   // Wire up the FunctionProtoTypeLocs with the call operator's parameters.
1727   // These parameter's are essentially used to transform the name and
1728   // the type of the conversion operator.  By using the same parameters
1729   // as the call operator's we don't have to fix any back references that
1730   // the trailing return type of the call operator's uses (such as
1731   // decltype(some_type<decltype(a)>::type{} + decltype(a){}) etc.)
1732   // - we can simply use the return type of the call operator, and
1733   // everything should work.
1734   SmallVector<ParmVarDecl *, 4> InvokerParams;
1735   for (unsigned I = 0, N = CallOperator->getNumParams(); I != N; ++I) {
1736     ParmVarDecl *From = CallOperator->getParamDecl(I);
1737 
1738     InvokerParams.push_back(ParmVarDecl::Create(
1739         S.Context,
1740         // Temporarily add to the TU. This is set to the invoker below.
1741         S.Context.getTranslationUnitDecl(), From->getBeginLoc(),
1742         From->getLocation(), From->getIdentifier(), From->getType(),
1743         From->getTypeSourceInfo(), From->getStorageClass(),
1744         /*DefArg=*/nullptr));
1745     CallOpConvTL.setParam(I, From);
1746     CallOpConvNameTL.setParam(I, From);
1747   }
1748 
1749   CXXConversionDecl *Conversion = CXXConversionDecl::Create(
1750       S.Context, Class, Loc,
1751       DeclarationNameInfo(ConversionName, Loc, ConvNameLoc), ConvTy, ConvTSI,
1752       S.getCurFPFeatures().isFPConstrained(),
1753       /*isInline=*/true, ExplicitSpecifier(),
1754       S.getLangOpts().CPlusPlus17 ? ConstexprSpecKind::Constexpr
1755                                   : ConstexprSpecKind::Unspecified,
1756       CallOperator->getBody()->getEndLoc());
1757   Conversion->setAccess(AS_public);
1758   Conversion->setImplicit(true);
1759 
1760   // A non-generic lambda may still be a templated entity. We need to preserve
1761   // constraints when converting the lambda to a function pointer. See GH63181.
1762   if (Expr *Requires = CallOperator->getTrailingRequiresClause())
1763     Conversion->setTrailingRequiresClause(Requires);
1764 
1765   if (Class->isGenericLambda()) {
1766     // Create a template version of the conversion operator, using the template
1767     // parameter list of the function call operator.
1768     FunctionTemplateDecl *TemplateCallOperator =
1769             CallOperator->getDescribedFunctionTemplate();
1770     FunctionTemplateDecl *ConversionTemplate =
1771                   FunctionTemplateDecl::Create(S.Context, Class,
1772                                       Loc, ConversionName,
1773                                       TemplateCallOperator->getTemplateParameters(),
1774                                       Conversion);
1775     ConversionTemplate->setAccess(AS_public);
1776     ConversionTemplate->setImplicit(true);
1777     Conversion->setDescribedFunctionTemplate(ConversionTemplate);
1778     Class->addDecl(ConversionTemplate);
1779   } else
1780     Class->addDecl(Conversion);
1781 
1782   // If the lambda is not static, we need to add a static member
1783   // function that will be the result of the conversion with a
1784   // certain unique ID.
1785   // When it is static we just return the static call operator instead.
1786   if (CallOperator->isImplicitObjectMemberFunction()) {
1787     DeclarationName InvokerName =
1788         &S.Context.Idents.get(getLambdaStaticInvokerName());
1789     // FIXME: Instead of passing in the CallOperator->getTypeSourceInfo()
1790     // we should get a prebuilt TrivialTypeSourceInfo from Context
1791     // using FunctionTy & Loc and get its TypeLoc as a FunctionProtoTypeLoc
1792     // then rewire the parameters accordingly, by hoisting up the InvokeParams
1793     // loop below and then use its Params to set Invoke->setParams(...) below.
1794     // This would avoid the 'const' qualifier of the calloperator from
1795     // contaminating the type of the invoker, which is currently adjusted
1796     // in SemaTemplateDeduction.cpp:DeduceTemplateArguments.  Fixing the
1797     // trailing return type of the invoker would require a visitor to rebuild
1798     // the trailing return type and adjusting all back DeclRefExpr's to refer
1799     // to the new static invoker parameters - not the call operator's.
1800     CXXMethodDecl *Invoke = CXXMethodDecl::Create(
1801         S.Context, Class, Loc, DeclarationNameInfo(InvokerName, Loc),
1802         InvokerFunctionTy, CallOperator->getTypeSourceInfo(), SC_Static,
1803         S.getCurFPFeatures().isFPConstrained(),
1804         /*isInline=*/true, CallOperator->getConstexprKind(),
1805         CallOperator->getBody()->getEndLoc());
1806     for (unsigned I = 0, N = CallOperator->getNumParams(); I != N; ++I)
1807       InvokerParams[I]->setOwningFunction(Invoke);
1808     Invoke->setParams(InvokerParams);
1809     Invoke->setAccess(AS_private);
1810     Invoke->setImplicit(true);
1811     if (Class->isGenericLambda()) {
1812       FunctionTemplateDecl *TemplateCallOperator =
1813           CallOperator->getDescribedFunctionTemplate();
1814       FunctionTemplateDecl *StaticInvokerTemplate =
1815           FunctionTemplateDecl::Create(
1816               S.Context, Class, Loc, InvokerName,
1817               TemplateCallOperator->getTemplateParameters(), Invoke);
1818       StaticInvokerTemplate->setAccess(AS_private);
1819       StaticInvokerTemplate->setImplicit(true);
1820       Invoke->setDescribedFunctionTemplate(StaticInvokerTemplate);
1821       Class->addDecl(StaticInvokerTemplate);
1822     } else
1823       Class->addDecl(Invoke);
1824   }
1825 }
1826 
1827 /// Add a lambda's conversion to function pointers, as described in
1828 /// C++11 [expr.prim.lambda]p6. Note that in most cases, this should emit only a
1829 /// single pointer conversion. In the event that the default calling convention
1830 /// for free and member functions is different, it will emit both conventions.
1831 static void addFunctionPointerConversions(Sema &S, SourceRange IntroducerRange,
1832                                           CXXRecordDecl *Class,
1833                                           CXXMethodDecl *CallOperator) {
1834   const FunctionProtoType *CallOpProto =
1835       CallOperator->getType()->castAs<FunctionProtoType>();
1836 
1837   repeatForLambdaConversionFunctionCallingConvs(
1838       S, *CallOpProto, [&](CallingConv CC) {
1839         QualType InvokerFunctionTy =
1840             S.getLambdaConversionFunctionResultType(CallOpProto, CC);
1841         addFunctionPointerConversion(S, IntroducerRange, Class, CallOperator,
1842                                      InvokerFunctionTy);
1843       });
1844 }
1845 
1846 /// Add a lambda's conversion to block pointer.
1847 static void addBlockPointerConversion(Sema &S,
1848                                       SourceRange IntroducerRange,
1849                                       CXXRecordDecl *Class,
1850                                       CXXMethodDecl *CallOperator) {
1851   const FunctionProtoType *CallOpProto =
1852       CallOperator->getType()->castAs<FunctionProtoType>();
1853   QualType FunctionTy = S.getLambdaConversionFunctionResultType(
1854       CallOpProto, getLambdaConversionFunctionCallConv(S, CallOpProto));
1855   QualType BlockPtrTy = S.Context.getBlockPointerType(FunctionTy);
1856 
1857   FunctionProtoType::ExtProtoInfo ConversionEPI(
1858       S.Context.getDefaultCallingConvention(
1859           /*IsVariadic=*/false, /*IsCXXMethod=*/true));
1860   ConversionEPI.TypeQuals = Qualifiers();
1861   ConversionEPI.TypeQuals.addConst();
1862   QualType ConvTy =
1863       S.Context.getFunctionType(BlockPtrTy, std::nullopt, ConversionEPI);
1864 
1865   SourceLocation Loc = IntroducerRange.getBegin();
1866   DeclarationName Name
1867     = S.Context.DeclarationNames.getCXXConversionFunctionName(
1868         S.Context.getCanonicalType(BlockPtrTy));
1869   DeclarationNameLoc NameLoc = DeclarationNameLoc::makeNamedTypeLoc(
1870       S.Context.getTrivialTypeSourceInfo(BlockPtrTy, Loc));
1871   CXXConversionDecl *Conversion = CXXConversionDecl::Create(
1872       S.Context, Class, Loc, DeclarationNameInfo(Name, Loc, NameLoc), ConvTy,
1873       S.Context.getTrivialTypeSourceInfo(ConvTy, Loc),
1874       S.getCurFPFeatures().isFPConstrained(),
1875       /*isInline=*/true, ExplicitSpecifier(), ConstexprSpecKind::Unspecified,
1876       CallOperator->getBody()->getEndLoc());
1877   Conversion->setAccess(AS_public);
1878   Conversion->setImplicit(true);
1879   Class->addDecl(Conversion);
1880 }
1881 
1882 ExprResult Sema::BuildCaptureInit(const Capture &Cap,
1883                                   SourceLocation ImplicitCaptureLoc,
1884                                   bool IsOpenMPMapping) {
1885   // VLA captures don't have a stored initialization expression.
1886   if (Cap.isVLATypeCapture())
1887     return ExprResult();
1888 
1889   // An init-capture is initialized directly from its stored initializer.
1890   if (Cap.isInitCapture())
1891     return cast<VarDecl>(Cap.getVariable())->getInit();
1892 
1893   // For anything else, build an initialization expression. For an implicit
1894   // capture, the capture notionally happens at the capture-default, so use
1895   // that location here.
1896   SourceLocation Loc =
1897       ImplicitCaptureLoc.isValid() ? ImplicitCaptureLoc : Cap.getLocation();
1898 
1899   // C++11 [expr.prim.lambda]p21:
1900   //   When the lambda-expression is evaluated, the entities that
1901   //   are captured by copy are used to direct-initialize each
1902   //   corresponding non-static data member of the resulting closure
1903   //   object. (For array members, the array elements are
1904   //   direct-initialized in increasing subscript order.) These
1905   //   initializations are performed in the (unspecified) order in
1906   //   which the non-static data members are declared.
1907 
1908   // C++ [expr.prim.lambda]p12:
1909   //   An entity captured by a lambda-expression is odr-used (3.2) in
1910   //   the scope containing the lambda-expression.
1911   ExprResult Init;
1912   IdentifierInfo *Name = nullptr;
1913   if (Cap.isThisCapture()) {
1914     QualType ThisTy = getCurrentThisType();
1915     Expr *This = BuildCXXThisExpr(Loc, ThisTy, ImplicitCaptureLoc.isValid());
1916     if (Cap.isCopyCapture())
1917       Init = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
1918     else
1919       Init = This;
1920   } else {
1921     assert(Cap.isVariableCapture() && "unknown kind of capture");
1922     ValueDecl *Var = Cap.getVariable();
1923     Name = Var->getIdentifier();
1924     Init = BuildDeclarationNameExpr(
1925       CXXScopeSpec(), DeclarationNameInfo(Var->getDeclName(), Loc), Var);
1926   }
1927 
1928   // In OpenMP, the capture kind doesn't actually describe how to capture:
1929   // variables are "mapped" onto the device in a process that does not formally
1930   // make a copy, even for a "copy capture".
1931   if (IsOpenMPMapping)
1932     return Init;
1933 
1934   if (Init.isInvalid())
1935     return ExprError();
1936 
1937   Expr *InitExpr = Init.get();
1938   InitializedEntity Entity = InitializedEntity::InitializeLambdaCapture(
1939       Name, Cap.getCaptureType(), Loc);
1940   InitializationKind InitKind =
1941       InitializationKind::CreateDirect(Loc, Loc, Loc);
1942   InitializationSequence InitSeq(*this, Entity, InitKind, InitExpr);
1943   return InitSeq.Perform(*this, Entity, InitKind, InitExpr);
1944 }
1945 
1946 ExprResult Sema::ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body) {
1947   LambdaScopeInfo LSI = *cast<LambdaScopeInfo>(FunctionScopes.back());
1948   ActOnFinishFunctionBody(LSI.CallOperator, Body);
1949   return BuildLambdaExpr(StartLoc, Body->getEndLoc(), &LSI);
1950 }
1951 
1952 static LambdaCaptureDefault
1953 mapImplicitCaptureStyle(CapturingScopeInfo::ImplicitCaptureStyle ICS) {
1954   switch (ICS) {
1955   case CapturingScopeInfo::ImpCap_None:
1956     return LCD_None;
1957   case CapturingScopeInfo::ImpCap_LambdaByval:
1958     return LCD_ByCopy;
1959   case CapturingScopeInfo::ImpCap_CapturedRegion:
1960   case CapturingScopeInfo::ImpCap_LambdaByref:
1961     return LCD_ByRef;
1962   case CapturingScopeInfo::ImpCap_Block:
1963     llvm_unreachable("block capture in lambda");
1964   }
1965   llvm_unreachable("Unknown implicit capture style");
1966 }
1967 
1968 bool Sema::CaptureHasSideEffects(const Capture &From) {
1969   if (From.isInitCapture()) {
1970     Expr *Init = cast<VarDecl>(From.getVariable())->getInit();
1971     if (Init && Init->HasSideEffects(Context))
1972       return true;
1973   }
1974 
1975   if (!From.isCopyCapture())
1976     return false;
1977 
1978   const QualType T = From.isThisCapture()
1979                          ? getCurrentThisType()->getPointeeType()
1980                          : From.getCaptureType();
1981 
1982   if (T.isVolatileQualified())
1983     return true;
1984 
1985   const Type *BaseT = T->getBaseElementTypeUnsafe();
1986   if (const CXXRecordDecl *RD = BaseT->getAsCXXRecordDecl())
1987     return !RD->isCompleteDefinition() || !RD->hasTrivialCopyConstructor() ||
1988            !RD->hasTrivialDestructor();
1989 
1990   return false;
1991 }
1992 
1993 bool Sema::DiagnoseUnusedLambdaCapture(SourceRange CaptureRange,
1994                                        const Capture &From) {
1995   if (CaptureHasSideEffects(From))
1996     return false;
1997 
1998   if (From.isVLATypeCapture())
1999     return false;
2000 
2001   // FIXME: maybe we should warn on these if we can find a sensible diagnostic
2002   // message
2003   if (From.isInitCapture() &&
2004       From.getVariable()->isPlaceholderVar(getLangOpts()))
2005     return false;
2006 
2007   auto diag = Diag(From.getLocation(), diag::warn_unused_lambda_capture);
2008   if (From.isThisCapture())
2009     diag << "'this'";
2010   else
2011     diag << From.getVariable();
2012   diag << From.isNonODRUsed();
2013   diag << FixItHint::CreateRemoval(CaptureRange);
2014   return true;
2015 }
2016 
2017 /// Create a field within the lambda class or captured statement record for the
2018 /// given capture.
2019 FieldDecl *Sema::BuildCaptureField(RecordDecl *RD,
2020                                    const sema::Capture &Capture) {
2021   SourceLocation Loc = Capture.getLocation();
2022   QualType FieldType = Capture.getCaptureType();
2023 
2024   TypeSourceInfo *TSI = nullptr;
2025   if (Capture.isVariableCapture()) {
2026     const auto *Var = dyn_cast_or_null<VarDecl>(Capture.getVariable());
2027     if (Var && Var->isInitCapture())
2028       TSI = Var->getTypeSourceInfo();
2029   }
2030 
2031   // FIXME: Should we really be doing this? A null TypeSourceInfo seems more
2032   // appropriate, at least for an implicit capture.
2033   if (!TSI)
2034     TSI = Context.getTrivialTypeSourceInfo(FieldType, Loc);
2035 
2036   // Build the non-static data member.
2037   FieldDecl *Field =
2038       FieldDecl::Create(Context, RD, /*StartLoc=*/Loc, /*IdLoc=*/Loc,
2039                         /*Id=*/nullptr, FieldType, TSI, /*BW=*/nullptr,
2040                         /*Mutable=*/false, ICIS_NoInit);
2041   // If the variable being captured has an invalid type, mark the class as
2042   // invalid as well.
2043   if (!FieldType->isDependentType()) {
2044     if (RequireCompleteSizedType(Loc, FieldType,
2045                                  diag::err_field_incomplete_or_sizeless)) {
2046       RD->setInvalidDecl();
2047       Field->setInvalidDecl();
2048     } else {
2049       NamedDecl *Def;
2050       FieldType->isIncompleteType(&Def);
2051       if (Def && Def->isInvalidDecl()) {
2052         RD->setInvalidDecl();
2053         Field->setInvalidDecl();
2054       }
2055     }
2056   }
2057   Field->setImplicit(true);
2058   Field->setAccess(AS_private);
2059   RD->addDecl(Field);
2060 
2061   if (Capture.isVLATypeCapture())
2062     Field->setCapturedVLAType(Capture.getCapturedVLAType());
2063 
2064   return Field;
2065 }
2066 
2067 ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
2068                                  LambdaScopeInfo *LSI) {
2069   // Collect information from the lambda scope.
2070   SmallVector<LambdaCapture, 4> Captures;
2071   SmallVector<Expr *, 4> CaptureInits;
2072   SourceLocation CaptureDefaultLoc = LSI->CaptureDefaultLoc;
2073   LambdaCaptureDefault CaptureDefault =
2074       mapImplicitCaptureStyle(LSI->ImpCaptureStyle);
2075   CXXRecordDecl *Class;
2076   CXXMethodDecl *CallOperator;
2077   SourceRange IntroducerRange;
2078   bool ExplicitParams;
2079   bool ExplicitResultType;
2080   CleanupInfo LambdaCleanup;
2081   bool ContainsUnexpandedParameterPack;
2082   bool IsGenericLambda;
2083   {
2084     CallOperator = LSI->CallOperator;
2085     Class = LSI->Lambda;
2086     IntroducerRange = LSI->IntroducerRange;
2087     ExplicitParams = LSI->ExplicitParams;
2088     ExplicitResultType = !LSI->HasImplicitReturnType;
2089     LambdaCleanup = LSI->Cleanup;
2090     ContainsUnexpandedParameterPack = LSI->ContainsUnexpandedParameterPack;
2091     IsGenericLambda = Class->isGenericLambda();
2092 
2093     CallOperator->setLexicalDeclContext(Class);
2094     Decl *TemplateOrNonTemplateCallOperatorDecl =
2095         CallOperator->getDescribedFunctionTemplate()
2096         ? CallOperator->getDescribedFunctionTemplate()
2097         : cast<Decl>(CallOperator);
2098 
2099     // FIXME: Is this really the best choice? Keeping the lexical decl context
2100     // set as CurContext seems more faithful to the source.
2101     TemplateOrNonTemplateCallOperatorDecl->setLexicalDeclContext(Class);
2102 
2103     PopExpressionEvaluationContext();
2104 
2105     // True if the current capture has a used capture or default before it.
2106     bool CurHasPreviousCapture = CaptureDefault != LCD_None;
2107     SourceLocation PrevCaptureLoc = CurHasPreviousCapture ?
2108         CaptureDefaultLoc : IntroducerRange.getBegin();
2109 
2110     for (unsigned I = 0, N = LSI->Captures.size(); I != N; ++I) {
2111       const Capture &From = LSI->Captures[I];
2112 
2113       if (From.isInvalid())
2114         return ExprError();
2115 
2116       assert(!From.isBlockCapture() && "Cannot capture __block variables");
2117       bool IsImplicit = I >= LSI->NumExplicitCaptures;
2118       SourceLocation ImplicitCaptureLoc =
2119           IsImplicit ? CaptureDefaultLoc : SourceLocation();
2120 
2121       // Use source ranges of explicit captures for fixits where available.
2122       SourceRange CaptureRange = LSI->ExplicitCaptureRanges[I];
2123 
2124       // Warn about unused explicit captures.
2125       bool IsCaptureUsed = true;
2126       if (!CurContext->isDependentContext() && !IsImplicit &&
2127           !From.isODRUsed()) {
2128         // Initialized captures that are non-ODR used may not be eliminated.
2129         // FIXME: Where did the IsGenericLambda here come from?
2130         bool NonODRUsedInitCapture =
2131             IsGenericLambda && From.isNonODRUsed() && From.isInitCapture();
2132         if (!NonODRUsedInitCapture) {
2133           bool IsLast = (I + 1) == LSI->NumExplicitCaptures;
2134           SourceRange FixItRange;
2135           if (CaptureRange.isValid()) {
2136             if (!CurHasPreviousCapture && !IsLast) {
2137               // If there are no captures preceding this capture, remove the
2138               // following comma.
2139               FixItRange = SourceRange(CaptureRange.getBegin(),
2140                                        getLocForEndOfToken(CaptureRange.getEnd()));
2141             } else {
2142               // Otherwise, remove the comma since the last used capture.
2143               FixItRange = SourceRange(getLocForEndOfToken(PrevCaptureLoc),
2144                                        CaptureRange.getEnd());
2145             }
2146           }
2147 
2148           IsCaptureUsed = !DiagnoseUnusedLambdaCapture(FixItRange, From);
2149         }
2150       }
2151 
2152       if (CaptureRange.isValid()) {
2153         CurHasPreviousCapture |= IsCaptureUsed;
2154         PrevCaptureLoc = CaptureRange.getEnd();
2155       }
2156 
2157       // Map the capture to our AST representation.
2158       LambdaCapture Capture = [&] {
2159         if (From.isThisCapture()) {
2160           // Capturing 'this' implicitly with a default of '[=]' is deprecated,
2161           // because it results in a reference capture. Don't warn prior to
2162           // C++2a; there's nothing that can be done about it before then.
2163           if (getLangOpts().CPlusPlus20 && IsImplicit &&
2164               CaptureDefault == LCD_ByCopy) {
2165             Diag(From.getLocation(), diag::warn_deprecated_this_capture);
2166             Diag(CaptureDefaultLoc, diag::note_deprecated_this_capture)
2167                 << FixItHint::CreateInsertion(
2168                        getLocForEndOfToken(CaptureDefaultLoc), ", this");
2169           }
2170           return LambdaCapture(From.getLocation(), IsImplicit,
2171                                From.isCopyCapture() ? LCK_StarThis : LCK_This);
2172         } else if (From.isVLATypeCapture()) {
2173           return LambdaCapture(From.getLocation(), IsImplicit, LCK_VLAType);
2174         } else {
2175           assert(From.isVariableCapture() && "unknown kind of capture");
2176           ValueDecl *Var = From.getVariable();
2177           LambdaCaptureKind Kind =
2178               From.isCopyCapture() ? LCK_ByCopy : LCK_ByRef;
2179           return LambdaCapture(From.getLocation(), IsImplicit, Kind, Var,
2180                                From.getEllipsisLoc());
2181         }
2182       }();
2183 
2184       // Form the initializer for the capture field.
2185       ExprResult Init = BuildCaptureInit(From, ImplicitCaptureLoc);
2186 
2187       // FIXME: Skip this capture if the capture is not used, the initializer
2188       // has no side-effects, the type of the capture is trivial, and the
2189       // lambda is not externally visible.
2190 
2191       // Add a FieldDecl for the capture and form its initializer.
2192       BuildCaptureField(Class, From);
2193       Captures.push_back(Capture);
2194       CaptureInits.push_back(Init.get());
2195 
2196       if (LangOpts.CUDA)
2197         CUDA().CheckLambdaCapture(CallOperator, From);
2198     }
2199 
2200     Class->setCaptures(Context, Captures);
2201 
2202     // C++11 [expr.prim.lambda]p6:
2203     //   The closure type for a lambda-expression with no lambda-capture
2204     //   has a public non-virtual non-explicit const conversion function
2205     //   to pointer to function having the same parameter and return
2206     //   types as the closure type's function call operator.
2207     if (Captures.empty() && CaptureDefault == LCD_None)
2208       addFunctionPointerConversions(*this, IntroducerRange, Class,
2209                                     CallOperator);
2210 
2211     // Objective-C++:
2212     //   The closure type for a lambda-expression has a public non-virtual
2213     //   non-explicit const conversion function to a block pointer having the
2214     //   same parameter and return types as the closure type's function call
2215     //   operator.
2216     // FIXME: Fix generic lambda to block conversions.
2217     if (getLangOpts().Blocks && getLangOpts().ObjC && !IsGenericLambda)
2218       addBlockPointerConversion(*this, IntroducerRange, Class, CallOperator);
2219 
2220     // Finalize the lambda class.
2221     SmallVector<Decl*, 4> Fields(Class->fields());
2222     ActOnFields(nullptr, Class->getLocation(), Class, Fields, SourceLocation(),
2223                 SourceLocation(), ParsedAttributesView());
2224     CheckCompletedCXXClass(nullptr, Class);
2225   }
2226 
2227   Cleanup.mergeFrom(LambdaCleanup);
2228 
2229   LambdaExpr *Lambda = LambdaExpr::Create(Context, Class, IntroducerRange,
2230                                           CaptureDefault, CaptureDefaultLoc,
2231                                           ExplicitParams, ExplicitResultType,
2232                                           CaptureInits, EndLoc,
2233                                           ContainsUnexpandedParameterPack);
2234   // If the lambda expression's call operator is not explicitly marked constexpr
2235   // and we are not in a dependent context, analyze the call operator to infer
2236   // its constexpr-ness, suppressing diagnostics while doing so.
2237   if (getLangOpts().CPlusPlus17 && !CallOperator->isInvalidDecl() &&
2238       !CallOperator->isConstexpr() &&
2239       !isa<CoroutineBodyStmt>(CallOperator->getBody()) &&
2240       !Class->getDeclContext()->isDependentContext()) {
2241     CallOperator->setConstexprKind(
2242         CheckConstexprFunctionDefinition(CallOperator,
2243                                          CheckConstexprKind::CheckValid)
2244             ? ConstexprSpecKind::Constexpr
2245             : ConstexprSpecKind::Unspecified);
2246   }
2247 
2248   // Emit delayed shadowing warnings now that the full capture list is known.
2249   DiagnoseShadowingLambdaDecls(LSI);
2250 
2251   if (!CurContext->isDependentContext()) {
2252     switch (ExprEvalContexts.back().Context) {
2253     // C++11 [expr.prim.lambda]p2:
2254     //   A lambda-expression shall not appear in an unevaluated operand
2255     //   (Clause 5).
2256     case ExpressionEvaluationContext::Unevaluated:
2257     case ExpressionEvaluationContext::UnevaluatedList:
2258     case ExpressionEvaluationContext::UnevaluatedAbstract:
2259     // C++1y [expr.const]p2:
2260     //   A conditional-expression e is a core constant expression unless the
2261     //   evaluation of e, following the rules of the abstract machine, would
2262     //   evaluate [...] a lambda-expression.
2263     //
2264     // This is technically incorrect, there are some constant evaluated contexts
2265     // where this should be allowed.  We should probably fix this when DR1607 is
2266     // ratified, it lays out the exact set of conditions where we shouldn't
2267     // allow a lambda-expression.
2268     case ExpressionEvaluationContext::ConstantEvaluated:
2269     case ExpressionEvaluationContext::ImmediateFunctionContext:
2270       // We don't actually diagnose this case immediately, because we
2271       // could be within a context where we might find out later that
2272       // the expression is potentially evaluated (e.g., for typeid).
2273       ExprEvalContexts.back().Lambdas.push_back(Lambda);
2274       break;
2275 
2276     case ExpressionEvaluationContext::DiscardedStatement:
2277     case ExpressionEvaluationContext::PotentiallyEvaluated:
2278     case ExpressionEvaluationContext::PotentiallyEvaluatedIfUsed:
2279       break;
2280     }
2281   }
2282 
2283   return MaybeBindToTemporary(Lambda);
2284 }
2285 
2286 ExprResult Sema::BuildBlockForLambdaConversion(SourceLocation CurrentLocation,
2287                                                SourceLocation ConvLocation,
2288                                                CXXConversionDecl *Conv,
2289                                                Expr *Src) {
2290   // Make sure that the lambda call operator is marked used.
2291   CXXRecordDecl *Lambda = Conv->getParent();
2292   CXXMethodDecl *CallOperator
2293     = cast<CXXMethodDecl>(
2294         Lambda->lookup(
2295           Context.DeclarationNames.getCXXOperatorName(OO_Call)).front());
2296   CallOperator->setReferenced();
2297   CallOperator->markUsed(Context);
2298 
2299   ExprResult Init = PerformCopyInitialization(
2300       InitializedEntity::InitializeLambdaToBlock(ConvLocation, Src->getType()),
2301       CurrentLocation, Src);
2302   if (!Init.isInvalid())
2303     Init = ActOnFinishFullExpr(Init.get(), /*DiscardedValue*/ false);
2304 
2305   if (Init.isInvalid())
2306     return ExprError();
2307 
2308   // Create the new block to be returned.
2309   BlockDecl *Block = BlockDecl::Create(Context, CurContext, ConvLocation);
2310 
2311   // Set the type information.
2312   Block->setSignatureAsWritten(CallOperator->getTypeSourceInfo());
2313   Block->setIsVariadic(CallOperator->isVariadic());
2314   Block->setBlockMissingReturnType(false);
2315 
2316   // Add parameters.
2317   SmallVector<ParmVarDecl *, 4> BlockParams;
2318   for (unsigned I = 0, N = CallOperator->getNumParams(); I != N; ++I) {
2319     ParmVarDecl *From = CallOperator->getParamDecl(I);
2320     BlockParams.push_back(ParmVarDecl::Create(
2321         Context, Block, From->getBeginLoc(), From->getLocation(),
2322         From->getIdentifier(), From->getType(), From->getTypeSourceInfo(),
2323         From->getStorageClass(),
2324         /*DefArg=*/nullptr));
2325   }
2326   Block->setParams(BlockParams);
2327 
2328   Block->setIsConversionFromLambda(true);
2329 
2330   // Add capture. The capture uses a fake variable, which doesn't correspond
2331   // to any actual memory location. However, the initializer copy-initializes
2332   // the lambda object.
2333   TypeSourceInfo *CapVarTSI =
2334       Context.getTrivialTypeSourceInfo(Src->getType());
2335   VarDecl *CapVar = VarDecl::Create(Context, Block, ConvLocation,
2336                                     ConvLocation, nullptr,
2337                                     Src->getType(), CapVarTSI,
2338                                     SC_None);
2339   BlockDecl::Capture Capture(/*variable=*/CapVar, /*byRef=*/false,
2340                              /*nested=*/false, /*copy=*/Init.get());
2341   Block->setCaptures(Context, Capture, /*CapturesCXXThis=*/false);
2342 
2343   // Add a fake function body to the block. IR generation is responsible
2344   // for filling in the actual body, which cannot be expressed as an AST.
2345   Block->setBody(new (Context) CompoundStmt(ConvLocation));
2346 
2347   // Create the block literal expression.
2348   Expr *BuildBlock = new (Context) BlockExpr(Block, Conv->getConversionType());
2349   ExprCleanupObjects.push_back(Block);
2350   Cleanup.setExprNeedsCleanups(true);
2351 
2352   return BuildBlock;
2353 }
2354 
2355 static FunctionDecl *getPatternFunctionDecl(FunctionDecl *FD) {
2356   if (FD->getTemplatedKind() == FunctionDecl::TK_MemberSpecialization) {
2357     while (FD->getInstantiatedFromMemberFunction())
2358       FD = FD->getInstantiatedFromMemberFunction();
2359     return FD;
2360   }
2361 
2362   if (FD->getTemplatedKind() == FunctionDecl::TK_DependentNonTemplate)
2363     return FD->getInstantiatedFromDecl();
2364 
2365   FunctionTemplateDecl *FTD = FD->getPrimaryTemplate();
2366   if (!FTD)
2367     return nullptr;
2368 
2369   while (FTD->getInstantiatedFromMemberTemplate())
2370     FTD = FTD->getInstantiatedFromMemberTemplate();
2371 
2372   return FTD->getTemplatedDecl();
2373 }
2374 
2375 Sema::LambdaScopeForCallOperatorInstantiationRAII::
2376     LambdaScopeForCallOperatorInstantiationRAII(
2377         Sema &SemaRef, FunctionDecl *FD, MultiLevelTemplateArgumentList MLTAL,
2378         LocalInstantiationScope &Scope, bool ShouldAddDeclsFromParentScope)
2379     : FunctionScopeRAII(SemaRef) {
2380   if (!isLambdaCallOperator(FD)) {
2381     FunctionScopeRAII::disable();
2382     return;
2383   }
2384 
2385   SemaRef.RebuildLambdaScopeInfo(cast<CXXMethodDecl>(FD));
2386 
2387   FunctionDecl *FDPattern = getPatternFunctionDecl(FD);
2388   if (!FDPattern)
2389     return;
2390 
2391   SemaRef.addInstantiatedCapturesToScope(FD, FDPattern, Scope, MLTAL);
2392 
2393   if (!ShouldAddDeclsFromParentScope)
2394     return;
2395 
2396   llvm::SmallVector<std::pair<FunctionDecl *, FunctionDecl *>, 4>
2397       ParentInstantiations;
2398   while (true) {
2399     FDPattern =
2400         dyn_cast<FunctionDecl>(getLambdaAwareParentOfDeclContext(FDPattern));
2401     FD = dyn_cast<FunctionDecl>(getLambdaAwareParentOfDeclContext(FD));
2402 
2403     if (!FDPattern || !FD)
2404       break;
2405 
2406     ParentInstantiations.emplace_back(FDPattern, FD);
2407   }
2408 
2409   // Add instantiated parameters and local vars to scopes, starting from the
2410   // outermost lambda to the innermost lambda. This ordering ensures that
2411   // parameters in inner lambdas can correctly depend on those defined
2412   // in outer lambdas, e.g. auto L = [](auto... x) {
2413   //   return [](decltype(x)... y) { }; // `y` depends on `x`
2414   // };
2415 
2416   for (const auto &[FDPattern, FD] : llvm::reverse(ParentInstantiations)) {
2417     SemaRef.addInstantiatedParametersToScope(FD, FDPattern, Scope, MLTAL);
2418     SemaRef.addInstantiatedLocalVarsToScope(FD, FDPattern, Scope);
2419   }
2420 }
2421