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