]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/Sema/SemaLambda.cpp
Update clang to trunk r290819 and resolve conflicts.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / lib / Sema / SemaLambda.cpp
1 //===--- SemaLambda.cpp - Semantic Analysis for C++11 Lambdas -------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  This file implements semantic analysis for C++ lambda expressions.
11 //
12 //===----------------------------------------------------------------------===//
13 #include "clang/Sema/DeclSpec.h"
14 #include "TypeLocBuilder.h"
15 #include "clang/AST/ASTLambda.h"
16 #include "clang/AST/ExprCXX.h"
17 #include "clang/Basic/TargetInfo.h"
18 #include "clang/Sema/Initialization.h"
19 #include "clang/Sema/Lookup.h"
20 #include "clang/Sema/Scope.h"
21 #include "clang/Sema/ScopeInfo.h"
22 #include "clang/Sema/SemaInternal.h"
23 #include "clang/Sema/SemaLambda.h"
24 using namespace clang;
25 using namespace sema;
26
27 /// \brief Examines the FunctionScopeInfo stack to determine the nearest
28 /// enclosing lambda (to the current lambda) that is 'capture-ready' for 
29 /// the variable referenced in the current lambda (i.e. \p VarToCapture).
30 /// If successful, returns the index into Sema's FunctionScopeInfo stack
31 /// of the capture-ready lambda's LambdaScopeInfo.
32 ///  
33 /// Climbs down the stack of lambdas (deepest nested lambda - i.e. current 
34 /// lambda - is on top) to determine the index of the nearest enclosing/outer
35 /// lambda that is ready to capture the \p VarToCapture being referenced in 
36 /// the current lambda. 
37 /// As we climb down the stack, we want the index of the first such lambda -
38 /// that is the lambda with the highest index that is 'capture-ready'. 
39 /// 
40 /// A lambda 'L' is capture-ready for 'V' (var or this) if:
41 ///  - its enclosing context is non-dependent
42 ///  - and if the chain of lambdas between L and the lambda in which
43 ///    V is potentially used (i.e. the lambda at the top of the scope info 
44 ///    stack), can all capture or have already captured V.
45 /// If \p VarToCapture is 'null' then we are trying to capture 'this'.
46 /// 
47 /// Note that a lambda that is deemed 'capture-ready' still needs to be checked
48 /// for whether it is 'capture-capable' (see
49 /// getStackIndexOfNearestEnclosingCaptureCapableLambda), before it can truly 
50 /// capture.
51 ///
52 /// \param FunctionScopes - Sema's stack of nested FunctionScopeInfo's (which a
53 ///  LambdaScopeInfo inherits from).  The current/deepest/innermost lambda
54 ///  is at the top of the stack and has the highest index.
55 /// \param VarToCapture - the variable to capture.  If NULL, capture 'this'.
56 ///
57 /// \returns An Optional<unsigned> Index that if evaluates to 'true' contains
58 /// the index (into Sema's FunctionScopeInfo stack) of the innermost lambda
59 /// which is capture-ready.  If the return value evaluates to 'false' then
60 /// no lambda is capture-ready for \p VarToCapture.
61
62 static inline Optional<unsigned>
63 getStackIndexOfNearestEnclosingCaptureReadyLambda(
64     ArrayRef<const clang::sema::FunctionScopeInfo *> FunctionScopes,
65     VarDecl *VarToCapture) {
66   // Label failure to capture.
67   const Optional<unsigned> NoLambdaIsCaptureReady;
68
69   // Ignore all inner captured regions.
70   unsigned CurScopeIndex = FunctionScopes.size() - 1;
71   while (CurScopeIndex > 0 && isa<clang::sema::CapturedRegionScopeInfo>(
72                                   FunctionScopes[CurScopeIndex]))
73     --CurScopeIndex;
74   assert(
75       isa<clang::sema::LambdaScopeInfo>(FunctionScopes[CurScopeIndex]) &&
76       "The function on the top of sema's function-info stack must be a lambda");
77
78   // If VarToCapture is null, we are attempting to capture 'this'.
79   const bool IsCapturingThis = !VarToCapture;
80   const bool IsCapturingVariable = !IsCapturingThis;
81
82   // Start with the current lambda at the top of the stack (highest index).
83   DeclContext *EnclosingDC =
84       cast<sema::LambdaScopeInfo>(FunctionScopes[CurScopeIndex])->CallOperator;
85
86   do {
87     const clang::sema::LambdaScopeInfo *LSI =
88         cast<sema::LambdaScopeInfo>(FunctionScopes[CurScopeIndex]);
89     // IF we have climbed down to an intervening enclosing lambda that contains
90     // the variable declaration - it obviously can/must not capture the
91     // variable.
92     // Since its enclosing DC is dependent, all the lambdas between it and the
93     // innermost nested lambda are dependent (otherwise we wouldn't have
94     // arrived here) - so we don't yet have a lambda that can capture the
95     // variable.
96     if (IsCapturingVariable &&
97         VarToCapture->getDeclContext()->Equals(EnclosingDC))
98       return NoLambdaIsCaptureReady;
99
100     // For an enclosing lambda to be capture ready for an entity, all
101     // intervening lambda's have to be able to capture that entity. If even
102     // one of the intervening lambda's is not capable of capturing the entity
103     // then no enclosing lambda can ever capture that entity.
104     // For e.g.
105     // const int x = 10;
106     // [=](auto a) {    #1
107     //   [](auto b) {   #2 <-- an intervening lambda that can never capture 'x'
108     //    [=](auto c) { #3
109     //       f(x, c);  <-- can not lead to x's speculative capture by #1 or #2
110     //    }; }; };
111     // If they do not have a default implicit capture, check to see
112     // if the entity has already been explicitly captured.
113     // If even a single dependent enclosing lambda lacks the capability
114     // to ever capture this variable, there is no further enclosing
115     // non-dependent lambda that can capture this variable.
116     if (LSI->ImpCaptureStyle == sema::LambdaScopeInfo::ImpCap_None) {
117       if (IsCapturingVariable && !LSI->isCaptured(VarToCapture))
118         return NoLambdaIsCaptureReady;
119       if (IsCapturingThis && !LSI->isCXXThisCaptured())
120         return NoLambdaIsCaptureReady;
121     }
122     EnclosingDC = getLambdaAwareParentOfDeclContext(EnclosingDC);
123     
124     assert(CurScopeIndex);
125     --CurScopeIndex;
126   } while (!EnclosingDC->isTranslationUnit() &&
127            EnclosingDC->isDependentContext() &&
128            isLambdaCallOperator(EnclosingDC));
129
130   assert(CurScopeIndex < (FunctionScopes.size() - 1));
131   // If the enclosingDC is not dependent, then the immediately nested lambda
132   // (one index above) is capture-ready.
133   if (!EnclosingDC->isDependentContext())
134     return CurScopeIndex + 1;
135   return NoLambdaIsCaptureReady;
136 }
137
138 /// \brief Examines the FunctionScopeInfo stack to determine the nearest
139 /// enclosing lambda (to the current lambda) that is 'capture-capable' for 
140 /// the variable referenced in the current lambda (i.e. \p VarToCapture).
141 /// If successful, returns the index into Sema's FunctionScopeInfo stack
142 /// of the capture-capable lambda's LambdaScopeInfo.
143 ///
144 /// Given the current stack of lambdas being processed by Sema and
145 /// the variable of interest, to identify the nearest enclosing lambda (to the 
146 /// current lambda at the top of the stack) that can truly capture
147 /// a variable, it has to have the following two properties:
148 ///  a) 'capture-ready' - be the innermost lambda that is 'capture-ready':
149 ///     - climb down the stack (i.e. starting from the innermost and examining
150 ///       each outer lambda step by step) checking if each enclosing
151 ///       lambda can either implicitly or explicitly capture the variable.
152 ///       Record the first such lambda that is enclosed in a non-dependent
153 ///       context. If no such lambda currently exists return failure.
154 ///  b) 'capture-capable' - make sure the 'capture-ready' lambda can truly
155 ///  capture the variable by checking all its enclosing lambdas:
156 ///     - check if all outer lambdas enclosing the 'capture-ready' lambda
157 ///       identified above in 'a' can also capture the variable (this is done
158 ///       via tryCaptureVariable for variables and CheckCXXThisCapture for
159 ///       'this' by passing in the index of the Lambda identified in step 'a')
160 ///
161 /// \param FunctionScopes - Sema's stack of nested FunctionScopeInfo's (which a
162 /// LambdaScopeInfo inherits from).  The current/deepest/innermost lambda
163 /// is at the top of the stack.
164 ///
165 /// \param VarToCapture - the variable to capture.  If NULL, capture 'this'.
166 ///
167 ///
168 /// \returns An Optional<unsigned> Index that if evaluates to 'true' contains
169 /// the index (into Sema's FunctionScopeInfo stack) of the innermost lambda
170 /// which is capture-capable.  If the return value evaluates to 'false' then
171 /// no lambda is capture-capable for \p VarToCapture.
172
173 Optional<unsigned> clang::getStackIndexOfNearestEnclosingCaptureCapableLambda(
174     ArrayRef<const sema::FunctionScopeInfo *> FunctionScopes,
175     VarDecl *VarToCapture, Sema &S) {
176
177   const Optional<unsigned> NoLambdaIsCaptureCapable;
178   
179   const Optional<unsigned> OptionalStackIndex =
180       getStackIndexOfNearestEnclosingCaptureReadyLambda(FunctionScopes,
181                                                         VarToCapture);
182   if (!OptionalStackIndex)
183     return NoLambdaIsCaptureCapable;
184
185   const unsigned IndexOfCaptureReadyLambda = OptionalStackIndex.getValue();
186   assert(((IndexOfCaptureReadyLambda != (FunctionScopes.size() - 1)) ||
187           S.getCurGenericLambda()) &&
188          "The capture ready lambda for a potential capture can only be the "
189          "current lambda if it is a generic lambda");
190
191   const sema::LambdaScopeInfo *const CaptureReadyLambdaLSI =
192       cast<sema::LambdaScopeInfo>(FunctionScopes[IndexOfCaptureReadyLambda]);
193   
194   // If VarToCapture is null, we are attempting to capture 'this'
195   const bool IsCapturingThis = !VarToCapture;
196   const bool IsCapturingVariable = !IsCapturingThis;
197
198   if (IsCapturingVariable) {
199     // Check if the capture-ready lambda can truly capture the variable, by
200     // checking whether all enclosing lambdas of the capture-ready lambda allow
201     // the capture - i.e. make sure it is capture-capable.
202     QualType CaptureType, DeclRefType;
203     const bool CanCaptureVariable =
204         !S.tryCaptureVariable(VarToCapture,
205                               /*ExprVarIsUsedInLoc*/ SourceLocation(),
206                               clang::Sema::TryCapture_Implicit,
207                               /*EllipsisLoc*/ SourceLocation(),
208                               /*BuildAndDiagnose*/ false, CaptureType,
209                               DeclRefType, &IndexOfCaptureReadyLambda);
210     if (!CanCaptureVariable)
211       return NoLambdaIsCaptureCapable;
212   } else {
213     // Check if the capture-ready lambda can truly capture 'this' by checking
214     // whether all enclosing lambdas of the capture-ready lambda can capture
215     // 'this'.
216     const bool CanCaptureThis =
217         !S.CheckCXXThisCapture(
218              CaptureReadyLambdaLSI->PotentialThisCaptureLocation,
219              /*Explicit*/ false, /*BuildAndDiagnose*/ false,
220              &IndexOfCaptureReadyLambda);
221     if (!CanCaptureThis)
222       return NoLambdaIsCaptureCapable;
223   } 
224   return IndexOfCaptureReadyLambda;
225 }
226
227 static inline TemplateParameterList *
228 getGenericLambdaTemplateParameterList(LambdaScopeInfo *LSI, Sema &SemaRef) {
229   if (LSI->GLTemplateParameterList)
230     return LSI->GLTemplateParameterList;
231
232   if (!LSI->AutoTemplateParams.empty()) {
233     SourceRange IntroRange = LSI->IntroducerRange;
234     SourceLocation LAngleLoc = IntroRange.getBegin();
235     SourceLocation RAngleLoc = IntroRange.getEnd();
236     LSI->GLTemplateParameterList = TemplateParameterList::Create(
237         SemaRef.Context,
238         /*Template kw loc*/ SourceLocation(), LAngleLoc,
239         llvm::makeArrayRef((NamedDecl *const *)LSI->AutoTemplateParams.data(),
240                            LSI->AutoTemplateParams.size()),
241         RAngleLoc, nullptr);
242   }
243   return LSI->GLTemplateParameterList;
244 }
245
246 CXXRecordDecl *Sema::createLambdaClosureType(SourceRange IntroducerRange,
247                                              TypeSourceInfo *Info,
248                                              bool KnownDependent, 
249                                              LambdaCaptureDefault CaptureDefault) {
250   DeclContext *DC = CurContext;
251   while (!(DC->isFunctionOrMethod() || DC->isRecord() || DC->isFileContext()))
252     DC = DC->getParent();
253   bool IsGenericLambda = getGenericLambdaTemplateParameterList(getCurLambda(),
254                                                                *this);  
255   // Start constructing the lambda class.
256   CXXRecordDecl *Class = CXXRecordDecl::CreateLambda(Context, DC, Info,
257                                                      IntroducerRange.getBegin(),
258                                                      KnownDependent, 
259                                                      IsGenericLambda, 
260                                                      CaptureDefault);
261   DC->addDecl(Class);
262
263   return Class;
264 }
265
266 /// \brief 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 MangleNumberingContext *
281 Sema::getCurrentMangleNumberContext(const DeclContext *DC,
282                                     Decl *&ManglingContextDecl) {
283   // Compute the context for allocating mangling numbers in the current
284   // expression, if the ABI requires them.
285   ManglingContextDecl = ExprEvalContexts.back().ManglingContextDecl;
286
287   enum ContextKind {
288     Normal,
289     DefaultArgument,
290     DataMember,
291     StaticDataMember
292   } Kind = Normal;
293
294   // Default arguments of member function parameters that appear in a class
295   // definition, as well as the initializers of data members, receive special
296   // treatment. Identify them.
297   if (ManglingContextDecl) {
298     if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(ManglingContextDecl)) {
299       if (const DeclContext *LexicalDC
300           = Param->getDeclContext()->getLexicalParent())
301         if (LexicalDC->isRecord())
302           Kind = DefaultArgument;
303     } else if (VarDecl *Var = dyn_cast<VarDecl>(ManglingContextDecl)) {
304       if (Var->getDeclContext()->isRecord())
305         Kind = StaticDataMember;
306     } else if (isa<FieldDecl>(ManglingContextDecl)) {
307       Kind = DataMember;
308     }
309   }
310
311   // Itanium ABI [5.1.7]:
312   //   In the following contexts [...] the one-definition rule requires closure
313   //   types in different translation units to "correspond":
314   bool IsInNonspecializedTemplate =
315     !ActiveTemplateInstantiations.empty() || CurContext->isDependentContext();
316   switch (Kind) {
317   case Normal: {
318     //  -- the bodies of non-exported nonspecialized template functions
319     //  -- the bodies of inline functions
320     if ((IsInNonspecializedTemplate &&
321          !(ManglingContextDecl && isa<ParmVarDecl>(ManglingContextDecl))) ||
322         isInInlineFunction(CurContext)) {
323       ManglingContextDecl = nullptr;
324       while (auto *CD = dyn_cast<CapturedDecl>(DC))
325         DC = CD->getParent();
326       return &Context.getManglingNumberContext(DC);
327     }
328
329     ManglingContextDecl = nullptr;
330     return nullptr;
331   }
332
333   case StaticDataMember:
334     //  -- the initializers of nonspecialized static members of template classes
335     if (!IsInNonspecializedTemplate) {
336       ManglingContextDecl = nullptr;
337       return nullptr;
338     }
339     // Fall through to get the current context.
340
341   case DataMember:
342     //  -- the in-class initializers of class members
343   case DefaultArgument:
344     //  -- default arguments appearing in class definitions
345     return &ExprEvalContexts.back().getMangleNumberingContext(Context);
346   }
347
348   llvm_unreachable("unexpected context");
349 }
350
351 MangleNumberingContext &
352 Sema::ExpressionEvaluationContextRecord::getMangleNumberingContext(
353     ASTContext &Ctx) {
354   assert(ManglingContextDecl && "Need to have a context declaration");
355   if (!MangleNumbering)
356     MangleNumbering = Ctx.createMangleNumberingContext();
357   return *MangleNumbering;
358 }
359
360 CXXMethodDecl *Sema::startLambdaDefinition(CXXRecordDecl *Class,
361                                            SourceRange IntroducerRange,
362                                            TypeSourceInfo *MethodTypeInfo,
363                                            SourceLocation EndLoc,
364                                            ArrayRef<ParmVarDecl *> Params,
365                                            const bool IsConstexprSpecified) {
366   QualType MethodType = MethodTypeInfo->getType();
367   TemplateParameterList *TemplateParams = 
368             getGenericLambdaTemplateParameterList(getCurLambda(), *this);
369   // If a lambda appears in a dependent context or is a generic lambda (has
370   // template parameters) and has an 'auto' return type, deduce it to a 
371   // dependent type.
372   if (Class->isDependentContext() || TemplateParams) {
373     const FunctionProtoType *FPT = MethodType->castAs<FunctionProtoType>();
374     QualType Result = FPT->getReturnType();
375     if (Result->isUndeducedType()) {
376       Result = SubstAutoType(Result, Context.DependentTy);
377       MethodType = Context.getFunctionType(Result, FPT->getParamTypes(),
378                                            FPT->getExtProtoInfo());
379     }
380   }
381
382   // C++11 [expr.prim.lambda]p5:
383   //   The closure type for a lambda-expression has a public inline function 
384   //   call operator (13.5.4) whose parameters and return type are described by
385   //   the lambda-expression's parameter-declaration-clause and 
386   //   trailing-return-type respectively.
387   DeclarationName MethodName
388     = Context.DeclarationNames.getCXXOperatorName(OO_Call);
389   DeclarationNameLoc MethodNameLoc;
390   MethodNameLoc.CXXOperatorName.BeginOpNameLoc
391     = IntroducerRange.getBegin().getRawEncoding();
392   MethodNameLoc.CXXOperatorName.EndOpNameLoc
393     = IntroducerRange.getEnd().getRawEncoding();
394   CXXMethodDecl *Method
395     = CXXMethodDecl::Create(Context, Class, EndLoc,
396                             DeclarationNameInfo(MethodName, 
397                                                 IntroducerRange.getBegin(),
398                                                 MethodNameLoc),
399                             MethodType, MethodTypeInfo,
400                             SC_None,
401                             /*isInline=*/true,
402                             IsConstexprSpecified,
403                             EndLoc);
404   Method->setAccess(AS_public);
405   
406   // Temporarily set the lexical declaration context to the current
407   // context, so that the Scope stack matches the lexical nesting.
408   Method->setLexicalDeclContext(CurContext);  
409   // Create a function template if we have a template parameter list
410   FunctionTemplateDecl *const TemplateMethod = TemplateParams ?
411             FunctionTemplateDecl::Create(Context, Class,
412                                          Method->getLocation(), MethodName, 
413                                          TemplateParams,
414                                          Method) : nullptr;
415   if (TemplateMethod) {
416     TemplateMethod->setLexicalDeclContext(CurContext);
417     TemplateMethod->setAccess(AS_public);
418     Method->setDescribedFunctionTemplate(TemplateMethod);
419   }
420   
421   // Add parameters.
422   if (!Params.empty()) {
423     Method->setParams(Params);
424     CheckParmsForFunctionDef(Params,
425                              /*CheckParameterNames=*/false);
426
427     for (auto P : Method->parameters())
428       P->setOwningFunction(Method);
429   }
430
431   Decl *ManglingContextDecl;
432   if (MangleNumberingContext *MCtx =
433           getCurrentMangleNumberContext(Class->getDeclContext(),
434                                         ManglingContextDecl)) {
435     unsigned ManglingNumber = MCtx->getManglingNumber(Method);
436     Class->setLambdaMangling(ManglingNumber, ManglingContextDecl);
437   }
438
439   return Method;
440 }
441
442 void Sema::buildLambdaScope(LambdaScopeInfo *LSI,
443                                         CXXMethodDecl *CallOperator,
444                                         SourceRange IntroducerRange,
445                                         LambdaCaptureDefault CaptureDefault,
446                                         SourceLocation CaptureDefaultLoc,
447                                         bool ExplicitParams,
448                                         bool ExplicitResultType,
449                                         bool Mutable) {
450   LSI->CallOperator = CallOperator;
451   CXXRecordDecl *LambdaClass = CallOperator->getParent();
452   LSI->Lambda = LambdaClass;
453   if (CaptureDefault == LCD_ByCopy)
454     LSI->ImpCaptureStyle = LambdaScopeInfo::ImpCap_LambdaByval;
455   else if (CaptureDefault == LCD_ByRef)
456     LSI->ImpCaptureStyle = LambdaScopeInfo::ImpCap_LambdaByref;
457   LSI->CaptureDefaultLoc = CaptureDefaultLoc;
458   LSI->IntroducerRange = IntroducerRange;
459   LSI->ExplicitParams = ExplicitParams;
460   LSI->Mutable = Mutable;
461
462   if (ExplicitResultType) {
463     LSI->ReturnType = CallOperator->getReturnType();
464
465     if (!LSI->ReturnType->isDependentType() &&
466         !LSI->ReturnType->isVoidType()) {
467       if (RequireCompleteType(CallOperator->getLocStart(), LSI->ReturnType,
468                               diag::err_lambda_incomplete_result)) {
469         // Do nothing.
470       }
471     }
472   } else {
473     LSI->HasImplicitReturnType = true;
474   }
475 }
476
477 void Sema::finishLambdaExplicitCaptures(LambdaScopeInfo *LSI) {
478   LSI->finishedExplicitCaptures();
479 }
480
481 void Sema::addLambdaParameters(CXXMethodDecl *CallOperator, Scope *CurScope) {  
482   // Introduce our parameters into the function scope
483   for (unsigned p = 0, NumParams = CallOperator->getNumParams(); 
484        p < NumParams; ++p) {
485     ParmVarDecl *Param = CallOperator->getParamDecl(p);
486     
487     // If this has an identifier, add it to the scope stack.
488     if (CurScope && Param->getIdentifier()) {
489       CheckShadow(CurScope, Param);
490       
491       PushOnScopeChains(Param, CurScope);
492     }
493   }
494 }
495
496 /// If this expression is an enumerator-like expression of some type
497 /// T, return the type T; otherwise, return null.
498 ///
499 /// Pointer comparisons on the result here should always work because
500 /// it's derived from either the parent of an EnumConstantDecl
501 /// (i.e. the definition) or the declaration returned by
502 /// EnumType::getDecl() (i.e. the definition).
503 static EnumDecl *findEnumForBlockReturn(Expr *E) {
504   // An expression is an enumerator-like expression of type T if,
505   // ignoring parens and parens-like expressions:
506   E = E->IgnoreParens();
507
508   //  - it is an enumerator whose enum type is T or
509   if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {
510     if (EnumConstantDecl *D
511           = dyn_cast<EnumConstantDecl>(DRE->getDecl())) {
512       return cast<EnumDecl>(D->getDeclContext());
513     }
514     return nullptr;
515   }
516
517   //  - it is a comma expression whose RHS is an enumerator-like
518   //    expression of type T or
519   if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
520     if (BO->getOpcode() == BO_Comma)
521       return findEnumForBlockReturn(BO->getRHS());
522     return nullptr;
523   }
524
525   //  - it is a statement-expression whose value expression is an
526   //    enumerator-like expression of type T or
527   if (StmtExpr *SE = dyn_cast<StmtExpr>(E)) {
528     if (Expr *last = dyn_cast_or_null<Expr>(SE->getSubStmt()->body_back()))
529       return findEnumForBlockReturn(last);
530     return nullptr;
531   }
532
533   //   - it is a ternary conditional operator (not the GNU ?:
534   //     extension) whose second and third operands are
535   //     enumerator-like expressions of type T or
536   if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
537     if (EnumDecl *ED = findEnumForBlockReturn(CO->getTrueExpr()))
538       if (ED == findEnumForBlockReturn(CO->getFalseExpr()))
539         return ED;
540     return nullptr;
541   }
542
543   // (implicitly:)
544   //   - it is an implicit integral conversion applied to an
545   //     enumerator-like expression of type T or
546   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
547     // We can sometimes see integral conversions in valid
548     // enumerator-like expressions.
549     if (ICE->getCastKind() == CK_IntegralCast)
550       return findEnumForBlockReturn(ICE->getSubExpr());
551
552     // Otherwise, just rely on the type.
553   }
554
555   //   - it is an expression of that formal enum type.
556   if (const EnumType *ET = E->getType()->getAs<EnumType>()) {
557     return ET->getDecl();
558   }
559
560   // Otherwise, nope.
561   return nullptr;
562 }
563
564 /// Attempt to find a type T for which the returned expression of the
565 /// given statement is an enumerator-like expression of that type.
566 static EnumDecl *findEnumForBlockReturn(ReturnStmt *ret) {
567   if (Expr *retValue = ret->getRetValue())
568     return findEnumForBlockReturn(retValue);
569   return nullptr;
570 }
571
572 /// Attempt to find a common type T for which all of the returned
573 /// expressions in a block are enumerator-like expressions of that
574 /// type.
575 static EnumDecl *findCommonEnumForBlockReturns(ArrayRef<ReturnStmt*> returns) {
576   ArrayRef<ReturnStmt*>::iterator i = returns.begin(), e = returns.end();
577
578   // Try to find one for the first return.
579   EnumDecl *ED = findEnumForBlockReturn(*i);
580   if (!ED) return nullptr;
581
582   // Check that the rest of the returns have the same enum.
583   for (++i; i != e; ++i) {
584     if (findEnumForBlockReturn(*i) != ED)
585       return nullptr;
586   }
587
588   // Never infer an anonymous enum type.
589   if (!ED->hasNameForLinkage()) return nullptr;
590
591   return ED;
592 }
593
594 /// Adjust the given return statements so that they formally return
595 /// the given type.  It should require, at most, an IntegralCast.
596 static void adjustBlockReturnsToEnum(Sema &S, ArrayRef<ReturnStmt*> returns,
597                                      QualType returnType) {
598   for (ArrayRef<ReturnStmt*>::iterator
599          i = returns.begin(), e = returns.end(); i != e; ++i) {
600     ReturnStmt *ret = *i;
601     Expr *retValue = ret->getRetValue();
602     if (S.Context.hasSameType(retValue->getType(), returnType))
603       continue;
604
605     // Right now we only support integral fixup casts.
606     assert(returnType->isIntegralOrUnscopedEnumerationType());
607     assert(retValue->getType()->isIntegralOrUnscopedEnumerationType());
608
609     ExprWithCleanups *cleanups = dyn_cast<ExprWithCleanups>(retValue);
610
611     Expr *E = (cleanups ? cleanups->getSubExpr() : retValue);
612     E = ImplicitCastExpr::Create(S.Context, returnType, CK_IntegralCast,
613                                  E, /*base path*/ nullptr, VK_RValue);
614     if (cleanups) {
615       cleanups->setSubExpr(E);
616     } else {
617       ret->setRetValue(E);
618     }
619   }
620 }
621
622 void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {
623   assert(CSI.HasImplicitReturnType);
624   // If it was ever a placeholder, it had to been deduced to DependentTy.
625   assert(CSI.ReturnType.isNull() || !CSI.ReturnType->isUndeducedType()); 
626   assert((!isa<LambdaScopeInfo>(CSI) || !getLangOpts().CPlusPlus14) &&
627          "lambda expressions use auto deduction in C++14 onwards");
628
629   // C++ core issue 975:
630   //   If a lambda-expression does not include a trailing-return-type,
631   //   it is as if the trailing-return-type denotes the following type:
632   //     - if there are no return statements in the compound-statement,
633   //       or all return statements return either an expression of type
634   //       void or no expression or braced-init-list, the type void;
635   //     - otherwise, if all return statements return an expression
636   //       and the types of the returned expressions after
637   //       lvalue-to-rvalue conversion (4.1 [conv.lval]),
638   //       array-to-pointer conversion (4.2 [conv.array]), and
639   //       function-to-pointer conversion (4.3 [conv.func]) are the
640   //       same, that common type;
641   //     - otherwise, the program is ill-formed.
642   //
643   // C++ core issue 1048 additionally removes top-level cv-qualifiers
644   // from the types of returned expressions to match the C++14 auto
645   // deduction rules.
646   //
647   // In addition, in blocks in non-C++ modes, if all of the return
648   // statements are enumerator-like expressions of some type T, where
649   // T has a name for linkage, then we infer the return type of the
650   // block to be that type.
651
652   // First case: no return statements, implicit void return type.
653   ASTContext &Ctx = getASTContext();
654   if (CSI.Returns.empty()) {
655     // It's possible there were simply no /valid/ return statements.
656     // In this case, the first one we found may have at least given us a type.
657     if (CSI.ReturnType.isNull())
658       CSI.ReturnType = Ctx.VoidTy;
659     return;
660   }
661
662   // Second case: at least one return statement has dependent type.
663   // Delay type checking until instantiation.
664   assert(!CSI.ReturnType.isNull() && "We should have a tentative return type.");
665   if (CSI.ReturnType->isDependentType())
666     return;
667
668   // Try to apply the enum-fuzz rule.
669   if (!getLangOpts().CPlusPlus) {
670     assert(isa<BlockScopeInfo>(CSI));
671     const EnumDecl *ED = findCommonEnumForBlockReturns(CSI.Returns);
672     if (ED) {
673       CSI.ReturnType = Context.getTypeDeclType(ED);
674       adjustBlockReturnsToEnum(*this, CSI.Returns, CSI.ReturnType);
675       return;
676     }
677   }
678
679   // Third case: only one return statement. Don't bother doing extra work!
680   SmallVectorImpl<ReturnStmt*>::iterator I = CSI.Returns.begin(),
681                                          E = CSI.Returns.end();
682   if (I+1 == E)
683     return;
684
685   // General case: many return statements.
686   // Check that they all have compatible return types.
687
688   // We require the return types to strictly match here.
689   // Note that we've already done the required promotions as part of
690   // processing the return statement.
691   for (; I != E; ++I) {
692     const ReturnStmt *RS = *I;
693     const Expr *RetE = RS->getRetValue();
694
695     QualType ReturnType =
696         (RetE ? RetE->getType() : Context.VoidTy).getUnqualifiedType();
697     if (Context.getCanonicalFunctionResultType(ReturnType) ==
698           Context.getCanonicalFunctionResultType(CSI.ReturnType))
699       continue;
700
701     // FIXME: This is a poor diagnostic for ReturnStmts without expressions.
702     // TODO: It's possible that the *first* return is the divergent one.
703     Diag(RS->getLocStart(),
704          diag::err_typecheck_missing_return_type_incompatible)
705       << ReturnType << CSI.ReturnType
706       << isa<LambdaScopeInfo>(CSI);
707     // Continue iterating so that we keep emitting diagnostics.
708   }
709 }
710
711 QualType Sema::buildLambdaInitCaptureInitialization(SourceLocation Loc,
712                                                     bool ByRef,
713                                                     IdentifierInfo *Id,
714                                                     bool IsDirectInit,
715                                                     Expr *&Init) {
716   // Create an 'auto' or 'auto&' TypeSourceInfo that we can use to
717   // deduce against.
718   QualType DeductType = Context.getAutoDeductType();
719   TypeLocBuilder TLB;
720   TLB.pushTypeSpec(DeductType).setNameLoc(Loc);
721   if (ByRef) {
722     DeductType = BuildReferenceType(DeductType, true, Loc, Id);
723     assert(!DeductType.isNull() && "can't build reference to auto");
724     TLB.push<ReferenceTypeLoc>(DeductType).setSigilLoc(Loc);
725   }
726   TypeSourceInfo *TSI = TLB.getTypeSourceInfo(Context, DeductType);
727
728   // Deduce the type of the init capture.
729   QualType DeducedType = deduceVarTypeFromInitializer(
730       /*VarDecl*/nullptr, DeclarationName(Id), DeductType, TSI,
731       SourceRange(Loc, Loc), IsDirectInit, Init);
732   if (DeducedType.isNull())
733     return QualType();
734
735   // Are we a non-list direct initialization?
736   ParenListExpr *CXXDirectInit = dyn_cast<ParenListExpr>(Init);
737
738   // Perform initialization analysis and ensure any implicit conversions
739   // (such as lvalue-to-rvalue) are enforced.
740   InitializedEntity Entity =
741       InitializedEntity::InitializeLambdaCapture(Id, DeducedType, Loc);
742   InitializationKind Kind =
743       IsDirectInit
744           ? (CXXDirectInit ? InitializationKind::CreateDirect(
745                                  Loc, Init->getLocStart(), Init->getLocEnd())
746                            : InitializationKind::CreateDirectList(Loc))
747           : InitializationKind::CreateCopy(Loc, Init->getLocStart());
748
749   MultiExprArg Args = Init;
750   if (CXXDirectInit)
751     Args =
752         MultiExprArg(CXXDirectInit->getExprs(), CXXDirectInit->getNumExprs());
753   QualType DclT;
754   InitializationSequence InitSeq(*this, Entity, Kind, Args);
755   ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Args, &DclT);
756
757   if (Result.isInvalid())
758     return QualType();
759   Init = Result.getAs<Expr>();
760
761   // The init-capture initialization is a full-expression that must be
762   // processed as one before we enter the declcontext of the lambda's
763   // call-operator.
764   Result = ActOnFinishFullExpr(Init, Loc, /*DiscardedValue*/ false,
765                                /*IsConstexpr*/ false,
766                                /*IsLambdaInitCaptureInitalizer*/ true);
767   if (Result.isInvalid())
768     return QualType();
769
770   Init = Result.getAs<Expr>();
771   return DeducedType;
772 }
773
774 VarDecl *Sema::createLambdaInitCaptureVarDecl(SourceLocation Loc,
775                                               QualType InitCaptureType,
776                                               IdentifierInfo *Id,
777                                               unsigned InitStyle, Expr *Init) {
778   TypeSourceInfo *TSI = Context.getTrivialTypeSourceInfo(InitCaptureType,
779       Loc);
780   // Create a dummy variable representing the init-capture. This is not actually
781   // used as a variable, and only exists as a way to name and refer to the
782   // init-capture.
783   // FIXME: Pass in separate source locations for '&' and identifier.
784   VarDecl *NewVD = VarDecl::Create(Context, CurContext, Loc,
785                                    Loc, Id, InitCaptureType, TSI, SC_Auto);
786   NewVD->setInitCapture(true);
787   NewVD->setReferenced(true);
788   // FIXME: Pass in a VarDecl::InitializationStyle.
789   NewVD->setInitStyle(static_cast<VarDecl::InitializationStyle>(InitStyle));
790   NewVD->markUsed(Context);
791   NewVD->setInit(Init);
792   return NewVD;
793 }
794
795 FieldDecl *Sema::buildInitCaptureField(LambdaScopeInfo *LSI, VarDecl *Var) {
796   FieldDecl *Field = FieldDecl::Create(
797       Context, LSI->Lambda, Var->getLocation(), Var->getLocation(),
798       nullptr, Var->getType(), Var->getTypeSourceInfo(), nullptr, false,
799       ICIS_NoInit);
800   Field->setImplicit(true);
801   Field->setAccess(AS_private);
802   LSI->Lambda->addDecl(Field);
803
804   LSI->addCapture(Var, /*isBlock*/false, Var->getType()->isReferenceType(),
805                   /*isNested*/false, Var->getLocation(), SourceLocation(),
806                   Var->getType(), Var->getInit());
807   return Field;
808 }
809
810 void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro,
811                                         Declarator &ParamInfo,
812                                         Scope *CurScope) {
813   // Determine if we're within a context where we know that the lambda will
814   // be dependent, because there are template parameters in scope.
815   bool KnownDependent = false;
816   LambdaScopeInfo *const LSI = getCurLambda();
817   assert(LSI && "LambdaScopeInfo should be on stack!");
818
819   // The lambda-expression's closure type might be dependent even if its
820   // semantic context isn't, if it appears within a default argument of a
821   // function template.
822   if (CurScope->getTemplateParamParent())
823     KnownDependent = true;
824
825   // Determine the signature of the call operator.
826   TypeSourceInfo *MethodTyInfo;
827   bool ExplicitParams = true;
828   bool ExplicitResultType = true;
829   bool ContainsUnexpandedParameterPack = false;
830   SourceLocation EndLoc;
831   SmallVector<ParmVarDecl *, 8> Params;
832   if (ParamInfo.getNumTypeObjects() == 0) {
833     // C++11 [expr.prim.lambda]p4:
834     //   If a lambda-expression does not include a lambda-declarator, it is as 
835     //   if the lambda-declarator were ().
836     FunctionProtoType::ExtProtoInfo EPI(Context.getDefaultCallingConvention(
837         /*IsVariadic=*/false, /*IsCXXMethod=*/true));
838     EPI.HasTrailingReturn = true;
839     EPI.TypeQuals |= DeclSpec::TQ_const;
840     // C++1y [expr.prim.lambda]:
841     //   The lambda return type is 'auto', which is replaced by the
842     //   trailing-return type if provided and/or deduced from 'return'
843     //   statements
844     // We don't do this before C++1y, because we don't support deduced return
845     // types there.
846     QualType DefaultTypeForNoTrailingReturn =
847         getLangOpts().CPlusPlus14 ? Context.getAutoDeductType()
848                                   : Context.DependentTy;
849     QualType MethodTy =
850         Context.getFunctionType(DefaultTypeForNoTrailingReturn, None, EPI);
851     MethodTyInfo = Context.getTrivialTypeSourceInfo(MethodTy);
852     ExplicitParams = false;
853     ExplicitResultType = false;
854     EndLoc = Intro.Range.getEnd();
855   } else {
856     assert(ParamInfo.isFunctionDeclarator() &&
857            "lambda-declarator is a function");
858     DeclaratorChunk::FunctionTypeInfo &FTI = ParamInfo.getFunctionTypeInfo();
859
860     // C++11 [expr.prim.lambda]p5:
861     //   This function call operator is declared const (9.3.1) if and only if 
862     //   the lambda-expression's parameter-declaration-clause is not followed 
863     //   by mutable. It is neither virtual nor declared volatile. [...]
864     if (!FTI.hasMutableQualifier())
865       FTI.TypeQuals |= DeclSpec::TQ_const;
866
867     MethodTyInfo = GetTypeForDeclarator(ParamInfo, CurScope);
868     assert(MethodTyInfo && "no type from lambda-declarator");
869     EndLoc = ParamInfo.getSourceRange().getEnd();
870
871     ExplicitResultType = FTI.hasTrailingReturnType();
872
873     if (FTIHasNonVoidParameters(FTI)) {
874       Params.reserve(FTI.NumParams);
875       for (unsigned i = 0, e = FTI.NumParams; i != e; ++i)
876         Params.push_back(cast<ParmVarDecl>(FTI.Params[i].Param));
877     }
878
879     // Check for unexpanded parameter packs in the method type.
880     if (MethodTyInfo->getType()->containsUnexpandedParameterPack())
881       ContainsUnexpandedParameterPack = true;
882   }
883
884   CXXRecordDecl *Class = createLambdaClosureType(Intro.Range, MethodTyInfo,
885                                                  KnownDependent, Intro.Default);
886
887   CXXMethodDecl *Method =
888       startLambdaDefinition(Class, Intro.Range, MethodTyInfo, EndLoc, Params,
889                             ParamInfo.getDeclSpec().isConstexprSpecified());
890   if (ExplicitParams)
891     CheckCXXDefaultArguments(Method);
892   
893   // Attributes on the lambda apply to the method.  
894   ProcessDeclAttributes(CurScope, Method, ParamInfo);
895
896   // CUDA lambdas get implicit attributes based on the scope in which they're
897   // declared.
898   if (getLangOpts().CUDA)
899     CUDASetLambdaAttrs(Method);
900
901   // Introduce the function call operator as the current declaration context.
902   PushDeclContext(CurScope, Method);
903     
904   // Build the lambda scope.
905   buildLambdaScope(LSI, Method, Intro.Range, Intro.Default, Intro.DefaultLoc,
906                    ExplicitParams, ExplicitResultType, !Method->isConst());
907
908   // C++11 [expr.prim.lambda]p9:
909   //   A lambda-expression whose smallest enclosing scope is a block scope is a
910   //   local lambda expression; any other lambda expression shall not have a
911   //   capture-default or simple-capture in its lambda-introducer.
912   //
913   // For simple-captures, this is covered by the check below that any named
914   // entity is a variable that can be captured.
915   //
916   // For DR1632, we also allow a capture-default in any context where we can
917   // odr-use 'this' (in particular, in a default initializer for a non-static
918   // data member).
919   if (Intro.Default != LCD_None && !Class->getParent()->isFunctionOrMethod() &&
920       (getCurrentThisType().isNull() ||
921        CheckCXXThisCapture(SourceLocation(), /*Explicit*/true,
922                            /*BuildAndDiagnose*/false)))
923     Diag(Intro.DefaultLoc, diag::err_capture_default_non_local);
924
925   // Distinct capture names, for diagnostics.
926   llvm::SmallSet<IdentifierInfo*, 8> CaptureNames;
927
928   // Handle explicit captures.
929   SourceLocation PrevCaptureLoc
930     = Intro.Default == LCD_None? Intro.Range.getBegin() : Intro.DefaultLoc;
931   for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E;
932        PrevCaptureLoc = C->Loc, ++C) {
933     if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {
934       if (C->Kind == LCK_StarThis) 
935         Diag(C->Loc, !getLangOpts().CPlusPlus1z
936                              ? diag::ext_star_this_lambda_capture_cxx1z
937                              : diag::warn_cxx14_compat_star_this_lambda_capture);
938
939       // C++11 [expr.prim.lambda]p8:
940       //   An identifier or this shall not appear more than once in a 
941       //   lambda-capture.
942       if (LSI->isCXXThisCaptured()) {
943         Diag(C->Loc, diag::err_capture_more_than_once)
944             << "'this'" << SourceRange(LSI->getCXXThisCapture().getLocation())
945             << FixItHint::CreateRemoval(
946                    SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));
947         continue;
948       }
949
950       // C++1z [expr.prim.lambda]p8:
951       //  If a lambda-capture includes a capture-default that is =, each
952       //  simple-capture of that lambda-capture shall be of the form "&
953       //  identifier" or "* this". [ Note: The form [&,this] is redundant but
954       //  accepted for compatibility with ISO C++14. --end note ]
955       if (Intro.Default == LCD_ByCopy && C->Kind != LCK_StarThis) {
956         Diag(C->Loc, diag::err_this_capture_with_copy_default)
957             << FixItHint::CreateRemoval(
958                 SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));
959         continue;
960       }
961
962       // C++11 [expr.prim.lambda]p12:
963       //   If this is captured by a local lambda expression, its nearest
964       //   enclosing function shall be a non-static member function.
965       QualType ThisCaptureType = getCurrentThisType();
966       if (ThisCaptureType.isNull()) {
967         Diag(C->Loc, diag::err_this_capture) << true;
968         continue;
969       }
970       
971       CheckCXXThisCapture(C->Loc, /*Explicit=*/true, /*BuildAndDiagnose*/ true,
972                           /*FunctionScopeIndexToStopAtPtr*/ nullptr,
973                           C->Kind == LCK_StarThis);
974       continue;
975     }
976
977     assert(C->Id && "missing identifier for capture");
978
979     if (C->Init.isInvalid())
980       continue;
981
982     VarDecl *Var = nullptr;
983     if (C->Init.isUsable()) {
984       Diag(C->Loc, getLangOpts().CPlusPlus14
985                        ? diag::warn_cxx11_compat_init_capture
986                        : diag::ext_init_capture);
987
988       if (C->Init.get()->containsUnexpandedParameterPack())
989         ContainsUnexpandedParameterPack = true;
990       // If the initializer expression is usable, but the InitCaptureType
991       // is not, then an error has occurred - so ignore the capture for now.
992       // for e.g., [n{0}] { }; <-- if no <initializer_list> is included.
993       // FIXME: we should create the init capture variable and mark it invalid 
994       // in this case.
995       if (C->InitCaptureType.get().isNull()) 
996         continue;
997
998       unsigned InitStyle;
999       switch (C->InitKind) {
1000       case LambdaCaptureInitKind::NoInit:
1001         llvm_unreachable("not an init-capture?");
1002       case LambdaCaptureInitKind::CopyInit:
1003         InitStyle = VarDecl::CInit;
1004         break;
1005       case LambdaCaptureInitKind::DirectInit:
1006         InitStyle = VarDecl::CallInit;
1007         break;
1008       case LambdaCaptureInitKind::ListInit:
1009         InitStyle = VarDecl::ListInit;
1010         break;
1011       }
1012       Var = createLambdaInitCaptureVarDecl(C->Loc, C->InitCaptureType.get(),
1013                                            C->Id, InitStyle, C->Init.get());
1014       // C++1y [expr.prim.lambda]p11:
1015       //   An init-capture behaves as if it declares and explicitly
1016       //   captures a variable [...] whose declarative region is the
1017       //   lambda-expression's compound-statement
1018       if (Var)
1019         PushOnScopeChains(Var, CurScope, false);
1020     } else {
1021       assert(C->InitKind == LambdaCaptureInitKind::NoInit &&
1022              "init capture has valid but null init?");
1023
1024       // C++11 [expr.prim.lambda]p8:
1025       //   If a lambda-capture includes a capture-default that is &, the 
1026       //   identifiers in the lambda-capture shall not be preceded by &.
1027       //   If a lambda-capture includes a capture-default that is =, [...]
1028       //   each identifier it contains shall be preceded by &.
1029       if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {
1030         Diag(C->Loc, diag::err_reference_capture_with_reference_default)
1031             << FixItHint::CreateRemoval(
1032                 SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));
1033         continue;
1034       } else if (C->Kind == LCK_ByCopy && Intro.Default == LCD_ByCopy) {
1035         Diag(C->Loc, diag::err_copy_capture_with_copy_default)
1036             << FixItHint::CreateRemoval(
1037                 SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));
1038         continue;
1039       }
1040
1041       // C++11 [expr.prim.lambda]p10:
1042       //   The identifiers in a capture-list are looked up using the usual
1043       //   rules for unqualified name lookup (3.4.1)
1044       DeclarationNameInfo Name(C->Id, C->Loc);
1045       LookupResult R(*this, Name, LookupOrdinaryName);
1046       LookupName(R, CurScope);
1047       if (R.isAmbiguous())
1048         continue;
1049       if (R.empty()) {
1050         // FIXME: Disable corrections that would add qualification?
1051         CXXScopeSpec ScopeSpec;
1052         if (DiagnoseEmptyLookup(CurScope, ScopeSpec, R,
1053                                 llvm::make_unique<DeclFilterCCC<VarDecl>>()))
1054           continue;
1055       }
1056
1057       Var = R.getAsSingle<VarDecl>();
1058       if (Var && DiagnoseUseOfDecl(Var, C->Loc))
1059         continue;
1060     }
1061
1062     // C++11 [expr.prim.lambda]p8:
1063     //   An identifier or this shall not appear more than once in a
1064     //   lambda-capture.
1065     if (!CaptureNames.insert(C->Id).second) {
1066       if (Var && LSI->isCaptured(Var)) {
1067         Diag(C->Loc, diag::err_capture_more_than_once)
1068             << C->Id << SourceRange(LSI->getCapture(Var).getLocation())
1069             << FixItHint::CreateRemoval(
1070                    SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));
1071       } else
1072         // Previous capture captured something different (one or both was
1073         // an init-cpature): no fixit.
1074         Diag(C->Loc, diag::err_capture_more_than_once) << C->Id;
1075       continue;
1076     }
1077
1078     // C++11 [expr.prim.lambda]p10:
1079     //   [...] each such lookup shall find a variable with automatic storage
1080     //   duration declared in the reaching scope of the local lambda expression.
1081     // Note that the 'reaching scope' check happens in tryCaptureVariable().
1082     if (!Var) {
1083       Diag(C->Loc, diag::err_capture_does_not_name_variable) << C->Id;
1084       continue;
1085     }
1086
1087     // Ignore invalid decls; they'll just confuse the code later.
1088     if (Var->isInvalidDecl())
1089       continue;
1090
1091     if (!Var->hasLocalStorage()) {
1092       Diag(C->Loc, diag::err_capture_non_automatic_variable) << C->Id;
1093       Diag(Var->getLocation(), diag::note_previous_decl) << C->Id;
1094       continue;
1095     }
1096
1097     // C++11 [expr.prim.lambda]p23:
1098     //   A capture followed by an ellipsis is a pack expansion (14.5.3).
1099     SourceLocation EllipsisLoc;
1100     if (C->EllipsisLoc.isValid()) {
1101       if (Var->isParameterPack()) {
1102         EllipsisLoc = C->EllipsisLoc;
1103       } else {
1104         Diag(C->EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
1105           << SourceRange(C->Loc);
1106         
1107         // Just ignore the ellipsis.
1108       }
1109     } else if (Var->isParameterPack()) {
1110       ContainsUnexpandedParameterPack = true;
1111     }
1112
1113     if (C->Init.isUsable()) {
1114       buildInitCaptureField(LSI, Var);
1115     } else {
1116       TryCaptureKind Kind = C->Kind == LCK_ByRef ? TryCapture_ExplicitByRef :
1117                                                    TryCapture_ExplicitByVal;
1118       tryCaptureVariable(Var, C->Loc, Kind, EllipsisLoc);
1119     }
1120   }
1121   finishLambdaExplicitCaptures(LSI);
1122
1123   LSI->ContainsUnexpandedParameterPack = ContainsUnexpandedParameterPack;
1124
1125   // Add lambda parameters into scope.
1126   addLambdaParameters(Method, CurScope);
1127
1128   // Enter a new evaluation context to insulate the lambda from any
1129   // cleanups from the enclosing full-expression.
1130   PushExpressionEvaluationContext(PotentiallyEvaluated);  
1131 }
1132
1133 void Sema::ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope,
1134                             bool IsInstantiation) {
1135   LambdaScopeInfo *LSI = cast<LambdaScopeInfo>(FunctionScopes.back());
1136
1137   // Leave the expression-evaluation context.
1138   DiscardCleanupsInEvaluationContext();
1139   PopExpressionEvaluationContext();
1140
1141   // Leave the context of the lambda.
1142   if (!IsInstantiation)
1143     PopDeclContext();
1144
1145   // Finalize the lambda.
1146   CXXRecordDecl *Class = LSI->Lambda;
1147   Class->setInvalidDecl();
1148   SmallVector<Decl*, 4> Fields(Class->fields());
1149   ActOnFields(nullptr, Class->getLocation(), Class, Fields, SourceLocation(),
1150               SourceLocation(), nullptr);
1151   CheckCompletedCXXClass(Class);
1152
1153   PopFunctionScopeInfo();
1154 }
1155
1156 /// \brief Add a lambda's conversion to function pointer, as described in
1157 /// C++11 [expr.prim.lambda]p6.
1158 static void addFunctionPointerConversion(Sema &S,
1159                                          SourceRange IntroducerRange,
1160                                          CXXRecordDecl *Class,
1161                                          CXXMethodDecl *CallOperator) {
1162   // This conversion is explicitly disabled if the lambda's function has
1163   // pass_object_size attributes on any of its parameters.
1164   auto HasPassObjectSizeAttr = [](const ParmVarDecl *P) {
1165     return P->hasAttr<PassObjectSizeAttr>();
1166   };
1167   if (llvm::any_of(CallOperator->parameters(), HasPassObjectSizeAttr))
1168     return;
1169
1170   // Add the conversion to function pointer.
1171   const FunctionProtoType *CallOpProto = 
1172       CallOperator->getType()->getAs<FunctionProtoType>();
1173   const FunctionProtoType::ExtProtoInfo CallOpExtInfo = 
1174       CallOpProto->getExtProtoInfo();   
1175   QualType PtrToFunctionTy;
1176   QualType InvokerFunctionTy;
1177   {
1178     FunctionProtoType::ExtProtoInfo InvokerExtInfo = CallOpExtInfo;
1179     CallingConv CC = S.Context.getDefaultCallingConvention(
1180         CallOpProto->isVariadic(), /*IsCXXMethod=*/false);
1181     InvokerExtInfo.ExtInfo = InvokerExtInfo.ExtInfo.withCallingConv(CC);
1182     InvokerExtInfo.TypeQuals = 0;
1183     assert(InvokerExtInfo.RefQualifier == RQ_None && 
1184         "Lambda's call operator should not have a reference qualifier");
1185     InvokerFunctionTy =
1186         S.Context.getFunctionType(CallOpProto->getReturnType(),
1187                                   CallOpProto->getParamTypes(), InvokerExtInfo);
1188     PtrToFunctionTy = S.Context.getPointerType(InvokerFunctionTy);
1189   }
1190
1191   // Create the type of the conversion function.
1192   FunctionProtoType::ExtProtoInfo ConvExtInfo(
1193       S.Context.getDefaultCallingConvention(
1194       /*IsVariadic=*/false, /*IsCXXMethod=*/true));
1195   // The conversion function is always const.
1196   ConvExtInfo.TypeQuals = Qualifiers::Const;
1197   QualType ConvTy = 
1198       S.Context.getFunctionType(PtrToFunctionTy, None, ConvExtInfo);
1199
1200   SourceLocation Loc = IntroducerRange.getBegin();
1201   DeclarationName ConversionName
1202     = S.Context.DeclarationNames.getCXXConversionFunctionName(
1203         S.Context.getCanonicalType(PtrToFunctionTy));
1204   DeclarationNameLoc ConvNameLoc;
1205   // Construct a TypeSourceInfo for the conversion function, and wire
1206   // all the parameters appropriately for the FunctionProtoTypeLoc 
1207   // so that everything works during transformation/instantiation of 
1208   // generic lambdas.
1209   // The main reason for wiring up the parameters of the conversion
1210   // function with that of the call operator is so that constructs
1211   // like the following work:
1212   // auto L = [](auto b) {                <-- 1
1213   //   return [](auto a) -> decltype(a) { <-- 2
1214   //      return a;
1215   //   };
1216   // };
1217   // int (*fp)(int) = L(5);  
1218   // Because the trailing return type can contain DeclRefExprs that refer
1219   // to the original call operator's variables, we hijack the call 
1220   // operators ParmVarDecls below.
1221   TypeSourceInfo *ConvNamePtrToFunctionTSI = 
1222       S.Context.getTrivialTypeSourceInfo(PtrToFunctionTy, Loc);
1223   ConvNameLoc.NamedType.TInfo = ConvNamePtrToFunctionTSI;
1224
1225   // The conversion function is a conversion to a pointer-to-function.
1226   TypeSourceInfo *ConvTSI = S.Context.getTrivialTypeSourceInfo(ConvTy, Loc);
1227   FunctionProtoTypeLoc ConvTL = 
1228       ConvTSI->getTypeLoc().getAs<FunctionProtoTypeLoc>();
1229   // Get the result of the conversion function which is a pointer-to-function.
1230   PointerTypeLoc PtrToFunctionTL = 
1231       ConvTL.getReturnLoc().getAs<PointerTypeLoc>();
1232   // Do the same for the TypeSourceInfo that is used to name the conversion
1233   // operator.
1234   PointerTypeLoc ConvNamePtrToFunctionTL = 
1235       ConvNamePtrToFunctionTSI->getTypeLoc().getAs<PointerTypeLoc>();
1236   
1237   // Get the underlying function types that the conversion function will
1238   // be converting to (should match the type of the call operator).
1239   FunctionProtoTypeLoc CallOpConvTL = 
1240       PtrToFunctionTL.getPointeeLoc().getAs<FunctionProtoTypeLoc>();
1241   FunctionProtoTypeLoc CallOpConvNameTL = 
1242     ConvNamePtrToFunctionTL.getPointeeLoc().getAs<FunctionProtoTypeLoc>();
1243   
1244   // Wire up the FunctionProtoTypeLocs with the call operator's parameters.
1245   // These parameter's are essentially used to transform the name and
1246   // the type of the conversion operator.  By using the same parameters
1247   // as the call operator's we don't have to fix any back references that
1248   // the trailing return type of the call operator's uses (such as 
1249   // decltype(some_type<decltype(a)>::type{} + decltype(a){}) etc.)
1250   // - we can simply use the return type of the call operator, and 
1251   // everything should work. 
1252   SmallVector<ParmVarDecl *, 4> InvokerParams;
1253   for (unsigned I = 0, N = CallOperator->getNumParams(); I != N; ++I) {
1254     ParmVarDecl *From = CallOperator->getParamDecl(I);
1255
1256     InvokerParams.push_back(ParmVarDecl::Create(S.Context, 
1257            // Temporarily add to the TU. This is set to the invoker below.
1258                                              S.Context.getTranslationUnitDecl(),
1259                                              From->getLocStart(),
1260                                              From->getLocation(),
1261                                              From->getIdentifier(),
1262                                              From->getType(),
1263                                              From->getTypeSourceInfo(),
1264                                              From->getStorageClass(),
1265                                              /*DefaultArg=*/nullptr));
1266     CallOpConvTL.setParam(I, From);
1267     CallOpConvNameTL.setParam(I, From);
1268   }
1269
1270   CXXConversionDecl *Conversion 
1271     = CXXConversionDecl::Create(S.Context, Class, Loc, 
1272                                 DeclarationNameInfo(ConversionName, 
1273                                   Loc, ConvNameLoc),
1274                                 ConvTy, 
1275                                 ConvTSI,
1276                                 /*isInline=*/true, /*isExplicit=*/false,
1277                                 /*isConstexpr=*/false, 
1278                                 CallOperator->getBody()->getLocEnd());
1279   Conversion->setAccess(AS_public);
1280   Conversion->setImplicit(true);
1281
1282   if (Class->isGenericLambda()) {
1283     // Create a template version of the conversion operator, using the template
1284     // parameter list of the function call operator.
1285     FunctionTemplateDecl *TemplateCallOperator = 
1286             CallOperator->getDescribedFunctionTemplate();
1287     FunctionTemplateDecl *ConversionTemplate =
1288                   FunctionTemplateDecl::Create(S.Context, Class,
1289                                       Loc, ConversionName,
1290                                       TemplateCallOperator->getTemplateParameters(),
1291                                       Conversion);
1292     ConversionTemplate->setAccess(AS_public);
1293     ConversionTemplate->setImplicit(true);
1294     Conversion->setDescribedFunctionTemplate(ConversionTemplate);
1295     Class->addDecl(ConversionTemplate);
1296   } else
1297     Class->addDecl(Conversion);
1298   // Add a non-static member function that will be the result of
1299   // the conversion with a certain unique ID.
1300   DeclarationName InvokerName = &S.Context.Idents.get(
1301                                                  getLambdaStaticInvokerName());
1302   // FIXME: Instead of passing in the CallOperator->getTypeSourceInfo()
1303   // we should get a prebuilt TrivialTypeSourceInfo from Context
1304   // using FunctionTy & Loc and get its TypeLoc as a FunctionProtoTypeLoc
1305   // then rewire the parameters accordingly, by hoisting up the InvokeParams
1306   // loop below and then use its Params to set Invoke->setParams(...) below.
1307   // This would avoid the 'const' qualifier of the calloperator from 
1308   // contaminating the type of the invoker, which is currently adjusted 
1309   // in SemaTemplateDeduction.cpp:DeduceTemplateArguments.  Fixing the
1310   // trailing return type of the invoker would require a visitor to rebuild
1311   // the trailing return type and adjusting all back DeclRefExpr's to refer
1312   // to the new static invoker parameters - not the call operator's.
1313   CXXMethodDecl *Invoke
1314     = CXXMethodDecl::Create(S.Context, Class, Loc, 
1315                             DeclarationNameInfo(InvokerName, Loc), 
1316                             InvokerFunctionTy,
1317                             CallOperator->getTypeSourceInfo(), 
1318                             SC_Static, /*IsInline=*/true,
1319                             /*IsConstexpr=*/false, 
1320                             CallOperator->getBody()->getLocEnd());
1321   for (unsigned I = 0, N = CallOperator->getNumParams(); I != N; ++I)
1322     InvokerParams[I]->setOwningFunction(Invoke);
1323   Invoke->setParams(InvokerParams);
1324   Invoke->setAccess(AS_private);
1325   Invoke->setImplicit(true);
1326   if (Class->isGenericLambda()) {
1327     FunctionTemplateDecl *TemplateCallOperator = 
1328             CallOperator->getDescribedFunctionTemplate();
1329     FunctionTemplateDecl *StaticInvokerTemplate = FunctionTemplateDecl::Create(
1330                           S.Context, Class, Loc, InvokerName,
1331                           TemplateCallOperator->getTemplateParameters(),
1332                           Invoke);
1333     StaticInvokerTemplate->setAccess(AS_private);
1334     StaticInvokerTemplate->setImplicit(true);
1335     Invoke->setDescribedFunctionTemplate(StaticInvokerTemplate);
1336     Class->addDecl(StaticInvokerTemplate);
1337   } else
1338     Class->addDecl(Invoke);
1339 }
1340
1341 /// \brief Add a lambda's conversion to block pointer.
1342 static void addBlockPointerConversion(Sema &S, 
1343                                       SourceRange IntroducerRange,
1344                                       CXXRecordDecl *Class,
1345                                       CXXMethodDecl *CallOperator) {
1346   const FunctionProtoType *Proto =
1347       CallOperator->getType()->getAs<FunctionProtoType>();
1348
1349   // The function type inside the block pointer type is the same as the call
1350   // operator with some tweaks. The calling convention is the default free
1351   // function convention, and the type qualifications are lost.
1352   FunctionProtoType::ExtProtoInfo BlockEPI = Proto->getExtProtoInfo();
1353   BlockEPI.ExtInfo =
1354       BlockEPI.ExtInfo.withCallingConv(S.Context.getDefaultCallingConvention(
1355           Proto->isVariadic(), /*IsCXXMethod=*/false));
1356   BlockEPI.TypeQuals = 0;
1357   QualType FunctionTy = S.Context.getFunctionType(
1358       Proto->getReturnType(), Proto->getParamTypes(), BlockEPI);
1359   QualType BlockPtrTy = S.Context.getBlockPointerType(FunctionTy);
1360
1361   FunctionProtoType::ExtProtoInfo ConversionEPI(
1362       S.Context.getDefaultCallingConvention(
1363           /*IsVariadic=*/false, /*IsCXXMethod=*/true));
1364   ConversionEPI.TypeQuals = Qualifiers::Const;
1365   QualType ConvTy = S.Context.getFunctionType(BlockPtrTy, None, ConversionEPI);
1366
1367   SourceLocation Loc = IntroducerRange.getBegin();
1368   DeclarationName Name
1369     = S.Context.DeclarationNames.getCXXConversionFunctionName(
1370         S.Context.getCanonicalType(BlockPtrTy));
1371   DeclarationNameLoc NameLoc;
1372   NameLoc.NamedType.TInfo = S.Context.getTrivialTypeSourceInfo(BlockPtrTy, Loc);
1373   CXXConversionDecl *Conversion 
1374     = CXXConversionDecl::Create(S.Context, Class, Loc, 
1375                                 DeclarationNameInfo(Name, Loc, NameLoc),
1376                                 ConvTy, 
1377                                 S.Context.getTrivialTypeSourceInfo(ConvTy, Loc),
1378                                 /*isInline=*/true, /*isExplicit=*/false,
1379                                 /*isConstexpr=*/false, 
1380                                 CallOperator->getBody()->getLocEnd());
1381   Conversion->setAccess(AS_public);
1382   Conversion->setImplicit(true);
1383   Class->addDecl(Conversion);
1384 }
1385
1386 static ExprResult performLambdaVarCaptureInitialization(
1387     Sema &S, LambdaScopeInfo::Capture &Capture, FieldDecl *Field) {
1388   assert(Capture.isVariableCapture() && "not a variable capture");
1389
1390   auto *Var = Capture.getVariable();
1391   SourceLocation Loc = Capture.getLocation();
1392
1393   // C++11 [expr.prim.lambda]p21:
1394   //   When the lambda-expression is evaluated, the entities that
1395   //   are captured by copy are used to direct-initialize each
1396   //   corresponding non-static data member of the resulting closure
1397   //   object. (For array members, the array elements are
1398   //   direct-initialized in increasing subscript order.) These
1399   //   initializations are performed in the (unspecified) order in
1400   //   which the non-static data members are declared.
1401       
1402   // C++ [expr.prim.lambda]p12:
1403   //   An entity captured by a lambda-expression is odr-used (3.2) in
1404   //   the scope containing the lambda-expression.
1405   ExprResult RefResult = S.BuildDeclarationNameExpr(
1406       CXXScopeSpec(), DeclarationNameInfo(Var->getDeclName(), Loc), Var);
1407   if (RefResult.isInvalid())
1408     return ExprError();
1409   Expr *Ref = RefResult.get();
1410
1411   auto Entity = InitializedEntity::InitializeLambdaCapture(
1412       Var->getIdentifier(), Field->getType(), Loc);
1413   InitializationKind InitKind = InitializationKind::CreateDirect(Loc, Loc, Loc);
1414   InitializationSequence Init(S, Entity, InitKind, Ref);
1415   return Init.Perform(S, Entity, InitKind, Ref);
1416 }
1417          
1418 ExprResult Sema::ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body, 
1419                                  Scope *CurScope) {
1420   LambdaScopeInfo LSI = *cast<LambdaScopeInfo>(FunctionScopes.back());
1421   ActOnFinishFunctionBody(LSI.CallOperator, Body);
1422   return BuildLambdaExpr(StartLoc, Body->getLocEnd(), &LSI);
1423 }
1424
1425 static LambdaCaptureDefault
1426 mapImplicitCaptureStyle(CapturingScopeInfo::ImplicitCaptureStyle ICS) {
1427   switch (ICS) {
1428   case CapturingScopeInfo::ImpCap_None:
1429     return LCD_None;
1430   case CapturingScopeInfo::ImpCap_LambdaByval:
1431     return LCD_ByCopy;
1432   case CapturingScopeInfo::ImpCap_CapturedRegion:
1433   case CapturingScopeInfo::ImpCap_LambdaByref:
1434     return LCD_ByRef;
1435   case CapturingScopeInfo::ImpCap_Block:
1436     llvm_unreachable("block capture in lambda");
1437   }
1438   llvm_unreachable("Unknown implicit capture style");
1439 }
1440
1441 ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
1442                                  LambdaScopeInfo *LSI) {
1443   // Collect information from the lambda scope.
1444   SmallVector<LambdaCapture, 4> Captures;
1445   SmallVector<Expr *, 4> CaptureInits;
1446   SourceLocation CaptureDefaultLoc = LSI->CaptureDefaultLoc;
1447   LambdaCaptureDefault CaptureDefault =
1448       mapImplicitCaptureStyle(LSI->ImpCaptureStyle);
1449   CXXRecordDecl *Class;
1450   CXXMethodDecl *CallOperator;
1451   SourceRange IntroducerRange;
1452   bool ExplicitParams;
1453   bool ExplicitResultType;
1454   CleanupInfo LambdaCleanup;
1455   bool ContainsUnexpandedParameterPack;
1456   {
1457     CallOperator = LSI->CallOperator;
1458     Class = LSI->Lambda;
1459     IntroducerRange = LSI->IntroducerRange;
1460     ExplicitParams = LSI->ExplicitParams;
1461     ExplicitResultType = !LSI->HasImplicitReturnType;
1462     LambdaCleanup = LSI->Cleanup;
1463     ContainsUnexpandedParameterPack = LSI->ContainsUnexpandedParameterPack;
1464     
1465     CallOperator->setLexicalDeclContext(Class);
1466     Decl *TemplateOrNonTemplateCallOperatorDecl = 
1467         CallOperator->getDescribedFunctionTemplate()  
1468         ? CallOperator->getDescribedFunctionTemplate() 
1469         : cast<Decl>(CallOperator);
1470
1471     TemplateOrNonTemplateCallOperatorDecl->setLexicalDeclContext(Class);
1472     Class->addDecl(TemplateOrNonTemplateCallOperatorDecl);
1473
1474     PopExpressionEvaluationContext();
1475
1476     // Translate captures.
1477     auto CurField = Class->field_begin();
1478     for (unsigned I = 0, N = LSI->Captures.size(); I != N; ++I, ++CurField) {
1479       LambdaScopeInfo::Capture From = LSI->Captures[I];
1480       assert(!From.isBlockCapture() && "Cannot capture __block variables");
1481       bool IsImplicit = I >= LSI->NumExplicitCaptures;
1482
1483       // Handle 'this' capture.
1484       if (From.isThisCapture()) {
1485         Captures.push_back(
1486             LambdaCapture(From.getLocation(), IsImplicit,
1487                           From.isCopyCapture() ? LCK_StarThis : LCK_This));
1488         CaptureInits.push_back(From.getInitExpr());
1489         continue;
1490       }
1491       if (From.isVLATypeCapture()) {
1492         Captures.push_back(
1493             LambdaCapture(From.getLocation(), IsImplicit, LCK_VLAType));
1494         CaptureInits.push_back(nullptr);
1495         continue;
1496       }
1497
1498       VarDecl *Var = From.getVariable();
1499       LambdaCaptureKind Kind = From.isCopyCapture() ? LCK_ByCopy : LCK_ByRef;
1500       Captures.push_back(LambdaCapture(From.getLocation(), IsImplicit, Kind,
1501                                        Var, From.getEllipsisLoc()));
1502       Expr *Init = From.getInitExpr();
1503       if (!Init) {
1504         auto InitResult =
1505             performLambdaVarCaptureInitialization(*this, From, *CurField);
1506         if (InitResult.isInvalid())
1507           return ExprError();
1508         Init = InitResult.get();
1509       }
1510       CaptureInits.push_back(Init);
1511     }
1512
1513     // C++11 [expr.prim.lambda]p6:
1514     //   The closure type for a lambda-expression with no lambda-capture
1515     //   has a public non-virtual non-explicit const conversion function
1516     //   to pointer to function having the same parameter and return
1517     //   types as the closure type's function call operator.
1518     if (Captures.empty() && CaptureDefault == LCD_None)
1519       addFunctionPointerConversion(*this, IntroducerRange, Class,
1520                                    CallOperator);
1521
1522     // Objective-C++:
1523     //   The closure type for a lambda-expression has a public non-virtual
1524     //   non-explicit const conversion function to a block pointer having the
1525     //   same parameter and return types as the closure type's function call
1526     //   operator.
1527     // FIXME: Fix generic lambda to block conversions.
1528     if (getLangOpts().Blocks && getLangOpts().ObjC1 && 
1529                                               !Class->isGenericLambda())
1530       addBlockPointerConversion(*this, IntroducerRange, Class, CallOperator);
1531     
1532     // Finalize the lambda class.
1533     SmallVector<Decl*, 4> Fields(Class->fields());
1534     ActOnFields(nullptr, Class->getLocation(), Class, Fields, SourceLocation(),
1535                 SourceLocation(), nullptr);
1536     CheckCompletedCXXClass(Class);
1537   }
1538
1539   Cleanup.mergeFrom(LambdaCleanup);
1540
1541   LambdaExpr *Lambda = LambdaExpr::Create(Context, Class, IntroducerRange, 
1542                                           CaptureDefault, CaptureDefaultLoc,
1543                                           Captures, 
1544                                           ExplicitParams, ExplicitResultType,
1545                                           CaptureInits, EndLoc,
1546                                           ContainsUnexpandedParameterPack);
1547   // If the lambda expression's call operator is not explicitly marked constexpr
1548   // and we are not in a dependent context, analyze the call operator to infer
1549   // its constexpr-ness, supressing diagnostics while doing so.
1550   if (getLangOpts().CPlusPlus1z && !CallOperator->isInvalidDecl() &&
1551       !CallOperator->isConstexpr() &&
1552       !Class->getDeclContext()->isDependentContext()) {
1553     TentativeAnalysisScope DiagnosticScopeGuard(*this);
1554     CallOperator->setConstexpr(
1555         CheckConstexprFunctionDecl(CallOperator) &&
1556         CheckConstexprFunctionBody(CallOperator, CallOperator->getBody()));
1557   }
1558
1559   // Emit delayed shadowing warnings now that the full capture list is known.
1560   DiagnoseShadowingLambdaDecls(LSI);
1561
1562   if (!CurContext->isDependentContext()) {
1563     switch (ExprEvalContexts.back().Context) {
1564     // C++11 [expr.prim.lambda]p2:
1565     //   A lambda-expression shall not appear in an unevaluated operand
1566     //   (Clause 5).
1567     case Unevaluated:
1568     case UnevaluatedAbstract:
1569     // C++1y [expr.const]p2:
1570     //   A conditional-expression e is a core constant expression unless the
1571     //   evaluation of e, following the rules of the abstract machine, would
1572     //   evaluate [...] a lambda-expression.
1573     //
1574     // This is technically incorrect, there are some constant evaluated contexts
1575     // where this should be allowed.  We should probably fix this when DR1607 is
1576     // ratified, it lays out the exact set of conditions where we shouldn't
1577     // allow a lambda-expression.
1578     case ConstantEvaluated:
1579       // We don't actually diagnose this case immediately, because we
1580       // could be within a context where we might find out later that
1581       // the expression is potentially evaluated (e.g., for typeid).
1582       ExprEvalContexts.back().Lambdas.push_back(Lambda);
1583       break;
1584
1585     case DiscardedStatement:
1586     case PotentiallyEvaluated:
1587     case PotentiallyEvaluatedIfUsed:
1588       break;
1589     }
1590   }
1591
1592   return MaybeBindToTemporary(Lambda);
1593 }
1594
1595 ExprResult Sema::BuildBlockForLambdaConversion(SourceLocation CurrentLocation,
1596                                                SourceLocation ConvLocation,
1597                                                CXXConversionDecl *Conv,
1598                                                Expr *Src) {
1599   // Make sure that the lambda call operator is marked used.
1600   CXXRecordDecl *Lambda = Conv->getParent();
1601   CXXMethodDecl *CallOperator 
1602     = cast<CXXMethodDecl>(
1603         Lambda->lookup(
1604           Context.DeclarationNames.getCXXOperatorName(OO_Call)).front());
1605   CallOperator->setReferenced();
1606   CallOperator->markUsed(Context);
1607
1608   ExprResult Init = PerformCopyInitialization(
1609                       InitializedEntity::InitializeBlock(ConvLocation, 
1610                                                          Src->getType(), 
1611                                                          /*NRVO=*/false),
1612                       CurrentLocation, Src);
1613   if (!Init.isInvalid())
1614     Init = ActOnFinishFullExpr(Init.get());
1615   
1616   if (Init.isInvalid())
1617     return ExprError();
1618   
1619   // Create the new block to be returned.
1620   BlockDecl *Block = BlockDecl::Create(Context, CurContext, ConvLocation);
1621
1622   // Set the type information.
1623   Block->setSignatureAsWritten(CallOperator->getTypeSourceInfo());
1624   Block->setIsVariadic(CallOperator->isVariadic());
1625   Block->setBlockMissingReturnType(false);
1626
1627   // Add parameters.
1628   SmallVector<ParmVarDecl *, 4> BlockParams;
1629   for (unsigned I = 0, N = CallOperator->getNumParams(); I != N; ++I) {
1630     ParmVarDecl *From = CallOperator->getParamDecl(I);
1631     BlockParams.push_back(ParmVarDecl::Create(Context, Block,
1632                                               From->getLocStart(),
1633                                               From->getLocation(),
1634                                               From->getIdentifier(),
1635                                               From->getType(),
1636                                               From->getTypeSourceInfo(),
1637                                               From->getStorageClass(),
1638                                               /*DefaultArg=*/nullptr));
1639   }
1640   Block->setParams(BlockParams);
1641
1642   Block->setIsConversionFromLambda(true);
1643
1644   // Add capture. The capture uses a fake variable, which doesn't correspond
1645   // to any actual memory location. However, the initializer copy-initializes
1646   // the lambda object.
1647   TypeSourceInfo *CapVarTSI =
1648       Context.getTrivialTypeSourceInfo(Src->getType());
1649   VarDecl *CapVar = VarDecl::Create(Context, Block, ConvLocation,
1650                                     ConvLocation, nullptr,
1651                                     Src->getType(), CapVarTSI,
1652                                     SC_None);
1653   BlockDecl::Capture Capture(/*Variable=*/CapVar, /*ByRef=*/false,
1654                              /*Nested=*/false, /*Copy=*/Init.get());
1655   Block->setCaptures(Context, Capture, /*CapturesCXXThis=*/false);
1656
1657   // Add a fake function body to the block. IR generation is responsible
1658   // for filling in the actual body, which cannot be expressed as an AST.
1659   Block->setBody(new (Context) CompoundStmt(ConvLocation));
1660
1661   // Create the block literal expression.
1662   Expr *BuildBlock = new (Context) BlockExpr(Block, Conv->getConversionType());
1663   ExprCleanupObjects.push_back(Block);
1664   Cleanup.setExprNeedsCleanups(true);
1665
1666   return BuildBlock;
1667 }