1 //===--- SemaInit.cpp - Semantic Analysis for Initializers ----------------===// 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 initializers. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "clang/Sema/Initialization.h" 15 #include "clang/AST/ASTContext.h" 16 #include "clang/AST/DeclObjC.h" 17 #include "clang/AST/ExprCXX.h" 18 #include "clang/AST/ExprObjC.h" 19 #include "clang/AST/TypeLoc.h" 20 #include "clang/Basic/TargetInfo.h" 21 #include "clang/Sema/Designator.h" 22 #include "clang/Sema/Lookup.h" 23 #include "clang/Sema/SemaInternal.h" 24 #include "llvm/ADT/APInt.h" 25 #include "llvm/ADT/SmallString.h" 26 #include "llvm/Support/ErrorHandling.h" 27 #include "llvm/Support/raw_ostream.h" 28 #include <map> 29 30 using namespace clang; 31 32 //===----------------------------------------------------------------------===// 33 // Sema Initialization Checking 34 //===----------------------------------------------------------------------===// 35 36 /// \brief Check whether T is compatible with a wide character type (wchar_t, 37 /// char16_t or char32_t). 38 static bool IsWideCharCompatible(QualType T, ASTContext &Context) { 39 if (Context.typesAreCompatible(Context.getWideCharType(), T)) 40 return true; 41 if (Context.getLangOpts().CPlusPlus || Context.getLangOpts().C11) { 42 return Context.typesAreCompatible(Context.Char16Ty, T) || 43 Context.typesAreCompatible(Context.Char32Ty, T); 44 } 45 return false; 46 } 47 48 enum StringInitFailureKind { 49 SIF_None, 50 SIF_NarrowStringIntoWideChar, 51 SIF_WideStringIntoChar, 52 SIF_IncompatWideStringIntoWideChar, 53 SIF_Other 54 }; 55 56 /// \brief Check whether the array of type AT can be initialized by the Init 57 /// expression by means of string initialization. Returns SIF_None if so, 58 /// otherwise returns a StringInitFailureKind that describes why the 59 /// initialization would not work. 60 static StringInitFailureKind IsStringInit(Expr *Init, const ArrayType *AT, 61 ASTContext &Context) { 62 if (!isa<ConstantArrayType>(AT) && !isa<IncompleteArrayType>(AT)) 63 return SIF_Other; 64 65 // See if this is a string literal or @encode. 66 Init = Init->IgnoreParens(); 67 68 // Handle @encode, which is a narrow string. 69 if (isa<ObjCEncodeExpr>(Init) && AT->getElementType()->isCharType()) 70 return SIF_None; 71 72 // Otherwise we can only handle string literals. 73 StringLiteral *SL = dyn_cast<StringLiteral>(Init); 74 if (!SL) 75 return SIF_Other; 76 77 const QualType ElemTy = 78 Context.getCanonicalType(AT->getElementType()).getUnqualifiedType(); 79 80 switch (SL->getKind()) { 81 case StringLiteral::Ascii: 82 case StringLiteral::UTF8: 83 // char array can be initialized with a narrow string. 84 // Only allow char x[] = "foo"; not char x[] = L"foo"; 85 if (ElemTy->isCharType()) 86 return SIF_None; 87 if (IsWideCharCompatible(ElemTy, Context)) 88 return SIF_NarrowStringIntoWideChar; 89 return SIF_Other; 90 // C99 6.7.8p15 (with correction from DR343), or C11 6.7.9p15: 91 // "An array with element type compatible with a qualified or unqualified 92 // version of wchar_t, char16_t, or char32_t may be initialized by a wide 93 // string literal with the corresponding encoding prefix (L, u, or U, 94 // respectively), optionally enclosed in braces. 95 case StringLiteral::UTF16: 96 if (Context.typesAreCompatible(Context.Char16Ty, ElemTy)) 97 return SIF_None; 98 if (ElemTy->isCharType()) 99 return SIF_WideStringIntoChar; 100 if (IsWideCharCompatible(ElemTy, Context)) 101 return SIF_IncompatWideStringIntoWideChar; 102 return SIF_Other; 103 case StringLiteral::UTF32: 104 if (Context.typesAreCompatible(Context.Char32Ty, ElemTy)) 105 return SIF_None; 106 if (ElemTy->isCharType()) 107 return SIF_WideStringIntoChar; 108 if (IsWideCharCompatible(ElemTy, Context)) 109 return SIF_IncompatWideStringIntoWideChar; 110 return SIF_Other; 111 case StringLiteral::Wide: 112 if (Context.typesAreCompatible(Context.getWideCharType(), ElemTy)) 113 return SIF_None; 114 if (ElemTy->isCharType()) 115 return SIF_WideStringIntoChar; 116 if (IsWideCharCompatible(ElemTy, Context)) 117 return SIF_IncompatWideStringIntoWideChar; 118 return SIF_Other; 119 } 120 121 llvm_unreachable("missed a StringLiteral kind?"); 122 } 123 124 static StringInitFailureKind IsStringInit(Expr *init, QualType declType, 125 ASTContext &Context) { 126 const ArrayType *arrayType = Context.getAsArrayType(declType); 127 if (!arrayType) 128 return SIF_Other; 129 return IsStringInit(init, arrayType, Context); 130 } 131 132 /// Update the type of a string literal, including any surrounding parentheses, 133 /// to match the type of the object which it is initializing. 134 static void updateStringLiteralType(Expr *E, QualType Ty) { 135 while (true) { 136 E->setType(Ty); 137 if (isa<StringLiteral>(E) || isa<ObjCEncodeExpr>(E)) 138 break; 139 else if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) 140 E = PE->getSubExpr(); 141 else if (UnaryOperator *UO = dyn_cast<UnaryOperator>(E)) 142 E = UO->getSubExpr(); 143 else if (GenericSelectionExpr *GSE = dyn_cast<GenericSelectionExpr>(E)) 144 E = GSE->getResultExpr(); 145 else 146 llvm_unreachable("unexpected expr in string literal init"); 147 } 148 } 149 150 static void CheckStringInit(Expr *Str, QualType &DeclT, const ArrayType *AT, 151 Sema &S) { 152 // Get the length of the string as parsed. 153 auto *ConstantArrayTy = 154 cast<ConstantArrayType>(Str->getType()->getAsArrayTypeUnsafe()); 155 uint64_t StrLength = ConstantArrayTy->getSize().getZExtValue(); 156 157 if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(AT)) { 158 // C99 6.7.8p14. We have an array of character type with unknown size 159 // being initialized to a string literal. 160 llvm::APInt ConstVal(32, StrLength); 161 // Return a new array type (C99 6.7.8p22). 162 DeclT = S.Context.getConstantArrayType(IAT->getElementType(), 163 ConstVal, 164 ArrayType::Normal, 0); 165 updateStringLiteralType(Str, DeclT); 166 return; 167 } 168 169 const ConstantArrayType *CAT = cast<ConstantArrayType>(AT); 170 171 // We have an array of character type with known size. However, 172 // the size may be smaller or larger than the string we are initializing. 173 // FIXME: Avoid truncation for 64-bit length strings. 174 if (S.getLangOpts().CPlusPlus) { 175 if (StringLiteral *SL = dyn_cast<StringLiteral>(Str->IgnoreParens())) { 176 // For Pascal strings it's OK to strip off the terminating null character, 177 // so the example below is valid: 178 // 179 // unsigned char a[2] = "\pa"; 180 if (SL->isPascal()) 181 StrLength--; 182 } 183 184 // [dcl.init.string]p2 185 if (StrLength > CAT->getSize().getZExtValue()) 186 S.Diag(Str->getLocStart(), 187 diag::err_initializer_string_for_char_array_too_long) 188 << Str->getSourceRange(); 189 } else { 190 // C99 6.7.8p14. 191 if (StrLength-1 > CAT->getSize().getZExtValue()) 192 S.Diag(Str->getLocStart(), 193 diag::ext_initializer_string_for_char_array_too_long) 194 << Str->getSourceRange(); 195 } 196 197 // Set the type to the actual size that we are initializing. If we have 198 // something like: 199 // char x[1] = "foo"; 200 // then this will set the string literal's type to char[1]. 201 updateStringLiteralType(Str, DeclT); 202 } 203 204 //===----------------------------------------------------------------------===// 205 // Semantic checking for initializer lists. 206 //===----------------------------------------------------------------------===// 207 208 namespace { 209 210 /// @brief Semantic checking for initializer lists. 211 /// 212 /// The InitListChecker class contains a set of routines that each 213 /// handle the initialization of a certain kind of entity, e.g., 214 /// arrays, vectors, struct/union types, scalars, etc. The 215 /// InitListChecker itself performs a recursive walk of the subobject 216 /// structure of the type to be initialized, while stepping through 217 /// the initializer list one element at a time. The IList and Index 218 /// parameters to each of the Check* routines contain the active 219 /// (syntactic) initializer list and the index into that initializer 220 /// list that represents the current initializer. Each routine is 221 /// responsible for moving that Index forward as it consumes elements. 222 /// 223 /// Each Check* routine also has a StructuredList/StructuredIndex 224 /// arguments, which contains the current "structured" (semantic) 225 /// initializer list and the index into that initializer list where we 226 /// are copying initializers as we map them over to the semantic 227 /// list. Once we have completed our recursive walk of the subobject 228 /// structure, we will have constructed a full semantic initializer 229 /// list. 230 /// 231 /// C99 designators cause changes in the initializer list traversal, 232 /// because they make the initialization "jump" into a specific 233 /// subobject and then continue the initialization from that 234 /// point. CheckDesignatedInitializer() recursively steps into the 235 /// designated subobject and manages backing out the recursion to 236 /// initialize the subobjects after the one designated. 237 class InitListChecker { 238 Sema &SemaRef; 239 bool hadError; 240 bool VerifyOnly; // no diagnostics, no structure building 241 llvm::DenseMap<InitListExpr *, InitListExpr *> SyntacticToSemantic; 242 InitListExpr *FullyStructuredList; 243 244 void CheckImplicitInitList(const InitializedEntity &Entity, 245 InitListExpr *ParentIList, QualType T, 246 unsigned &Index, InitListExpr *StructuredList, 247 unsigned &StructuredIndex); 248 void CheckExplicitInitList(const InitializedEntity &Entity, 249 InitListExpr *IList, QualType &T, 250 InitListExpr *StructuredList, 251 bool TopLevelObject = false); 252 void CheckListElementTypes(const InitializedEntity &Entity, 253 InitListExpr *IList, QualType &DeclType, 254 bool SubobjectIsDesignatorContext, 255 unsigned &Index, 256 InitListExpr *StructuredList, 257 unsigned &StructuredIndex, 258 bool TopLevelObject = false); 259 void CheckSubElementType(const InitializedEntity &Entity, 260 InitListExpr *IList, QualType ElemType, 261 unsigned &Index, 262 InitListExpr *StructuredList, 263 unsigned &StructuredIndex); 264 void CheckComplexType(const InitializedEntity &Entity, 265 InitListExpr *IList, QualType DeclType, 266 unsigned &Index, 267 InitListExpr *StructuredList, 268 unsigned &StructuredIndex); 269 void CheckScalarType(const InitializedEntity &Entity, 270 InitListExpr *IList, QualType DeclType, 271 unsigned &Index, 272 InitListExpr *StructuredList, 273 unsigned &StructuredIndex); 274 void CheckReferenceType(const InitializedEntity &Entity, 275 InitListExpr *IList, QualType DeclType, 276 unsigned &Index, 277 InitListExpr *StructuredList, 278 unsigned &StructuredIndex); 279 void CheckVectorType(const InitializedEntity &Entity, 280 InitListExpr *IList, QualType DeclType, unsigned &Index, 281 InitListExpr *StructuredList, 282 unsigned &StructuredIndex); 283 void CheckStructUnionTypes(const InitializedEntity &Entity, 284 InitListExpr *IList, QualType DeclType, 285 RecordDecl::field_iterator Field, 286 bool SubobjectIsDesignatorContext, unsigned &Index, 287 InitListExpr *StructuredList, 288 unsigned &StructuredIndex, 289 bool TopLevelObject = false); 290 void CheckArrayType(const InitializedEntity &Entity, 291 InitListExpr *IList, QualType &DeclType, 292 llvm::APSInt elementIndex, 293 bool SubobjectIsDesignatorContext, unsigned &Index, 294 InitListExpr *StructuredList, 295 unsigned &StructuredIndex); 296 bool CheckDesignatedInitializer(const InitializedEntity &Entity, 297 InitListExpr *IList, DesignatedInitExpr *DIE, 298 unsigned DesigIdx, 299 QualType &CurrentObjectType, 300 RecordDecl::field_iterator *NextField, 301 llvm::APSInt *NextElementIndex, 302 unsigned &Index, 303 InitListExpr *StructuredList, 304 unsigned &StructuredIndex, 305 bool FinishSubobjectInit, 306 bool TopLevelObject); 307 InitListExpr *getStructuredSubobjectInit(InitListExpr *IList, unsigned Index, 308 QualType CurrentObjectType, 309 InitListExpr *StructuredList, 310 unsigned StructuredIndex, 311 SourceRange InitRange, 312 bool IsFullyOverwritten = false); 313 void UpdateStructuredListElement(InitListExpr *StructuredList, 314 unsigned &StructuredIndex, 315 Expr *expr); 316 int numArrayElements(QualType DeclType); 317 int numStructUnionElements(QualType DeclType); 318 319 static ExprResult PerformEmptyInit(Sema &SemaRef, 320 SourceLocation Loc, 321 const InitializedEntity &Entity, 322 bool VerifyOnly); 323 324 // Explanation on the "FillWithNoInit" mode: 325 // 326 // Assume we have the following definitions (Case#1): 327 // struct P { char x[6][6]; } xp = { .x[1] = "bar" }; 328 // struct PP { struct P lp; } l = { .lp = xp, .lp.x[1][2] = 'f' }; 329 // 330 // l.lp.x[1][0..1] should not be filled with implicit initializers because the 331 // "base" initializer "xp" will provide values for them; l.lp.x[1] will be "baf". 332 // 333 // But if we have (Case#2): 334 // struct PP l = { .lp = xp, .lp.x[1] = { [2] = 'f' } }; 335 // 336 // l.lp.x[1][0..1] are implicitly initialized and do not use values from the 337 // "base" initializer; l.lp.x[1] will be "\0\0f\0\0\0". 338 // 339 // To distinguish Case#1 from Case#2, and also to avoid leaving many "holes" 340 // in the InitListExpr, the "holes" in Case#1 are filled not with empty 341 // initializers but with special "NoInitExpr" place holders, which tells the 342 // CodeGen not to generate any initializers for these parts. 343 void FillInEmptyInitForField(unsigned Init, FieldDecl *Field, 344 const InitializedEntity &ParentEntity, 345 InitListExpr *ILE, bool &RequiresSecondPass, 346 bool FillWithNoInit = false); 347 void FillInEmptyInitializations(const InitializedEntity &Entity, 348 InitListExpr *ILE, bool &RequiresSecondPass, 349 bool FillWithNoInit = false); 350 bool CheckFlexibleArrayInit(const InitializedEntity &Entity, 351 Expr *InitExpr, FieldDecl *Field, 352 bool TopLevelObject); 353 void CheckEmptyInitializable(const InitializedEntity &Entity, 354 SourceLocation Loc); 355 356 public: 357 InitListChecker(Sema &S, const InitializedEntity &Entity, 358 InitListExpr *IL, QualType &T, bool VerifyOnly); 359 bool HadError() { return hadError; } 360 361 // @brief Retrieves the fully-structured initializer list used for 362 // semantic analysis and code generation. 363 InitListExpr *getFullyStructuredList() const { return FullyStructuredList; } 364 }; 365 366 } // end anonymous namespace 367 368 ExprResult InitListChecker::PerformEmptyInit(Sema &SemaRef, 369 SourceLocation Loc, 370 const InitializedEntity &Entity, 371 bool VerifyOnly) { 372 InitializationKind Kind = InitializationKind::CreateValue(Loc, Loc, Loc, 373 true); 374 MultiExprArg SubInit; 375 Expr *InitExpr; 376 InitListExpr DummyInitList(SemaRef.Context, Loc, None, Loc); 377 378 // C++ [dcl.init.aggr]p7: 379 // If there are fewer initializer-clauses in the list than there are 380 // members in the aggregate, then each member not explicitly initialized 381 // ... 382 bool EmptyInitList = SemaRef.getLangOpts().CPlusPlus11 && 383 Entity.getType()->getBaseElementTypeUnsafe()->isRecordType(); 384 if (EmptyInitList) { 385 // C++1y / DR1070: 386 // shall be initialized [...] from an empty initializer list. 387 // 388 // We apply the resolution of this DR to C++11 but not C++98, since C++98 389 // does not have useful semantics for initialization from an init list. 390 // We treat this as copy-initialization, because aggregate initialization 391 // always performs copy-initialization on its elements. 392 // 393 // Only do this if we're initializing a class type, to avoid filling in 394 // the initializer list where possible. 395 InitExpr = VerifyOnly ? &DummyInitList : new (SemaRef.Context) 396 InitListExpr(SemaRef.Context, Loc, None, Loc); 397 InitExpr->setType(SemaRef.Context.VoidTy); 398 SubInit = InitExpr; 399 Kind = InitializationKind::CreateCopy(Loc, Loc); 400 } else { 401 // C++03: 402 // shall be value-initialized. 403 } 404 405 InitializationSequence InitSeq(SemaRef, Entity, Kind, SubInit); 406 // libstdc++4.6 marks the vector default constructor as explicit in 407 // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case. 408 // stlport does so too. Look for std::__debug for libstdc++, and for 409 // std:: for stlport. This is effectively a compiler-side implementation of 410 // LWG2193. 411 if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == 412 InitializationSequence::FK_ExplicitConstructor) { 413 OverloadCandidateSet::iterator Best; 414 OverloadingResult O = 415 InitSeq.getFailedCandidateSet() 416 .BestViableFunction(SemaRef, Kind.getLocation(), Best); 417 (void)O; 418 assert(O == OR_Success && "Inconsistent overload resolution"); 419 CXXConstructorDecl *CtorDecl = cast<CXXConstructorDecl>(Best->Function); 420 CXXRecordDecl *R = CtorDecl->getParent(); 421 422 if (CtorDecl->getMinRequiredArguments() == 0 && 423 CtorDecl->isExplicit() && R->getDeclName() && 424 SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) { 425 bool IsInStd = false; 426 for (NamespaceDecl *ND = dyn_cast<NamespaceDecl>(R->getDeclContext()); 427 ND && !IsInStd; ND = dyn_cast<NamespaceDecl>(ND->getParent())) { 428 if (SemaRef.getStdNamespace()->InEnclosingNamespaceSetOf(ND)) 429 IsInStd = true; 430 } 431 432 if (IsInStd && llvm::StringSwitch<bool>(R->getName()) 433 .Cases("basic_string", "deque", "forward_list", true) 434 .Cases("list", "map", "multimap", "multiset", true) 435 .Cases("priority_queue", "queue", "set", "stack", true) 436 .Cases("unordered_map", "unordered_set", "vector", true) 437 .Default(false)) { 438 InitSeq.InitializeFrom( 439 SemaRef, Entity, 440 InitializationKind::CreateValue(Loc, Loc, Loc, true), 441 MultiExprArg(), /*TopLevelOfInitList=*/false); 442 // Emit a warning for this. System header warnings aren't shown 443 // by default, but people working on system headers should see it. 444 if (!VerifyOnly) { 445 SemaRef.Diag(CtorDecl->getLocation(), 446 diag::warn_invalid_initializer_from_system_header); 447 if (Entity.getKind() == InitializedEntity::EK_Member) 448 SemaRef.Diag(Entity.getDecl()->getLocation(), 449 diag::note_used_in_initialization_here); 450 else if (Entity.getKind() == InitializedEntity::EK_ArrayElement) 451 SemaRef.Diag(Loc, diag::note_used_in_initialization_here); 452 } 453 } 454 } 455 } 456 if (!InitSeq) { 457 if (!VerifyOnly) { 458 InitSeq.Diagnose(SemaRef, Entity, Kind, SubInit); 459 if (Entity.getKind() == InitializedEntity::EK_Member) 460 SemaRef.Diag(Entity.getDecl()->getLocation(), 461 diag::note_in_omitted_aggregate_initializer) 462 << /*field*/1 << Entity.getDecl(); 463 else if (Entity.getKind() == InitializedEntity::EK_ArrayElement) 464 SemaRef.Diag(Loc, diag::note_in_omitted_aggregate_initializer) 465 << /*array element*/0 << Entity.getElementIndex(); 466 } 467 return ExprError(); 468 } 469 470 return VerifyOnly ? ExprResult(static_cast<Expr *>(nullptr)) 471 : InitSeq.Perform(SemaRef, Entity, Kind, SubInit); 472 } 473 474 void InitListChecker::CheckEmptyInitializable(const InitializedEntity &Entity, 475 SourceLocation Loc) { 476 assert(VerifyOnly && 477 "CheckEmptyInitializable is only inteded for verification mode."); 478 if (PerformEmptyInit(SemaRef, Loc, Entity, /*VerifyOnly*/true).isInvalid()) 479 hadError = true; 480 } 481 482 void InitListChecker::FillInEmptyInitForField(unsigned Init, FieldDecl *Field, 483 const InitializedEntity &ParentEntity, 484 InitListExpr *ILE, 485 bool &RequiresSecondPass, 486 bool FillWithNoInit) { 487 SourceLocation Loc = ILE->getLocEnd(); 488 unsigned NumInits = ILE->getNumInits(); 489 InitializedEntity MemberEntity 490 = InitializedEntity::InitializeMember(Field, &ParentEntity); 491 492 if (const RecordType *RType = ILE->getType()->getAs<RecordType>()) 493 if (!RType->getDecl()->isUnion()) 494 assert(Init < NumInits && "This ILE should have been expanded"); 495 496 if (Init >= NumInits || !ILE->getInit(Init)) { 497 if (FillWithNoInit) { 498 Expr *Filler = new (SemaRef.Context) NoInitExpr(Field->getType()); 499 if (Init < NumInits) 500 ILE->setInit(Init, Filler); 501 else 502 ILE->updateInit(SemaRef.Context, Init, Filler); 503 return; 504 } 505 // C++1y [dcl.init.aggr]p7: 506 // If there are fewer initializer-clauses in the list than there are 507 // members in the aggregate, then each member not explicitly initialized 508 // shall be initialized from its brace-or-equal-initializer [...] 509 if (Field->hasInClassInitializer()) { 510 ExprResult DIE = SemaRef.BuildCXXDefaultInitExpr(Loc, Field); 511 if (DIE.isInvalid()) { 512 hadError = true; 513 return; 514 } 515 if (Init < NumInits) 516 ILE->setInit(Init, DIE.get()); 517 else { 518 ILE->updateInit(SemaRef.Context, Init, DIE.get()); 519 RequiresSecondPass = true; 520 } 521 return; 522 } 523 524 if (Field->getType()->isReferenceType()) { 525 // C++ [dcl.init.aggr]p9: 526 // If an incomplete or empty initializer-list leaves a 527 // member of reference type uninitialized, the program is 528 // ill-formed. 529 SemaRef.Diag(Loc, diag::err_init_reference_member_uninitialized) 530 << Field->getType() 531 << ILE->getSyntacticForm()->getSourceRange(); 532 SemaRef.Diag(Field->getLocation(), 533 diag::note_uninit_reference_member); 534 hadError = true; 535 return; 536 } 537 538 ExprResult MemberInit = PerformEmptyInit(SemaRef, Loc, MemberEntity, 539 /*VerifyOnly*/false); 540 if (MemberInit.isInvalid()) { 541 hadError = true; 542 return; 543 } 544 545 if (hadError) { 546 // Do nothing 547 } else if (Init < NumInits) { 548 ILE->setInit(Init, MemberInit.getAs<Expr>()); 549 } else if (!isa<ImplicitValueInitExpr>(MemberInit.get())) { 550 // Empty initialization requires a constructor call, so 551 // extend the initializer list to include the constructor 552 // call and make a note that we'll need to take another pass 553 // through the initializer list. 554 ILE->updateInit(SemaRef.Context, Init, MemberInit.getAs<Expr>()); 555 RequiresSecondPass = true; 556 } 557 } else if (InitListExpr *InnerILE 558 = dyn_cast<InitListExpr>(ILE->getInit(Init))) 559 FillInEmptyInitializations(MemberEntity, InnerILE, 560 RequiresSecondPass, FillWithNoInit); 561 else if (DesignatedInitUpdateExpr *InnerDIUE 562 = dyn_cast<DesignatedInitUpdateExpr>(ILE->getInit(Init))) 563 FillInEmptyInitializations(MemberEntity, InnerDIUE->getUpdater(), 564 RequiresSecondPass, /*FillWithNoInit =*/ true); 565 } 566 567 /// Recursively replaces NULL values within the given initializer list 568 /// with expressions that perform value-initialization of the 569 /// appropriate type. 570 void 571 InitListChecker::FillInEmptyInitializations(const InitializedEntity &Entity, 572 InitListExpr *ILE, 573 bool &RequiresSecondPass, 574 bool FillWithNoInit) { 575 assert((ILE->getType() != SemaRef.Context.VoidTy) && 576 "Should not have void type"); 577 578 if (const RecordType *RType = ILE->getType()->getAs<RecordType>()) { 579 const RecordDecl *RDecl = RType->getDecl(); 580 if (RDecl->isUnion() && ILE->getInitializedFieldInUnion()) 581 FillInEmptyInitForField(0, ILE->getInitializedFieldInUnion(), 582 Entity, ILE, RequiresSecondPass, FillWithNoInit); 583 else if (RDecl->isUnion() && isa<CXXRecordDecl>(RDecl) && 584 cast<CXXRecordDecl>(RDecl)->hasInClassInitializer()) { 585 for (auto *Field : RDecl->fields()) { 586 if (Field->hasInClassInitializer()) { 587 FillInEmptyInitForField(0, Field, Entity, ILE, RequiresSecondPass, 588 FillWithNoInit); 589 break; 590 } 591 } 592 } else { 593 // The fields beyond ILE->getNumInits() are default initialized, so in 594 // order to leave them uninitialized, the ILE is expanded and the extra 595 // fields are then filled with NoInitExpr. 596 unsigned NumFields = 0; 597 for (auto *Field : RDecl->fields()) 598 if (!Field->isUnnamedBitfield()) 599 ++NumFields; 600 if (ILE->getNumInits() < NumFields) 601 ILE->resizeInits(SemaRef.Context, NumFields); 602 603 unsigned Init = 0; 604 for (auto *Field : RDecl->fields()) { 605 if (Field->isUnnamedBitfield()) 606 continue; 607 608 if (hadError) 609 return; 610 611 FillInEmptyInitForField(Init, Field, Entity, ILE, RequiresSecondPass, 612 FillWithNoInit); 613 if (hadError) 614 return; 615 616 ++Init; 617 618 // Only look at the first initialization of a union. 619 if (RDecl->isUnion()) 620 break; 621 } 622 } 623 624 return; 625 } 626 627 QualType ElementType; 628 629 InitializedEntity ElementEntity = Entity; 630 unsigned NumInits = ILE->getNumInits(); 631 unsigned NumElements = NumInits; 632 if (const ArrayType *AType = SemaRef.Context.getAsArrayType(ILE->getType())) { 633 ElementType = AType->getElementType(); 634 if (const ConstantArrayType *CAType = dyn_cast<ConstantArrayType>(AType)) 635 NumElements = CAType->getSize().getZExtValue(); 636 ElementEntity = InitializedEntity::InitializeElement(SemaRef.Context, 637 0, Entity); 638 } else if (const VectorType *VType = ILE->getType()->getAs<VectorType>()) { 639 ElementType = VType->getElementType(); 640 NumElements = VType->getNumElements(); 641 ElementEntity = InitializedEntity::InitializeElement(SemaRef.Context, 642 0, Entity); 643 } else 644 ElementType = ILE->getType(); 645 646 for (unsigned Init = 0; Init != NumElements; ++Init) { 647 if (hadError) 648 return; 649 650 if (ElementEntity.getKind() == InitializedEntity::EK_ArrayElement || 651 ElementEntity.getKind() == InitializedEntity::EK_VectorElement) 652 ElementEntity.setElementIndex(Init); 653 654 Expr *InitExpr = (Init < NumInits ? ILE->getInit(Init) : nullptr); 655 if (!InitExpr && Init < NumInits && ILE->hasArrayFiller()) 656 ILE->setInit(Init, ILE->getArrayFiller()); 657 else if (!InitExpr && !ILE->hasArrayFiller()) { 658 Expr *Filler = nullptr; 659 660 if (FillWithNoInit) 661 Filler = new (SemaRef.Context) NoInitExpr(ElementType); 662 else { 663 ExprResult ElementInit = PerformEmptyInit(SemaRef, ILE->getLocEnd(), 664 ElementEntity, 665 /*VerifyOnly*/false); 666 if (ElementInit.isInvalid()) { 667 hadError = true; 668 return; 669 } 670 671 Filler = ElementInit.getAs<Expr>(); 672 } 673 674 if (hadError) { 675 // Do nothing 676 } else if (Init < NumInits) { 677 // For arrays, just set the expression used for value-initialization 678 // of the "holes" in the array. 679 if (ElementEntity.getKind() == InitializedEntity::EK_ArrayElement) 680 ILE->setArrayFiller(Filler); 681 else 682 ILE->setInit(Init, Filler); 683 } else { 684 // For arrays, just set the expression used for value-initialization 685 // of the rest of elements and exit. 686 if (ElementEntity.getKind() == InitializedEntity::EK_ArrayElement) { 687 ILE->setArrayFiller(Filler); 688 return; 689 } 690 691 if (!isa<ImplicitValueInitExpr>(Filler) && !isa<NoInitExpr>(Filler)) { 692 // Empty initialization requires a constructor call, so 693 // extend the initializer list to include the constructor 694 // call and make a note that we'll need to take another pass 695 // through the initializer list. 696 ILE->updateInit(SemaRef.Context, Init, Filler); 697 RequiresSecondPass = true; 698 } 699 } 700 } else if (InitListExpr *InnerILE 701 = dyn_cast_or_null<InitListExpr>(InitExpr)) 702 FillInEmptyInitializations(ElementEntity, InnerILE, RequiresSecondPass, 703 FillWithNoInit); 704 else if (DesignatedInitUpdateExpr *InnerDIUE 705 = dyn_cast_or_null<DesignatedInitUpdateExpr>(InitExpr)) 706 FillInEmptyInitializations(ElementEntity, InnerDIUE->getUpdater(), 707 RequiresSecondPass, /*FillWithNoInit =*/ true); 708 } 709 } 710 711 InitListChecker::InitListChecker(Sema &S, const InitializedEntity &Entity, 712 InitListExpr *IL, QualType &T, 713 bool VerifyOnly) 714 : SemaRef(S), VerifyOnly(VerifyOnly) { 715 // FIXME: Check that IL isn't already the semantic form of some other 716 // InitListExpr. If it is, we'd create a broken AST. 717 718 hadError = false; 719 720 FullyStructuredList = 721 getStructuredSubobjectInit(IL, 0, T, nullptr, 0, IL->getSourceRange()); 722 CheckExplicitInitList(Entity, IL, T, FullyStructuredList, 723 /*TopLevelObject=*/true); 724 725 if (!hadError && !VerifyOnly) { 726 bool RequiresSecondPass = false; 727 FillInEmptyInitializations(Entity, FullyStructuredList, RequiresSecondPass); 728 if (RequiresSecondPass && !hadError) 729 FillInEmptyInitializations(Entity, FullyStructuredList, 730 RequiresSecondPass); 731 } 732 } 733 734 int InitListChecker::numArrayElements(QualType DeclType) { 735 // FIXME: use a proper constant 736 int maxElements = 0x7FFFFFFF; 737 if (const ConstantArrayType *CAT = 738 SemaRef.Context.getAsConstantArrayType(DeclType)) { 739 maxElements = static_cast<int>(CAT->getSize().getZExtValue()); 740 } 741 return maxElements; 742 } 743 744 int InitListChecker::numStructUnionElements(QualType DeclType) { 745 RecordDecl *structDecl = DeclType->getAs<RecordType>()->getDecl(); 746 int InitializableMembers = 0; 747 for (const auto *Field : structDecl->fields()) 748 if (!Field->isUnnamedBitfield()) 749 ++InitializableMembers; 750 751 if (structDecl->isUnion()) 752 return std::min(InitializableMembers, 1); 753 return InitializableMembers - structDecl->hasFlexibleArrayMember(); 754 } 755 756 /// Check whether the range of the initializer \p ParentIList from element 757 /// \p Index onwards can be used to initialize an object of type \p T. Update 758 /// \p Index to indicate how many elements of the list were consumed. 759 /// 760 /// This also fills in \p StructuredList, from element \p StructuredIndex 761 /// onwards, with the fully-braced, desugared form of the initialization. 762 void InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, 763 InitListExpr *ParentIList, 764 QualType T, unsigned &Index, 765 InitListExpr *StructuredList, 766 unsigned &StructuredIndex) { 767 int maxElements = 0; 768 769 if (T->isArrayType()) 770 maxElements = numArrayElements(T); 771 else if (T->isRecordType()) 772 maxElements = numStructUnionElements(T); 773 else if (T->isVectorType()) 774 maxElements = T->getAs<VectorType>()->getNumElements(); 775 else 776 llvm_unreachable("CheckImplicitInitList(): Illegal type"); 777 778 if (maxElements == 0) { 779 if (!VerifyOnly) 780 SemaRef.Diag(ParentIList->getInit(Index)->getLocStart(), 781 diag::err_implicit_empty_initializer); 782 ++Index; 783 hadError = true; 784 return; 785 } 786 787 // Build a structured initializer list corresponding to this subobject. 788 InitListExpr *StructuredSubobjectInitList 789 = getStructuredSubobjectInit(ParentIList, Index, T, StructuredList, 790 StructuredIndex, 791 SourceRange(ParentIList->getInit(Index)->getLocStart(), 792 ParentIList->getSourceRange().getEnd())); 793 unsigned StructuredSubobjectInitIndex = 0; 794 795 // Check the element types and build the structural subobject. 796 unsigned StartIndex = Index; 797 CheckListElementTypes(Entity, ParentIList, T, 798 /*SubobjectIsDesignatorContext=*/false, Index, 799 StructuredSubobjectInitList, 800 StructuredSubobjectInitIndex); 801 802 if (!VerifyOnly) { 803 StructuredSubobjectInitList->setType(T); 804 805 unsigned EndIndex = (Index == StartIndex? StartIndex : Index - 1); 806 // Update the structured sub-object initializer so that it's ending 807 // range corresponds with the end of the last initializer it used. 808 if (EndIndex < ParentIList->getNumInits() && 809 ParentIList->getInit(EndIndex)) { 810 SourceLocation EndLoc 811 = ParentIList->getInit(EndIndex)->getSourceRange().getEnd(); 812 StructuredSubobjectInitList->setRBraceLoc(EndLoc); 813 } 814 815 // Complain about missing braces. 816 if (T->isArrayType() || T->isRecordType()) { 817 SemaRef.Diag(StructuredSubobjectInitList->getLocStart(), 818 diag::warn_missing_braces) 819 << StructuredSubobjectInitList->getSourceRange() 820 << FixItHint::CreateInsertion( 821 StructuredSubobjectInitList->getLocStart(), "{") 822 << FixItHint::CreateInsertion( 823 SemaRef.getLocForEndOfToken( 824 StructuredSubobjectInitList->getLocEnd()), 825 "}"); 826 } 827 } 828 } 829 830 /// Warn that \p Entity was of scalar type and was initialized by a 831 /// single-element braced initializer list. 832 static void warnBracedScalarInit(Sema &S, const InitializedEntity &Entity, 833 SourceRange Braces) { 834 // Don't warn during template instantiation. If the initialization was 835 // non-dependent, we warned during the initial parse; otherwise, the 836 // type might not be scalar in some uses of the template. 837 if (!S.ActiveTemplateInstantiations.empty()) 838 return; 839 840 unsigned DiagID = 0; 841 842 switch (Entity.getKind()) { 843 case InitializedEntity::EK_VectorElement: 844 case InitializedEntity::EK_ComplexElement: 845 case InitializedEntity::EK_ArrayElement: 846 case InitializedEntity::EK_Parameter: 847 case InitializedEntity::EK_Parameter_CF_Audited: 848 case InitializedEntity::EK_Result: 849 // Extra braces here are suspicious. 850 DiagID = diag::warn_braces_around_scalar_init; 851 break; 852 853 case InitializedEntity::EK_Member: 854 // Warn on aggregate initialization but not on ctor init list or 855 // default member initializer. 856 if (Entity.getParent()) 857 DiagID = diag::warn_braces_around_scalar_init; 858 break; 859 860 case InitializedEntity::EK_Variable: 861 case InitializedEntity::EK_LambdaCapture: 862 // No warning, might be direct-list-initialization. 863 // FIXME: Should we warn for copy-list-initialization in these cases? 864 break; 865 866 case InitializedEntity::EK_New: 867 case InitializedEntity::EK_Temporary: 868 case InitializedEntity::EK_CompoundLiteralInit: 869 // No warning, braces are part of the syntax of the underlying construct. 870 break; 871 872 case InitializedEntity::EK_RelatedResult: 873 // No warning, we already warned when initializing the result. 874 break; 875 876 case InitializedEntity::EK_Exception: 877 case InitializedEntity::EK_Base: 878 case InitializedEntity::EK_Delegating: 879 case InitializedEntity::EK_BlockElement: 880 llvm_unreachable("unexpected braced scalar init"); 881 } 882 883 if (DiagID) { 884 S.Diag(Braces.getBegin(), DiagID) 885 << Braces 886 << FixItHint::CreateRemoval(Braces.getBegin()) 887 << FixItHint::CreateRemoval(Braces.getEnd()); 888 } 889 } 890 891 /// Check whether the initializer \p IList (that was written with explicit 892 /// braces) can be used to initialize an object of type \p T. 893 /// 894 /// This also fills in \p StructuredList with the fully-braced, desugared 895 /// form of the initialization. 896 void InitListChecker::CheckExplicitInitList(const InitializedEntity &Entity, 897 InitListExpr *IList, QualType &T, 898 InitListExpr *StructuredList, 899 bool TopLevelObject) { 900 if (!VerifyOnly) { 901 SyntacticToSemantic[IList] = StructuredList; 902 StructuredList->setSyntacticForm(IList); 903 } 904 905 unsigned Index = 0, StructuredIndex = 0; 906 CheckListElementTypes(Entity, IList, T, /*SubobjectIsDesignatorContext=*/true, 907 Index, StructuredList, StructuredIndex, TopLevelObject); 908 if (!VerifyOnly) { 909 QualType ExprTy = T; 910 if (!ExprTy->isArrayType()) 911 ExprTy = ExprTy.getNonLValueExprType(SemaRef.Context); 912 IList->setType(ExprTy); 913 StructuredList->setType(ExprTy); 914 } 915 if (hadError) 916 return; 917 918 if (Index < IList->getNumInits()) { 919 // We have leftover initializers 920 if (VerifyOnly) { 921 if (SemaRef.getLangOpts().CPlusPlus || 922 (SemaRef.getLangOpts().OpenCL && 923 IList->getType()->isVectorType())) { 924 hadError = true; 925 } 926 return; 927 } 928 929 if (StructuredIndex == 1 && 930 IsStringInit(StructuredList->getInit(0), T, SemaRef.Context) == 931 SIF_None) { 932 unsigned DK = diag::ext_excess_initializers_in_char_array_initializer; 933 if (SemaRef.getLangOpts().CPlusPlus) { 934 DK = diag::err_excess_initializers_in_char_array_initializer; 935 hadError = true; 936 } 937 // Special-case 938 SemaRef.Diag(IList->getInit(Index)->getLocStart(), DK) 939 << IList->getInit(Index)->getSourceRange(); 940 } else if (!T->isIncompleteType()) { 941 // Don't complain for incomplete types, since we'll get an error 942 // elsewhere 943 QualType CurrentObjectType = StructuredList->getType(); 944 int initKind = 945 CurrentObjectType->isArrayType()? 0 : 946 CurrentObjectType->isVectorType()? 1 : 947 CurrentObjectType->isScalarType()? 2 : 948 CurrentObjectType->isUnionType()? 3 : 949 4; 950 951 unsigned DK = diag::ext_excess_initializers; 952 if (SemaRef.getLangOpts().CPlusPlus) { 953 DK = diag::err_excess_initializers; 954 hadError = true; 955 } 956 if (SemaRef.getLangOpts().OpenCL && initKind == 1) { 957 DK = diag::err_excess_initializers; 958 hadError = true; 959 } 960 961 SemaRef.Diag(IList->getInit(Index)->getLocStart(), DK) 962 << initKind << IList->getInit(Index)->getSourceRange(); 963 } 964 } 965 966 if (!VerifyOnly && T->isScalarType() && 967 IList->getNumInits() == 1 && !isa<InitListExpr>(IList->getInit(0))) 968 warnBracedScalarInit(SemaRef, Entity, IList->getSourceRange()); 969 } 970 971 void InitListChecker::CheckListElementTypes(const InitializedEntity &Entity, 972 InitListExpr *IList, 973 QualType &DeclType, 974 bool SubobjectIsDesignatorContext, 975 unsigned &Index, 976 InitListExpr *StructuredList, 977 unsigned &StructuredIndex, 978 bool TopLevelObject) { 979 if (DeclType->isAnyComplexType() && SubobjectIsDesignatorContext) { 980 // Explicitly braced initializer for complex type can be real+imaginary 981 // parts. 982 CheckComplexType(Entity, IList, DeclType, Index, 983 StructuredList, StructuredIndex); 984 } else if (DeclType->isScalarType()) { 985 CheckScalarType(Entity, IList, DeclType, Index, 986 StructuredList, StructuredIndex); 987 } else if (DeclType->isVectorType()) { 988 CheckVectorType(Entity, IList, DeclType, Index, 989 StructuredList, StructuredIndex); 990 } else if (DeclType->isRecordType()) { 991 assert(DeclType->isAggregateType() && 992 "non-aggregate records should be handed in CheckSubElementType"); 993 RecordDecl *RD = DeclType->getAs<RecordType>()->getDecl(); 994 CheckStructUnionTypes(Entity, IList, DeclType, RD->field_begin(), 995 SubobjectIsDesignatorContext, Index, 996 StructuredList, StructuredIndex, 997 TopLevelObject); 998 } else if (DeclType->isArrayType()) { 999 llvm::APSInt Zero( 1000 SemaRef.Context.getTypeSize(SemaRef.Context.getSizeType()), 1001 false); 1002 CheckArrayType(Entity, IList, DeclType, Zero, 1003 SubobjectIsDesignatorContext, Index, 1004 StructuredList, StructuredIndex); 1005 } else if (DeclType->isVoidType() || DeclType->isFunctionType()) { 1006 // This type is invalid, issue a diagnostic. 1007 ++Index; 1008 if (!VerifyOnly) 1009 SemaRef.Diag(IList->getLocStart(), diag::err_illegal_initializer_type) 1010 << DeclType; 1011 hadError = true; 1012 } else if (DeclType->isReferenceType()) { 1013 CheckReferenceType(Entity, IList, DeclType, Index, 1014 StructuredList, StructuredIndex); 1015 } else if (DeclType->isObjCObjectType()) { 1016 if (!VerifyOnly) 1017 SemaRef.Diag(IList->getLocStart(), diag::err_init_objc_class) 1018 << DeclType; 1019 hadError = true; 1020 } else { 1021 if (!VerifyOnly) 1022 SemaRef.Diag(IList->getLocStart(), diag::err_illegal_initializer_type) 1023 << DeclType; 1024 hadError = true; 1025 } 1026 } 1027 1028 void InitListChecker::CheckSubElementType(const InitializedEntity &Entity, 1029 InitListExpr *IList, 1030 QualType ElemType, 1031 unsigned &Index, 1032 InitListExpr *StructuredList, 1033 unsigned &StructuredIndex) { 1034 Expr *expr = IList->getInit(Index); 1035 1036 if (ElemType->isReferenceType()) 1037 return CheckReferenceType(Entity, IList, ElemType, Index, 1038 StructuredList, StructuredIndex); 1039 1040 if (InitListExpr *SubInitList = dyn_cast<InitListExpr>(expr)) { 1041 if (SubInitList->getNumInits() == 1 && 1042 IsStringInit(SubInitList->getInit(0), ElemType, SemaRef.Context) == 1043 SIF_None) { 1044 expr = SubInitList->getInit(0); 1045 } else if (!SemaRef.getLangOpts().CPlusPlus) { 1046 InitListExpr *InnerStructuredList 1047 = getStructuredSubobjectInit(IList, Index, ElemType, 1048 StructuredList, StructuredIndex, 1049 SubInitList->getSourceRange(), true); 1050 CheckExplicitInitList(Entity, SubInitList, ElemType, 1051 InnerStructuredList); 1052 1053 if (!hadError && !VerifyOnly) { 1054 bool RequiresSecondPass = false; 1055 FillInEmptyInitializations(Entity, InnerStructuredList, 1056 RequiresSecondPass); 1057 if (RequiresSecondPass && !hadError) 1058 FillInEmptyInitializations(Entity, InnerStructuredList, 1059 RequiresSecondPass); 1060 } 1061 ++StructuredIndex; 1062 ++Index; 1063 return; 1064 } 1065 // C++ initialization is handled later. 1066 } else if (isa<ImplicitValueInitExpr>(expr)) { 1067 // This happens during template instantiation when we see an InitListExpr 1068 // that we've already checked once. 1069 assert(SemaRef.Context.hasSameType(expr->getType(), ElemType) && 1070 "found implicit initialization for the wrong type"); 1071 if (!VerifyOnly) 1072 UpdateStructuredListElement(StructuredList, StructuredIndex, expr); 1073 ++Index; 1074 return; 1075 } 1076 1077 if (SemaRef.getLangOpts().CPlusPlus) { 1078 // C++ [dcl.init.aggr]p2: 1079 // Each member is copy-initialized from the corresponding 1080 // initializer-clause. 1081 1082 // FIXME: Better EqualLoc? 1083 InitializationKind Kind = 1084 InitializationKind::CreateCopy(expr->getLocStart(), SourceLocation()); 1085 InitializationSequence Seq(SemaRef, Entity, Kind, expr, 1086 /*TopLevelOfInitList*/ true); 1087 1088 // C++14 [dcl.init.aggr]p13: 1089 // If the assignment-expression can initialize a member, the member is 1090 // initialized. Otherwise [...] brace elision is assumed 1091 // 1092 // Brace elision is never performed if the element is not an 1093 // assignment-expression. 1094 if (Seq || isa<InitListExpr>(expr)) { 1095 if (!VerifyOnly) { 1096 ExprResult Result = 1097 Seq.Perform(SemaRef, Entity, Kind, expr); 1098 if (Result.isInvalid()) 1099 hadError = true; 1100 1101 UpdateStructuredListElement(StructuredList, StructuredIndex, 1102 Result.getAs<Expr>()); 1103 } else if (!Seq) 1104 hadError = true; 1105 ++Index; 1106 return; 1107 } 1108 1109 // Fall through for subaggregate initialization 1110 } else if (ElemType->isScalarType() || ElemType->isAtomicType()) { 1111 // FIXME: Need to handle atomic aggregate types with implicit init lists. 1112 return CheckScalarType(Entity, IList, ElemType, Index, 1113 StructuredList, StructuredIndex); 1114 } else if (const ArrayType *arrayType = 1115 SemaRef.Context.getAsArrayType(ElemType)) { 1116 // arrayType can be incomplete if we're initializing a flexible 1117 // array member. There's nothing we can do with the completed 1118 // type here, though. 1119 1120 if (IsStringInit(expr, arrayType, SemaRef.Context) == SIF_None) { 1121 if (!VerifyOnly) { 1122 CheckStringInit(expr, ElemType, arrayType, SemaRef); 1123 UpdateStructuredListElement(StructuredList, StructuredIndex, expr); 1124 } 1125 ++Index; 1126 return; 1127 } 1128 1129 // Fall through for subaggregate initialization. 1130 1131 } else { 1132 assert((ElemType->isRecordType() || ElemType->isVectorType()) && 1133 "Unexpected type"); 1134 1135 // C99 6.7.8p13: 1136 // 1137 // The initializer for a structure or union object that has 1138 // automatic storage duration shall be either an initializer 1139 // list as described below, or a single expression that has 1140 // compatible structure or union type. In the latter case, the 1141 // initial value of the object, including unnamed members, is 1142 // that of the expression. 1143 ExprResult ExprRes = expr; 1144 if (SemaRef.CheckSingleAssignmentConstraints( 1145 ElemType, ExprRes, !VerifyOnly) != Sema::Incompatible) { 1146 if (ExprRes.isInvalid()) 1147 hadError = true; 1148 else { 1149 ExprRes = SemaRef.DefaultFunctionArrayLvalueConversion(ExprRes.get()); 1150 if (ExprRes.isInvalid()) 1151 hadError = true; 1152 } 1153 UpdateStructuredListElement(StructuredList, StructuredIndex, 1154 ExprRes.getAs<Expr>()); 1155 ++Index; 1156 return; 1157 } 1158 ExprRes.get(); 1159 // Fall through for subaggregate initialization 1160 } 1161 1162 // C++ [dcl.init.aggr]p12: 1163 // 1164 // [...] Otherwise, if the member is itself a non-empty 1165 // subaggregate, brace elision is assumed and the initializer is 1166 // considered for the initialization of the first member of 1167 // the subaggregate. 1168 if (!SemaRef.getLangOpts().OpenCL && 1169 (ElemType->isAggregateType() || ElemType->isVectorType())) { 1170 CheckImplicitInitList(Entity, IList, ElemType, Index, StructuredList, 1171 StructuredIndex); 1172 ++StructuredIndex; 1173 } else { 1174 if (!VerifyOnly) { 1175 // We cannot initialize this element, so let 1176 // PerformCopyInitialization produce the appropriate diagnostic. 1177 SemaRef.PerformCopyInitialization(Entity, SourceLocation(), expr, 1178 /*TopLevelOfInitList=*/true); 1179 } 1180 hadError = true; 1181 ++Index; 1182 ++StructuredIndex; 1183 } 1184 } 1185 1186 void InitListChecker::CheckComplexType(const InitializedEntity &Entity, 1187 InitListExpr *IList, QualType DeclType, 1188 unsigned &Index, 1189 InitListExpr *StructuredList, 1190 unsigned &StructuredIndex) { 1191 assert(Index == 0 && "Index in explicit init list must be zero"); 1192 1193 // As an extension, clang supports complex initializers, which initialize 1194 // a complex number component-wise. When an explicit initializer list for 1195 // a complex number contains two two initializers, this extension kicks in: 1196 // it exepcts the initializer list to contain two elements convertible to 1197 // the element type of the complex type. The first element initializes 1198 // the real part, and the second element intitializes the imaginary part. 1199 1200 if (IList->getNumInits() != 2) 1201 return CheckScalarType(Entity, IList, DeclType, Index, StructuredList, 1202 StructuredIndex); 1203 1204 // This is an extension in C. (The builtin _Complex type does not exist 1205 // in the C++ standard.) 1206 if (!SemaRef.getLangOpts().CPlusPlus && !VerifyOnly) 1207 SemaRef.Diag(IList->getLocStart(), diag::ext_complex_component_init) 1208 << IList->getSourceRange(); 1209 1210 // Initialize the complex number. 1211 QualType elementType = DeclType->getAs<ComplexType>()->getElementType(); 1212 InitializedEntity ElementEntity = 1213 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity); 1214 1215 for (unsigned i = 0; i < 2; ++i) { 1216 ElementEntity.setElementIndex(Index); 1217 CheckSubElementType(ElementEntity, IList, elementType, Index, 1218 StructuredList, StructuredIndex); 1219 } 1220 } 1221 1222 void InitListChecker::CheckScalarType(const InitializedEntity &Entity, 1223 InitListExpr *IList, QualType DeclType, 1224 unsigned &Index, 1225 InitListExpr *StructuredList, 1226 unsigned &StructuredIndex) { 1227 if (Index >= IList->getNumInits()) { 1228 if (!VerifyOnly) 1229 SemaRef.Diag(IList->getLocStart(), 1230 SemaRef.getLangOpts().CPlusPlus11 ? 1231 diag::warn_cxx98_compat_empty_scalar_initializer : 1232 diag::err_empty_scalar_initializer) 1233 << IList->getSourceRange(); 1234 hadError = !SemaRef.getLangOpts().CPlusPlus11; 1235 ++Index; 1236 ++StructuredIndex; 1237 return; 1238 } 1239 1240 Expr *expr = IList->getInit(Index); 1241 if (InitListExpr *SubIList = dyn_cast<InitListExpr>(expr)) { 1242 // FIXME: This is invalid, and accepting it causes overload resolution 1243 // to pick the wrong overload in some corner cases. 1244 if (!VerifyOnly) 1245 SemaRef.Diag(SubIList->getLocStart(), 1246 diag::ext_many_braces_around_scalar_init) 1247 << SubIList->getSourceRange(); 1248 1249 CheckScalarType(Entity, SubIList, DeclType, Index, StructuredList, 1250 StructuredIndex); 1251 return; 1252 } else if (isa<DesignatedInitExpr>(expr)) { 1253 if (!VerifyOnly) 1254 SemaRef.Diag(expr->getLocStart(), 1255 diag::err_designator_for_scalar_init) 1256 << DeclType << expr->getSourceRange(); 1257 hadError = true; 1258 ++Index; 1259 ++StructuredIndex; 1260 return; 1261 } 1262 1263 if (VerifyOnly) { 1264 if (!SemaRef.CanPerformCopyInitialization(Entity,expr)) 1265 hadError = true; 1266 ++Index; 1267 return; 1268 } 1269 1270 ExprResult Result = 1271 SemaRef.PerformCopyInitialization(Entity, expr->getLocStart(), expr, 1272 /*TopLevelOfInitList=*/true); 1273 1274 Expr *ResultExpr = nullptr; 1275 1276 if (Result.isInvalid()) 1277 hadError = true; // types weren't compatible. 1278 else { 1279 ResultExpr = Result.getAs<Expr>(); 1280 1281 if (ResultExpr != expr) { 1282 // The type was promoted, update initializer list. 1283 IList->setInit(Index, ResultExpr); 1284 } 1285 } 1286 if (hadError) 1287 ++StructuredIndex; 1288 else 1289 UpdateStructuredListElement(StructuredList, StructuredIndex, ResultExpr); 1290 ++Index; 1291 } 1292 1293 void InitListChecker::CheckReferenceType(const InitializedEntity &Entity, 1294 InitListExpr *IList, QualType DeclType, 1295 unsigned &Index, 1296 InitListExpr *StructuredList, 1297 unsigned &StructuredIndex) { 1298 if (Index >= IList->getNumInits()) { 1299 // FIXME: It would be wonderful if we could point at the actual member. In 1300 // general, it would be useful to pass location information down the stack, 1301 // so that we know the location (or decl) of the "current object" being 1302 // initialized. 1303 if (!VerifyOnly) 1304 SemaRef.Diag(IList->getLocStart(), 1305 diag::err_init_reference_member_uninitialized) 1306 << DeclType 1307 << IList->getSourceRange(); 1308 hadError = true; 1309 ++Index; 1310 ++StructuredIndex; 1311 return; 1312 } 1313 1314 Expr *expr = IList->getInit(Index); 1315 if (isa<InitListExpr>(expr) && !SemaRef.getLangOpts().CPlusPlus11) { 1316 if (!VerifyOnly) 1317 SemaRef.Diag(IList->getLocStart(), diag::err_init_non_aggr_init_list) 1318 << DeclType << IList->getSourceRange(); 1319 hadError = true; 1320 ++Index; 1321 ++StructuredIndex; 1322 return; 1323 } 1324 1325 if (VerifyOnly) { 1326 if (!SemaRef.CanPerformCopyInitialization(Entity,expr)) 1327 hadError = true; 1328 ++Index; 1329 return; 1330 } 1331 1332 ExprResult Result = 1333 SemaRef.PerformCopyInitialization(Entity, expr->getLocStart(), expr, 1334 /*TopLevelOfInitList=*/true); 1335 1336 if (Result.isInvalid()) 1337 hadError = true; 1338 1339 expr = Result.getAs<Expr>(); 1340 IList->setInit(Index, expr); 1341 1342 if (hadError) 1343 ++StructuredIndex; 1344 else 1345 UpdateStructuredListElement(StructuredList, StructuredIndex, expr); 1346 ++Index; 1347 } 1348 1349 void InitListChecker::CheckVectorType(const InitializedEntity &Entity, 1350 InitListExpr *IList, QualType DeclType, 1351 unsigned &Index, 1352 InitListExpr *StructuredList, 1353 unsigned &StructuredIndex) { 1354 const VectorType *VT = DeclType->getAs<VectorType>(); 1355 unsigned maxElements = VT->getNumElements(); 1356 unsigned numEltsInit = 0; 1357 QualType elementType = VT->getElementType(); 1358 1359 if (Index >= IList->getNumInits()) { 1360 // Make sure the element type can be value-initialized. 1361 if (VerifyOnly) 1362 CheckEmptyInitializable( 1363 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity), 1364 IList->getLocEnd()); 1365 return; 1366 } 1367 1368 if (!SemaRef.getLangOpts().OpenCL) { 1369 // If the initializing element is a vector, try to copy-initialize 1370 // instead of breaking it apart (which is doomed to failure anyway). 1371 Expr *Init = IList->getInit(Index); 1372 if (!isa<InitListExpr>(Init) && Init->getType()->isVectorType()) { 1373 if (VerifyOnly) { 1374 if (!SemaRef.CanPerformCopyInitialization(Entity, Init)) 1375 hadError = true; 1376 ++Index; 1377 return; 1378 } 1379 1380 ExprResult Result = 1381 SemaRef.PerformCopyInitialization(Entity, Init->getLocStart(), Init, 1382 /*TopLevelOfInitList=*/true); 1383 1384 Expr *ResultExpr = nullptr; 1385 if (Result.isInvalid()) 1386 hadError = true; // types weren't compatible. 1387 else { 1388 ResultExpr = Result.getAs<Expr>(); 1389 1390 if (ResultExpr != Init) { 1391 // The type was promoted, update initializer list. 1392 IList->setInit(Index, ResultExpr); 1393 } 1394 } 1395 if (hadError) 1396 ++StructuredIndex; 1397 else 1398 UpdateStructuredListElement(StructuredList, StructuredIndex, 1399 ResultExpr); 1400 ++Index; 1401 return; 1402 } 1403 1404 InitializedEntity ElementEntity = 1405 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity); 1406 1407 for (unsigned i = 0; i < maxElements; ++i, ++numEltsInit) { 1408 // Don't attempt to go past the end of the init list 1409 if (Index >= IList->getNumInits()) { 1410 if (VerifyOnly) 1411 CheckEmptyInitializable(ElementEntity, IList->getLocEnd()); 1412 break; 1413 } 1414 1415 ElementEntity.setElementIndex(Index); 1416 CheckSubElementType(ElementEntity, IList, elementType, Index, 1417 StructuredList, StructuredIndex); 1418 } 1419 1420 if (VerifyOnly) 1421 return; 1422 1423 bool isBigEndian = SemaRef.Context.getTargetInfo().isBigEndian(); 1424 const VectorType *T = Entity.getType()->getAs<VectorType>(); 1425 if (isBigEndian && (T->getVectorKind() == VectorType::NeonVector || 1426 T->getVectorKind() == VectorType::NeonPolyVector)) { 1427 // The ability to use vector initializer lists is a GNU vector extension 1428 // and is unrelated to the NEON intrinsics in arm_neon.h. On little 1429 // endian machines it works fine, however on big endian machines it 1430 // exhibits surprising behaviour: 1431 // 1432 // uint32x2_t x = {42, 64}; 1433 // return vget_lane_u32(x, 0); // Will return 64. 1434 // 1435 // Because of this, explicitly call out that it is non-portable. 1436 // 1437 SemaRef.Diag(IList->getLocStart(), 1438 diag::warn_neon_vector_initializer_non_portable); 1439 1440 const char *typeCode; 1441 unsigned typeSize = SemaRef.Context.getTypeSize(elementType); 1442 1443 if (elementType->isFloatingType()) 1444 typeCode = "f"; 1445 else if (elementType->isSignedIntegerType()) 1446 typeCode = "s"; 1447 else if (elementType->isUnsignedIntegerType()) 1448 typeCode = "u"; 1449 else 1450 llvm_unreachable("Invalid element type!"); 1451 1452 SemaRef.Diag(IList->getLocStart(), 1453 SemaRef.Context.getTypeSize(VT) > 64 ? 1454 diag::note_neon_vector_initializer_non_portable_q : 1455 diag::note_neon_vector_initializer_non_portable) 1456 << typeCode << typeSize; 1457 } 1458 1459 return; 1460 } 1461 1462 InitializedEntity ElementEntity = 1463 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity); 1464 1465 // OpenCL initializers allows vectors to be constructed from vectors. 1466 for (unsigned i = 0; i < maxElements; ++i) { 1467 // Don't attempt to go past the end of the init list 1468 if (Index >= IList->getNumInits()) 1469 break; 1470 1471 ElementEntity.setElementIndex(Index); 1472 1473 QualType IType = IList->getInit(Index)->getType(); 1474 if (!IType->isVectorType()) { 1475 CheckSubElementType(ElementEntity, IList, elementType, Index, 1476 StructuredList, StructuredIndex); 1477 ++numEltsInit; 1478 } else { 1479 QualType VecType; 1480 const VectorType *IVT = IType->getAs<VectorType>(); 1481 unsigned numIElts = IVT->getNumElements(); 1482 1483 if (IType->isExtVectorType()) 1484 VecType = SemaRef.Context.getExtVectorType(elementType, numIElts); 1485 else 1486 VecType = SemaRef.Context.getVectorType(elementType, numIElts, 1487 IVT->getVectorKind()); 1488 CheckSubElementType(ElementEntity, IList, VecType, Index, 1489 StructuredList, StructuredIndex); 1490 numEltsInit += numIElts; 1491 } 1492 } 1493 1494 // OpenCL requires all elements to be initialized. 1495 if (numEltsInit != maxElements) { 1496 if (!VerifyOnly) 1497 SemaRef.Diag(IList->getLocStart(), 1498 diag::err_vector_incorrect_num_initializers) 1499 << (numEltsInit < maxElements) << maxElements << numEltsInit; 1500 hadError = true; 1501 } 1502 } 1503 1504 void InitListChecker::CheckArrayType(const InitializedEntity &Entity, 1505 InitListExpr *IList, QualType &DeclType, 1506 llvm::APSInt elementIndex, 1507 bool SubobjectIsDesignatorContext, 1508 unsigned &Index, 1509 InitListExpr *StructuredList, 1510 unsigned &StructuredIndex) { 1511 const ArrayType *arrayType = SemaRef.Context.getAsArrayType(DeclType); 1512 1513 // Check for the special-case of initializing an array with a string. 1514 if (Index < IList->getNumInits()) { 1515 if (IsStringInit(IList->getInit(Index), arrayType, SemaRef.Context) == 1516 SIF_None) { 1517 // We place the string literal directly into the resulting 1518 // initializer list. This is the only place where the structure 1519 // of the structured initializer list doesn't match exactly, 1520 // because doing so would involve allocating one character 1521 // constant for each string. 1522 if (!VerifyOnly) { 1523 CheckStringInit(IList->getInit(Index), DeclType, arrayType, SemaRef); 1524 UpdateStructuredListElement(StructuredList, StructuredIndex, 1525 IList->getInit(Index)); 1526 StructuredList->resizeInits(SemaRef.Context, StructuredIndex); 1527 } 1528 ++Index; 1529 return; 1530 } 1531 } 1532 if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(arrayType)) { 1533 // Check for VLAs; in standard C it would be possible to check this 1534 // earlier, but I don't know where clang accepts VLAs (gcc accepts 1535 // them in all sorts of strange places). 1536 if (!VerifyOnly) 1537 SemaRef.Diag(VAT->getSizeExpr()->getLocStart(), 1538 diag::err_variable_object_no_init) 1539 << VAT->getSizeExpr()->getSourceRange(); 1540 hadError = true; 1541 ++Index; 1542 ++StructuredIndex; 1543 return; 1544 } 1545 1546 // We might know the maximum number of elements in advance. 1547 llvm::APSInt maxElements(elementIndex.getBitWidth(), 1548 elementIndex.isUnsigned()); 1549 bool maxElementsKnown = false; 1550 if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(arrayType)) { 1551 maxElements = CAT->getSize(); 1552 elementIndex = elementIndex.extOrTrunc(maxElements.getBitWidth()); 1553 elementIndex.setIsUnsigned(maxElements.isUnsigned()); 1554 maxElementsKnown = true; 1555 } 1556 1557 QualType elementType = arrayType->getElementType(); 1558 while (Index < IList->getNumInits()) { 1559 Expr *Init = IList->getInit(Index); 1560 if (DesignatedInitExpr *DIE = dyn_cast<DesignatedInitExpr>(Init)) { 1561 // If we're not the subobject that matches up with the '{' for 1562 // the designator, we shouldn't be handling the 1563 // designator. Return immediately. 1564 if (!SubobjectIsDesignatorContext) 1565 return; 1566 1567 // Handle this designated initializer. elementIndex will be 1568 // updated to be the next array element we'll initialize. 1569 if (CheckDesignatedInitializer(Entity, IList, DIE, 0, 1570 DeclType, nullptr, &elementIndex, Index, 1571 StructuredList, StructuredIndex, true, 1572 false)) { 1573 hadError = true; 1574 continue; 1575 } 1576 1577 if (elementIndex.getBitWidth() > maxElements.getBitWidth()) 1578 maxElements = maxElements.extend(elementIndex.getBitWidth()); 1579 else if (elementIndex.getBitWidth() < maxElements.getBitWidth()) 1580 elementIndex = elementIndex.extend(maxElements.getBitWidth()); 1581 elementIndex.setIsUnsigned(maxElements.isUnsigned()); 1582 1583 // If the array is of incomplete type, keep track of the number of 1584 // elements in the initializer. 1585 if (!maxElementsKnown && elementIndex > maxElements) 1586 maxElements = elementIndex; 1587 1588 continue; 1589 } 1590 1591 // If we know the maximum number of elements, and we've already 1592 // hit it, stop consuming elements in the initializer list. 1593 if (maxElementsKnown && elementIndex == maxElements) 1594 break; 1595 1596 InitializedEntity ElementEntity = 1597 InitializedEntity::InitializeElement(SemaRef.Context, StructuredIndex, 1598 Entity); 1599 // Check this element. 1600 CheckSubElementType(ElementEntity, IList, elementType, Index, 1601 StructuredList, StructuredIndex); 1602 ++elementIndex; 1603 1604 // If the array is of incomplete type, keep track of the number of 1605 // elements in the initializer. 1606 if (!maxElementsKnown && elementIndex > maxElements) 1607 maxElements = elementIndex; 1608 } 1609 if (!hadError && DeclType->isIncompleteArrayType() && !VerifyOnly) { 1610 // If this is an incomplete array type, the actual type needs to 1611 // be calculated here. 1612 llvm::APSInt Zero(maxElements.getBitWidth(), maxElements.isUnsigned()); 1613 if (maxElements == Zero) { 1614 // Sizing an array implicitly to zero is not allowed by ISO C, 1615 // but is supported by GNU. 1616 SemaRef.Diag(IList->getLocStart(), 1617 diag::ext_typecheck_zero_array_size); 1618 } 1619 1620 DeclType = SemaRef.Context.getConstantArrayType(elementType, maxElements, 1621 ArrayType::Normal, 0); 1622 } 1623 if (!hadError && VerifyOnly) { 1624 // Check if there are any members of the array that get value-initialized. 1625 // If so, check if doing that is possible. 1626 // FIXME: This needs to detect holes left by designated initializers too. 1627 if (maxElementsKnown && elementIndex < maxElements) 1628 CheckEmptyInitializable(InitializedEntity::InitializeElement( 1629 SemaRef.Context, 0, Entity), 1630 IList->getLocEnd()); 1631 } 1632 } 1633 1634 bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, 1635 Expr *InitExpr, 1636 FieldDecl *Field, 1637 bool TopLevelObject) { 1638 // Handle GNU flexible array initializers. 1639 unsigned FlexArrayDiag; 1640 if (isa<InitListExpr>(InitExpr) && 1641 cast<InitListExpr>(InitExpr)->getNumInits() == 0) { 1642 // Empty flexible array init always allowed as an extension 1643 FlexArrayDiag = diag::ext_flexible_array_init; 1644 } else if (SemaRef.getLangOpts().CPlusPlus) { 1645 // Disallow flexible array init in C++; it is not required for gcc 1646 // compatibility, and it needs work to IRGen correctly in general. 1647 FlexArrayDiag = diag::err_flexible_array_init; 1648 } else if (!TopLevelObject) { 1649 // Disallow flexible array init on non-top-level object 1650 FlexArrayDiag = diag::err_flexible_array_init; 1651 } else if (Entity.getKind() != InitializedEntity::EK_Variable) { 1652 // Disallow flexible array init on anything which is not a variable. 1653 FlexArrayDiag = diag::err_flexible_array_init; 1654 } else if (cast<VarDecl>(Entity.getDecl())->hasLocalStorage()) { 1655 // Disallow flexible array init on local variables. 1656 FlexArrayDiag = diag::err_flexible_array_init; 1657 } else { 1658 // Allow other cases. 1659 FlexArrayDiag = diag::ext_flexible_array_init; 1660 } 1661 1662 if (!VerifyOnly) { 1663 SemaRef.Diag(InitExpr->getLocStart(), 1664 FlexArrayDiag) 1665 << InitExpr->getLocStart(); 1666 SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) 1667 << Field; 1668 } 1669 1670 return FlexArrayDiag != diag::ext_flexible_array_init; 1671 } 1672 1673 void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, 1674 InitListExpr *IList, 1675 QualType DeclType, 1676 RecordDecl::field_iterator Field, 1677 bool SubobjectIsDesignatorContext, 1678 unsigned &Index, 1679 InitListExpr *StructuredList, 1680 unsigned &StructuredIndex, 1681 bool TopLevelObject) { 1682 RecordDecl* structDecl = DeclType->getAs<RecordType>()->getDecl(); 1683 1684 // If the record is invalid, some of it's members are invalid. To avoid 1685 // confusion, we forgo checking the intializer for the entire record. 1686 if (structDecl->isInvalidDecl()) { 1687 // Assume it was supposed to consume a single initializer. 1688 ++Index; 1689 hadError = true; 1690 return; 1691 } 1692 1693 if (DeclType->isUnionType() && IList->getNumInits() == 0) { 1694 RecordDecl *RD = DeclType->getAs<RecordType>()->getDecl(); 1695 1696 // If there's a default initializer, use it. 1697 if (isa<CXXRecordDecl>(RD) && cast<CXXRecordDecl>(RD)->hasInClassInitializer()) { 1698 if (VerifyOnly) 1699 return; 1700 for (RecordDecl::field_iterator FieldEnd = RD->field_end(); 1701 Field != FieldEnd; ++Field) { 1702 if (Field->hasInClassInitializer()) { 1703 StructuredList->setInitializedFieldInUnion(*Field); 1704 // FIXME: Actually build a CXXDefaultInitExpr? 1705 return; 1706 } 1707 } 1708 } 1709 1710 // Value-initialize the first member of the union that isn't an unnamed 1711 // bitfield. 1712 for (RecordDecl::field_iterator FieldEnd = RD->field_end(); 1713 Field != FieldEnd; ++Field) { 1714 if (!Field->isUnnamedBitfield()) { 1715 if (VerifyOnly) 1716 CheckEmptyInitializable( 1717 InitializedEntity::InitializeMember(*Field, &Entity), 1718 IList->getLocEnd()); 1719 else 1720 StructuredList->setInitializedFieldInUnion(*Field); 1721 break; 1722 } 1723 } 1724 return; 1725 } 1726 1727 // If structDecl is a forward declaration, this loop won't do 1728 // anything except look at designated initializers; That's okay, 1729 // because an error should get printed out elsewhere. It might be 1730 // worthwhile to skip over the rest of the initializer, though. 1731 RecordDecl *RD = DeclType->getAs<RecordType>()->getDecl(); 1732 RecordDecl::field_iterator FieldEnd = RD->field_end(); 1733 bool InitializedSomething = false; 1734 bool CheckForMissingFields = true; 1735 while (Index < IList->getNumInits()) { 1736 Expr *Init = IList->getInit(Index); 1737 1738 if (DesignatedInitExpr *DIE = dyn_cast<DesignatedInitExpr>(Init)) { 1739 // If we're not the subobject that matches up with the '{' for 1740 // the designator, we shouldn't be handling the 1741 // designator. Return immediately. 1742 if (!SubobjectIsDesignatorContext) 1743 return; 1744 1745 // Handle this designated initializer. Field will be updated to 1746 // the next field that we'll be initializing. 1747 if (CheckDesignatedInitializer(Entity, IList, DIE, 0, 1748 DeclType, &Field, nullptr, Index, 1749 StructuredList, StructuredIndex, 1750 true, TopLevelObject)) 1751 hadError = true; 1752 1753 InitializedSomething = true; 1754 1755 // Disable check for missing fields when designators are used. 1756 // This matches gcc behaviour. 1757 CheckForMissingFields = false; 1758 continue; 1759 } 1760 1761 if (Field == FieldEnd) { 1762 // We've run out of fields. We're done. 1763 break; 1764 } 1765 1766 // We've already initialized a member of a union. We're done. 1767 if (InitializedSomething && DeclType->isUnionType()) 1768 break; 1769 1770 // If we've hit the flexible array member at the end, we're done. 1771 if (Field->getType()->isIncompleteArrayType()) 1772 break; 1773 1774 if (Field->isUnnamedBitfield()) { 1775 // Don't initialize unnamed bitfields, e.g. "int : 20;" 1776 ++Field; 1777 continue; 1778 } 1779 1780 // Make sure we can use this declaration. 1781 bool InvalidUse; 1782 if (VerifyOnly) 1783 InvalidUse = !SemaRef.CanUseDecl(*Field); 1784 else 1785 InvalidUse = SemaRef.DiagnoseUseOfDecl(*Field, 1786 IList->getInit(Index)->getLocStart()); 1787 if (InvalidUse) { 1788 ++Index; 1789 ++Field; 1790 hadError = true; 1791 continue; 1792 } 1793 1794 InitializedEntity MemberEntity = 1795 InitializedEntity::InitializeMember(*Field, &Entity); 1796 CheckSubElementType(MemberEntity, IList, Field->getType(), Index, 1797 StructuredList, StructuredIndex); 1798 InitializedSomething = true; 1799 1800 if (DeclType->isUnionType() && !VerifyOnly) { 1801 // Initialize the first field within the union. 1802 StructuredList->setInitializedFieldInUnion(*Field); 1803 } 1804 1805 ++Field; 1806 } 1807 1808 // Emit warnings for missing struct field initializers. 1809 if (!VerifyOnly && InitializedSomething && CheckForMissingFields && 1810 Field != FieldEnd && !Field->getType()->isIncompleteArrayType() && 1811 !DeclType->isUnionType()) { 1812 // It is possible we have one or more unnamed bitfields remaining. 1813 // Find first (if any) named field and emit warning. 1814 for (RecordDecl::field_iterator it = Field, end = RD->field_end(); 1815 it != end; ++it) { 1816 if (!it->isUnnamedBitfield() && !it->hasInClassInitializer()) { 1817 SemaRef.Diag(IList->getSourceRange().getEnd(), 1818 diag::warn_missing_field_initializers) << *it; 1819 break; 1820 } 1821 } 1822 } 1823 1824 // Check that any remaining fields can be value-initialized. 1825 if (VerifyOnly && Field != FieldEnd && !DeclType->isUnionType() && 1826 !Field->getType()->isIncompleteArrayType()) { 1827 // FIXME: Should check for holes left by designated initializers too. 1828 for (; Field != FieldEnd && !hadError; ++Field) { 1829 if (!Field->isUnnamedBitfield() && !Field->hasInClassInitializer()) 1830 CheckEmptyInitializable( 1831 InitializedEntity::InitializeMember(*Field, &Entity), 1832 IList->getLocEnd()); 1833 } 1834 } 1835 1836 if (Field == FieldEnd || !Field->getType()->isIncompleteArrayType() || 1837 Index >= IList->getNumInits()) 1838 return; 1839 1840 if (CheckFlexibleArrayInit(Entity, IList->getInit(Index), *Field, 1841 TopLevelObject)) { 1842 hadError = true; 1843 ++Index; 1844 return; 1845 } 1846 1847 InitializedEntity MemberEntity = 1848 InitializedEntity::InitializeMember(*Field, &Entity); 1849 1850 if (isa<InitListExpr>(IList->getInit(Index))) 1851 CheckSubElementType(MemberEntity, IList, Field->getType(), Index, 1852 StructuredList, StructuredIndex); 1853 else 1854 CheckImplicitInitList(MemberEntity, IList, Field->getType(), Index, 1855 StructuredList, StructuredIndex); 1856 } 1857 1858 /// \brief Expand a field designator that refers to a member of an 1859 /// anonymous struct or union into a series of field designators that 1860 /// refers to the field within the appropriate subobject. 1861 /// 1862 static void ExpandAnonymousFieldDesignator(Sema &SemaRef, 1863 DesignatedInitExpr *DIE, 1864 unsigned DesigIdx, 1865 IndirectFieldDecl *IndirectField) { 1866 typedef DesignatedInitExpr::Designator Designator; 1867 1868 // Build the replacement designators. 1869 SmallVector<Designator, 4> Replacements; 1870 for (IndirectFieldDecl::chain_iterator PI = IndirectField->chain_begin(), 1871 PE = IndirectField->chain_end(); PI != PE; ++PI) { 1872 if (PI + 1 == PE) 1873 Replacements.push_back(Designator((IdentifierInfo *)nullptr, 1874 DIE->getDesignator(DesigIdx)->getDotLoc(), 1875 DIE->getDesignator(DesigIdx)->getFieldLoc())); 1876 else 1877 Replacements.push_back(Designator((IdentifierInfo *)nullptr, 1878 SourceLocation(), SourceLocation())); 1879 assert(isa<FieldDecl>(*PI)); 1880 Replacements.back().setField(cast<FieldDecl>(*PI)); 1881 } 1882 1883 // Expand the current designator into the set of replacement 1884 // designators, so we have a full subobject path down to where the 1885 // member of the anonymous struct/union is actually stored. 1886 DIE->ExpandDesignator(SemaRef.Context, DesigIdx, &Replacements[0], 1887 &Replacements[0] + Replacements.size()); 1888 } 1889 1890 static DesignatedInitExpr *CloneDesignatedInitExpr(Sema &SemaRef, 1891 DesignatedInitExpr *DIE) { 1892 unsigned NumIndexExprs = DIE->getNumSubExprs() - 1; 1893 SmallVector<Expr*, 4> IndexExprs(NumIndexExprs); 1894 for (unsigned I = 0; I < NumIndexExprs; ++I) 1895 IndexExprs[I] = DIE->getSubExpr(I + 1); 1896 return DesignatedInitExpr::Create(SemaRef.Context, DIE->designators_begin(), 1897 DIE->size(), IndexExprs, 1898 DIE->getEqualOrColonLoc(), 1899 DIE->usesGNUSyntax(), DIE->getInit()); 1900 } 1901 1902 namespace { 1903 1904 // Callback to only accept typo corrections that are for field members of 1905 // the given struct or union. 1906 class FieldInitializerValidatorCCC : public CorrectionCandidateCallback { 1907 public: 1908 explicit FieldInitializerValidatorCCC(RecordDecl *RD) 1909 : Record(RD) {} 1910 1911 bool ValidateCandidate(const TypoCorrection &candidate) override { 1912 FieldDecl *FD = candidate.getCorrectionDeclAs<FieldDecl>(); 1913 return FD && FD->getDeclContext()->getRedeclContext()->Equals(Record); 1914 } 1915 1916 private: 1917 RecordDecl *Record; 1918 }; 1919 1920 } // end anonymous namespace 1921 1922 /// @brief Check the well-formedness of a C99 designated initializer. 1923 /// 1924 /// Determines whether the designated initializer @p DIE, which 1925 /// resides at the given @p Index within the initializer list @p 1926 /// IList, is well-formed for a current object of type @p DeclType 1927 /// (C99 6.7.8). The actual subobject that this designator refers to 1928 /// within the current subobject is returned in either 1929 /// @p NextField or @p NextElementIndex (whichever is appropriate). 1930 /// 1931 /// @param IList The initializer list in which this designated 1932 /// initializer occurs. 1933 /// 1934 /// @param DIE The designated initializer expression. 1935 /// 1936 /// @param DesigIdx The index of the current designator. 1937 /// 1938 /// @param CurrentObjectType The type of the "current object" (C99 6.7.8p17), 1939 /// into which the designation in @p DIE should refer. 1940 /// 1941 /// @param NextField If non-NULL and the first designator in @p DIE is 1942 /// a field, this will be set to the field declaration corresponding 1943 /// to the field named by the designator. 1944 /// 1945 /// @param NextElementIndex If non-NULL and the first designator in @p 1946 /// DIE is an array designator or GNU array-range designator, this 1947 /// will be set to the last index initialized by this designator. 1948 /// 1949 /// @param Index Index into @p IList where the designated initializer 1950 /// @p DIE occurs. 1951 /// 1952 /// @param StructuredList The initializer list expression that 1953 /// describes all of the subobject initializers in the order they'll 1954 /// actually be initialized. 1955 /// 1956 /// @returns true if there was an error, false otherwise. 1957 bool 1958 InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, 1959 InitListExpr *IList, 1960 DesignatedInitExpr *DIE, 1961 unsigned DesigIdx, 1962 QualType &CurrentObjectType, 1963 RecordDecl::field_iterator *NextField, 1964 llvm::APSInt *NextElementIndex, 1965 unsigned &Index, 1966 InitListExpr *StructuredList, 1967 unsigned &StructuredIndex, 1968 bool FinishSubobjectInit, 1969 bool TopLevelObject) { 1970 if (DesigIdx == DIE->size()) { 1971 // Check the actual initialization for the designated object type. 1972 bool prevHadError = hadError; 1973 1974 // Temporarily remove the designator expression from the 1975 // initializer list that the child calls see, so that we don't try 1976 // to re-process the designator. 1977 unsigned OldIndex = Index; 1978 IList->setInit(OldIndex, DIE->getInit()); 1979 1980 CheckSubElementType(Entity, IList, CurrentObjectType, Index, 1981 StructuredList, StructuredIndex); 1982 1983 // Restore the designated initializer expression in the syntactic 1984 // form of the initializer list. 1985 if (IList->getInit(OldIndex) != DIE->getInit()) 1986 DIE->setInit(IList->getInit(OldIndex)); 1987 IList->setInit(OldIndex, DIE); 1988 1989 return hadError && !prevHadError; 1990 } 1991 1992 DesignatedInitExpr::Designator *D = DIE->getDesignator(DesigIdx); 1993 bool IsFirstDesignator = (DesigIdx == 0); 1994 if (!VerifyOnly) { 1995 assert((IsFirstDesignator || StructuredList) && 1996 "Need a non-designated initializer list to start from"); 1997 1998 // Determine the structural initializer list that corresponds to the 1999 // current subobject. 2000 if (IsFirstDesignator) 2001 StructuredList = SyntacticToSemantic.lookup(IList); 2002 else { 2003 Expr *ExistingInit = StructuredIndex < StructuredList->getNumInits() ? 2004 StructuredList->getInit(StructuredIndex) : nullptr; 2005 if (!ExistingInit && StructuredList->hasArrayFiller()) 2006 ExistingInit = StructuredList->getArrayFiller(); 2007 2008 if (!ExistingInit) 2009 StructuredList = 2010 getStructuredSubobjectInit(IList, Index, CurrentObjectType, 2011 StructuredList, StructuredIndex, 2012 SourceRange(D->getLocStart(), 2013 DIE->getLocEnd())); 2014 else if (InitListExpr *Result = dyn_cast<InitListExpr>(ExistingInit)) 2015 StructuredList = Result; 2016 else { 2017 if (DesignatedInitUpdateExpr *E = 2018 dyn_cast<DesignatedInitUpdateExpr>(ExistingInit)) 2019 StructuredList = E->getUpdater(); 2020 else { 2021 DesignatedInitUpdateExpr *DIUE = 2022 new (SemaRef.Context) DesignatedInitUpdateExpr(SemaRef.Context, 2023 D->getLocStart(), ExistingInit, 2024 DIE->getLocEnd()); 2025 StructuredList->updateInit(SemaRef.Context, StructuredIndex, DIUE); 2026 StructuredList = DIUE->getUpdater(); 2027 } 2028 2029 // We need to check on source range validity because the previous 2030 // initializer does not have to be an explicit initializer. e.g., 2031 // 2032 // struct P { int a, b; }; 2033 // struct PP { struct P p } l = { { .a = 2 }, .p.b = 3 }; 2034 // 2035 // There is an overwrite taking place because the first braced initializer 2036 // list "{ .a = 2 }" already provides value for .p.b (which is zero). 2037 if (ExistingInit->getSourceRange().isValid()) { 2038 // We are creating an initializer list that initializes the 2039 // subobjects of the current object, but there was already an 2040 // initialization that completely initialized the current 2041 // subobject, e.g., by a compound literal: 2042 // 2043 // struct X { int a, b; }; 2044 // struct X xs[] = { [0] = (struct X) { 1, 2 }, [0].b = 3 }; 2045 // 2046 // Here, xs[0].a == 0 and xs[0].b == 3, since the second, 2047 // designated initializer re-initializes the whole 2048 // subobject [0], overwriting previous initializers. 2049 SemaRef.Diag(D->getLocStart(), 2050 diag::warn_subobject_initializer_overrides) 2051 << SourceRange(D->getLocStart(), DIE->getLocEnd()); 2052 2053 SemaRef.Diag(ExistingInit->getLocStart(), 2054 diag::note_previous_initializer) 2055 << /*FIXME:has side effects=*/0 2056 << ExistingInit->getSourceRange(); 2057 } 2058 } 2059 } 2060 assert(StructuredList && "Expected a structured initializer list"); 2061 } 2062 2063 if (D->isFieldDesignator()) { 2064 // C99 6.7.8p7: 2065 // 2066 // If a designator has the form 2067 // 2068 // . identifier 2069 // 2070 // then the current object (defined below) shall have 2071 // structure or union type and the identifier shall be the 2072 // name of a member of that type. 2073 const RecordType *RT = CurrentObjectType->getAs<RecordType>(); 2074 if (!RT) { 2075 SourceLocation Loc = D->getDotLoc(); 2076 if (Loc.isInvalid()) 2077 Loc = D->getFieldLoc(); 2078 if (!VerifyOnly) 2079 SemaRef.Diag(Loc, diag::err_field_designator_non_aggr) 2080 << SemaRef.getLangOpts().CPlusPlus << CurrentObjectType; 2081 ++Index; 2082 return true; 2083 } 2084 2085 FieldDecl *KnownField = D->getField(); 2086 if (!KnownField) { 2087 IdentifierInfo *FieldName = D->getFieldName(); 2088 DeclContext::lookup_result Lookup = RT->getDecl()->lookup(FieldName); 2089 for (NamedDecl *ND : Lookup) { 2090 if (auto *FD = dyn_cast<FieldDecl>(ND)) { 2091 KnownField = FD; 2092 break; 2093 } 2094 if (auto *IFD = dyn_cast<IndirectFieldDecl>(ND)) { 2095 // In verify mode, don't modify the original. 2096 if (VerifyOnly) 2097 DIE = CloneDesignatedInitExpr(SemaRef, DIE); 2098 ExpandAnonymousFieldDesignator(SemaRef, DIE, DesigIdx, IFD); 2099 D = DIE->getDesignator(DesigIdx); 2100 KnownField = cast<FieldDecl>(*IFD->chain_begin()); 2101 break; 2102 } 2103 } 2104 if (!KnownField) { 2105 if (VerifyOnly) { 2106 ++Index; 2107 return true; // No typo correction when just trying this out. 2108 } 2109 2110 // Name lookup found something, but it wasn't a field. 2111 if (!Lookup.empty()) { 2112 SemaRef.Diag(D->getFieldLoc(), diag::err_field_designator_nonfield) 2113 << FieldName; 2114 SemaRef.Diag(Lookup.front()->getLocation(), 2115 diag::note_field_designator_found); 2116 ++Index; 2117 return true; 2118 } 2119 2120 // Name lookup didn't find anything. 2121 // Determine whether this was a typo for another field name. 2122 if (TypoCorrection Corrected = SemaRef.CorrectTypo( 2123 DeclarationNameInfo(FieldName, D->getFieldLoc()), 2124 Sema::LookupMemberName, /*Scope=*/nullptr, /*SS=*/nullptr, 2125 llvm::make_unique<FieldInitializerValidatorCCC>(RT->getDecl()), 2126 Sema::CTK_ErrorRecovery, RT->getDecl())) { 2127 SemaRef.diagnoseTypo( 2128 Corrected, 2129 SemaRef.PDiag(diag::err_field_designator_unknown_suggest) 2130 << FieldName << CurrentObjectType); 2131 KnownField = Corrected.getCorrectionDeclAs<FieldDecl>(); 2132 hadError = true; 2133 } else { 2134 // Typo correction didn't find anything. 2135 SemaRef.Diag(D->getFieldLoc(), diag::err_field_designator_unknown) 2136 << FieldName << CurrentObjectType; 2137 ++Index; 2138 return true; 2139 } 2140 } 2141 } 2142 2143 unsigned FieldIndex = 0; 2144 for (auto *FI : RT->getDecl()->fields()) { 2145 if (FI->isUnnamedBitfield()) 2146 continue; 2147 if (KnownField == FI) 2148 break; 2149 ++FieldIndex; 2150 } 2151 2152 RecordDecl::field_iterator Field = 2153 RecordDecl::field_iterator(DeclContext::decl_iterator(KnownField)); 2154 2155 // All of the fields of a union are located at the same place in 2156 // the initializer list. 2157 if (RT->getDecl()->isUnion()) { 2158 FieldIndex = 0; 2159 if (!VerifyOnly) { 2160 FieldDecl *CurrentField = StructuredList->getInitializedFieldInUnion(); 2161 if (CurrentField && CurrentField != *Field) { 2162 assert(StructuredList->getNumInits() == 1 2163 && "A union should never have more than one initializer!"); 2164 2165 // we're about to throw away an initializer, emit warning 2166 SemaRef.Diag(D->getFieldLoc(), 2167 diag::warn_initializer_overrides) 2168 << D->getSourceRange(); 2169 Expr *ExistingInit = StructuredList->getInit(0); 2170 SemaRef.Diag(ExistingInit->getLocStart(), 2171 diag::note_previous_initializer) 2172 << /*FIXME:has side effects=*/0 2173 << ExistingInit->getSourceRange(); 2174 2175 // remove existing initializer 2176 StructuredList->resizeInits(SemaRef.Context, 0); 2177 StructuredList->setInitializedFieldInUnion(nullptr); 2178 } 2179 2180 StructuredList->setInitializedFieldInUnion(*Field); 2181 } 2182 } 2183 2184 // Make sure we can use this declaration. 2185 bool InvalidUse; 2186 if (VerifyOnly) 2187 InvalidUse = !SemaRef.CanUseDecl(*Field); 2188 else 2189 InvalidUse = SemaRef.DiagnoseUseOfDecl(*Field, D->getFieldLoc()); 2190 if (InvalidUse) { 2191 ++Index; 2192 return true; 2193 } 2194 2195 if (!VerifyOnly) { 2196 // Update the designator with the field declaration. 2197 D->setField(*Field); 2198 2199 // Make sure that our non-designated initializer list has space 2200 // for a subobject corresponding to this field. 2201 if (FieldIndex >= StructuredList->getNumInits()) 2202 StructuredList->resizeInits(SemaRef.Context, FieldIndex + 1); 2203 } 2204 2205 // This designator names a flexible array member. 2206 if (Field->getType()->isIncompleteArrayType()) { 2207 bool Invalid = false; 2208 if ((DesigIdx + 1) != DIE->size()) { 2209 // We can't designate an object within the flexible array 2210 // member (because GCC doesn't allow it). 2211 if (!VerifyOnly) { 2212 DesignatedInitExpr::Designator *NextD 2213 = DIE->getDesignator(DesigIdx + 1); 2214 SemaRef.Diag(NextD->getLocStart(), 2215 diag::err_designator_into_flexible_array_member) 2216 << SourceRange(NextD->getLocStart(), 2217 DIE->getLocEnd()); 2218 SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) 2219 << *Field; 2220 } 2221 Invalid = true; 2222 } 2223 2224 if (!hadError && !isa<InitListExpr>(DIE->getInit()) && 2225 !isa<StringLiteral>(DIE->getInit())) { 2226 // The initializer is not an initializer list. 2227 if (!VerifyOnly) { 2228 SemaRef.Diag(DIE->getInit()->getLocStart(), 2229 diag::err_flexible_array_init_needs_braces) 2230 << DIE->getInit()->getSourceRange(); 2231 SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) 2232 << *Field; 2233 } 2234 Invalid = true; 2235 } 2236 2237 // Check GNU flexible array initializer. 2238 if (!Invalid && CheckFlexibleArrayInit(Entity, DIE->getInit(), *Field, 2239 TopLevelObject)) 2240 Invalid = true; 2241 2242 if (Invalid) { 2243 ++Index; 2244 return true; 2245 } 2246 2247 // Initialize the array. 2248 bool prevHadError = hadError; 2249 unsigned newStructuredIndex = FieldIndex; 2250 unsigned OldIndex = Index; 2251 IList->setInit(Index, DIE->getInit()); 2252 2253 InitializedEntity MemberEntity = 2254 InitializedEntity::InitializeMember(*Field, &Entity); 2255 CheckSubElementType(MemberEntity, IList, Field->getType(), Index, 2256 StructuredList, newStructuredIndex); 2257 2258 IList->setInit(OldIndex, DIE); 2259 if (hadError && !prevHadError) { 2260 ++Field; 2261 ++FieldIndex; 2262 if (NextField) 2263 *NextField = Field; 2264 StructuredIndex = FieldIndex; 2265 return true; 2266 } 2267 } else { 2268 // Recurse to check later designated subobjects. 2269 QualType FieldType = Field->getType(); 2270 unsigned newStructuredIndex = FieldIndex; 2271 2272 InitializedEntity MemberEntity = 2273 InitializedEntity::InitializeMember(*Field, &Entity); 2274 if (CheckDesignatedInitializer(MemberEntity, IList, DIE, DesigIdx + 1, 2275 FieldType, nullptr, nullptr, Index, 2276 StructuredList, newStructuredIndex, 2277 FinishSubobjectInit, false)) 2278 return true; 2279 } 2280 2281 // Find the position of the next field to be initialized in this 2282 // subobject. 2283 ++Field; 2284 ++FieldIndex; 2285 2286 // If this the first designator, our caller will continue checking 2287 // the rest of this struct/class/union subobject. 2288 if (IsFirstDesignator) { 2289 if (NextField) 2290 *NextField = Field; 2291 StructuredIndex = FieldIndex; 2292 return false; 2293 } 2294 2295 if (!FinishSubobjectInit) 2296 return false; 2297 2298 // We've already initialized something in the union; we're done. 2299 if (RT->getDecl()->isUnion()) 2300 return hadError; 2301 2302 // Check the remaining fields within this class/struct/union subobject. 2303 bool prevHadError = hadError; 2304 2305 CheckStructUnionTypes(Entity, IList, CurrentObjectType, Field, false, Index, 2306 StructuredList, FieldIndex); 2307 return hadError && !prevHadError; 2308 } 2309 2310 // C99 6.7.8p6: 2311 // 2312 // If a designator has the form 2313 // 2314 // [ constant-expression ] 2315 // 2316 // then the current object (defined below) shall have array 2317 // type and the expression shall be an integer constant 2318 // expression. If the array is of unknown size, any 2319 // nonnegative value is valid. 2320 // 2321 // Additionally, cope with the GNU extension that permits 2322 // designators of the form 2323 // 2324 // [ constant-expression ... constant-expression ] 2325 const ArrayType *AT = SemaRef.Context.getAsArrayType(CurrentObjectType); 2326 if (!AT) { 2327 if (!VerifyOnly) 2328 SemaRef.Diag(D->getLBracketLoc(), diag::err_array_designator_non_array) 2329 << CurrentObjectType; 2330 ++Index; 2331 return true; 2332 } 2333 2334 Expr *IndexExpr = nullptr; 2335 llvm::APSInt DesignatedStartIndex, DesignatedEndIndex; 2336 if (D->isArrayDesignator()) { 2337 IndexExpr = DIE->getArrayIndex(*D); 2338 DesignatedStartIndex = IndexExpr->EvaluateKnownConstInt(SemaRef.Context); 2339 DesignatedEndIndex = DesignatedStartIndex; 2340 } else { 2341 assert(D->isArrayRangeDesignator() && "Need array-range designator"); 2342 2343 DesignatedStartIndex = 2344 DIE->getArrayRangeStart(*D)->EvaluateKnownConstInt(SemaRef.Context); 2345 DesignatedEndIndex = 2346 DIE->getArrayRangeEnd(*D)->EvaluateKnownConstInt(SemaRef.Context); 2347 IndexExpr = DIE->getArrayRangeEnd(*D); 2348 2349 // Codegen can't handle evaluating array range designators that have side 2350 // effects, because we replicate the AST value for each initialized element. 2351 // As such, set the sawArrayRangeDesignator() bit if we initialize multiple 2352 // elements with something that has a side effect, so codegen can emit an 2353 // "error unsupported" error instead of miscompiling the app. 2354 if (DesignatedStartIndex.getZExtValue()!=DesignatedEndIndex.getZExtValue()&& 2355 DIE->getInit()->HasSideEffects(SemaRef.Context) && !VerifyOnly) 2356 FullyStructuredList->sawArrayRangeDesignator(); 2357 } 2358 2359 if (isa<ConstantArrayType>(AT)) { 2360 llvm::APSInt MaxElements(cast<ConstantArrayType>(AT)->getSize(), false); 2361 DesignatedStartIndex 2362 = DesignatedStartIndex.extOrTrunc(MaxElements.getBitWidth()); 2363 DesignatedStartIndex.setIsUnsigned(MaxElements.isUnsigned()); 2364 DesignatedEndIndex 2365 = DesignatedEndIndex.extOrTrunc(MaxElements.getBitWidth()); 2366 DesignatedEndIndex.setIsUnsigned(MaxElements.isUnsigned()); 2367 if (DesignatedEndIndex >= MaxElements) { 2368 if (!VerifyOnly) 2369 SemaRef.Diag(IndexExpr->getLocStart(), 2370 diag::err_array_designator_too_large) 2371 << DesignatedEndIndex.toString(10) << MaxElements.toString(10) 2372 << IndexExpr->getSourceRange(); 2373 ++Index; 2374 return true; 2375 } 2376 } else { 2377 unsigned DesignatedIndexBitWidth = 2378 ConstantArrayType::getMaxSizeBits(SemaRef.Context); 2379 DesignatedStartIndex = 2380 DesignatedStartIndex.extOrTrunc(DesignatedIndexBitWidth); 2381 DesignatedEndIndex = 2382 DesignatedEndIndex.extOrTrunc(DesignatedIndexBitWidth); 2383 DesignatedStartIndex.setIsUnsigned(true); 2384 DesignatedEndIndex.setIsUnsigned(true); 2385 } 2386 2387 if (!VerifyOnly && StructuredList->isStringLiteralInit()) { 2388 // We're modifying a string literal init; we have to decompose the string 2389 // so we can modify the individual characters. 2390 ASTContext &Context = SemaRef.Context; 2391 Expr *SubExpr = StructuredList->getInit(0)->IgnoreParens(); 2392 2393 // Compute the character type 2394 QualType CharTy = AT->getElementType(); 2395 2396 // Compute the type of the integer literals. 2397 QualType PromotedCharTy = CharTy; 2398 if (CharTy->isPromotableIntegerType()) 2399 PromotedCharTy = Context.getPromotedIntegerType(CharTy); 2400 unsigned PromotedCharTyWidth = Context.getTypeSize(PromotedCharTy); 2401 2402 if (StringLiteral *SL = dyn_cast<StringLiteral>(SubExpr)) { 2403 // Get the length of the string. 2404 uint64_t StrLen = SL->getLength(); 2405 if (cast<ConstantArrayType>(AT)->getSize().ult(StrLen)) 2406 StrLen = cast<ConstantArrayType>(AT)->getSize().getZExtValue(); 2407 StructuredList->resizeInits(Context, StrLen); 2408 2409 // Build a literal for each character in the string, and put them into 2410 // the init list. 2411 for (unsigned i = 0, e = StrLen; i != e; ++i) { 2412 llvm::APInt CodeUnit(PromotedCharTyWidth, SL->getCodeUnit(i)); 2413 Expr *Init = new (Context) IntegerLiteral( 2414 Context, CodeUnit, PromotedCharTy, SubExpr->getExprLoc()); 2415 if (CharTy != PromotedCharTy) 2416 Init = ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast, 2417 Init, nullptr, VK_RValue); 2418 StructuredList->updateInit(Context, i, Init); 2419 } 2420 } else { 2421 ObjCEncodeExpr *E = cast<ObjCEncodeExpr>(SubExpr); 2422 std::string Str; 2423 Context.getObjCEncodingForType(E->getEncodedType(), Str); 2424 2425 // Get the length of the string. 2426 uint64_t StrLen = Str.size(); 2427 if (cast<ConstantArrayType>(AT)->getSize().ult(StrLen)) 2428 StrLen = cast<ConstantArrayType>(AT)->getSize().getZExtValue(); 2429 StructuredList->resizeInits(Context, StrLen); 2430 2431 // Build a literal for each character in the string, and put them into 2432 // the init list. 2433 for (unsigned i = 0, e = StrLen; i != e; ++i) { 2434 llvm::APInt CodeUnit(PromotedCharTyWidth, Str[i]); 2435 Expr *Init = new (Context) IntegerLiteral( 2436 Context, CodeUnit, PromotedCharTy, SubExpr->getExprLoc()); 2437 if (CharTy != PromotedCharTy) 2438 Init = ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast, 2439 Init, nullptr, VK_RValue); 2440 StructuredList->updateInit(Context, i, Init); 2441 } 2442 } 2443 } 2444 2445 // Make sure that our non-designated initializer list has space 2446 // for a subobject corresponding to this array element. 2447 if (!VerifyOnly && 2448 DesignatedEndIndex.getZExtValue() >= StructuredList->getNumInits()) 2449 StructuredList->resizeInits(SemaRef.Context, 2450 DesignatedEndIndex.getZExtValue() + 1); 2451 2452 // Repeatedly perform subobject initializations in the range 2453 // [DesignatedStartIndex, DesignatedEndIndex]. 2454 2455 // Move to the next designator 2456 unsigned ElementIndex = DesignatedStartIndex.getZExtValue(); 2457 unsigned OldIndex = Index; 2458 2459 InitializedEntity ElementEntity = 2460 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity); 2461 2462 while (DesignatedStartIndex <= DesignatedEndIndex) { 2463 // Recurse to check later designated subobjects. 2464 QualType ElementType = AT->getElementType(); 2465 Index = OldIndex; 2466 2467 ElementEntity.setElementIndex(ElementIndex); 2468 if (CheckDesignatedInitializer( 2469 ElementEntity, IList, DIE, DesigIdx + 1, ElementType, nullptr, 2470 nullptr, Index, StructuredList, ElementIndex, 2471 FinishSubobjectInit && (DesignatedStartIndex == DesignatedEndIndex), 2472 false)) 2473 return true; 2474 2475 // Move to the next index in the array that we'll be initializing. 2476 ++DesignatedStartIndex; 2477 ElementIndex = DesignatedStartIndex.getZExtValue(); 2478 } 2479 2480 // If this the first designator, our caller will continue checking 2481 // the rest of this array subobject. 2482 if (IsFirstDesignator) { 2483 if (NextElementIndex) 2484 *NextElementIndex = DesignatedStartIndex; 2485 StructuredIndex = ElementIndex; 2486 return false; 2487 } 2488 2489 if (!FinishSubobjectInit) 2490 return false; 2491 2492 // Check the remaining elements within this array subobject. 2493 bool prevHadError = hadError; 2494 CheckArrayType(Entity, IList, CurrentObjectType, DesignatedStartIndex, 2495 /*SubobjectIsDesignatorContext=*/false, Index, 2496 StructuredList, ElementIndex); 2497 return hadError && !prevHadError; 2498 } 2499 2500 // Get the structured initializer list for a subobject of type 2501 // @p CurrentObjectType. 2502 InitListExpr * 2503 InitListChecker::getStructuredSubobjectInit(InitListExpr *IList, unsigned Index, 2504 QualType CurrentObjectType, 2505 InitListExpr *StructuredList, 2506 unsigned StructuredIndex, 2507 SourceRange InitRange, 2508 bool IsFullyOverwritten) { 2509 if (VerifyOnly) 2510 return nullptr; // No structured list in verification-only mode. 2511 Expr *ExistingInit = nullptr; 2512 if (!StructuredList) 2513 ExistingInit = SyntacticToSemantic.lookup(IList); 2514 else if (StructuredIndex < StructuredList->getNumInits()) 2515 ExistingInit = StructuredList->getInit(StructuredIndex); 2516 2517 if (InitListExpr *Result = dyn_cast_or_null<InitListExpr>(ExistingInit)) 2518 // There might have already been initializers for subobjects of the current 2519 // object, but a subsequent initializer list will overwrite the entirety 2520 // of the current object. (See DR 253 and C99 6.7.8p21). e.g., 2521 // 2522 // struct P { char x[6]; }; 2523 // struct P l = { .x[2] = 'x', .x = { [0] = 'f' } }; 2524 // 2525 // The first designated initializer is ignored, and l.x is just "f". 2526 if (!IsFullyOverwritten) 2527 return Result; 2528 2529 if (ExistingInit) { 2530 // We are creating an initializer list that initializes the 2531 // subobjects of the current object, but there was already an 2532 // initialization that completely initialized the current 2533 // subobject, e.g., by a compound literal: 2534 // 2535 // struct X { int a, b; }; 2536 // struct X xs[] = { [0] = (struct X) { 1, 2 }, [0].b = 3 }; 2537 // 2538 // Here, xs[0].a == 0 and xs[0].b == 3, since the second, 2539 // designated initializer re-initializes the whole 2540 // subobject [0], overwriting previous initializers. 2541 SemaRef.Diag(InitRange.getBegin(), 2542 diag::warn_subobject_initializer_overrides) 2543 << InitRange; 2544 SemaRef.Diag(ExistingInit->getLocStart(), 2545 diag::note_previous_initializer) 2546 << /*FIXME:has side effects=*/0 2547 << ExistingInit->getSourceRange(); 2548 } 2549 2550 InitListExpr *Result 2551 = new (SemaRef.Context) InitListExpr(SemaRef.Context, 2552 InitRange.getBegin(), None, 2553 InitRange.getEnd()); 2554 2555 QualType ResultType = CurrentObjectType; 2556 if (!ResultType->isArrayType()) 2557 ResultType = ResultType.getNonLValueExprType(SemaRef.Context); 2558 Result->setType(ResultType); 2559 2560 // Pre-allocate storage for the structured initializer list. 2561 unsigned NumElements = 0; 2562 unsigned NumInits = 0; 2563 bool GotNumInits = false; 2564 if (!StructuredList) { 2565 NumInits = IList->getNumInits(); 2566 GotNumInits = true; 2567 } else if (Index < IList->getNumInits()) { 2568 if (InitListExpr *SubList = dyn_cast<InitListExpr>(IList->getInit(Index))) { 2569 NumInits = SubList->getNumInits(); 2570 GotNumInits = true; 2571 } 2572 } 2573 2574 if (const ArrayType *AType 2575 = SemaRef.Context.getAsArrayType(CurrentObjectType)) { 2576 if (const ConstantArrayType *CAType = dyn_cast<ConstantArrayType>(AType)) { 2577 NumElements = CAType->getSize().getZExtValue(); 2578 // Simple heuristic so that we don't allocate a very large 2579 // initializer with many empty entries at the end. 2580 if (GotNumInits && NumElements > NumInits) 2581 NumElements = 0; 2582 } 2583 } else if (const VectorType *VType = CurrentObjectType->getAs<VectorType>()) 2584 NumElements = VType->getNumElements(); 2585 else if (const RecordType *RType = CurrentObjectType->getAs<RecordType>()) { 2586 RecordDecl *RDecl = RType->getDecl(); 2587 if (RDecl->isUnion()) 2588 NumElements = 1; 2589 else 2590 NumElements = std::distance(RDecl->field_begin(), RDecl->field_end()); 2591 } 2592 2593 Result->reserveInits(SemaRef.Context, NumElements); 2594 2595 // Link this new initializer list into the structured initializer 2596 // lists. 2597 if (StructuredList) 2598 StructuredList->updateInit(SemaRef.Context, StructuredIndex, Result); 2599 else { 2600 Result->setSyntacticForm(IList); 2601 SyntacticToSemantic[IList] = Result; 2602 } 2603 2604 return Result; 2605 } 2606 2607 /// Update the initializer at index @p StructuredIndex within the 2608 /// structured initializer list to the value @p expr. 2609 void InitListChecker::UpdateStructuredListElement(InitListExpr *StructuredList, 2610 unsigned &StructuredIndex, 2611 Expr *expr) { 2612 // No structured initializer list to update 2613 if (!StructuredList) 2614 return; 2615 2616 if (Expr *PrevInit = StructuredList->updateInit(SemaRef.Context, 2617 StructuredIndex, expr)) { 2618 // This initializer overwrites a previous initializer. Warn. 2619 // We need to check on source range validity because the previous 2620 // initializer does not have to be an explicit initializer. 2621 // struct P { int a, b; }; 2622 // struct PP { struct P p } l = { { .a = 2 }, .p.b = 3 }; 2623 // There is an overwrite taking place because the first braced initializer 2624 // list "{ .a = 2 }' already provides value for .p.b (which is zero). 2625 if (PrevInit->getSourceRange().isValid()) { 2626 SemaRef.Diag(expr->getLocStart(), 2627 diag::warn_initializer_overrides) 2628 << expr->getSourceRange(); 2629 2630 SemaRef.Diag(PrevInit->getLocStart(), 2631 diag::note_previous_initializer) 2632 << /*FIXME:has side effects=*/0 2633 << PrevInit->getSourceRange(); 2634 } 2635 } 2636 2637 ++StructuredIndex; 2638 } 2639 2640 /// Check that the given Index expression is a valid array designator 2641 /// value. This is essentially just a wrapper around 2642 /// VerifyIntegerConstantExpression that also checks for negative values 2643 /// and produces a reasonable diagnostic if there is a 2644 /// failure. Returns the index expression, possibly with an implicit cast 2645 /// added, on success. If everything went okay, Value will receive the 2646 /// value of the constant expression. 2647 static ExprResult 2648 CheckArrayDesignatorExpr(Sema &S, Expr *Index, llvm::APSInt &Value) { 2649 SourceLocation Loc = Index->getLocStart(); 2650 2651 // Make sure this is an integer constant expression. 2652 ExprResult Result = S.VerifyIntegerConstantExpression(Index, &Value); 2653 if (Result.isInvalid()) 2654 return Result; 2655 2656 if (Value.isSigned() && Value.isNegative()) 2657 return S.Diag(Loc, diag::err_array_designator_negative) 2658 << Value.toString(10) << Index->getSourceRange(); 2659 2660 Value.setIsUnsigned(true); 2661 return Result; 2662 } 2663 2664 ExprResult Sema::ActOnDesignatedInitializer(Designation &Desig, 2665 SourceLocation Loc, 2666 bool GNUSyntax, 2667 ExprResult Init) { 2668 typedef DesignatedInitExpr::Designator ASTDesignator; 2669 2670 bool Invalid = false; 2671 SmallVector<ASTDesignator, 32> Designators; 2672 SmallVector<Expr *, 32> InitExpressions; 2673 2674 // Build designators and check array designator expressions. 2675 for (unsigned Idx = 0; Idx < Desig.getNumDesignators(); ++Idx) { 2676 const Designator &D = Desig.getDesignator(Idx); 2677 switch (D.getKind()) { 2678 case Designator::FieldDesignator: 2679 Designators.push_back(ASTDesignator(D.getField(), D.getDotLoc(), 2680 D.getFieldLoc())); 2681 break; 2682 2683 case Designator::ArrayDesignator: { 2684 Expr *Index = static_cast<Expr *>(D.getArrayIndex()); 2685 llvm::APSInt IndexValue; 2686 if (!Index->isTypeDependent() && !Index->isValueDependent()) 2687 Index = CheckArrayDesignatorExpr(*this, Index, IndexValue).get(); 2688 if (!Index) 2689 Invalid = true; 2690 else { 2691 Designators.push_back(ASTDesignator(InitExpressions.size(), 2692 D.getLBracketLoc(), 2693 D.getRBracketLoc())); 2694 InitExpressions.push_back(Index); 2695 } 2696 break; 2697 } 2698 2699 case Designator::ArrayRangeDesignator: { 2700 Expr *StartIndex = static_cast<Expr *>(D.getArrayRangeStart()); 2701 Expr *EndIndex = static_cast<Expr *>(D.getArrayRangeEnd()); 2702 llvm::APSInt StartValue; 2703 llvm::APSInt EndValue; 2704 bool StartDependent = StartIndex->isTypeDependent() || 2705 StartIndex->isValueDependent(); 2706 bool EndDependent = EndIndex->isTypeDependent() || 2707 EndIndex->isValueDependent(); 2708 if (!StartDependent) 2709 StartIndex = 2710 CheckArrayDesignatorExpr(*this, StartIndex, StartValue).get(); 2711 if (!EndDependent) 2712 EndIndex = CheckArrayDesignatorExpr(*this, EndIndex, EndValue).get(); 2713 2714 if (!StartIndex || !EndIndex) 2715 Invalid = true; 2716 else { 2717 // Make sure we're comparing values with the same bit width. 2718 if (StartDependent || EndDependent) { 2719 // Nothing to compute. 2720 } else if (StartValue.getBitWidth() > EndValue.getBitWidth()) 2721 EndValue = EndValue.extend(StartValue.getBitWidth()); 2722 else if (StartValue.getBitWidth() < EndValue.getBitWidth()) 2723 StartValue = StartValue.extend(EndValue.getBitWidth()); 2724 2725 if (!StartDependent && !EndDependent && EndValue < StartValue) { 2726 Diag(D.getEllipsisLoc(), diag::err_array_designator_empty_range) 2727 << StartValue.toString(10) << EndValue.toString(10) 2728 << StartIndex->getSourceRange() << EndIndex->getSourceRange(); 2729 Invalid = true; 2730 } else { 2731 Designators.push_back(ASTDesignator(InitExpressions.size(), 2732 D.getLBracketLoc(), 2733 D.getEllipsisLoc(), 2734 D.getRBracketLoc())); 2735 InitExpressions.push_back(StartIndex); 2736 InitExpressions.push_back(EndIndex); 2737 } 2738 } 2739 break; 2740 } 2741 } 2742 } 2743 2744 if (Invalid || Init.isInvalid()) 2745 return ExprError(); 2746 2747 // Clear out the expressions within the designation. 2748 Desig.ClearExprs(*this); 2749 2750 DesignatedInitExpr *DIE 2751 = DesignatedInitExpr::Create(Context, 2752 Designators.data(), Designators.size(), 2753 InitExpressions, Loc, GNUSyntax, 2754 Init.getAs<Expr>()); 2755 2756 if (!getLangOpts().C99) 2757 Diag(DIE->getLocStart(), diag::ext_designated_init) 2758 << DIE->getSourceRange(); 2759 2760 return DIE; 2761 } 2762 2763 //===----------------------------------------------------------------------===// 2764 // Initialization entity 2765 //===----------------------------------------------------------------------===// 2766 2767 InitializedEntity::InitializedEntity(ASTContext &Context, unsigned Index, 2768 const InitializedEntity &Parent) 2769 : Parent(&Parent), Index(Index) 2770 { 2771 if (const ArrayType *AT = Context.getAsArrayType(Parent.getType())) { 2772 Kind = EK_ArrayElement; 2773 Type = AT->getElementType(); 2774 } else if (const VectorType *VT = Parent.getType()->getAs<VectorType>()) { 2775 Kind = EK_VectorElement; 2776 Type = VT->getElementType(); 2777 } else { 2778 const ComplexType *CT = Parent.getType()->getAs<ComplexType>(); 2779 assert(CT && "Unexpected type"); 2780 Kind = EK_ComplexElement; 2781 Type = CT->getElementType(); 2782 } 2783 } 2784 2785 InitializedEntity 2786 InitializedEntity::InitializeBase(ASTContext &Context, 2787 const CXXBaseSpecifier *Base, 2788 bool IsInheritedVirtualBase) { 2789 InitializedEntity Result; 2790 Result.Kind = EK_Base; 2791 Result.Parent = nullptr; 2792 Result.Base = reinterpret_cast<uintptr_t>(Base); 2793 if (IsInheritedVirtualBase) 2794 Result.Base |= 0x01; 2795 2796 Result.Type = Base->getType(); 2797 return Result; 2798 } 2799 2800 DeclarationName InitializedEntity::getName() const { 2801 switch (getKind()) { 2802 case EK_Parameter: 2803 case EK_Parameter_CF_Audited: { 2804 ParmVarDecl *D = reinterpret_cast<ParmVarDecl*>(Parameter & ~0x1); 2805 return (D ? D->getDeclName() : DeclarationName()); 2806 } 2807 2808 case EK_Variable: 2809 case EK_Member: 2810 return VariableOrMember->getDeclName(); 2811 2812 case EK_LambdaCapture: 2813 return DeclarationName(Capture.VarID); 2814 2815 case EK_Result: 2816 case EK_Exception: 2817 case EK_New: 2818 case EK_Temporary: 2819 case EK_Base: 2820 case EK_Delegating: 2821 case EK_ArrayElement: 2822 case EK_VectorElement: 2823 case EK_ComplexElement: 2824 case EK_BlockElement: 2825 case EK_CompoundLiteralInit: 2826 case EK_RelatedResult: 2827 return DeclarationName(); 2828 } 2829 2830 llvm_unreachable("Invalid EntityKind!"); 2831 } 2832 2833 DeclaratorDecl *InitializedEntity::getDecl() const { 2834 switch (getKind()) { 2835 case EK_Variable: 2836 case EK_Member: 2837 return VariableOrMember; 2838 2839 case EK_Parameter: 2840 case EK_Parameter_CF_Audited: 2841 return reinterpret_cast<ParmVarDecl*>(Parameter & ~0x1); 2842 2843 case EK_Result: 2844 case EK_Exception: 2845 case EK_New: 2846 case EK_Temporary: 2847 case EK_Base: 2848 case EK_Delegating: 2849 case EK_ArrayElement: 2850 case EK_VectorElement: 2851 case EK_ComplexElement: 2852 case EK_BlockElement: 2853 case EK_LambdaCapture: 2854 case EK_CompoundLiteralInit: 2855 case EK_RelatedResult: 2856 return nullptr; 2857 } 2858 2859 llvm_unreachable("Invalid EntityKind!"); 2860 } 2861 2862 bool InitializedEntity::allowsNRVO() const { 2863 switch (getKind()) { 2864 case EK_Result: 2865 case EK_Exception: 2866 return LocAndNRVO.NRVO; 2867 2868 case EK_Variable: 2869 case EK_Parameter: 2870 case EK_Parameter_CF_Audited: 2871 case EK_Member: 2872 case EK_New: 2873 case EK_Temporary: 2874 case EK_CompoundLiteralInit: 2875 case EK_Base: 2876 case EK_Delegating: 2877 case EK_ArrayElement: 2878 case EK_VectorElement: 2879 case EK_ComplexElement: 2880 case EK_BlockElement: 2881 case EK_LambdaCapture: 2882 case EK_RelatedResult: 2883 break; 2884 } 2885 2886 return false; 2887 } 2888 2889 unsigned InitializedEntity::dumpImpl(raw_ostream &OS) const { 2890 assert(getParent() != this); 2891 unsigned Depth = getParent() ? getParent()->dumpImpl(OS) : 0; 2892 for (unsigned I = 0; I != Depth; ++I) 2893 OS << "`-"; 2894 2895 switch (getKind()) { 2896 case EK_Variable: OS << "Variable"; break; 2897 case EK_Parameter: OS << "Parameter"; break; 2898 case EK_Parameter_CF_Audited: OS << "CF audited function Parameter"; 2899 break; 2900 case EK_Result: OS << "Result"; break; 2901 case EK_Exception: OS << "Exception"; break; 2902 case EK_Member: OS << "Member"; break; 2903 case EK_New: OS << "New"; break; 2904 case EK_Temporary: OS << "Temporary"; break; 2905 case EK_CompoundLiteralInit: OS << "CompoundLiteral";break; 2906 case EK_RelatedResult: OS << "RelatedResult"; break; 2907 case EK_Base: OS << "Base"; break; 2908 case EK_Delegating: OS << "Delegating"; break; 2909 case EK_ArrayElement: OS << "ArrayElement " << Index; break; 2910 case EK_VectorElement: OS << "VectorElement " << Index; break; 2911 case EK_ComplexElement: OS << "ComplexElement " << Index; break; 2912 case EK_BlockElement: OS << "Block"; break; 2913 case EK_LambdaCapture: 2914 OS << "LambdaCapture "; 2915 OS << DeclarationName(Capture.VarID); 2916 break; 2917 } 2918 2919 if (Decl *D = getDecl()) { 2920 OS << " "; 2921 cast<NamedDecl>(D)->printQualifiedName(OS); 2922 } 2923 2924 OS << " '" << getType().getAsString() << "'\n"; 2925 2926 return Depth + 1; 2927 } 2928 2929 LLVM_DUMP_METHOD void InitializedEntity::dump() const { 2930 dumpImpl(llvm::errs()); 2931 } 2932 2933 //===----------------------------------------------------------------------===// 2934 // Initialization sequence 2935 //===----------------------------------------------------------------------===// 2936 2937 void InitializationSequence::Step::Destroy() { 2938 switch (Kind) { 2939 case SK_ResolveAddressOfOverloadedFunction: 2940 case SK_CastDerivedToBaseRValue: 2941 case SK_CastDerivedToBaseXValue: 2942 case SK_CastDerivedToBaseLValue: 2943 case SK_BindReference: 2944 case SK_BindReferenceToTemporary: 2945 case SK_ExtraneousCopyToTemporary: 2946 case SK_UserConversion: 2947 case SK_QualificationConversionRValue: 2948 case SK_QualificationConversionXValue: 2949 case SK_QualificationConversionLValue: 2950 case SK_AtomicConversion: 2951 case SK_LValueToRValue: 2952 case SK_ListInitialization: 2953 case SK_UnwrapInitList: 2954 case SK_RewrapInitList: 2955 case SK_ConstructorInitialization: 2956 case SK_ConstructorInitializationFromList: 2957 case SK_ZeroInitialization: 2958 case SK_CAssignment: 2959 case SK_StringInit: 2960 case SK_ObjCObjectConversion: 2961 case SK_ArrayInit: 2962 case SK_ParenthesizedArrayInit: 2963 case SK_PassByIndirectCopyRestore: 2964 case SK_PassByIndirectRestore: 2965 case SK_ProduceObjCObject: 2966 case SK_StdInitializerList: 2967 case SK_StdInitializerListConstructorCall: 2968 case SK_OCLSamplerInit: 2969 case SK_OCLZeroEvent: 2970 break; 2971 2972 case SK_ConversionSequence: 2973 case SK_ConversionSequenceNoNarrowing: 2974 delete ICS; 2975 } 2976 } 2977 2978 bool InitializationSequence::isDirectReferenceBinding() const { 2979 return !Steps.empty() && Steps.back().Kind == SK_BindReference; 2980 } 2981 2982 bool InitializationSequence::isAmbiguous() const { 2983 if (!Failed()) 2984 return false; 2985 2986 switch (getFailureKind()) { 2987 case FK_TooManyInitsForReference: 2988 case FK_ArrayNeedsInitList: 2989 case FK_ArrayNeedsInitListOrStringLiteral: 2990 case FK_ArrayNeedsInitListOrWideStringLiteral: 2991 case FK_NarrowStringIntoWideCharArray: 2992 case FK_WideStringIntoCharArray: 2993 case FK_IncompatWideStringIntoWideChar: 2994 case FK_AddressOfOverloadFailed: // FIXME: Could do better 2995 case FK_NonConstLValueReferenceBindingToTemporary: 2996 case FK_NonConstLValueReferenceBindingToUnrelated: 2997 case FK_RValueReferenceBindingToLValue: 2998 case FK_ReferenceInitDropsQualifiers: 2999 case FK_ReferenceInitFailed: 3000 case FK_ConversionFailed: 3001 case FK_ConversionFromPropertyFailed: 3002 case FK_TooManyInitsForScalar: 3003 case FK_ReferenceBindingToInitList: 3004 case FK_InitListBadDestinationType: 3005 case FK_DefaultInitOfConst: 3006 case FK_Incomplete: 3007 case FK_ArrayTypeMismatch: 3008 case FK_NonConstantArrayInit: 3009 case FK_ListInitializationFailed: 3010 case FK_VariableLengthArrayHasInitializer: 3011 case FK_PlaceholderType: 3012 case FK_ExplicitConstructor: 3013 case FK_AddressOfUnaddressableFunction: 3014 return false; 3015 3016 case FK_ReferenceInitOverloadFailed: 3017 case FK_UserConversionOverloadFailed: 3018 case FK_ConstructorOverloadFailed: 3019 case FK_ListConstructorOverloadFailed: 3020 return FailedOverloadResult == OR_Ambiguous; 3021 } 3022 3023 llvm_unreachable("Invalid EntityKind!"); 3024 } 3025 3026 bool InitializationSequence::isConstructorInitialization() const { 3027 return !Steps.empty() && Steps.back().Kind == SK_ConstructorInitialization; 3028 } 3029 3030 void 3031 InitializationSequence 3032 ::AddAddressOverloadResolutionStep(FunctionDecl *Function, 3033 DeclAccessPair Found, 3034 bool HadMultipleCandidates) { 3035 Step S; 3036 S.Kind = SK_ResolveAddressOfOverloadedFunction; 3037 S.Type = Function->getType(); 3038 S.Function.HadMultipleCandidates = HadMultipleCandidates; 3039 S.Function.Function = Function; 3040 S.Function.FoundDecl = Found; 3041 Steps.push_back(S); 3042 } 3043 3044 void InitializationSequence::AddDerivedToBaseCastStep(QualType BaseType, 3045 ExprValueKind VK) { 3046 Step S; 3047 switch (VK) { 3048 case VK_RValue: S.Kind = SK_CastDerivedToBaseRValue; break; 3049 case VK_XValue: S.Kind = SK_CastDerivedToBaseXValue; break; 3050 case VK_LValue: S.Kind = SK_CastDerivedToBaseLValue; break; 3051 } 3052 S.Type = BaseType; 3053 Steps.push_back(S); 3054 } 3055 3056 void InitializationSequence::AddReferenceBindingStep(QualType T, 3057 bool BindingTemporary) { 3058 Step S; 3059 S.Kind = BindingTemporary? SK_BindReferenceToTemporary : SK_BindReference; 3060 S.Type = T; 3061 Steps.push_back(S); 3062 } 3063 3064 void InitializationSequence::AddExtraneousCopyToTemporary(QualType T) { 3065 Step S; 3066 S.Kind = SK_ExtraneousCopyToTemporary; 3067 S.Type = T; 3068 Steps.push_back(S); 3069 } 3070 3071 void 3072 InitializationSequence::AddUserConversionStep(FunctionDecl *Function, 3073 DeclAccessPair FoundDecl, 3074 QualType T, 3075 bool HadMultipleCandidates) { 3076 Step S; 3077 S.Kind = SK_UserConversion; 3078 S.Type = T; 3079 S.Function.HadMultipleCandidates = HadMultipleCandidates; 3080 S.Function.Function = Function; 3081 S.Function.FoundDecl = FoundDecl; 3082 Steps.push_back(S); 3083 } 3084 3085 void InitializationSequence::AddQualificationConversionStep(QualType Ty, 3086 ExprValueKind VK) { 3087 Step S; 3088 S.Kind = SK_QualificationConversionRValue; // work around a gcc warning 3089 switch (VK) { 3090 case VK_RValue: 3091 S.Kind = SK_QualificationConversionRValue; 3092 break; 3093 case VK_XValue: 3094 S.Kind = SK_QualificationConversionXValue; 3095 break; 3096 case VK_LValue: 3097 S.Kind = SK_QualificationConversionLValue; 3098 break; 3099 } 3100 S.Type = Ty; 3101 Steps.push_back(S); 3102 } 3103 3104 void InitializationSequence::AddAtomicConversionStep(QualType Ty) { 3105 Step S; 3106 S.Kind = SK_AtomicConversion; 3107 S.Type = Ty; 3108 Steps.push_back(S); 3109 } 3110 3111 void InitializationSequence::AddLValueToRValueStep(QualType Ty) { 3112 assert(!Ty.hasQualifiers() && "rvalues may not have qualifiers"); 3113 3114 Step S; 3115 S.Kind = SK_LValueToRValue; 3116 S.Type = Ty; 3117 Steps.push_back(S); 3118 } 3119 3120 void InitializationSequence::AddConversionSequenceStep( 3121 const ImplicitConversionSequence &ICS, QualType T, 3122 bool TopLevelOfInitList) { 3123 Step S; 3124 S.Kind = TopLevelOfInitList ? SK_ConversionSequenceNoNarrowing 3125 : SK_ConversionSequence; 3126 S.Type = T; 3127 S.ICS = new ImplicitConversionSequence(ICS); 3128 Steps.push_back(S); 3129 } 3130 3131 void InitializationSequence::AddListInitializationStep(QualType T) { 3132 Step S; 3133 S.Kind = SK_ListInitialization; 3134 S.Type = T; 3135 Steps.push_back(S); 3136 } 3137 3138 void 3139 InitializationSequence 3140 ::AddConstructorInitializationStep(CXXConstructorDecl *Constructor, 3141 AccessSpecifier Access, 3142 QualType T, 3143 bool HadMultipleCandidates, 3144 bool FromInitList, bool AsInitList) { 3145 Step S; 3146 S.Kind = FromInitList ? AsInitList ? SK_StdInitializerListConstructorCall 3147 : SK_ConstructorInitializationFromList 3148 : SK_ConstructorInitialization; 3149 S.Type = T; 3150 S.Function.HadMultipleCandidates = HadMultipleCandidates; 3151 S.Function.Function = Constructor; 3152 S.Function.FoundDecl = DeclAccessPair::make(Constructor, Access); 3153 Steps.push_back(S); 3154 } 3155 3156 void InitializationSequence::AddZeroInitializationStep(QualType T) { 3157 Step S; 3158 S.Kind = SK_ZeroInitialization; 3159 S.Type = T; 3160 Steps.push_back(S); 3161 } 3162 3163 void InitializationSequence::AddCAssignmentStep(QualType T) { 3164 Step S; 3165 S.Kind = SK_CAssignment; 3166 S.Type = T; 3167 Steps.push_back(S); 3168 } 3169 3170 void InitializationSequence::AddStringInitStep(QualType T) { 3171 Step S; 3172 S.Kind = SK_StringInit; 3173 S.Type = T; 3174 Steps.push_back(S); 3175 } 3176 3177 void InitializationSequence::AddObjCObjectConversionStep(QualType T) { 3178 Step S; 3179 S.Kind = SK_ObjCObjectConversion; 3180 S.Type = T; 3181 Steps.push_back(S); 3182 } 3183 3184 void InitializationSequence::AddArrayInitStep(QualType T) { 3185 Step S; 3186 S.Kind = SK_ArrayInit; 3187 S.Type = T; 3188 Steps.push_back(S); 3189 } 3190 3191 void InitializationSequence::AddParenthesizedArrayInitStep(QualType T) { 3192 Step S; 3193 S.Kind = SK_ParenthesizedArrayInit; 3194 S.Type = T; 3195 Steps.push_back(S); 3196 } 3197 3198 void InitializationSequence::AddPassByIndirectCopyRestoreStep(QualType type, 3199 bool shouldCopy) { 3200 Step s; 3201 s.Kind = (shouldCopy ? SK_PassByIndirectCopyRestore 3202 : SK_PassByIndirectRestore); 3203 s.Type = type; 3204 Steps.push_back(s); 3205 } 3206 3207 void InitializationSequence::AddProduceObjCObjectStep(QualType T) { 3208 Step S; 3209 S.Kind = SK_ProduceObjCObject; 3210 S.Type = T; 3211 Steps.push_back(S); 3212 } 3213 3214 void InitializationSequence::AddStdInitializerListConstructionStep(QualType T) { 3215 Step S; 3216 S.Kind = SK_StdInitializerList; 3217 S.Type = T; 3218 Steps.push_back(S); 3219 } 3220 3221 void InitializationSequence::AddOCLSamplerInitStep(QualType T) { 3222 Step S; 3223 S.Kind = SK_OCLSamplerInit; 3224 S.Type = T; 3225 Steps.push_back(S); 3226 } 3227 3228 void InitializationSequence::AddOCLZeroEventStep(QualType T) { 3229 Step S; 3230 S.Kind = SK_OCLZeroEvent; 3231 S.Type = T; 3232 Steps.push_back(S); 3233 } 3234 3235 void InitializationSequence::RewrapReferenceInitList(QualType T, 3236 InitListExpr *Syntactic) { 3237 assert(Syntactic->getNumInits() == 1 && 3238 "Can only rewrap trivial init lists."); 3239 Step S; 3240 S.Kind = SK_UnwrapInitList; 3241 S.Type = Syntactic->getInit(0)->getType(); 3242 Steps.insert(Steps.begin(), S); 3243 3244 S.Kind = SK_RewrapInitList; 3245 S.Type = T; 3246 S.WrappingSyntacticList = Syntactic; 3247 Steps.push_back(S); 3248 } 3249 3250 void InitializationSequence::SetOverloadFailure(FailureKind Failure, 3251 OverloadingResult Result) { 3252 setSequenceKind(FailedSequence); 3253 this->Failure = Failure; 3254 this->FailedOverloadResult = Result; 3255 } 3256 3257 //===----------------------------------------------------------------------===// 3258 // Attempt initialization 3259 //===----------------------------------------------------------------------===// 3260 3261 /// Tries to add a zero initializer. Returns true if that worked. 3262 static bool 3263 maybeRecoverWithZeroInitialization(Sema &S, InitializationSequence &Sequence, 3264 const InitializedEntity &Entity) { 3265 if (Entity.getKind() != InitializedEntity::EK_Variable) 3266 return false; 3267 3268 VarDecl *VD = cast<VarDecl>(Entity.getDecl()); 3269 if (VD->getInit() || VD->getLocEnd().isMacroID()) 3270 return false; 3271 3272 QualType VariableTy = VD->getType().getCanonicalType(); 3273 SourceLocation Loc = S.getLocForEndOfToken(VD->getLocEnd()); 3274 std::string Init = S.getFixItZeroInitializerForType(VariableTy, Loc); 3275 if (!Init.empty()) { 3276 Sequence.AddZeroInitializationStep(Entity.getType()); 3277 Sequence.SetZeroInitializationFixit(Init, Loc); 3278 return true; 3279 } 3280 return false; 3281 } 3282 3283 static void MaybeProduceObjCObject(Sema &S, 3284 InitializationSequence &Sequence, 3285 const InitializedEntity &Entity) { 3286 if (!S.getLangOpts().ObjCAutoRefCount) return; 3287 3288 /// When initializing a parameter, produce the value if it's marked 3289 /// __attribute__((ns_consumed)). 3290 if (Entity.isParameterKind()) { 3291 if (!Entity.isParameterConsumed()) 3292 return; 3293 3294 assert(Entity.getType()->isObjCRetainableType() && 3295 "consuming an object of unretainable type?"); 3296 Sequence.AddProduceObjCObjectStep(Entity.getType()); 3297 3298 /// When initializing a return value, if the return type is a 3299 /// retainable type, then returns need to immediately retain the 3300 /// object. If an autorelease is required, it will be done at the 3301 /// last instant. 3302 } else if (Entity.getKind() == InitializedEntity::EK_Result) { 3303 if (!Entity.getType()->isObjCRetainableType()) 3304 return; 3305 3306 Sequence.AddProduceObjCObjectStep(Entity.getType()); 3307 } 3308 } 3309 3310 static void TryListInitialization(Sema &S, 3311 const InitializedEntity &Entity, 3312 const InitializationKind &Kind, 3313 InitListExpr *InitList, 3314 InitializationSequence &Sequence); 3315 3316 /// \brief When initializing from init list via constructor, handle 3317 /// initialization of an object of type std::initializer_list<T>. 3318 /// 3319 /// \return true if we have handled initialization of an object of type 3320 /// std::initializer_list<T>, false otherwise. 3321 static bool TryInitializerListConstruction(Sema &S, 3322 InitListExpr *List, 3323 QualType DestType, 3324 InitializationSequence &Sequence) { 3325 QualType E; 3326 if (!S.isStdInitializerList(DestType, &E)) 3327 return false; 3328 3329 if (!S.isCompleteType(List->getExprLoc(), E)) { 3330 Sequence.setIncompleteTypeFailure(E); 3331 return true; 3332 } 3333 3334 // Try initializing a temporary array from the init list. 3335 QualType ArrayType = S.Context.getConstantArrayType( 3336 E.withConst(), llvm::APInt(S.Context.getTypeSize(S.Context.getSizeType()), 3337 List->getNumInits()), 3338 clang::ArrayType::Normal, 0); 3339 InitializedEntity HiddenArray = 3340 InitializedEntity::InitializeTemporary(ArrayType); 3341 InitializationKind Kind = 3342 InitializationKind::CreateDirectList(List->getExprLoc()); 3343 TryListInitialization(S, HiddenArray, Kind, List, Sequence); 3344 if (Sequence) 3345 Sequence.AddStdInitializerListConstructionStep(DestType); 3346 return true; 3347 } 3348 3349 static OverloadingResult 3350 ResolveConstructorOverload(Sema &S, SourceLocation DeclLoc, 3351 MultiExprArg Args, 3352 OverloadCandidateSet &CandidateSet, 3353 DeclContext::lookup_result Ctors, 3354 OverloadCandidateSet::iterator &Best, 3355 bool CopyInitializing, bool AllowExplicit, 3356 bool OnlyListConstructors, bool IsListInit) { 3357 CandidateSet.clear(); 3358 3359 for (NamedDecl *D : Ctors) { 3360 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); 3361 bool SuppressUserConversions = false; 3362 3363 // Find the constructor (which may be a template). 3364 CXXConstructorDecl *Constructor = nullptr; 3365 FunctionTemplateDecl *ConstructorTmpl = dyn_cast<FunctionTemplateDecl>(D); 3366 if (ConstructorTmpl) 3367 Constructor = cast<CXXConstructorDecl>( 3368 ConstructorTmpl->getTemplatedDecl()); 3369 else { 3370 Constructor = cast<CXXConstructorDecl>(D); 3371 3372 // C++11 [over.best.ics]p4: 3373 // ... and the constructor or user-defined conversion function is a 3374 // candidate by 3375 // - 13.3.1.3, when the argument is the temporary in the second step 3376 // of a class copy-initialization, or 3377 // - 13.3.1.4, 13.3.1.5, or 13.3.1.6 (in all cases), 3378 // user-defined conversion sequences are not considered. 3379 // FIXME: This breaks backward compatibility, e.g. PR12117. As a 3380 // temporary fix, let's re-instate the third bullet above until 3381 // there is a resolution in the standard, i.e., 3382 // - 13.3.1.7 when the initializer list has exactly one element that is 3383 // itself an initializer list and a conversion to some class X or 3384 // reference to (possibly cv-qualified) X is considered for the first 3385 // parameter of a constructor of X. 3386 if ((CopyInitializing || 3387 (IsListInit && Args.size() == 1 && isa<InitListExpr>(Args[0]))) && 3388 Constructor->isCopyOrMoveConstructor()) 3389 SuppressUserConversions = true; 3390 } 3391 3392 if (!Constructor->isInvalidDecl() && 3393 (AllowExplicit || !Constructor->isExplicit()) && 3394 (!OnlyListConstructors || S.isInitListConstructor(Constructor))) { 3395 if (ConstructorTmpl) 3396 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 3397 /*ExplicitArgs*/ nullptr, Args, 3398 CandidateSet, SuppressUserConversions); 3399 else { 3400 // C++ [over.match.copy]p1: 3401 // - When initializing a temporary to be bound to the first parameter 3402 // of a constructor that takes a reference to possibly cv-qualified 3403 // T as its first argument, called with a single argument in the 3404 // context of direct-initialization, explicit conversion functions 3405 // are also considered. 3406 bool AllowExplicitConv = AllowExplicit && !CopyInitializing && 3407 Args.size() == 1 && 3408 Constructor->isCopyOrMoveConstructor(); 3409 S.AddOverloadCandidate(Constructor, FoundDecl, Args, CandidateSet, 3410 SuppressUserConversions, 3411 /*PartialOverloading=*/false, 3412 /*AllowExplicit=*/AllowExplicitConv); 3413 } 3414 } 3415 } 3416 3417 // Perform overload resolution and return the result. 3418 return CandidateSet.BestViableFunction(S, DeclLoc, Best); 3419 } 3420 3421 /// \brief Attempt initialization by constructor (C++ [dcl.init]), which 3422 /// enumerates the constructors of the initialized entity and performs overload 3423 /// resolution to select the best. 3424 /// \param IsListInit Is this list-initialization? 3425 /// \param IsInitListCopy Is this non-list-initialization resulting from a 3426 /// list-initialization from {x} where x is the same 3427 /// type as the entity? 3428 static void TryConstructorInitialization(Sema &S, 3429 const InitializedEntity &Entity, 3430 const InitializationKind &Kind, 3431 MultiExprArg Args, QualType DestType, 3432 InitializationSequence &Sequence, 3433 bool IsListInit = false, 3434 bool IsInitListCopy = false) { 3435 assert((!IsListInit || (Args.size() == 1 && isa<InitListExpr>(Args[0]))) && 3436 "IsListInit must come with a single initializer list argument."); 3437 3438 // The type we're constructing needs to be complete. 3439 if (!S.isCompleteType(Kind.getLocation(), DestType)) { 3440 Sequence.setIncompleteTypeFailure(DestType); 3441 return; 3442 } 3443 3444 const RecordType *DestRecordType = DestType->getAs<RecordType>(); 3445 assert(DestRecordType && "Constructor initialization requires record type"); 3446 CXXRecordDecl *DestRecordDecl 3447 = cast<CXXRecordDecl>(DestRecordType->getDecl()); 3448 3449 // Build the candidate set directly in the initialization sequence 3450 // structure, so that it will persist if we fail. 3451 OverloadCandidateSet &CandidateSet = Sequence.getFailedCandidateSet(); 3452 3453 // Determine whether we are allowed to call explicit constructors or 3454 // explicit conversion operators. 3455 bool AllowExplicit = Kind.AllowExplicit() || IsListInit; 3456 bool CopyInitialization = Kind.getKind() == InitializationKind::IK_Copy; 3457 3458 // - Otherwise, if T is a class type, constructors are considered. The 3459 // applicable constructors are enumerated, and the best one is chosen 3460 // through overload resolution. 3461 DeclContext::lookup_result Ctors = S.LookupConstructors(DestRecordDecl); 3462 3463 OverloadingResult Result = OR_No_Viable_Function; 3464 OverloadCandidateSet::iterator Best; 3465 bool AsInitializerList = false; 3466 3467 // C++11 [over.match.list]p1, per DR1467: 3468 // When objects of non-aggregate type T are list-initialized, such that 3469 // 8.5.4 [dcl.init.list] specifies that overload resolution is performed 3470 // according to the rules in this section, overload resolution selects 3471 // the constructor in two phases: 3472 // 3473 // - Initially, the candidate functions are the initializer-list 3474 // constructors of the class T and the argument list consists of the 3475 // initializer list as a single argument. 3476 if (IsListInit) { 3477 InitListExpr *ILE = cast<InitListExpr>(Args[0]); 3478 AsInitializerList = true; 3479 3480 // If the initializer list has no elements and T has a default constructor, 3481 // the first phase is omitted. 3482 if (ILE->getNumInits() != 0 || !DestRecordDecl->hasDefaultConstructor()) 3483 Result = ResolveConstructorOverload(S, Kind.getLocation(), Args, 3484 CandidateSet, Ctors, Best, 3485 CopyInitialization, AllowExplicit, 3486 /*OnlyListConstructor=*/true, 3487 IsListInit); 3488 3489 // Time to unwrap the init list. 3490 Args = MultiExprArg(ILE->getInits(), ILE->getNumInits()); 3491 } 3492 3493 // C++11 [over.match.list]p1: 3494 // - If no viable initializer-list constructor is found, overload resolution 3495 // is performed again, where the candidate functions are all the 3496 // constructors of the class T and the argument list consists of the 3497 // elements of the initializer list. 3498 if (Result == OR_No_Viable_Function) { 3499 AsInitializerList = false; 3500 Result = ResolveConstructorOverload(S, Kind.getLocation(), Args, 3501 CandidateSet, Ctors, Best, 3502 CopyInitialization, AllowExplicit, 3503 /*OnlyListConstructors=*/false, 3504 IsListInit); 3505 } 3506 if (Result) { 3507 Sequence.SetOverloadFailure(IsListInit ? 3508 InitializationSequence::FK_ListConstructorOverloadFailed : 3509 InitializationSequence::FK_ConstructorOverloadFailed, 3510 Result); 3511 return; 3512 } 3513 3514 // C++11 [dcl.init]p6: 3515 // If a program calls for the default initialization of an object 3516 // of a const-qualified type T, T shall be a class type with a 3517 // user-provided default constructor. 3518 // C++ core issue 253 proposal: 3519 // If the implicit default constructor initializes all subobjects, no 3520 // initializer should be required. 3521 // The 253 proposal is for example needed to process libstdc++ headers in 5.x. 3522 CXXConstructorDecl *CtorDecl = cast<CXXConstructorDecl>(Best->Function); 3523 if (Kind.getKind() == InitializationKind::IK_Default && 3524 Entity.getType().isConstQualified()) { 3525 if (!CtorDecl->getParent()->allowConstDefaultInit()) { 3526 if (!maybeRecoverWithZeroInitialization(S, Sequence, Entity)) 3527 Sequence.SetFailed(InitializationSequence::FK_DefaultInitOfConst); 3528 return; 3529 } 3530 } 3531 3532 // C++11 [over.match.list]p1: 3533 // In copy-list-initialization, if an explicit constructor is chosen, the 3534 // initializer is ill-formed. 3535 if (IsListInit && !Kind.AllowExplicit() && CtorDecl->isExplicit()) { 3536 Sequence.SetFailed(InitializationSequence::FK_ExplicitConstructor); 3537 return; 3538 } 3539 3540 // Add the constructor initialization step. Any cv-qualification conversion is 3541 // subsumed by the initialization. 3542 bool HadMultipleCandidates = (CandidateSet.size() > 1); 3543 Sequence.AddConstructorInitializationStep( 3544 CtorDecl, Best->FoundDecl.getAccess(), DestType, HadMultipleCandidates, 3545 IsListInit | IsInitListCopy, AsInitializerList); 3546 } 3547 3548 static bool 3549 ResolveOverloadedFunctionForReferenceBinding(Sema &S, 3550 Expr *Initializer, 3551 QualType &SourceType, 3552 QualType &UnqualifiedSourceType, 3553 QualType UnqualifiedTargetType, 3554 InitializationSequence &Sequence) { 3555 if (S.Context.getCanonicalType(UnqualifiedSourceType) == 3556 S.Context.OverloadTy) { 3557 DeclAccessPair Found; 3558 bool HadMultipleCandidates = false; 3559 if (FunctionDecl *Fn 3560 = S.ResolveAddressOfOverloadedFunction(Initializer, 3561 UnqualifiedTargetType, 3562 false, Found, 3563 &HadMultipleCandidates)) { 3564 Sequence.AddAddressOverloadResolutionStep(Fn, Found, 3565 HadMultipleCandidates); 3566 SourceType = Fn->getType(); 3567 UnqualifiedSourceType = SourceType.getUnqualifiedType(); 3568 } else if (!UnqualifiedTargetType->isRecordType()) { 3569 Sequence.SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 3570 return true; 3571 } 3572 } 3573 return false; 3574 } 3575 3576 static void TryReferenceInitializationCore(Sema &S, 3577 const InitializedEntity &Entity, 3578 const InitializationKind &Kind, 3579 Expr *Initializer, 3580 QualType cv1T1, QualType T1, 3581 Qualifiers T1Quals, 3582 QualType cv2T2, QualType T2, 3583 Qualifiers T2Quals, 3584 InitializationSequence &Sequence); 3585 3586 static void TryValueInitialization(Sema &S, 3587 const InitializedEntity &Entity, 3588 const InitializationKind &Kind, 3589 InitializationSequence &Sequence, 3590 InitListExpr *InitList = nullptr); 3591 3592 /// \brief Attempt list initialization of a reference. 3593 static void TryReferenceListInitialization(Sema &S, 3594 const InitializedEntity &Entity, 3595 const InitializationKind &Kind, 3596 InitListExpr *InitList, 3597 InitializationSequence &Sequence) { 3598 // First, catch C++03 where this isn't possible. 3599 if (!S.getLangOpts().CPlusPlus11) { 3600 Sequence.SetFailed(InitializationSequence::FK_ReferenceBindingToInitList); 3601 return; 3602 } 3603 // Can't reference initialize a compound literal. 3604 if (Entity.getKind() == InitializedEntity::EK_CompoundLiteralInit) { 3605 Sequence.SetFailed(InitializationSequence::FK_ReferenceBindingToInitList); 3606 return; 3607 } 3608 3609 QualType DestType = Entity.getType(); 3610 QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType(); 3611 Qualifiers T1Quals; 3612 QualType T1 = S.Context.getUnqualifiedArrayType(cv1T1, T1Quals); 3613 3614 // Reference initialization via an initializer list works thus: 3615 // If the initializer list consists of a single element that is 3616 // reference-related to the referenced type, bind directly to that element 3617 // (possibly creating temporaries). 3618 // Otherwise, initialize a temporary with the initializer list and 3619 // bind to that. 3620 if (InitList->getNumInits() == 1) { 3621 Expr *Initializer = InitList->getInit(0); 3622 QualType cv2T2 = Initializer->getType(); 3623 Qualifiers T2Quals; 3624 QualType T2 = S.Context.getUnqualifiedArrayType(cv2T2, T2Quals); 3625 3626 // If this fails, creating a temporary wouldn't work either. 3627 if (ResolveOverloadedFunctionForReferenceBinding(S, Initializer, cv2T2, T2, 3628 T1, Sequence)) 3629 return; 3630 3631 SourceLocation DeclLoc = Initializer->getLocStart(); 3632 bool dummy1, dummy2, dummy3; 3633 Sema::ReferenceCompareResult RefRelationship 3634 = S.CompareReferenceRelationship(DeclLoc, cv1T1, cv2T2, dummy1, 3635 dummy2, dummy3); 3636 if (RefRelationship >= Sema::Ref_Related) { 3637 // Try to bind the reference here. 3638 TryReferenceInitializationCore(S, Entity, Kind, Initializer, cv1T1, T1, 3639 T1Quals, cv2T2, T2, T2Quals, Sequence); 3640 if (Sequence) 3641 Sequence.RewrapReferenceInitList(cv1T1, InitList); 3642 return; 3643 } 3644 3645 // Update the initializer if we've resolved an overloaded function. 3646 if (Sequence.step_begin() != Sequence.step_end()) 3647 Sequence.RewrapReferenceInitList(cv1T1, InitList); 3648 } 3649 3650 // Not reference-related. Create a temporary and bind to that. 3651 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary(cv1T1); 3652 3653 TryListInitialization(S, TempEntity, Kind, InitList, Sequence); 3654 if (Sequence) { 3655 if (DestType->isRValueReferenceType() || 3656 (T1Quals.hasConst() && !T1Quals.hasVolatile())) 3657 Sequence.AddReferenceBindingStep(cv1T1, /*bindingTemporary=*/true); 3658 else 3659 Sequence.SetFailed( 3660 InitializationSequence::FK_NonConstLValueReferenceBindingToTemporary); 3661 } 3662 } 3663 3664 /// \brief Attempt list initialization (C++0x [dcl.init.list]) 3665 static void TryListInitialization(Sema &S, 3666 const InitializedEntity &Entity, 3667 const InitializationKind &Kind, 3668 InitListExpr *InitList, 3669 InitializationSequence &Sequence) { 3670 QualType DestType = Entity.getType(); 3671 3672 // C++ doesn't allow scalar initialization with more than one argument. 3673 // But C99 complex numbers are scalars and it makes sense there. 3674 if (S.getLangOpts().CPlusPlus && DestType->isScalarType() && 3675 !DestType->isAnyComplexType() && InitList->getNumInits() > 1) { 3676 Sequence.SetFailed(InitializationSequence::FK_TooManyInitsForScalar); 3677 return; 3678 } 3679 if (DestType->isReferenceType()) { 3680 TryReferenceListInitialization(S, Entity, Kind, InitList, Sequence); 3681 return; 3682 } 3683 3684 if (DestType->isRecordType() && 3685 !S.isCompleteType(InitList->getLocStart(), DestType)) { 3686 Sequence.setIncompleteTypeFailure(DestType); 3687 return; 3688 } 3689 3690 // C++11 [dcl.init.list]p3, per DR1467: 3691 // - If T is a class type and the initializer list has a single element of 3692 // type cv U, where U is T or a class derived from T, the object is 3693 // initialized from that element (by copy-initialization for 3694 // copy-list-initialization, or by direct-initialization for 3695 // direct-list-initialization). 3696 // - Otherwise, if T is a character array and the initializer list has a 3697 // single element that is an appropriately-typed string literal 3698 // (8.5.2 [dcl.init.string]), initialization is performed as described 3699 // in that section. 3700 // - Otherwise, if T is an aggregate, [...] (continue below). 3701 if (S.getLangOpts().CPlusPlus11 && InitList->getNumInits() == 1) { 3702 if (DestType->isRecordType()) { 3703 QualType InitType = InitList->getInit(0)->getType(); 3704 if (S.Context.hasSameUnqualifiedType(InitType, DestType) || 3705 S.IsDerivedFrom(InitList->getLocStart(), InitType, DestType)) { 3706 Expr *InitAsExpr = InitList->getInit(0); 3707 TryConstructorInitialization(S, Entity, Kind, InitAsExpr, DestType, 3708 Sequence, /*InitListSyntax*/ false, 3709 /*IsInitListCopy*/ true); 3710 return; 3711 } 3712 } 3713 if (const ArrayType *DestAT = S.Context.getAsArrayType(DestType)) { 3714 Expr *SubInit[1] = {InitList->getInit(0)}; 3715 if (!isa<VariableArrayType>(DestAT) && 3716 IsStringInit(SubInit[0], DestAT, S.Context) == SIF_None) { 3717 InitializationKind SubKind = 3718 Kind.getKind() == InitializationKind::IK_DirectList 3719 ? InitializationKind::CreateDirect(Kind.getLocation(), 3720 InitList->getLBraceLoc(), 3721 InitList->getRBraceLoc()) 3722 : Kind; 3723 Sequence.InitializeFrom(S, Entity, SubKind, SubInit, 3724 /*TopLevelOfInitList*/ true); 3725 3726 // TryStringLiteralInitialization() (in InitializeFrom()) will fail if 3727 // the element is not an appropriately-typed string literal, in which 3728 // case we should proceed as in C++11 (below). 3729 if (Sequence) { 3730 Sequence.RewrapReferenceInitList(Entity.getType(), InitList); 3731 return; 3732 } 3733 } 3734 } 3735 } 3736 3737 // C++11 [dcl.init.list]p3: 3738 // - If T is an aggregate, aggregate initialization is performed. 3739 if ((DestType->isRecordType() && !DestType->isAggregateType()) || 3740 (S.getLangOpts().CPlusPlus11 && 3741 S.isStdInitializerList(DestType, nullptr))) { 3742 if (S.getLangOpts().CPlusPlus11) { 3743 // - Otherwise, if the initializer list has no elements and T is a 3744 // class type with a default constructor, the object is 3745 // value-initialized. 3746 if (InitList->getNumInits() == 0) { 3747 CXXRecordDecl *RD = DestType->getAsCXXRecordDecl(); 3748 if (RD->hasDefaultConstructor()) { 3749 TryValueInitialization(S, Entity, Kind, Sequence, InitList); 3750 return; 3751 } 3752 } 3753 3754 // - Otherwise, if T is a specialization of std::initializer_list<E>, 3755 // an initializer_list object constructed [...] 3756 if (TryInitializerListConstruction(S, InitList, DestType, Sequence)) 3757 return; 3758 3759 // - Otherwise, if T is a class type, constructors are considered. 3760 Expr *InitListAsExpr = InitList; 3761 TryConstructorInitialization(S, Entity, Kind, InitListAsExpr, DestType, 3762 Sequence, /*InitListSyntax*/ true); 3763 } else 3764 Sequence.SetFailed(InitializationSequence::FK_InitListBadDestinationType); 3765 return; 3766 } 3767 3768 if (S.getLangOpts().CPlusPlus && !DestType->isAggregateType() && 3769 InitList->getNumInits() == 1 && 3770 InitList->getInit(0)->getType()->isRecordType()) { 3771 // - Otherwise, if the initializer list has a single element of type E 3772 // [...references are handled above...], the object or reference is 3773 // initialized from that element (by copy-initialization for 3774 // copy-list-initialization, or by direct-initialization for 3775 // direct-list-initialization); if a narrowing conversion is required 3776 // to convert the element to T, the program is ill-formed. 3777 // 3778 // Per core-24034, this is direct-initialization if we were performing 3779 // direct-list-initialization and copy-initialization otherwise. 3780 // We can't use InitListChecker for this, because it always performs 3781 // copy-initialization. This only matters if we might use an 'explicit' 3782 // conversion operator, so we only need to handle the cases where the source 3783 // is of record type. 3784 InitializationKind SubKind = 3785 Kind.getKind() == InitializationKind::IK_DirectList 3786 ? InitializationKind::CreateDirect(Kind.getLocation(), 3787 InitList->getLBraceLoc(), 3788 InitList->getRBraceLoc()) 3789 : Kind; 3790 Expr *SubInit[1] = { InitList->getInit(0) }; 3791 Sequence.InitializeFrom(S, Entity, SubKind, SubInit, 3792 /*TopLevelOfInitList*/true); 3793 if (Sequence) 3794 Sequence.RewrapReferenceInitList(Entity.getType(), InitList); 3795 return; 3796 } 3797 3798 InitListChecker CheckInitList(S, Entity, InitList, 3799 DestType, /*VerifyOnly=*/true); 3800 if (CheckInitList.HadError()) { 3801 Sequence.SetFailed(InitializationSequence::FK_ListInitializationFailed); 3802 return; 3803 } 3804 3805 // Add the list initialization step with the built init list. 3806 Sequence.AddListInitializationStep(DestType); 3807 } 3808 3809 /// \brief Try a reference initialization that involves calling a conversion 3810 /// function. 3811 static OverloadingResult TryRefInitWithConversionFunction(Sema &S, 3812 const InitializedEntity &Entity, 3813 const InitializationKind &Kind, 3814 Expr *Initializer, 3815 bool AllowRValues, 3816 InitializationSequence &Sequence) { 3817 QualType DestType = Entity.getType(); 3818 QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType(); 3819 QualType T1 = cv1T1.getUnqualifiedType(); 3820 QualType cv2T2 = Initializer->getType(); 3821 QualType T2 = cv2T2.getUnqualifiedType(); 3822 3823 bool DerivedToBase; 3824 bool ObjCConversion; 3825 bool ObjCLifetimeConversion; 3826 assert(!S.CompareReferenceRelationship(Initializer->getLocStart(), 3827 T1, T2, DerivedToBase, 3828 ObjCConversion, 3829 ObjCLifetimeConversion) && 3830 "Must have incompatible references when binding via conversion"); 3831 (void)DerivedToBase; 3832 (void)ObjCConversion; 3833 (void)ObjCLifetimeConversion; 3834 3835 // Build the candidate set directly in the initialization sequence 3836 // structure, so that it will persist if we fail. 3837 OverloadCandidateSet &CandidateSet = Sequence.getFailedCandidateSet(); 3838 CandidateSet.clear(); 3839 3840 // Determine whether we are allowed to call explicit constructors or 3841 // explicit conversion operators. 3842 bool AllowExplicit = Kind.AllowExplicit(); 3843 bool AllowExplicitConvs = Kind.allowExplicitConversionFunctionsInRefBinding(); 3844 3845 const RecordType *T1RecordType = nullptr; 3846 if (AllowRValues && (T1RecordType = T1->getAs<RecordType>()) && 3847 S.isCompleteType(Kind.getLocation(), T1)) { 3848 // The type we're converting to is a class type. Enumerate its constructors 3849 // to see if there is a suitable conversion. 3850 CXXRecordDecl *T1RecordDecl = cast<CXXRecordDecl>(T1RecordType->getDecl()); 3851 3852 for (NamedDecl *D : S.LookupConstructors(T1RecordDecl)) { 3853 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); 3854 3855 // Find the constructor (which may be a template). 3856 CXXConstructorDecl *Constructor = nullptr; 3857 FunctionTemplateDecl *ConstructorTmpl = dyn_cast<FunctionTemplateDecl>(D); 3858 if (ConstructorTmpl) 3859 Constructor = cast<CXXConstructorDecl>( 3860 ConstructorTmpl->getTemplatedDecl()); 3861 else 3862 Constructor = cast<CXXConstructorDecl>(D); 3863 3864 if (!Constructor->isInvalidDecl() && 3865 Constructor->isConvertingConstructor(AllowExplicit)) { 3866 if (ConstructorTmpl) 3867 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 3868 /*ExplicitArgs*/ nullptr, 3869 Initializer, CandidateSet, 3870 /*SuppressUserConversions=*/true); 3871 else 3872 S.AddOverloadCandidate(Constructor, FoundDecl, 3873 Initializer, CandidateSet, 3874 /*SuppressUserConversions=*/true); 3875 } 3876 } 3877 } 3878 if (T1RecordType && T1RecordType->getDecl()->isInvalidDecl()) 3879 return OR_No_Viable_Function; 3880 3881 const RecordType *T2RecordType = nullptr; 3882 if ((T2RecordType = T2->getAs<RecordType>()) && 3883 S.isCompleteType(Kind.getLocation(), T2)) { 3884 // The type we're converting from is a class type, enumerate its conversion 3885 // functions. 3886 CXXRecordDecl *T2RecordDecl = cast<CXXRecordDecl>(T2RecordType->getDecl()); 3887 3888 const auto &Conversions = T2RecordDecl->getVisibleConversionFunctions(); 3889 for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) { 3890 NamedDecl *D = *I; 3891 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext()); 3892 if (isa<UsingShadowDecl>(D)) 3893 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 3894 3895 FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D); 3896 CXXConversionDecl *Conv; 3897 if (ConvTemplate) 3898 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 3899 else 3900 Conv = cast<CXXConversionDecl>(D); 3901 3902 // If the conversion function doesn't return a reference type, 3903 // it can't be considered for this conversion unless we're allowed to 3904 // consider rvalues. 3905 // FIXME: Do we need to make sure that we only consider conversion 3906 // candidates with reference-compatible results? That might be needed to 3907 // break recursion. 3908 if ((AllowExplicitConvs || !Conv->isExplicit()) && 3909 (AllowRValues || Conv->getConversionType()->isLValueReferenceType())){ 3910 if (ConvTemplate) 3911 S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), 3912 ActingDC, Initializer, 3913 DestType, CandidateSet, 3914 /*AllowObjCConversionOnExplicit=*/ 3915 false); 3916 else 3917 S.AddConversionCandidate(Conv, I.getPair(), ActingDC, 3918 Initializer, DestType, CandidateSet, 3919 /*AllowObjCConversionOnExplicit=*/false); 3920 } 3921 } 3922 } 3923 if (T2RecordType && T2RecordType->getDecl()->isInvalidDecl()) 3924 return OR_No_Viable_Function; 3925 3926 SourceLocation DeclLoc = Initializer->getLocStart(); 3927 3928 // Perform overload resolution. If it fails, return the failed result. 3929 OverloadCandidateSet::iterator Best; 3930 if (OverloadingResult Result 3931 = CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) 3932 return Result; 3933 3934 FunctionDecl *Function = Best->Function; 3935 // This is the overload that will be used for this initialization step if we 3936 // use this initialization. Mark it as referenced. 3937 Function->setReferenced(); 3938 3939 // Compute the returned type of the conversion. 3940 if (isa<CXXConversionDecl>(Function)) 3941 T2 = Function->getReturnType(); 3942 else 3943 T2 = cv1T1; 3944 3945 // Add the user-defined conversion step. 3946 bool HadMultipleCandidates = (CandidateSet.size() > 1); 3947 Sequence.AddUserConversionStep(Function, Best->FoundDecl, 3948 T2.getNonLValueExprType(S.Context), 3949 HadMultipleCandidates); 3950 3951 // Determine whether we need to perform derived-to-base or 3952 // cv-qualification adjustments. 3953 ExprValueKind VK = VK_RValue; 3954 if (T2->isLValueReferenceType()) 3955 VK = VK_LValue; 3956 else if (const RValueReferenceType *RRef = T2->getAs<RValueReferenceType>()) 3957 VK = RRef->getPointeeType()->isFunctionType() ? VK_LValue : VK_XValue; 3958 3959 bool NewDerivedToBase = false; 3960 bool NewObjCConversion = false; 3961 bool NewObjCLifetimeConversion = false; 3962 Sema::ReferenceCompareResult NewRefRelationship 3963 = S.CompareReferenceRelationship(DeclLoc, T1, 3964 T2.getNonLValueExprType(S.Context), 3965 NewDerivedToBase, NewObjCConversion, 3966 NewObjCLifetimeConversion); 3967 if (NewRefRelationship == Sema::Ref_Incompatible) { 3968 // If the type we've converted to is not reference-related to the 3969 // type we're looking for, then there is another conversion step 3970 // we need to perform to produce a temporary of the right type 3971 // that we'll be binding to. 3972 ImplicitConversionSequence ICS; 3973 ICS.setStandard(); 3974 ICS.Standard = Best->FinalConversion; 3975 T2 = ICS.Standard.getToType(2); 3976 Sequence.AddConversionSequenceStep(ICS, T2); 3977 } else if (NewDerivedToBase) 3978 Sequence.AddDerivedToBaseCastStep( 3979 S.Context.getQualifiedType(T1, 3980 T2.getNonReferenceType().getQualifiers()), 3981 VK); 3982 else if (NewObjCConversion) 3983 Sequence.AddObjCObjectConversionStep( 3984 S.Context.getQualifiedType(T1, 3985 T2.getNonReferenceType().getQualifiers())); 3986 3987 if (cv1T1.getQualifiers() != T2.getNonReferenceType().getQualifiers()) 3988 Sequence.AddQualificationConversionStep(cv1T1, VK); 3989 3990 Sequence.AddReferenceBindingStep(cv1T1, !T2->isReferenceType()); 3991 return OR_Success; 3992 } 3993 3994 static void CheckCXX98CompatAccessibleCopy(Sema &S, 3995 const InitializedEntity &Entity, 3996 Expr *CurInitExpr); 3997 3998 /// \brief Attempt reference initialization (C++0x [dcl.init.ref]) 3999 static void TryReferenceInitialization(Sema &S, 4000 const InitializedEntity &Entity, 4001 const InitializationKind &Kind, 4002 Expr *Initializer, 4003 InitializationSequence &Sequence) { 4004 QualType DestType = Entity.getType(); 4005 QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType(); 4006 Qualifiers T1Quals; 4007 QualType T1 = S.Context.getUnqualifiedArrayType(cv1T1, T1Quals); 4008 QualType cv2T2 = Initializer->getType(); 4009 Qualifiers T2Quals; 4010 QualType T2 = S.Context.getUnqualifiedArrayType(cv2T2, T2Quals); 4011 4012 // If the initializer is the address of an overloaded function, try 4013 // to resolve the overloaded function. If all goes well, T2 is the 4014 // type of the resulting function. 4015 if (ResolveOverloadedFunctionForReferenceBinding(S, Initializer, cv2T2, T2, 4016 T1, Sequence)) 4017 return; 4018 4019 // Delegate everything else to a subfunction. 4020 TryReferenceInitializationCore(S, Entity, Kind, Initializer, cv1T1, T1, 4021 T1Quals, cv2T2, T2, T2Quals, Sequence); 4022 } 4023 4024 /// Converts the target of reference initialization so that it has the 4025 /// appropriate qualifiers and value kind. 4026 /// 4027 /// In this case, 'x' is an 'int' lvalue, but it needs to be 'const int'. 4028 /// \code 4029 /// int x; 4030 /// const int &r = x; 4031 /// \endcode 4032 /// 4033 /// In this case the reference is binding to a bitfield lvalue, which isn't 4034 /// valid. Perform a load to create a lifetime-extended temporary instead. 4035 /// \code 4036 /// const int &r = someStruct.bitfield; 4037 /// \endcode 4038 static ExprValueKind 4039 convertQualifiersAndValueKindIfNecessary(Sema &S, 4040 InitializationSequence &Sequence, 4041 Expr *Initializer, 4042 QualType cv1T1, 4043 Qualifiers T1Quals, 4044 Qualifiers T2Quals, 4045 bool IsLValueRef) { 4046 bool IsNonAddressableType = Initializer->refersToBitField() || 4047 Initializer->refersToVectorElement(); 4048 4049 if (IsNonAddressableType) { 4050 // C++11 [dcl.init.ref]p5: [...] Otherwise, the reference shall be an 4051 // lvalue reference to a non-volatile const type, or the reference shall be 4052 // an rvalue reference. 4053 // 4054 // If not, we can't make a temporary and bind to that. Give up and allow the 4055 // error to be diagnosed later. 4056 if (IsLValueRef && (!T1Quals.hasConst() || T1Quals.hasVolatile())) { 4057 assert(Initializer->isGLValue()); 4058 return Initializer->getValueKind(); 4059 } 4060 4061 // Force a load so we can materialize a temporary. 4062 Sequence.AddLValueToRValueStep(cv1T1.getUnqualifiedType()); 4063 return VK_RValue; 4064 } 4065 4066 if (T1Quals != T2Quals) { 4067 Sequence.AddQualificationConversionStep(cv1T1, 4068 Initializer->getValueKind()); 4069 } 4070 4071 return Initializer->getValueKind(); 4072 } 4073 4074 /// \brief Reference initialization without resolving overloaded functions. 4075 static void TryReferenceInitializationCore(Sema &S, 4076 const InitializedEntity &Entity, 4077 const InitializationKind &Kind, 4078 Expr *Initializer, 4079 QualType cv1T1, QualType T1, 4080 Qualifiers T1Quals, 4081 QualType cv2T2, QualType T2, 4082 Qualifiers T2Quals, 4083 InitializationSequence &Sequence) { 4084 QualType DestType = Entity.getType(); 4085 SourceLocation DeclLoc = Initializer->getLocStart(); 4086 // Compute some basic properties of the types and the initializer. 4087 bool isLValueRef = DestType->isLValueReferenceType(); 4088 bool isRValueRef = !isLValueRef; 4089 bool DerivedToBase = false; 4090 bool ObjCConversion = false; 4091 bool ObjCLifetimeConversion = false; 4092 Expr::Classification InitCategory = Initializer->Classify(S.Context); 4093 Sema::ReferenceCompareResult RefRelationship 4094 = S.CompareReferenceRelationship(DeclLoc, cv1T1, cv2T2, DerivedToBase, 4095 ObjCConversion, ObjCLifetimeConversion); 4096 4097 // C++0x [dcl.init.ref]p5: 4098 // A reference to type "cv1 T1" is initialized by an expression of type 4099 // "cv2 T2" as follows: 4100 // 4101 // - If the reference is an lvalue reference and the initializer 4102 // expression 4103 // Note the analogous bullet points for rvalue refs to functions. Because 4104 // there are no function rvalues in C++, rvalue refs to functions are treated 4105 // like lvalue refs. 4106 OverloadingResult ConvOvlResult = OR_Success; 4107 bool T1Function = T1->isFunctionType(); 4108 if (isLValueRef || T1Function) { 4109 if (InitCategory.isLValue() && 4110 (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification || 4111 (Kind.isCStyleOrFunctionalCast() && 4112 RefRelationship == Sema::Ref_Related))) { 4113 // - is an lvalue (but is not a bit-field), and "cv1 T1" is 4114 // reference-compatible with "cv2 T2," or 4115 // 4116 // Per C++ [over.best.ics]p2, we don't diagnose whether the lvalue is a 4117 // bit-field when we're determining whether the reference initialization 4118 // can occur. However, we do pay attention to whether it is a bit-field 4119 // to decide whether we're actually binding to a temporary created from 4120 // the bit-field. 4121 if (DerivedToBase) 4122 Sequence.AddDerivedToBaseCastStep( 4123 S.Context.getQualifiedType(T1, T2Quals), 4124 VK_LValue); 4125 else if (ObjCConversion) 4126 Sequence.AddObjCObjectConversionStep( 4127 S.Context.getQualifiedType(T1, T2Quals)); 4128 4129 ExprValueKind ValueKind = 4130 convertQualifiersAndValueKindIfNecessary(S, Sequence, Initializer, 4131 cv1T1, T1Quals, T2Quals, 4132 isLValueRef); 4133 Sequence.AddReferenceBindingStep(cv1T1, ValueKind == VK_RValue); 4134 return; 4135 } 4136 4137 // - has a class type (i.e., T2 is a class type), where T1 is not 4138 // reference-related to T2, and can be implicitly converted to an 4139 // lvalue of type "cv3 T3," where "cv1 T1" is reference-compatible 4140 // with "cv3 T3" (this conversion is selected by enumerating the 4141 // applicable conversion functions (13.3.1.6) and choosing the best 4142 // one through overload resolution (13.3)), 4143 // If we have an rvalue ref to function type here, the rhs must be 4144 // an rvalue. DR1287 removed the "implicitly" here. 4145 if (RefRelationship == Sema::Ref_Incompatible && T2->isRecordType() && 4146 (isLValueRef || InitCategory.isRValue())) { 4147 ConvOvlResult = TryRefInitWithConversionFunction( 4148 S, Entity, Kind, Initializer, /*AllowRValues*/isRValueRef, Sequence); 4149 if (ConvOvlResult == OR_Success) 4150 return; 4151 if (ConvOvlResult != OR_No_Viable_Function) 4152 Sequence.SetOverloadFailure( 4153 InitializationSequence::FK_ReferenceInitOverloadFailed, 4154 ConvOvlResult); 4155 } 4156 } 4157 4158 // - Otherwise, the reference shall be an lvalue reference to a 4159 // non-volatile const type (i.e., cv1 shall be const), or the reference 4160 // shall be an rvalue reference. 4161 if (isLValueRef && !(T1Quals.hasConst() && !T1Quals.hasVolatile())) { 4162 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) 4163 Sequence.SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 4164 else if (ConvOvlResult && !Sequence.getFailedCandidateSet().empty()) 4165 Sequence.SetOverloadFailure( 4166 InitializationSequence::FK_ReferenceInitOverloadFailed, 4167 ConvOvlResult); 4168 else 4169 Sequence.SetFailed(InitCategory.isLValue() 4170 ? (RefRelationship == Sema::Ref_Related 4171 ? InitializationSequence::FK_ReferenceInitDropsQualifiers 4172 : InitializationSequence::FK_NonConstLValueReferenceBindingToUnrelated) 4173 : InitializationSequence::FK_NonConstLValueReferenceBindingToTemporary); 4174 4175 return; 4176 } 4177 4178 // - If the initializer expression 4179 // - is an xvalue, class prvalue, array prvalue, or function lvalue and 4180 // "cv1 T1" is reference-compatible with "cv2 T2" 4181 // Note: functions are handled below. 4182 if (!T1Function && 4183 (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification || 4184 (Kind.isCStyleOrFunctionalCast() && 4185 RefRelationship == Sema::Ref_Related)) && 4186 (InitCategory.isXValue() || 4187 (InitCategory.isPRValue() && T2->isRecordType()) || 4188 (InitCategory.isPRValue() && T2->isArrayType()))) { 4189 ExprValueKind ValueKind = InitCategory.isXValue()? VK_XValue : VK_RValue; 4190 if (InitCategory.isPRValue() && T2->isRecordType()) { 4191 // The corresponding bullet in C++03 [dcl.init.ref]p5 gives the 4192 // compiler the freedom to perform a copy here or bind to the 4193 // object, while C++0x requires that we bind directly to the 4194 // object. Hence, we always bind to the object without making an 4195 // extra copy. However, in C++03 requires that we check for the 4196 // presence of a suitable copy constructor: 4197 // 4198 // The constructor that would be used to make the copy shall 4199 // be callable whether or not the copy is actually done. 4200 if (!S.getLangOpts().CPlusPlus11 && !S.getLangOpts().MicrosoftExt) 4201 Sequence.AddExtraneousCopyToTemporary(cv2T2); 4202 else if (S.getLangOpts().CPlusPlus11) 4203 CheckCXX98CompatAccessibleCopy(S, Entity, Initializer); 4204 } 4205 4206 if (DerivedToBase) 4207 Sequence.AddDerivedToBaseCastStep(S.Context.getQualifiedType(T1, T2Quals), 4208 ValueKind); 4209 else if (ObjCConversion) 4210 Sequence.AddObjCObjectConversionStep( 4211 S.Context.getQualifiedType(T1, T2Quals)); 4212 4213 ValueKind = convertQualifiersAndValueKindIfNecessary(S, Sequence, 4214 Initializer, cv1T1, 4215 T1Quals, T2Quals, 4216 isLValueRef); 4217 4218 Sequence.AddReferenceBindingStep(cv1T1, ValueKind == VK_RValue); 4219 return; 4220 } 4221 4222 // - has a class type (i.e., T2 is a class type), where T1 is not 4223 // reference-related to T2, and can be implicitly converted to an 4224 // xvalue, class prvalue, or function lvalue of type "cv3 T3", 4225 // where "cv1 T1" is reference-compatible with "cv3 T3", 4226 // 4227 // DR1287 removes the "implicitly" here. 4228 if (T2->isRecordType()) { 4229 if (RefRelationship == Sema::Ref_Incompatible) { 4230 ConvOvlResult = TryRefInitWithConversionFunction( 4231 S, Entity, Kind, Initializer, /*AllowRValues*/true, Sequence); 4232 if (ConvOvlResult) 4233 Sequence.SetOverloadFailure( 4234 InitializationSequence::FK_ReferenceInitOverloadFailed, 4235 ConvOvlResult); 4236 4237 return; 4238 } 4239 4240 if ((RefRelationship == Sema::Ref_Compatible || 4241 RefRelationship == Sema::Ref_Compatible_With_Added_Qualification) && 4242 isRValueRef && InitCategory.isLValue()) { 4243 Sequence.SetFailed( 4244 InitializationSequence::FK_RValueReferenceBindingToLValue); 4245 return; 4246 } 4247 4248 Sequence.SetFailed(InitializationSequence::FK_ReferenceInitDropsQualifiers); 4249 return; 4250 } 4251 4252 // - Otherwise, a temporary of type "cv1 T1" is created and initialized 4253 // from the initializer expression using the rules for a non-reference 4254 // copy-initialization (8.5). The reference is then bound to the 4255 // temporary. [...] 4256 4257 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary(cv1T1); 4258 4259 // FIXME: Why do we use an implicit conversion here rather than trying 4260 // copy-initialization? 4261 ImplicitConversionSequence ICS 4262 = S.TryImplicitConversion(Initializer, TempEntity.getType(), 4263 /*SuppressUserConversions=*/false, 4264 /*AllowExplicit=*/false, 4265 /*FIXME:InOverloadResolution=*/false, 4266 /*CStyle=*/Kind.isCStyleOrFunctionalCast(), 4267 /*AllowObjCWritebackConversion=*/false); 4268 4269 if (ICS.isBad()) { 4270 // FIXME: Use the conversion function set stored in ICS to turn 4271 // this into an overloading ambiguity diagnostic. However, we need 4272 // to keep that set as an OverloadCandidateSet rather than as some 4273 // other kind of set. 4274 if (ConvOvlResult && !Sequence.getFailedCandidateSet().empty()) 4275 Sequence.SetOverloadFailure( 4276 InitializationSequence::FK_ReferenceInitOverloadFailed, 4277 ConvOvlResult); 4278 else if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) 4279 Sequence.SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 4280 else 4281 Sequence.SetFailed(InitializationSequence::FK_ReferenceInitFailed); 4282 return; 4283 } else { 4284 Sequence.AddConversionSequenceStep(ICS, TempEntity.getType()); 4285 } 4286 4287 // [...] If T1 is reference-related to T2, cv1 must be the 4288 // same cv-qualification as, or greater cv-qualification 4289 // than, cv2; otherwise, the program is ill-formed. 4290 unsigned T1CVRQuals = T1Quals.getCVRQualifiers(); 4291 unsigned T2CVRQuals = T2Quals.getCVRQualifiers(); 4292 if (RefRelationship == Sema::Ref_Related && 4293 (T1CVRQuals | T2CVRQuals) != T1CVRQuals) { 4294 Sequence.SetFailed(InitializationSequence::FK_ReferenceInitDropsQualifiers); 4295 return; 4296 } 4297 4298 // [...] If T1 is reference-related to T2 and the reference is an rvalue 4299 // reference, the initializer expression shall not be an lvalue. 4300 if (RefRelationship >= Sema::Ref_Related && !isLValueRef && 4301 InitCategory.isLValue()) { 4302 Sequence.SetFailed( 4303 InitializationSequence::FK_RValueReferenceBindingToLValue); 4304 return; 4305 } 4306 4307 Sequence.AddReferenceBindingStep(cv1T1, /*bindingTemporary=*/true); 4308 } 4309 4310 /// \brief Attempt character array initialization from a string literal 4311 /// (C++ [dcl.init.string], C99 6.7.8). 4312 static void TryStringLiteralInitialization(Sema &S, 4313 const InitializedEntity &Entity, 4314 const InitializationKind &Kind, 4315 Expr *Initializer, 4316 InitializationSequence &Sequence) { 4317 Sequence.AddStringInitStep(Entity.getType()); 4318 } 4319 4320 /// \brief Attempt value initialization (C++ [dcl.init]p7). 4321 static void TryValueInitialization(Sema &S, 4322 const InitializedEntity &Entity, 4323 const InitializationKind &Kind, 4324 InitializationSequence &Sequence, 4325 InitListExpr *InitList) { 4326 assert((!InitList || InitList->getNumInits() == 0) && 4327 "Shouldn't use value-init for non-empty init lists"); 4328 4329 // C++98 [dcl.init]p5, C++11 [dcl.init]p7: 4330 // 4331 // To value-initialize an object of type T means: 4332 QualType T = Entity.getType(); 4333 4334 // -- if T is an array type, then each element is value-initialized; 4335 T = S.Context.getBaseElementType(T); 4336 4337 if (const RecordType *RT = T->getAs<RecordType>()) { 4338 if (CXXRecordDecl *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) { 4339 bool NeedZeroInitialization = true; 4340 if (!S.getLangOpts().CPlusPlus11) { 4341 // C++98: 4342 // -- if T is a class type (clause 9) with a user-declared constructor 4343 // (12.1), then the default constructor for T is called (and the 4344 // initialization is ill-formed if T has no accessible default 4345 // constructor); 4346 if (ClassDecl->hasUserDeclaredConstructor()) 4347 NeedZeroInitialization = false; 4348 } else { 4349 // C++11: 4350 // -- if T is a class type (clause 9) with either no default constructor 4351 // (12.1 [class.ctor]) or a default constructor that is user-provided 4352 // or deleted, then the object is default-initialized; 4353 CXXConstructorDecl *CD = S.LookupDefaultConstructor(ClassDecl); 4354 if (!CD || !CD->getCanonicalDecl()->isDefaulted() || CD->isDeleted()) 4355 NeedZeroInitialization = false; 4356 } 4357 4358 // -- if T is a (possibly cv-qualified) non-union class type without a 4359 // user-provided or deleted default constructor, then the object is 4360 // zero-initialized and, if T has a non-trivial default constructor, 4361 // default-initialized; 4362 // The 'non-union' here was removed by DR1502. The 'non-trivial default 4363 // constructor' part was removed by DR1507. 4364 if (NeedZeroInitialization) 4365 Sequence.AddZeroInitializationStep(Entity.getType()); 4366 4367 // C++03: 4368 // -- if T is a non-union class type without a user-declared constructor, 4369 // then every non-static data member and base class component of T is 4370 // value-initialized; 4371 // [...] A program that calls for [...] value-initialization of an 4372 // entity of reference type is ill-formed. 4373 // 4374 // C++11 doesn't need this handling, because value-initialization does not 4375 // occur recursively there, and the implicit default constructor is 4376 // defined as deleted in the problematic cases. 4377 if (!S.getLangOpts().CPlusPlus11 && 4378 ClassDecl->hasUninitializedReferenceMember()) { 4379 Sequence.SetFailed(InitializationSequence::FK_TooManyInitsForReference); 4380 return; 4381 } 4382 4383 // If this is list-value-initialization, pass the empty init list on when 4384 // building the constructor call. This affects the semantics of a few 4385 // things (such as whether an explicit default constructor can be called). 4386 Expr *InitListAsExpr = InitList; 4387 MultiExprArg Args(&InitListAsExpr, InitList ? 1 : 0); 4388 bool InitListSyntax = InitList; 4389 4390 return TryConstructorInitialization(S, Entity, Kind, Args, T, Sequence, 4391 InitListSyntax); 4392 } 4393 } 4394 4395 Sequence.AddZeroInitializationStep(Entity.getType()); 4396 } 4397 4398 /// \brief Attempt default initialization (C++ [dcl.init]p6). 4399 static void TryDefaultInitialization(Sema &S, 4400 const InitializedEntity &Entity, 4401 const InitializationKind &Kind, 4402 InitializationSequence &Sequence) { 4403 assert(Kind.getKind() == InitializationKind::IK_Default); 4404 4405 // C++ [dcl.init]p6: 4406 // To default-initialize an object of type T means: 4407 // - if T is an array type, each element is default-initialized; 4408 QualType DestType = S.Context.getBaseElementType(Entity.getType()); 4409 4410 // - if T is a (possibly cv-qualified) class type (Clause 9), the default 4411 // constructor for T is called (and the initialization is ill-formed if 4412 // T has no accessible default constructor); 4413 if (DestType->isRecordType() && S.getLangOpts().CPlusPlus) { 4414 TryConstructorInitialization(S, Entity, Kind, None, DestType, Sequence); 4415 return; 4416 } 4417 4418 // - otherwise, no initialization is performed. 4419 4420 // If a program calls for the default initialization of an object of 4421 // a const-qualified type T, T shall be a class type with a user-provided 4422 // default constructor. 4423 if (DestType.isConstQualified() && S.getLangOpts().CPlusPlus) { 4424 if (!maybeRecoverWithZeroInitialization(S, Sequence, Entity)) 4425 Sequence.SetFailed(InitializationSequence::FK_DefaultInitOfConst); 4426 return; 4427 } 4428 4429 // If the destination type has a lifetime property, zero-initialize it. 4430 if (DestType.getQualifiers().hasObjCLifetime()) { 4431 Sequence.AddZeroInitializationStep(Entity.getType()); 4432 return; 4433 } 4434 } 4435 4436 /// \brief Attempt a user-defined conversion between two types (C++ [dcl.init]), 4437 /// which enumerates all conversion functions and performs overload resolution 4438 /// to select the best. 4439 static void TryUserDefinedConversion(Sema &S, 4440 QualType DestType, 4441 const InitializationKind &Kind, 4442 Expr *Initializer, 4443 InitializationSequence &Sequence, 4444 bool TopLevelOfInitList) { 4445 assert(!DestType->isReferenceType() && "References are handled elsewhere"); 4446 QualType SourceType = Initializer->getType(); 4447 assert((DestType->isRecordType() || SourceType->isRecordType()) && 4448 "Must have a class type to perform a user-defined conversion"); 4449 4450 // Build the candidate set directly in the initialization sequence 4451 // structure, so that it will persist if we fail. 4452 OverloadCandidateSet &CandidateSet = Sequence.getFailedCandidateSet(); 4453 CandidateSet.clear(); 4454 4455 // Determine whether we are allowed to call explicit constructors or 4456 // explicit conversion operators. 4457 bool AllowExplicit = Kind.AllowExplicit(); 4458 4459 if (const RecordType *DestRecordType = DestType->getAs<RecordType>()) { 4460 // The type we're converting to is a class type. Enumerate its constructors 4461 // to see if there is a suitable conversion. 4462 CXXRecordDecl *DestRecordDecl 4463 = cast<CXXRecordDecl>(DestRecordType->getDecl()); 4464 4465 // Try to complete the type we're converting to. 4466 if (S.isCompleteType(Kind.getLocation(), DestType)) { 4467 DeclContext::lookup_result R = S.LookupConstructors(DestRecordDecl); 4468 // The container holding the constructors can under certain conditions 4469 // be changed while iterating. To be safe we copy the lookup results 4470 // to a new container. 4471 SmallVector<NamedDecl*, 8> CopyOfCon(R.begin(), R.end()); 4472 for (SmallVectorImpl<NamedDecl *>::iterator 4473 Con = CopyOfCon.begin(), ConEnd = CopyOfCon.end(); 4474 Con != ConEnd; ++Con) { 4475 NamedDecl *D = *Con; 4476 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); 4477 4478 // Find the constructor (which may be a template). 4479 CXXConstructorDecl *Constructor = nullptr; 4480 FunctionTemplateDecl *ConstructorTmpl 4481 = dyn_cast<FunctionTemplateDecl>(D); 4482 if (ConstructorTmpl) 4483 Constructor = cast<CXXConstructorDecl>( 4484 ConstructorTmpl->getTemplatedDecl()); 4485 else 4486 Constructor = cast<CXXConstructorDecl>(D); 4487 4488 if (!Constructor->isInvalidDecl() && 4489 Constructor->isConvertingConstructor(AllowExplicit)) { 4490 if (ConstructorTmpl) 4491 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 4492 /*ExplicitArgs*/ nullptr, 4493 Initializer, CandidateSet, 4494 /*SuppressUserConversions=*/true); 4495 else 4496 S.AddOverloadCandidate(Constructor, FoundDecl, 4497 Initializer, CandidateSet, 4498 /*SuppressUserConversions=*/true); 4499 } 4500 } 4501 } 4502 } 4503 4504 SourceLocation DeclLoc = Initializer->getLocStart(); 4505 4506 if (const RecordType *SourceRecordType = SourceType->getAs<RecordType>()) { 4507 // The type we're converting from is a class type, enumerate its conversion 4508 // functions. 4509 4510 // We can only enumerate the conversion functions for a complete type; if 4511 // the type isn't complete, simply skip this step. 4512 if (S.isCompleteType(DeclLoc, SourceType)) { 4513 CXXRecordDecl *SourceRecordDecl 4514 = cast<CXXRecordDecl>(SourceRecordType->getDecl()); 4515 4516 const auto &Conversions = 4517 SourceRecordDecl->getVisibleConversionFunctions(); 4518 for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) { 4519 NamedDecl *D = *I; 4520 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext()); 4521 if (isa<UsingShadowDecl>(D)) 4522 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 4523 4524 FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D); 4525 CXXConversionDecl *Conv; 4526 if (ConvTemplate) 4527 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 4528 else 4529 Conv = cast<CXXConversionDecl>(D); 4530 4531 if (AllowExplicit || !Conv->isExplicit()) { 4532 if (ConvTemplate) 4533 S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), 4534 ActingDC, Initializer, DestType, 4535 CandidateSet, AllowExplicit); 4536 else 4537 S.AddConversionCandidate(Conv, I.getPair(), ActingDC, 4538 Initializer, DestType, CandidateSet, 4539 AllowExplicit); 4540 } 4541 } 4542 } 4543 } 4544 4545 // Perform overload resolution. If it fails, return the failed result. 4546 OverloadCandidateSet::iterator Best; 4547 if (OverloadingResult Result 4548 = CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) { 4549 Sequence.SetOverloadFailure( 4550 InitializationSequence::FK_UserConversionOverloadFailed, 4551 Result); 4552 return; 4553 } 4554 4555 FunctionDecl *Function = Best->Function; 4556 Function->setReferenced(); 4557 bool HadMultipleCandidates = (CandidateSet.size() > 1); 4558 4559 if (isa<CXXConstructorDecl>(Function)) { 4560 // Add the user-defined conversion step. Any cv-qualification conversion is 4561 // subsumed by the initialization. Per DR5, the created temporary is of the 4562 // cv-unqualified type of the destination. 4563 Sequence.AddUserConversionStep(Function, Best->FoundDecl, 4564 DestType.getUnqualifiedType(), 4565 HadMultipleCandidates); 4566 return; 4567 } 4568 4569 // Add the user-defined conversion step that calls the conversion function. 4570 QualType ConvType = Function->getCallResultType(); 4571 if (ConvType->getAs<RecordType>()) { 4572 // If we're converting to a class type, there may be an copy of 4573 // the resulting temporary object (possible to create an object of 4574 // a base class type). That copy is not a separate conversion, so 4575 // we just make a note of the actual destination type (possibly a 4576 // base class of the type returned by the conversion function) and 4577 // let the user-defined conversion step handle the conversion. 4578 Sequence.AddUserConversionStep(Function, Best->FoundDecl, DestType, 4579 HadMultipleCandidates); 4580 return; 4581 } 4582 4583 Sequence.AddUserConversionStep(Function, Best->FoundDecl, ConvType, 4584 HadMultipleCandidates); 4585 4586 // If the conversion following the call to the conversion function 4587 // is interesting, add it as a separate step. 4588 if (Best->FinalConversion.First || Best->FinalConversion.Second || 4589 Best->FinalConversion.Third) { 4590 ImplicitConversionSequence ICS; 4591 ICS.setStandard(); 4592 ICS.Standard = Best->FinalConversion; 4593 Sequence.AddConversionSequenceStep(ICS, DestType, TopLevelOfInitList); 4594 } 4595 } 4596 4597 /// An egregious hack for compatibility with libstdc++-4.2: in <tr1/hashtable>, 4598 /// a function with a pointer return type contains a 'return false;' statement. 4599 /// In C++11, 'false' is not a null pointer, so this breaks the build of any 4600 /// code using that header. 4601 /// 4602 /// Work around this by treating 'return false;' as zero-initializing the result 4603 /// if it's used in a pointer-returning function in a system header. 4604 static bool isLibstdcxxPointerReturnFalseHack(Sema &S, 4605 const InitializedEntity &Entity, 4606 const Expr *Init) { 4607 return S.getLangOpts().CPlusPlus11 && 4608 Entity.getKind() == InitializedEntity::EK_Result && 4609 Entity.getType()->isPointerType() && 4610 isa<CXXBoolLiteralExpr>(Init) && 4611 !cast<CXXBoolLiteralExpr>(Init)->getValue() && 4612 S.getSourceManager().isInSystemHeader(Init->getExprLoc()); 4613 } 4614 4615 /// The non-zero enum values here are indexes into diagnostic alternatives. 4616 enum InvalidICRKind { IIK_okay, IIK_nonlocal, IIK_nonscalar }; 4617 4618 /// Determines whether this expression is an acceptable ICR source. 4619 static InvalidICRKind isInvalidICRSource(ASTContext &C, Expr *e, 4620 bool isAddressOf, bool &isWeakAccess) { 4621 // Skip parens. 4622 e = e->IgnoreParens(); 4623 4624 // Skip address-of nodes. 4625 if (UnaryOperator *op = dyn_cast<UnaryOperator>(e)) { 4626 if (op->getOpcode() == UO_AddrOf) 4627 return isInvalidICRSource(C, op->getSubExpr(), /*addressof*/ true, 4628 isWeakAccess); 4629 4630 // Skip certain casts. 4631 } else if (CastExpr *ce = dyn_cast<CastExpr>(e)) { 4632 switch (ce->getCastKind()) { 4633 case CK_Dependent: 4634 case CK_BitCast: 4635 case CK_LValueBitCast: 4636 case CK_NoOp: 4637 return isInvalidICRSource(C, ce->getSubExpr(), isAddressOf, isWeakAccess); 4638 4639 case CK_ArrayToPointerDecay: 4640 return IIK_nonscalar; 4641 4642 case CK_NullToPointer: 4643 return IIK_okay; 4644 4645 default: 4646 break; 4647 } 4648 4649 // If we have a declaration reference, it had better be a local variable. 4650 } else if (isa<DeclRefExpr>(e)) { 4651 // set isWeakAccess to true, to mean that there will be an implicit 4652 // load which requires a cleanup. 4653 if (e->getType().getObjCLifetime() == Qualifiers::OCL_Weak) 4654 isWeakAccess = true; 4655 4656 if (!isAddressOf) return IIK_nonlocal; 4657 4658 VarDecl *var = dyn_cast<VarDecl>(cast<DeclRefExpr>(e)->getDecl()); 4659 if (!var) return IIK_nonlocal; 4660 4661 return (var->hasLocalStorage() ? IIK_okay : IIK_nonlocal); 4662 4663 // If we have a conditional operator, check both sides. 4664 } else if (ConditionalOperator *cond = dyn_cast<ConditionalOperator>(e)) { 4665 if (InvalidICRKind iik = isInvalidICRSource(C, cond->getLHS(), isAddressOf, 4666 isWeakAccess)) 4667 return iik; 4668 4669 return isInvalidICRSource(C, cond->getRHS(), isAddressOf, isWeakAccess); 4670 4671 // These are never scalar. 4672 } else if (isa<ArraySubscriptExpr>(e)) { 4673 return IIK_nonscalar; 4674 4675 // Otherwise, it needs to be a null pointer constant. 4676 } else { 4677 return (e->isNullPointerConstant(C, Expr::NPC_ValueDependentIsNull) 4678 ? IIK_okay : IIK_nonlocal); 4679 } 4680 4681 return IIK_nonlocal; 4682 } 4683 4684 /// Check whether the given expression is a valid operand for an 4685 /// indirect copy/restore. 4686 static void checkIndirectCopyRestoreSource(Sema &S, Expr *src) { 4687 assert(src->isRValue()); 4688 bool isWeakAccess = false; 4689 InvalidICRKind iik = isInvalidICRSource(S.Context, src, false, isWeakAccess); 4690 // If isWeakAccess to true, there will be an implicit 4691 // load which requires a cleanup. 4692 if (S.getLangOpts().ObjCAutoRefCount && isWeakAccess) 4693 S.ExprNeedsCleanups = true; 4694 4695 if (iik == IIK_okay) return; 4696 4697 S.Diag(src->getExprLoc(), diag::err_arc_nonlocal_writeback) 4698 << ((unsigned) iik - 1) // shift index into diagnostic explanations 4699 << src->getSourceRange(); 4700 } 4701 4702 /// \brief Determine whether we have compatible array types for the 4703 /// purposes of GNU by-copy array initialization. 4704 static bool hasCompatibleArrayTypes(ASTContext &Context, const ArrayType *Dest, 4705 const ArrayType *Source) { 4706 // If the source and destination array types are equivalent, we're 4707 // done. 4708 if (Context.hasSameType(QualType(Dest, 0), QualType(Source, 0))) 4709 return true; 4710 4711 // Make sure that the element types are the same. 4712 if (!Context.hasSameType(Dest->getElementType(), Source->getElementType())) 4713 return false; 4714 4715 // The only mismatch we allow is when the destination is an 4716 // incomplete array type and the source is a constant array type. 4717 return Source->isConstantArrayType() && Dest->isIncompleteArrayType(); 4718 } 4719 4720 static bool tryObjCWritebackConversion(Sema &S, 4721 InitializationSequence &Sequence, 4722 const InitializedEntity &Entity, 4723 Expr *Initializer) { 4724 bool ArrayDecay = false; 4725 QualType ArgType = Initializer->getType(); 4726 QualType ArgPointee; 4727 if (const ArrayType *ArgArrayType = S.Context.getAsArrayType(ArgType)) { 4728 ArrayDecay = true; 4729 ArgPointee = ArgArrayType->getElementType(); 4730 ArgType = S.Context.getPointerType(ArgPointee); 4731 } 4732 4733 // Handle write-back conversion. 4734 QualType ConvertedArgType; 4735 if (!S.isObjCWritebackConversion(ArgType, Entity.getType(), 4736 ConvertedArgType)) 4737 return false; 4738 4739 // We should copy unless we're passing to an argument explicitly 4740 // marked 'out'. 4741 bool ShouldCopy = true; 4742 if (ParmVarDecl *param = cast_or_null<ParmVarDecl>(Entity.getDecl())) 4743 ShouldCopy = (param->getObjCDeclQualifier() != ParmVarDecl::OBJC_TQ_Out); 4744 4745 // Do we need an lvalue conversion? 4746 if (ArrayDecay || Initializer->isGLValue()) { 4747 ImplicitConversionSequence ICS; 4748 ICS.setStandard(); 4749 ICS.Standard.setAsIdentityConversion(); 4750 4751 QualType ResultType; 4752 if (ArrayDecay) { 4753 ICS.Standard.First = ICK_Array_To_Pointer; 4754 ResultType = S.Context.getPointerType(ArgPointee); 4755 } else { 4756 ICS.Standard.First = ICK_Lvalue_To_Rvalue; 4757 ResultType = Initializer->getType().getNonLValueExprType(S.Context); 4758 } 4759 4760 Sequence.AddConversionSequenceStep(ICS, ResultType); 4761 } 4762 4763 Sequence.AddPassByIndirectCopyRestoreStep(Entity.getType(), ShouldCopy); 4764 return true; 4765 } 4766 4767 static bool TryOCLSamplerInitialization(Sema &S, 4768 InitializationSequence &Sequence, 4769 QualType DestType, 4770 Expr *Initializer) { 4771 if (!S.getLangOpts().OpenCL || !DestType->isSamplerT() || 4772 !Initializer->isIntegerConstantExpr(S.getASTContext())) 4773 return false; 4774 4775 Sequence.AddOCLSamplerInitStep(DestType); 4776 return true; 4777 } 4778 4779 // 4780 // OpenCL 1.2 spec, s6.12.10 4781 // 4782 // The event argument can also be used to associate the 4783 // async_work_group_copy with a previous async copy allowing 4784 // an event to be shared by multiple async copies; otherwise 4785 // event should be zero. 4786 // 4787 static bool TryOCLZeroEventInitialization(Sema &S, 4788 InitializationSequence &Sequence, 4789 QualType DestType, 4790 Expr *Initializer) { 4791 if (!S.getLangOpts().OpenCL || !DestType->isEventT() || 4792 !Initializer->isIntegerConstantExpr(S.getASTContext()) || 4793 (Initializer->EvaluateKnownConstInt(S.getASTContext()) != 0)) 4794 return false; 4795 4796 Sequence.AddOCLZeroEventStep(DestType); 4797 return true; 4798 } 4799 4800 InitializationSequence::InitializationSequence(Sema &S, 4801 const InitializedEntity &Entity, 4802 const InitializationKind &Kind, 4803 MultiExprArg Args, 4804 bool TopLevelOfInitList) 4805 : FailedCandidateSet(Kind.getLocation(), OverloadCandidateSet::CSK_Normal) { 4806 InitializeFrom(S, Entity, Kind, Args, TopLevelOfInitList); 4807 } 4808 4809 /// Tries to get a FunctionDecl out of `E`. If it succeeds and we can take the 4810 /// address of that function, this returns true. Otherwise, it returns false. 4811 static bool isExprAnUnaddressableFunction(Sema &S, const Expr *E) { 4812 auto *DRE = dyn_cast<DeclRefExpr>(E); 4813 if (!DRE || !isa<FunctionDecl>(DRE->getDecl())) 4814 return false; 4815 4816 return !S.checkAddressOfFunctionIsAvailable( 4817 cast<FunctionDecl>(DRE->getDecl())); 4818 } 4819 4820 void InitializationSequence::InitializeFrom(Sema &S, 4821 const InitializedEntity &Entity, 4822 const InitializationKind &Kind, 4823 MultiExprArg Args, 4824 bool TopLevelOfInitList) { 4825 ASTContext &Context = S.Context; 4826 4827 // Eliminate non-overload placeholder types in the arguments. We 4828 // need to do this before checking whether types are dependent 4829 // because lowering a pseudo-object expression might well give us 4830 // something of dependent type. 4831 for (unsigned I = 0, E = Args.size(); I != E; ++I) 4832 if (Args[I]->getType()->isNonOverloadPlaceholderType()) { 4833 // FIXME: should we be doing this here? 4834 ExprResult result = S.CheckPlaceholderExpr(Args[I]); 4835 if (result.isInvalid()) { 4836 SetFailed(FK_PlaceholderType); 4837 return; 4838 } 4839 Args[I] = result.get(); 4840 } 4841 4842 // C++0x [dcl.init]p16: 4843 // The semantics of initializers are as follows. The destination type is 4844 // the type of the object or reference being initialized and the source 4845 // type is the type of the initializer expression. The source type is not 4846 // defined when the initializer is a braced-init-list or when it is a 4847 // parenthesized list of expressions. 4848 QualType DestType = Entity.getType(); 4849 4850 if (DestType->isDependentType() || 4851 Expr::hasAnyTypeDependentArguments(Args)) { 4852 SequenceKind = DependentSequence; 4853 return; 4854 } 4855 4856 // Almost everything is a normal sequence. 4857 setSequenceKind(NormalSequence); 4858 4859 QualType SourceType; 4860 Expr *Initializer = nullptr; 4861 if (Args.size() == 1) { 4862 Initializer = Args[0]; 4863 if (S.getLangOpts().ObjC1) { 4864 if (S.CheckObjCBridgeRelatedConversions(Initializer->getLocStart(), 4865 DestType, Initializer->getType(), 4866 Initializer) || 4867 S.ConversionToObjCStringLiteralCheck(DestType, Initializer)) 4868 Args[0] = Initializer; 4869 } 4870 if (!isa<InitListExpr>(Initializer)) 4871 SourceType = Initializer->getType(); 4872 } 4873 4874 // - If the initializer is a (non-parenthesized) braced-init-list, the 4875 // object is list-initialized (8.5.4). 4876 if (Kind.getKind() != InitializationKind::IK_Direct) { 4877 if (InitListExpr *InitList = dyn_cast_or_null<InitListExpr>(Initializer)) { 4878 TryListInitialization(S, Entity, Kind, InitList, *this); 4879 return; 4880 } 4881 } 4882 4883 // - If the destination type is a reference type, see 8.5.3. 4884 if (DestType->isReferenceType()) { 4885 // C++0x [dcl.init.ref]p1: 4886 // A variable declared to be a T& or T&&, that is, "reference to type T" 4887 // (8.3.2), shall be initialized by an object, or function, of type T or 4888 // by an object that can be converted into a T. 4889 // (Therefore, multiple arguments are not permitted.) 4890 if (Args.size() != 1) 4891 SetFailed(FK_TooManyInitsForReference); 4892 else 4893 TryReferenceInitialization(S, Entity, Kind, Args[0], *this); 4894 return; 4895 } 4896 4897 // - If the initializer is (), the object is value-initialized. 4898 if (Kind.getKind() == InitializationKind::IK_Value || 4899 (Kind.getKind() == InitializationKind::IK_Direct && Args.empty())) { 4900 TryValueInitialization(S, Entity, Kind, *this); 4901 return; 4902 } 4903 4904 // Handle default initialization. 4905 if (Kind.getKind() == InitializationKind::IK_Default) { 4906 TryDefaultInitialization(S, Entity, Kind, *this); 4907 return; 4908 } 4909 4910 // - If the destination type is an array of characters, an array of 4911 // char16_t, an array of char32_t, or an array of wchar_t, and the 4912 // initializer is a string literal, see 8.5.2. 4913 // - Otherwise, if the destination type is an array, the program is 4914 // ill-formed. 4915 if (const ArrayType *DestAT = Context.getAsArrayType(DestType)) { 4916 if (Initializer && isa<VariableArrayType>(DestAT)) { 4917 SetFailed(FK_VariableLengthArrayHasInitializer); 4918 return; 4919 } 4920 4921 if (Initializer) { 4922 switch (IsStringInit(Initializer, DestAT, Context)) { 4923 case SIF_None: 4924 TryStringLiteralInitialization(S, Entity, Kind, Initializer, *this); 4925 return; 4926 case SIF_NarrowStringIntoWideChar: 4927 SetFailed(FK_NarrowStringIntoWideCharArray); 4928 return; 4929 case SIF_WideStringIntoChar: 4930 SetFailed(FK_WideStringIntoCharArray); 4931 return; 4932 case SIF_IncompatWideStringIntoWideChar: 4933 SetFailed(FK_IncompatWideStringIntoWideChar); 4934 return; 4935 case SIF_Other: 4936 break; 4937 } 4938 } 4939 4940 // Note: as an GNU C extension, we allow initialization of an 4941 // array from a compound literal that creates an array of the same 4942 // type, so long as the initializer has no side effects. 4943 if (!S.getLangOpts().CPlusPlus && Initializer && 4944 isa<CompoundLiteralExpr>(Initializer->IgnoreParens()) && 4945 Initializer->getType()->isArrayType()) { 4946 const ArrayType *SourceAT 4947 = Context.getAsArrayType(Initializer->getType()); 4948 if (!hasCompatibleArrayTypes(S.Context, DestAT, SourceAT)) 4949 SetFailed(FK_ArrayTypeMismatch); 4950 else if (Initializer->HasSideEffects(S.Context)) 4951 SetFailed(FK_NonConstantArrayInit); 4952 else { 4953 AddArrayInitStep(DestType); 4954 } 4955 } 4956 // Note: as a GNU C++ extension, we allow list-initialization of a 4957 // class member of array type from a parenthesized initializer list. 4958 else if (S.getLangOpts().CPlusPlus && 4959 Entity.getKind() == InitializedEntity::EK_Member && 4960 Initializer && isa<InitListExpr>(Initializer)) { 4961 TryListInitialization(S, Entity, Kind, cast<InitListExpr>(Initializer), 4962 *this); 4963 AddParenthesizedArrayInitStep(DestType); 4964 } else if (DestAT->getElementType()->isCharType()) 4965 SetFailed(FK_ArrayNeedsInitListOrStringLiteral); 4966 else if (IsWideCharCompatible(DestAT->getElementType(), Context)) 4967 SetFailed(FK_ArrayNeedsInitListOrWideStringLiteral); 4968 else 4969 SetFailed(FK_ArrayNeedsInitList); 4970 4971 return; 4972 } 4973 4974 // Determine whether we should consider writeback conversions for 4975 // Objective-C ARC. 4976 bool allowObjCWritebackConversion = S.getLangOpts().ObjCAutoRefCount && 4977 Entity.isParameterKind(); 4978 4979 // We're at the end of the line for C: it's either a write-back conversion 4980 // or it's a C assignment. There's no need to check anything else. 4981 if (!S.getLangOpts().CPlusPlus) { 4982 // If allowed, check whether this is an Objective-C writeback conversion. 4983 if (allowObjCWritebackConversion && 4984 tryObjCWritebackConversion(S, *this, Entity, Initializer)) { 4985 return; 4986 } 4987 4988 if (TryOCLSamplerInitialization(S, *this, DestType, Initializer)) 4989 return; 4990 4991 if (TryOCLZeroEventInitialization(S, *this, DestType, Initializer)) 4992 return; 4993 4994 // Handle initialization in C 4995 AddCAssignmentStep(DestType); 4996 MaybeProduceObjCObject(S, *this, Entity); 4997 return; 4998 } 4999 5000 assert(S.getLangOpts().CPlusPlus); 5001 5002 // - If the destination type is a (possibly cv-qualified) class type: 5003 if (DestType->isRecordType()) { 5004 // - If the initialization is direct-initialization, or if it is 5005 // copy-initialization where the cv-unqualified version of the 5006 // source type is the same class as, or a derived class of, the 5007 // class of the destination, constructors are considered. [...] 5008 if (Kind.getKind() == InitializationKind::IK_Direct || 5009 (Kind.getKind() == InitializationKind::IK_Copy && 5010 (Context.hasSameUnqualifiedType(SourceType, DestType) || 5011 S.IsDerivedFrom(Initializer->getLocStart(), SourceType, DestType)))) 5012 TryConstructorInitialization(S, Entity, Kind, Args, 5013 DestType, *this); 5014 // - Otherwise (i.e., for the remaining copy-initialization cases), 5015 // user-defined conversion sequences that can convert from the source 5016 // type to the destination type or (when a conversion function is 5017 // used) to a derived class thereof are enumerated as described in 5018 // 13.3.1.4, and the best one is chosen through overload resolution 5019 // (13.3). 5020 else 5021 TryUserDefinedConversion(S, DestType, Kind, Initializer, *this, 5022 TopLevelOfInitList); 5023 return; 5024 } 5025 5026 if (Args.size() > 1) { 5027 SetFailed(FK_TooManyInitsForScalar); 5028 return; 5029 } 5030 assert(Args.size() == 1 && "Zero-argument case handled above"); 5031 5032 // - Otherwise, if the source type is a (possibly cv-qualified) class 5033 // type, conversion functions are considered. 5034 if (!SourceType.isNull() && SourceType->isRecordType()) { 5035 // For a conversion to _Atomic(T) from either T or a class type derived 5036 // from T, initialize the T object then convert to _Atomic type. 5037 bool NeedAtomicConversion = false; 5038 if (const AtomicType *Atomic = DestType->getAs<AtomicType>()) { 5039 if (Context.hasSameUnqualifiedType(SourceType, Atomic->getValueType()) || 5040 S.IsDerivedFrom(Initializer->getLocStart(), SourceType, 5041 Atomic->getValueType())) { 5042 DestType = Atomic->getValueType(); 5043 NeedAtomicConversion = true; 5044 } 5045 } 5046 5047 TryUserDefinedConversion(S, DestType, Kind, Initializer, *this, 5048 TopLevelOfInitList); 5049 MaybeProduceObjCObject(S, *this, Entity); 5050 if (!Failed() && NeedAtomicConversion) 5051 AddAtomicConversionStep(Entity.getType()); 5052 return; 5053 } 5054 5055 // - Otherwise, the initial value of the object being initialized is the 5056 // (possibly converted) value of the initializer expression. Standard 5057 // conversions (Clause 4) will be used, if necessary, to convert the 5058 // initializer expression to the cv-unqualified version of the 5059 // destination type; no user-defined conversions are considered. 5060 5061 ImplicitConversionSequence ICS 5062 = S.TryImplicitConversion(Initializer, DestType, 5063 /*SuppressUserConversions*/true, 5064 /*AllowExplicitConversions*/ false, 5065 /*InOverloadResolution*/ false, 5066 /*CStyle=*/Kind.isCStyleOrFunctionalCast(), 5067 allowObjCWritebackConversion); 5068 5069 if (ICS.isStandard() && 5070 ICS.Standard.Second == ICK_Writeback_Conversion) { 5071 // Objective-C ARC writeback conversion. 5072 5073 // We should copy unless we're passing to an argument explicitly 5074 // marked 'out'. 5075 bool ShouldCopy = true; 5076 if (ParmVarDecl *Param = cast_or_null<ParmVarDecl>(Entity.getDecl())) 5077 ShouldCopy = (Param->getObjCDeclQualifier() != ParmVarDecl::OBJC_TQ_Out); 5078 5079 // If there was an lvalue adjustment, add it as a separate conversion. 5080 if (ICS.Standard.First == ICK_Array_To_Pointer || 5081 ICS.Standard.First == ICK_Lvalue_To_Rvalue) { 5082 ImplicitConversionSequence LvalueICS; 5083 LvalueICS.setStandard(); 5084 LvalueICS.Standard.setAsIdentityConversion(); 5085 LvalueICS.Standard.setAllToTypes(ICS.Standard.getToType(0)); 5086 LvalueICS.Standard.First = ICS.Standard.First; 5087 AddConversionSequenceStep(LvalueICS, ICS.Standard.getToType(0)); 5088 } 5089 5090 AddPassByIndirectCopyRestoreStep(DestType, ShouldCopy); 5091 } else if (ICS.isBad()) { 5092 DeclAccessPair dap; 5093 if (isLibstdcxxPointerReturnFalseHack(S, Entity, Initializer)) { 5094 AddZeroInitializationStep(Entity.getType()); 5095 } else if (Initializer->getType() == Context.OverloadTy && 5096 !S.ResolveAddressOfOverloadedFunction(Initializer, DestType, 5097 false, dap)) 5098 SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 5099 else if (Initializer->getType()->isFunctionType() && 5100 isExprAnUnaddressableFunction(S, Initializer)) 5101 SetFailed(InitializationSequence::FK_AddressOfUnaddressableFunction); 5102 else 5103 SetFailed(InitializationSequence::FK_ConversionFailed); 5104 } else { 5105 AddConversionSequenceStep(ICS, DestType, TopLevelOfInitList); 5106 5107 MaybeProduceObjCObject(S, *this, Entity); 5108 } 5109 } 5110 5111 InitializationSequence::~InitializationSequence() { 5112 for (auto &S : Steps) 5113 S.Destroy(); 5114 } 5115 5116 //===----------------------------------------------------------------------===// 5117 // Perform initialization 5118 //===----------------------------------------------------------------------===// 5119 static Sema::AssignmentAction 5120 getAssignmentAction(const InitializedEntity &Entity, bool Diagnose = false) { 5121 switch(Entity.getKind()) { 5122 case InitializedEntity::EK_Variable: 5123 case InitializedEntity::EK_New: 5124 case InitializedEntity::EK_Exception: 5125 case InitializedEntity::EK_Base: 5126 case InitializedEntity::EK_Delegating: 5127 return Sema::AA_Initializing; 5128 5129 case InitializedEntity::EK_Parameter: 5130 if (Entity.getDecl() && 5131 isa<ObjCMethodDecl>(Entity.getDecl()->getDeclContext())) 5132 return Sema::AA_Sending; 5133 5134 return Sema::AA_Passing; 5135 5136 case InitializedEntity::EK_Parameter_CF_Audited: 5137 if (Entity.getDecl() && 5138 isa<ObjCMethodDecl>(Entity.getDecl()->getDeclContext())) 5139 return Sema::AA_Sending; 5140 5141 return !Diagnose ? Sema::AA_Passing : Sema::AA_Passing_CFAudited; 5142 5143 case InitializedEntity::EK_Result: 5144 return Sema::AA_Returning; 5145 5146 case InitializedEntity::EK_Temporary: 5147 case InitializedEntity::EK_RelatedResult: 5148 // FIXME: Can we tell apart casting vs. converting? 5149 return Sema::AA_Casting; 5150 5151 case InitializedEntity::EK_Member: 5152 case InitializedEntity::EK_ArrayElement: 5153 case InitializedEntity::EK_VectorElement: 5154 case InitializedEntity::EK_ComplexElement: 5155 case InitializedEntity::EK_BlockElement: 5156 case InitializedEntity::EK_LambdaCapture: 5157 case InitializedEntity::EK_CompoundLiteralInit: 5158 return Sema::AA_Initializing; 5159 } 5160 5161 llvm_unreachable("Invalid EntityKind!"); 5162 } 5163 5164 /// \brief Whether we should bind a created object as a temporary when 5165 /// initializing the given entity. 5166 static bool shouldBindAsTemporary(const InitializedEntity &Entity) { 5167 switch (Entity.getKind()) { 5168 case InitializedEntity::EK_ArrayElement: 5169 case InitializedEntity::EK_Member: 5170 case InitializedEntity::EK_Result: 5171 case InitializedEntity::EK_New: 5172 case InitializedEntity::EK_Variable: 5173 case InitializedEntity::EK_Base: 5174 case InitializedEntity::EK_Delegating: 5175 case InitializedEntity::EK_VectorElement: 5176 case InitializedEntity::EK_ComplexElement: 5177 case InitializedEntity::EK_Exception: 5178 case InitializedEntity::EK_BlockElement: 5179 case InitializedEntity::EK_LambdaCapture: 5180 case InitializedEntity::EK_CompoundLiteralInit: 5181 return false; 5182 5183 case InitializedEntity::EK_Parameter: 5184 case InitializedEntity::EK_Parameter_CF_Audited: 5185 case InitializedEntity::EK_Temporary: 5186 case InitializedEntity::EK_RelatedResult: 5187 return true; 5188 } 5189 5190 llvm_unreachable("missed an InitializedEntity kind?"); 5191 } 5192 5193 /// \brief Whether the given entity, when initialized with an object 5194 /// created for that initialization, requires destruction. 5195 static bool shouldDestroyTemporary(const InitializedEntity &Entity) { 5196 switch (Entity.getKind()) { 5197 case InitializedEntity::EK_Result: 5198 case InitializedEntity::EK_New: 5199 case InitializedEntity::EK_Base: 5200 case InitializedEntity::EK_Delegating: 5201 case InitializedEntity::EK_VectorElement: 5202 case InitializedEntity::EK_ComplexElement: 5203 case InitializedEntity::EK_BlockElement: 5204 case InitializedEntity::EK_LambdaCapture: 5205 return false; 5206 5207 case InitializedEntity::EK_Member: 5208 case InitializedEntity::EK_Variable: 5209 case InitializedEntity::EK_Parameter: 5210 case InitializedEntity::EK_Parameter_CF_Audited: 5211 case InitializedEntity::EK_Temporary: 5212 case InitializedEntity::EK_ArrayElement: 5213 case InitializedEntity::EK_Exception: 5214 case InitializedEntity::EK_CompoundLiteralInit: 5215 case InitializedEntity::EK_RelatedResult: 5216 return true; 5217 } 5218 5219 llvm_unreachable("missed an InitializedEntity kind?"); 5220 } 5221 5222 /// \brief Look for copy and move constructors and constructor templates, for 5223 /// copying an object via direct-initialization (per C++11 [dcl.init]p16). 5224 static void LookupCopyAndMoveConstructors(Sema &S, 5225 OverloadCandidateSet &CandidateSet, 5226 CXXRecordDecl *Class, 5227 Expr *CurInitExpr) { 5228 DeclContext::lookup_result R = S.LookupConstructors(Class); 5229 // The container holding the constructors can under certain conditions 5230 // be changed while iterating (e.g. because of deserialization). 5231 // To be safe we copy the lookup results to a new container. 5232 SmallVector<NamedDecl*, 16> Ctors(R.begin(), R.end()); 5233 for (SmallVectorImpl<NamedDecl *>::iterator 5234 CI = Ctors.begin(), CE = Ctors.end(); CI != CE; ++CI) { 5235 NamedDecl *D = *CI; 5236 CXXConstructorDecl *Constructor = nullptr; 5237 5238 if ((Constructor = dyn_cast<CXXConstructorDecl>(D))) { 5239 // Handle copy/moveconstructors, only. 5240 if (!Constructor || Constructor->isInvalidDecl() || 5241 !Constructor->isCopyOrMoveConstructor() || 5242 !Constructor->isConvertingConstructor(/*AllowExplicit=*/true)) 5243 continue; 5244 5245 DeclAccessPair FoundDecl 5246 = DeclAccessPair::make(Constructor, Constructor->getAccess()); 5247 S.AddOverloadCandidate(Constructor, FoundDecl, 5248 CurInitExpr, CandidateSet); 5249 continue; 5250 } 5251 5252 // Handle constructor templates. 5253 FunctionTemplateDecl *ConstructorTmpl = cast<FunctionTemplateDecl>(D); 5254 if (ConstructorTmpl->isInvalidDecl()) 5255 continue; 5256 5257 Constructor = cast<CXXConstructorDecl>( 5258 ConstructorTmpl->getTemplatedDecl()); 5259 if (!Constructor->isConvertingConstructor(/*AllowExplicit=*/true)) 5260 continue; 5261 5262 // FIXME: Do we need to limit this to copy-constructor-like 5263 // candidates? 5264 DeclAccessPair FoundDecl 5265 = DeclAccessPair::make(ConstructorTmpl, ConstructorTmpl->getAccess()); 5266 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, nullptr, 5267 CurInitExpr, CandidateSet, true); 5268 } 5269 } 5270 5271 /// \brief Get the location at which initialization diagnostics should appear. 5272 static SourceLocation getInitializationLoc(const InitializedEntity &Entity, 5273 Expr *Initializer) { 5274 switch (Entity.getKind()) { 5275 case InitializedEntity::EK_Result: 5276 return Entity.getReturnLoc(); 5277 5278 case InitializedEntity::EK_Exception: 5279 return Entity.getThrowLoc(); 5280 5281 case InitializedEntity::EK_Variable: 5282 return Entity.getDecl()->getLocation(); 5283 5284 case InitializedEntity::EK_LambdaCapture: 5285 return Entity.getCaptureLoc(); 5286 5287 case InitializedEntity::EK_ArrayElement: 5288 case InitializedEntity::EK_Member: 5289 case InitializedEntity::EK_Parameter: 5290 case InitializedEntity::EK_Parameter_CF_Audited: 5291 case InitializedEntity::EK_Temporary: 5292 case InitializedEntity::EK_New: 5293 case InitializedEntity::EK_Base: 5294 case InitializedEntity::EK_Delegating: 5295 case InitializedEntity::EK_VectorElement: 5296 case InitializedEntity::EK_ComplexElement: 5297 case InitializedEntity::EK_BlockElement: 5298 case InitializedEntity::EK_CompoundLiteralInit: 5299 case InitializedEntity::EK_RelatedResult: 5300 return Initializer->getLocStart(); 5301 } 5302 llvm_unreachable("missed an InitializedEntity kind?"); 5303 } 5304 5305 /// \brief Make a (potentially elidable) temporary copy of the object 5306 /// provided by the given initializer by calling the appropriate copy 5307 /// constructor. 5308 /// 5309 /// \param S The Sema object used for type-checking. 5310 /// 5311 /// \param T The type of the temporary object, which must either be 5312 /// the type of the initializer expression or a superclass thereof. 5313 /// 5314 /// \param Entity The entity being initialized. 5315 /// 5316 /// \param CurInit The initializer expression. 5317 /// 5318 /// \param IsExtraneousCopy Whether this is an "extraneous" copy that 5319 /// is permitted in C++03 (but not C++0x) when binding a reference to 5320 /// an rvalue. 5321 /// 5322 /// \returns An expression that copies the initializer expression into 5323 /// a temporary object, or an error expression if a copy could not be 5324 /// created. 5325 static ExprResult CopyObject(Sema &S, 5326 QualType T, 5327 const InitializedEntity &Entity, 5328 ExprResult CurInit, 5329 bool IsExtraneousCopy) { 5330 if (CurInit.isInvalid()) 5331 return CurInit; 5332 // Determine which class type we're copying to. 5333 Expr *CurInitExpr = (Expr *)CurInit.get(); 5334 CXXRecordDecl *Class = nullptr; 5335 if (const RecordType *Record = T->getAs<RecordType>()) 5336 Class = cast<CXXRecordDecl>(Record->getDecl()); 5337 if (!Class) 5338 return CurInit; 5339 5340 // C++0x [class.copy]p32: 5341 // When certain criteria are met, an implementation is allowed to 5342 // omit the copy/move construction of a class object, even if the 5343 // copy/move constructor and/or destructor for the object have 5344 // side effects. [...] 5345 // - when a temporary class object that has not been bound to a 5346 // reference (12.2) would be copied/moved to a class object 5347 // with the same cv-unqualified type, the copy/move operation 5348 // can be omitted by constructing the temporary object 5349 // directly into the target of the omitted copy/move 5350 // 5351 // Note that the other three bullets are handled elsewhere. Copy 5352 // elision for return statements and throw expressions are handled as part 5353 // of constructor initialization, while copy elision for exception handlers 5354 // is handled by the run-time. 5355 bool Elidable = CurInitExpr->isTemporaryObject(S.Context, Class); 5356 SourceLocation Loc = getInitializationLoc(Entity, CurInit.get()); 5357 5358 // Make sure that the type we are copying is complete. 5359 if (S.RequireCompleteType(Loc, T, diag::err_temp_copy_incomplete)) 5360 return CurInit; 5361 5362 // Perform overload resolution using the class's copy/move constructors. 5363 // Only consider constructors and constructor templates. Per 5364 // C++0x [dcl.init]p16, second bullet to class types, this initialization 5365 // is direct-initialization. 5366 OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal); 5367 LookupCopyAndMoveConstructors(S, CandidateSet, Class, CurInitExpr); 5368 5369 bool HadMultipleCandidates = (CandidateSet.size() > 1); 5370 5371 OverloadCandidateSet::iterator Best; 5372 switch (CandidateSet.BestViableFunction(S, Loc, Best)) { 5373 case OR_Success: 5374 break; 5375 5376 case OR_No_Viable_Function: 5377 S.Diag(Loc, IsExtraneousCopy && !S.isSFINAEContext() 5378 ? diag::ext_rvalue_to_reference_temp_copy_no_viable 5379 : diag::err_temp_copy_no_viable) 5380 << (int)Entity.getKind() << CurInitExpr->getType() 5381 << CurInitExpr->getSourceRange(); 5382 CandidateSet.NoteCandidates(S, OCD_AllCandidates, CurInitExpr); 5383 if (!IsExtraneousCopy || S.isSFINAEContext()) 5384 return ExprError(); 5385 return CurInit; 5386 5387 case OR_Ambiguous: 5388 S.Diag(Loc, diag::err_temp_copy_ambiguous) 5389 << (int)Entity.getKind() << CurInitExpr->getType() 5390 << CurInitExpr->getSourceRange(); 5391 CandidateSet.NoteCandidates(S, OCD_ViableCandidates, CurInitExpr); 5392 return ExprError(); 5393 5394 case OR_Deleted: 5395 S.Diag(Loc, diag::err_temp_copy_deleted) 5396 << (int)Entity.getKind() << CurInitExpr->getType() 5397 << CurInitExpr->getSourceRange(); 5398 S.NoteDeletedFunction(Best->Function); 5399 return ExprError(); 5400 } 5401 5402 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function); 5403 SmallVector<Expr*, 8> ConstructorArgs; 5404 CurInit.get(); // Ownership transferred into MultiExprArg, below. 5405 5406 S.CheckConstructorAccess(Loc, Constructor, Entity, 5407 Best->FoundDecl.getAccess(), IsExtraneousCopy); 5408 5409 if (IsExtraneousCopy) { 5410 // If this is a totally extraneous copy for C++03 reference 5411 // binding purposes, just return the original initialization 5412 // expression. We don't generate an (elided) copy operation here 5413 // because doing so would require us to pass down a flag to avoid 5414 // infinite recursion, where each step adds another extraneous, 5415 // elidable copy. 5416 5417 // Instantiate the default arguments of any extra parameters in 5418 // the selected copy constructor, as if we were going to create a 5419 // proper call to the copy constructor. 5420 for (unsigned I = 1, N = Constructor->getNumParams(); I != N; ++I) { 5421 ParmVarDecl *Parm = Constructor->getParamDecl(I); 5422 if (S.RequireCompleteType(Loc, Parm->getType(), 5423 diag::err_call_incomplete_argument)) 5424 break; 5425 5426 // Build the default argument expression; we don't actually care 5427 // if this succeeds or not, because this routine will complain 5428 // if there was a problem. 5429 S.BuildCXXDefaultArgExpr(Loc, Constructor, Parm); 5430 } 5431 5432 return CurInitExpr; 5433 } 5434 5435 // Determine the arguments required to actually perform the 5436 // constructor call (we might have derived-to-base conversions, or 5437 // the copy constructor may have default arguments). 5438 if (S.CompleteConstructorCall(Constructor, CurInitExpr, Loc, ConstructorArgs)) 5439 return ExprError(); 5440 5441 // Actually perform the constructor call. 5442 CurInit = S.BuildCXXConstructExpr(Loc, T, Constructor, Elidable, 5443 ConstructorArgs, 5444 HadMultipleCandidates, 5445 /*ListInit*/ false, 5446 /*StdInitListInit*/ false, 5447 /*ZeroInit*/ false, 5448 CXXConstructExpr::CK_Complete, 5449 SourceRange()); 5450 5451 // If we're supposed to bind temporaries, do so. 5452 if (!CurInit.isInvalid() && shouldBindAsTemporary(Entity)) 5453 CurInit = S.MaybeBindToTemporary(CurInit.getAs<Expr>()); 5454 return CurInit; 5455 } 5456 5457 /// \brief Check whether elidable copy construction for binding a reference to 5458 /// a temporary would have succeeded if we were building in C++98 mode, for 5459 /// -Wc++98-compat. 5460 static void CheckCXX98CompatAccessibleCopy(Sema &S, 5461 const InitializedEntity &Entity, 5462 Expr *CurInitExpr) { 5463 assert(S.getLangOpts().CPlusPlus11); 5464 5465 const RecordType *Record = CurInitExpr->getType()->getAs<RecordType>(); 5466 if (!Record) 5467 return; 5468 5469 SourceLocation Loc = getInitializationLoc(Entity, CurInitExpr); 5470 if (S.Diags.isIgnored(diag::warn_cxx98_compat_temp_copy, Loc)) 5471 return; 5472 5473 // Find constructors which would have been considered. 5474 OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal); 5475 LookupCopyAndMoveConstructors( 5476 S, CandidateSet, cast<CXXRecordDecl>(Record->getDecl()), CurInitExpr); 5477 5478 // Perform overload resolution. 5479 OverloadCandidateSet::iterator Best; 5480 OverloadingResult OR = CandidateSet.BestViableFunction(S, Loc, Best); 5481 5482 PartialDiagnostic Diag = S.PDiag(diag::warn_cxx98_compat_temp_copy) 5483 << OR << (int)Entity.getKind() << CurInitExpr->getType() 5484 << CurInitExpr->getSourceRange(); 5485 5486 switch (OR) { 5487 case OR_Success: 5488 S.CheckConstructorAccess(Loc, cast<CXXConstructorDecl>(Best->Function), 5489 Entity, Best->FoundDecl.getAccess(), Diag); 5490 // FIXME: Check default arguments as far as that's possible. 5491 break; 5492 5493 case OR_No_Viable_Function: 5494 S.Diag(Loc, Diag); 5495 CandidateSet.NoteCandidates(S, OCD_AllCandidates, CurInitExpr); 5496 break; 5497 5498 case OR_Ambiguous: 5499 S.Diag(Loc, Diag); 5500 CandidateSet.NoteCandidates(S, OCD_ViableCandidates, CurInitExpr); 5501 break; 5502 5503 case OR_Deleted: 5504 S.Diag(Loc, Diag); 5505 S.NoteDeletedFunction(Best->Function); 5506 break; 5507 } 5508 } 5509 5510 void InitializationSequence::PrintInitLocationNote(Sema &S, 5511 const InitializedEntity &Entity) { 5512 if (Entity.isParameterKind() && Entity.getDecl()) { 5513 if (Entity.getDecl()->getLocation().isInvalid()) 5514 return; 5515 5516 if (Entity.getDecl()->getDeclName()) 5517 S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_named_here) 5518 << Entity.getDecl()->getDeclName(); 5519 else 5520 S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_here); 5521 } 5522 else if (Entity.getKind() == InitializedEntity::EK_RelatedResult && 5523 Entity.getMethodDecl()) 5524 S.Diag(Entity.getMethodDecl()->getLocation(), 5525 diag::note_method_return_type_change) 5526 << Entity.getMethodDecl()->getDeclName(); 5527 } 5528 5529 static bool isReferenceBinding(const InitializationSequence::Step &s) { 5530 return s.Kind == InitializationSequence::SK_BindReference || 5531 s.Kind == InitializationSequence::SK_BindReferenceToTemporary; 5532 } 5533 5534 /// Returns true if the parameters describe a constructor initialization of 5535 /// an explicit temporary object, e.g. "Point(x, y)". 5536 static bool isExplicitTemporary(const InitializedEntity &Entity, 5537 const InitializationKind &Kind, 5538 unsigned NumArgs) { 5539 switch (Entity.getKind()) { 5540 case InitializedEntity::EK_Temporary: 5541 case InitializedEntity::EK_CompoundLiteralInit: 5542 case InitializedEntity::EK_RelatedResult: 5543 break; 5544 default: 5545 return false; 5546 } 5547 5548 switch (Kind.getKind()) { 5549 case InitializationKind::IK_DirectList: 5550 return true; 5551 // FIXME: Hack to work around cast weirdness. 5552 case InitializationKind::IK_Direct: 5553 case InitializationKind::IK_Value: 5554 return NumArgs != 1; 5555 default: 5556 return false; 5557 } 5558 } 5559 5560 static ExprResult 5561 PerformConstructorInitialization(Sema &S, 5562 const InitializedEntity &Entity, 5563 const InitializationKind &Kind, 5564 MultiExprArg Args, 5565 const InitializationSequence::Step& Step, 5566 bool &ConstructorInitRequiresZeroInit, 5567 bool IsListInitialization, 5568 bool IsStdInitListInitialization, 5569 SourceLocation LBraceLoc, 5570 SourceLocation RBraceLoc) { 5571 unsigned NumArgs = Args.size(); 5572 CXXConstructorDecl *Constructor 5573 = cast<CXXConstructorDecl>(Step.Function.Function); 5574 bool HadMultipleCandidates = Step.Function.HadMultipleCandidates; 5575 5576 // Build a call to the selected constructor. 5577 SmallVector<Expr*, 8> ConstructorArgs; 5578 SourceLocation Loc = (Kind.isCopyInit() && Kind.getEqualLoc().isValid()) 5579 ? Kind.getEqualLoc() 5580 : Kind.getLocation(); 5581 5582 if (Kind.getKind() == InitializationKind::IK_Default) { 5583 // Force even a trivial, implicit default constructor to be 5584 // semantically checked. We do this explicitly because we don't build 5585 // the definition for completely trivial constructors. 5586 assert(Constructor->getParent() && "No parent class for constructor."); 5587 if (Constructor->isDefaulted() && Constructor->isDefaultConstructor() && 5588 Constructor->isTrivial() && !Constructor->isUsed(false)) 5589 S.DefineImplicitDefaultConstructor(Loc, Constructor); 5590 } 5591 5592 ExprResult CurInit((Expr *)nullptr); 5593 5594 // C++ [over.match.copy]p1: 5595 // - When initializing a temporary to be bound to the first parameter 5596 // of a constructor that takes a reference to possibly cv-qualified 5597 // T as its first argument, called with a single argument in the 5598 // context of direct-initialization, explicit conversion functions 5599 // are also considered. 5600 bool AllowExplicitConv = Kind.AllowExplicit() && !Kind.isCopyInit() && 5601 Args.size() == 1 && 5602 Constructor->isCopyOrMoveConstructor(); 5603 5604 // Determine the arguments required to actually perform the constructor 5605 // call. 5606 if (S.CompleteConstructorCall(Constructor, Args, 5607 Loc, ConstructorArgs, 5608 AllowExplicitConv, 5609 IsListInitialization)) 5610 return ExprError(); 5611 5612 5613 if (isExplicitTemporary(Entity, Kind, NumArgs)) { 5614 // An explicitly-constructed temporary, e.g., X(1, 2). 5615 S.MarkFunctionReferenced(Loc, Constructor); 5616 if (S.DiagnoseUseOfDecl(Constructor, Loc)) 5617 return ExprError(); 5618 5619 TypeSourceInfo *TSInfo = Entity.getTypeSourceInfo(); 5620 if (!TSInfo) 5621 TSInfo = S.Context.getTrivialTypeSourceInfo(Entity.getType(), Loc); 5622 SourceRange ParenOrBraceRange = 5623 (Kind.getKind() == InitializationKind::IK_DirectList) 5624 ? SourceRange(LBraceLoc, RBraceLoc) 5625 : Kind.getParenRange(); 5626 5627 CurInit = new (S.Context) CXXTemporaryObjectExpr( 5628 S.Context, Constructor, TSInfo, ConstructorArgs, ParenOrBraceRange, 5629 HadMultipleCandidates, IsListInitialization, 5630 IsStdInitListInitialization, ConstructorInitRequiresZeroInit); 5631 } else { 5632 CXXConstructExpr::ConstructionKind ConstructKind = 5633 CXXConstructExpr::CK_Complete; 5634 5635 if (Entity.getKind() == InitializedEntity::EK_Base) { 5636 ConstructKind = Entity.getBaseSpecifier()->isVirtual() ? 5637 CXXConstructExpr::CK_VirtualBase : 5638 CXXConstructExpr::CK_NonVirtualBase; 5639 } else if (Entity.getKind() == InitializedEntity::EK_Delegating) { 5640 ConstructKind = CXXConstructExpr::CK_Delegating; 5641 } 5642 5643 // Only get the parenthesis or brace range if it is a list initialization or 5644 // direct construction. 5645 SourceRange ParenOrBraceRange; 5646 if (IsListInitialization) 5647 ParenOrBraceRange = SourceRange(LBraceLoc, RBraceLoc); 5648 else if (Kind.getKind() == InitializationKind::IK_Direct) 5649 ParenOrBraceRange = Kind.getParenRange(); 5650 5651 // If the entity allows NRVO, mark the construction as elidable 5652 // unconditionally. 5653 if (Entity.allowsNRVO()) 5654 CurInit = S.BuildCXXConstructExpr(Loc, Entity.getType(), 5655 Constructor, /*Elidable=*/true, 5656 ConstructorArgs, 5657 HadMultipleCandidates, 5658 IsListInitialization, 5659 IsStdInitListInitialization, 5660 ConstructorInitRequiresZeroInit, 5661 ConstructKind, 5662 ParenOrBraceRange); 5663 else 5664 CurInit = S.BuildCXXConstructExpr(Loc, Entity.getType(), 5665 Constructor, 5666 ConstructorArgs, 5667 HadMultipleCandidates, 5668 IsListInitialization, 5669 IsStdInitListInitialization, 5670 ConstructorInitRequiresZeroInit, 5671 ConstructKind, 5672 ParenOrBraceRange); 5673 } 5674 if (CurInit.isInvalid()) 5675 return ExprError(); 5676 5677 // Only check access if all of that succeeded. 5678 S.CheckConstructorAccess(Loc, Constructor, Entity, 5679 Step.Function.FoundDecl.getAccess()); 5680 if (S.DiagnoseUseOfDecl(Step.Function.FoundDecl, Loc)) 5681 return ExprError(); 5682 5683 if (shouldBindAsTemporary(Entity)) 5684 CurInit = S.MaybeBindToTemporary(CurInit.get()); 5685 5686 return CurInit; 5687 } 5688 5689 /// Determine whether the specified InitializedEntity definitely has a lifetime 5690 /// longer than the current full-expression. Conservatively returns false if 5691 /// it's unclear. 5692 static bool 5693 InitializedEntityOutlivesFullExpression(const InitializedEntity &Entity) { 5694 const InitializedEntity *Top = &Entity; 5695 while (Top->getParent()) 5696 Top = Top->getParent(); 5697 5698 switch (Top->getKind()) { 5699 case InitializedEntity::EK_Variable: 5700 case InitializedEntity::EK_Result: 5701 case InitializedEntity::EK_Exception: 5702 case InitializedEntity::EK_Member: 5703 case InitializedEntity::EK_New: 5704 case InitializedEntity::EK_Base: 5705 case InitializedEntity::EK_Delegating: 5706 return true; 5707 5708 case InitializedEntity::EK_ArrayElement: 5709 case InitializedEntity::EK_VectorElement: 5710 case InitializedEntity::EK_BlockElement: 5711 case InitializedEntity::EK_ComplexElement: 5712 // Could not determine what the full initialization is. Assume it might not 5713 // outlive the full-expression. 5714 return false; 5715 5716 case InitializedEntity::EK_Parameter: 5717 case InitializedEntity::EK_Parameter_CF_Audited: 5718 case InitializedEntity::EK_Temporary: 5719 case InitializedEntity::EK_LambdaCapture: 5720 case InitializedEntity::EK_CompoundLiteralInit: 5721 case InitializedEntity::EK_RelatedResult: 5722 // The entity being initialized might not outlive the full-expression. 5723 return false; 5724 } 5725 5726 llvm_unreachable("unknown entity kind"); 5727 } 5728 5729 /// Determine the declaration which an initialized entity ultimately refers to, 5730 /// for the purpose of lifetime-extending a temporary bound to a reference in 5731 /// the initialization of \p Entity. 5732 static const InitializedEntity *getEntityForTemporaryLifetimeExtension( 5733 const InitializedEntity *Entity, 5734 const InitializedEntity *FallbackDecl = nullptr) { 5735 // C++11 [class.temporary]p5: 5736 switch (Entity->getKind()) { 5737 case InitializedEntity::EK_Variable: 5738 // The temporary [...] persists for the lifetime of the reference 5739 return Entity; 5740 5741 case InitializedEntity::EK_Member: 5742 // For subobjects, we look at the complete object. 5743 if (Entity->getParent()) 5744 return getEntityForTemporaryLifetimeExtension(Entity->getParent(), 5745 Entity); 5746 5747 // except: 5748 // -- A temporary bound to a reference member in a constructor's 5749 // ctor-initializer persists until the constructor exits. 5750 return Entity; 5751 5752 case InitializedEntity::EK_Parameter: 5753 case InitializedEntity::EK_Parameter_CF_Audited: 5754 // -- A temporary bound to a reference parameter in a function call 5755 // persists until the completion of the full-expression containing 5756 // the call. 5757 case InitializedEntity::EK_Result: 5758 // -- The lifetime of a temporary bound to the returned value in a 5759 // function return statement is not extended; the temporary is 5760 // destroyed at the end of the full-expression in the return statement. 5761 case InitializedEntity::EK_New: 5762 // -- A temporary bound to a reference in a new-initializer persists 5763 // until the completion of the full-expression containing the 5764 // new-initializer. 5765 return nullptr; 5766 5767 case InitializedEntity::EK_Temporary: 5768 case InitializedEntity::EK_CompoundLiteralInit: 5769 case InitializedEntity::EK_RelatedResult: 5770 // We don't yet know the storage duration of the surrounding temporary. 5771 // Assume it's got full-expression duration for now, it will patch up our 5772 // storage duration if that's not correct. 5773 return nullptr; 5774 5775 case InitializedEntity::EK_ArrayElement: 5776 // For subobjects, we look at the complete object. 5777 return getEntityForTemporaryLifetimeExtension(Entity->getParent(), 5778 FallbackDecl); 5779 5780 case InitializedEntity::EK_Base: 5781 case InitializedEntity::EK_Delegating: 5782 // We can reach this case for aggregate initialization in a constructor: 5783 // struct A { int &&r; }; 5784 // struct B : A { B() : A{0} {} }; 5785 // In this case, use the innermost field decl as the context. 5786 return FallbackDecl; 5787 5788 case InitializedEntity::EK_BlockElement: 5789 case InitializedEntity::EK_LambdaCapture: 5790 case InitializedEntity::EK_Exception: 5791 case InitializedEntity::EK_VectorElement: 5792 case InitializedEntity::EK_ComplexElement: 5793 return nullptr; 5794 } 5795 llvm_unreachable("unknown entity kind"); 5796 } 5797 5798 static void performLifetimeExtension(Expr *Init, 5799 const InitializedEntity *ExtendingEntity); 5800 5801 /// Update a glvalue expression that is used as the initializer of a reference 5802 /// to note that its lifetime is extended. 5803 /// \return \c true if any temporary had its lifetime extended. 5804 static bool 5805 performReferenceExtension(Expr *Init, 5806 const InitializedEntity *ExtendingEntity) { 5807 // Walk past any constructs which we can lifetime-extend across. 5808 Expr *Old; 5809 do { 5810 Old = Init; 5811 5812 if (InitListExpr *ILE = dyn_cast<InitListExpr>(Init)) { 5813 if (ILE->getNumInits() == 1 && ILE->isGLValue()) { 5814 // This is just redundant braces around an initializer. Step over it. 5815 Init = ILE->getInit(0); 5816 } 5817 } 5818 5819 // Step over any subobject adjustments; we may have a materialized 5820 // temporary inside them. 5821 SmallVector<const Expr *, 2> CommaLHSs; 5822 SmallVector<SubobjectAdjustment, 2> Adjustments; 5823 Init = const_cast<Expr *>( 5824 Init->skipRValueSubobjectAdjustments(CommaLHSs, Adjustments)); 5825 5826 // Per current approach for DR1376, look through casts to reference type 5827 // when performing lifetime extension. 5828 if (CastExpr *CE = dyn_cast<CastExpr>(Init)) 5829 if (CE->getSubExpr()->isGLValue()) 5830 Init = CE->getSubExpr(); 5831 5832 // FIXME: Per DR1213, subscripting on an array temporary produces an xvalue. 5833 // It's unclear if binding a reference to that xvalue extends the array 5834 // temporary. 5835 } while (Init != Old); 5836 5837 if (MaterializeTemporaryExpr *ME = dyn_cast<MaterializeTemporaryExpr>(Init)) { 5838 // Update the storage duration of the materialized temporary. 5839 // FIXME: Rebuild the expression instead of mutating it. 5840 ME->setExtendingDecl(ExtendingEntity->getDecl(), 5841 ExtendingEntity->allocateManglingNumber()); 5842 performLifetimeExtension(ME->GetTemporaryExpr(), ExtendingEntity); 5843 return true; 5844 } 5845 5846 return false; 5847 } 5848 5849 /// Update a prvalue expression that is going to be materialized as a 5850 /// lifetime-extended temporary. 5851 static void performLifetimeExtension(Expr *Init, 5852 const InitializedEntity *ExtendingEntity) { 5853 // Dig out the expression which constructs the extended temporary. 5854 SmallVector<const Expr *, 2> CommaLHSs; 5855 SmallVector<SubobjectAdjustment, 2> Adjustments; 5856 Init = const_cast<Expr *>( 5857 Init->skipRValueSubobjectAdjustments(CommaLHSs, Adjustments)); 5858 5859 if (CXXBindTemporaryExpr *BTE = dyn_cast<CXXBindTemporaryExpr>(Init)) 5860 Init = BTE->getSubExpr(); 5861 5862 if (CXXStdInitializerListExpr *ILE = 5863 dyn_cast<CXXStdInitializerListExpr>(Init)) { 5864 performReferenceExtension(ILE->getSubExpr(), ExtendingEntity); 5865 return; 5866 } 5867 5868 if (InitListExpr *ILE = dyn_cast<InitListExpr>(Init)) { 5869 if (ILE->getType()->isArrayType()) { 5870 for (unsigned I = 0, N = ILE->getNumInits(); I != N; ++I) 5871 performLifetimeExtension(ILE->getInit(I), ExtendingEntity); 5872 return; 5873 } 5874 5875 if (CXXRecordDecl *RD = ILE->getType()->getAsCXXRecordDecl()) { 5876 assert(RD->isAggregate() && "aggregate init on non-aggregate"); 5877 5878 // If we lifetime-extend a braced initializer which is initializing an 5879 // aggregate, and that aggregate contains reference members which are 5880 // bound to temporaries, those temporaries are also lifetime-extended. 5881 if (RD->isUnion() && ILE->getInitializedFieldInUnion() && 5882 ILE->getInitializedFieldInUnion()->getType()->isReferenceType()) 5883 performReferenceExtension(ILE->getInit(0), ExtendingEntity); 5884 else { 5885 unsigned Index = 0; 5886 for (const auto *I : RD->fields()) { 5887 if (Index >= ILE->getNumInits()) 5888 break; 5889 if (I->isUnnamedBitfield()) 5890 continue; 5891 Expr *SubInit = ILE->getInit(Index); 5892 if (I->getType()->isReferenceType()) 5893 performReferenceExtension(SubInit, ExtendingEntity); 5894 else if (isa<InitListExpr>(SubInit) || 5895 isa<CXXStdInitializerListExpr>(SubInit)) 5896 // This may be either aggregate-initialization of a member or 5897 // initialization of a std::initializer_list object. Either way, 5898 // we should recursively lifetime-extend that initializer. 5899 performLifetimeExtension(SubInit, ExtendingEntity); 5900 ++Index; 5901 } 5902 } 5903 } 5904 } 5905 } 5906 5907 static void warnOnLifetimeExtension(Sema &S, const InitializedEntity &Entity, 5908 const Expr *Init, bool IsInitializerList, 5909 const ValueDecl *ExtendingDecl) { 5910 // Warn if a field lifetime-extends a temporary. 5911 if (isa<FieldDecl>(ExtendingDecl)) { 5912 if (IsInitializerList) { 5913 S.Diag(Init->getExprLoc(), diag::warn_dangling_std_initializer_list) 5914 << /*at end of constructor*/true; 5915 return; 5916 } 5917 5918 bool IsSubobjectMember = false; 5919 for (const InitializedEntity *Ent = Entity.getParent(); Ent; 5920 Ent = Ent->getParent()) { 5921 if (Ent->getKind() != InitializedEntity::EK_Base) { 5922 IsSubobjectMember = true; 5923 break; 5924 } 5925 } 5926 S.Diag(Init->getExprLoc(), 5927 diag::warn_bind_ref_member_to_temporary) 5928 << ExtendingDecl << Init->getSourceRange() 5929 << IsSubobjectMember << IsInitializerList; 5930 if (IsSubobjectMember) 5931 S.Diag(ExtendingDecl->getLocation(), 5932 diag::note_ref_subobject_of_member_declared_here); 5933 else 5934 S.Diag(ExtendingDecl->getLocation(), 5935 diag::note_ref_or_ptr_member_declared_here) 5936 << /*is pointer*/false; 5937 } 5938 } 5939 5940 static void DiagnoseNarrowingInInitList(Sema &S, 5941 const ImplicitConversionSequence &ICS, 5942 QualType PreNarrowingType, 5943 QualType EntityType, 5944 const Expr *PostInit); 5945 5946 /// Provide warnings when std::move is used on construction. 5947 static void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, 5948 bool IsReturnStmt) { 5949 if (!InitExpr) 5950 return; 5951 5952 if (!S.ActiveTemplateInstantiations.empty()) 5953 return; 5954 5955 QualType DestType = InitExpr->getType(); 5956 if (!DestType->isRecordType()) 5957 return; 5958 5959 unsigned DiagID = 0; 5960 if (IsReturnStmt) { 5961 const CXXConstructExpr *CCE = 5962 dyn_cast<CXXConstructExpr>(InitExpr->IgnoreParens()); 5963 if (!CCE || CCE->getNumArgs() != 1) 5964 return; 5965 5966 if (!CCE->getConstructor()->isCopyOrMoveConstructor()) 5967 return; 5968 5969 InitExpr = CCE->getArg(0)->IgnoreImpCasts(); 5970 } 5971 5972 // Find the std::move call and get the argument. 5973 const CallExpr *CE = dyn_cast<CallExpr>(InitExpr->IgnoreParens()); 5974 if (!CE || CE->getNumArgs() != 1) 5975 return; 5976 5977 const FunctionDecl *MoveFunction = CE->getDirectCallee(); 5978 if (!MoveFunction || !MoveFunction->isInStdNamespace() || 5979 !MoveFunction->getIdentifier() || 5980 !MoveFunction->getIdentifier()->isStr("move")) 5981 return; 5982 5983 const Expr *Arg = CE->getArg(0)->IgnoreImplicit(); 5984 5985 if (IsReturnStmt) { 5986 const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Arg->IgnoreParenImpCasts()); 5987 if (!DRE || DRE->refersToEnclosingVariableOrCapture()) 5988 return; 5989 5990 const VarDecl *VD = dyn_cast<VarDecl>(DRE->getDecl()); 5991 if (!VD || !VD->hasLocalStorage()) 5992 return; 5993 5994 QualType SourceType = VD->getType(); 5995 if (!SourceType->isRecordType()) 5996 return; 5997 5998 if (!S.Context.hasSameUnqualifiedType(DestType, SourceType)) { 5999 return; 6000 } 6001 6002 // If we're returning a function parameter, copy elision 6003 // is not possible. 6004 if (isa<ParmVarDecl>(VD)) 6005 DiagID = diag::warn_redundant_move_on_return; 6006 else 6007 DiagID = diag::warn_pessimizing_move_on_return; 6008 } else { 6009 DiagID = diag::warn_pessimizing_move_on_initialization; 6010 const Expr *ArgStripped = Arg->IgnoreImplicit()->IgnoreParens(); 6011 if (!ArgStripped->isRValue() || !ArgStripped->getType()->isRecordType()) 6012 return; 6013 } 6014 6015 S.Diag(CE->getLocStart(), DiagID); 6016 6017 // Get all the locations for a fix-it. Don't emit the fix-it if any location 6018 // is within a macro. 6019 SourceLocation CallBegin = CE->getCallee()->getLocStart(); 6020 if (CallBegin.isMacroID()) 6021 return; 6022 SourceLocation RParen = CE->getRParenLoc(); 6023 if (RParen.isMacroID()) 6024 return; 6025 SourceLocation LParen; 6026 SourceLocation ArgLoc = Arg->getLocStart(); 6027 6028 // Special testing for the argument location. Since the fix-it needs the 6029 // location right before the argument, the argument location can be in a 6030 // macro only if it is at the beginning of the macro. 6031 while (ArgLoc.isMacroID() && 6032 S.getSourceManager().isAtStartOfImmediateMacroExpansion(ArgLoc)) { 6033 ArgLoc = S.getSourceManager().getImmediateExpansionRange(ArgLoc).first; 6034 } 6035 6036 if (LParen.isMacroID()) 6037 return; 6038 6039 LParen = ArgLoc.getLocWithOffset(-1); 6040 6041 S.Diag(CE->getLocStart(), diag::note_remove_move) 6042 << FixItHint::CreateRemoval(SourceRange(CallBegin, LParen)) 6043 << FixItHint::CreateRemoval(SourceRange(RParen, RParen)); 6044 } 6045 6046 ExprResult 6047 InitializationSequence::Perform(Sema &S, 6048 const InitializedEntity &Entity, 6049 const InitializationKind &Kind, 6050 MultiExprArg Args, 6051 QualType *ResultType) { 6052 if (Failed()) { 6053 Diagnose(S, Entity, Kind, Args); 6054 return ExprError(); 6055 } 6056 if (!ZeroInitializationFixit.empty()) { 6057 unsigned DiagID = diag::err_default_init_const; 6058 if (Decl *D = Entity.getDecl()) 6059 if (S.getLangOpts().MSVCCompat && D->hasAttr<SelectAnyAttr>()) 6060 DiagID = diag::ext_default_init_const; 6061 6062 // The initialization would have succeeded with this fixit. Since the fixit 6063 // is on the error, we need to build a valid AST in this case, so this isn't 6064 // handled in the Failed() branch above. 6065 QualType DestType = Entity.getType(); 6066 S.Diag(Kind.getLocation(), DiagID) 6067 << DestType << (bool)DestType->getAs<RecordType>() 6068 << FixItHint::CreateInsertion(ZeroInitializationFixitLoc, 6069 ZeroInitializationFixit); 6070 } 6071 6072 if (getKind() == DependentSequence) { 6073 // If the declaration is a non-dependent, incomplete array type 6074 // that has an initializer, then its type will be completed once 6075 // the initializer is instantiated. 6076 if (ResultType && !Entity.getType()->isDependentType() && 6077 Args.size() == 1) { 6078 QualType DeclType = Entity.getType(); 6079 if (const IncompleteArrayType *ArrayT 6080 = S.Context.getAsIncompleteArrayType(DeclType)) { 6081 // FIXME: We don't currently have the ability to accurately 6082 // compute the length of an initializer list without 6083 // performing full type-checking of the initializer list 6084 // (since we have to determine where braces are implicitly 6085 // introduced and such). So, we fall back to making the array 6086 // type a dependently-sized array type with no specified 6087 // bound. 6088 if (isa<InitListExpr>((Expr *)Args[0])) { 6089 SourceRange Brackets; 6090 6091 // Scavange the location of the brackets from the entity, if we can. 6092 if (DeclaratorDecl *DD = Entity.getDecl()) { 6093 if (TypeSourceInfo *TInfo = DD->getTypeSourceInfo()) { 6094 TypeLoc TL = TInfo->getTypeLoc(); 6095 if (IncompleteArrayTypeLoc ArrayLoc = 6096 TL.getAs<IncompleteArrayTypeLoc>()) 6097 Brackets = ArrayLoc.getBracketsRange(); 6098 } 6099 } 6100 6101 *ResultType 6102 = S.Context.getDependentSizedArrayType(ArrayT->getElementType(), 6103 /*NumElts=*/nullptr, 6104 ArrayT->getSizeModifier(), 6105 ArrayT->getIndexTypeCVRQualifiers(), 6106 Brackets); 6107 } 6108 6109 } 6110 } 6111 if (Kind.getKind() == InitializationKind::IK_Direct && 6112 !Kind.isExplicitCast()) { 6113 // Rebuild the ParenListExpr. 6114 SourceRange ParenRange = Kind.getParenRange(); 6115 return S.ActOnParenListExpr(ParenRange.getBegin(), ParenRange.getEnd(), 6116 Args); 6117 } 6118 assert(Kind.getKind() == InitializationKind::IK_Copy || 6119 Kind.isExplicitCast() || 6120 Kind.getKind() == InitializationKind::IK_DirectList); 6121 return ExprResult(Args[0]); 6122 } 6123 6124 // No steps means no initialization. 6125 if (Steps.empty()) 6126 return ExprResult((Expr *)nullptr); 6127 6128 if (S.getLangOpts().CPlusPlus11 && Entity.getType()->isReferenceType() && 6129 Args.size() == 1 && isa<InitListExpr>(Args[0]) && 6130 !Entity.isParameterKind()) { 6131 // Produce a C++98 compatibility warning if we are initializing a reference 6132 // from an initializer list. For parameters, we produce a better warning 6133 // elsewhere. 6134 Expr *Init = Args[0]; 6135 S.Diag(Init->getLocStart(), diag::warn_cxx98_compat_reference_list_init) 6136 << Init->getSourceRange(); 6137 } 6138 6139 // Diagnose cases where we initialize a pointer to an array temporary, and the 6140 // pointer obviously outlives the temporary. 6141 if (Args.size() == 1 && Args[0]->getType()->isArrayType() && 6142 Entity.getType()->isPointerType() && 6143 InitializedEntityOutlivesFullExpression(Entity)) { 6144 Expr *Init = Args[0]; 6145 Expr::LValueClassification Kind = Init->ClassifyLValue(S.Context); 6146 if (Kind == Expr::LV_ClassTemporary || Kind == Expr::LV_ArrayTemporary) 6147 S.Diag(Init->getLocStart(), diag::warn_temporary_array_to_pointer_decay) 6148 << Init->getSourceRange(); 6149 } 6150 6151 QualType DestType = Entity.getType().getNonReferenceType(); 6152 // FIXME: Ugly hack around the fact that Entity.getType() is not 6153 // the same as Entity.getDecl()->getType() in cases involving type merging, 6154 // and we want latter when it makes sense. 6155 if (ResultType) 6156 *ResultType = Entity.getDecl() ? Entity.getDecl()->getType() : 6157 Entity.getType(); 6158 6159 ExprResult CurInit((Expr *)nullptr); 6160 6161 // For initialization steps that start with a single initializer, 6162 // grab the only argument out the Args and place it into the "current" 6163 // initializer. 6164 switch (Steps.front().Kind) { 6165 case SK_ResolveAddressOfOverloadedFunction: 6166 case SK_CastDerivedToBaseRValue: 6167 case SK_CastDerivedToBaseXValue: 6168 case SK_CastDerivedToBaseLValue: 6169 case SK_BindReference: 6170 case SK_BindReferenceToTemporary: 6171 case SK_ExtraneousCopyToTemporary: 6172 case SK_UserConversion: 6173 case SK_QualificationConversionLValue: 6174 case SK_QualificationConversionXValue: 6175 case SK_QualificationConversionRValue: 6176 case SK_AtomicConversion: 6177 case SK_LValueToRValue: 6178 case SK_ConversionSequence: 6179 case SK_ConversionSequenceNoNarrowing: 6180 case SK_ListInitialization: 6181 case SK_UnwrapInitList: 6182 case SK_RewrapInitList: 6183 case SK_CAssignment: 6184 case SK_StringInit: 6185 case SK_ObjCObjectConversion: 6186 case SK_ArrayInit: 6187 case SK_ParenthesizedArrayInit: 6188 case SK_PassByIndirectCopyRestore: 6189 case SK_PassByIndirectRestore: 6190 case SK_ProduceObjCObject: 6191 case SK_StdInitializerList: 6192 case SK_OCLSamplerInit: 6193 case SK_OCLZeroEvent: { 6194 assert(Args.size() == 1); 6195 CurInit = Args[0]; 6196 if (!CurInit.get()) return ExprError(); 6197 break; 6198 } 6199 6200 case SK_ConstructorInitialization: 6201 case SK_ConstructorInitializationFromList: 6202 case SK_StdInitializerListConstructorCall: 6203 case SK_ZeroInitialization: 6204 break; 6205 } 6206 6207 // Walk through the computed steps for the initialization sequence, 6208 // performing the specified conversions along the way. 6209 bool ConstructorInitRequiresZeroInit = false; 6210 for (step_iterator Step = step_begin(), StepEnd = step_end(); 6211 Step != StepEnd; ++Step) { 6212 if (CurInit.isInvalid()) 6213 return ExprError(); 6214 6215 QualType SourceType = CurInit.get() ? CurInit.get()->getType() : QualType(); 6216 6217 switch (Step->Kind) { 6218 case SK_ResolveAddressOfOverloadedFunction: 6219 // Overload resolution determined which function invoke; update the 6220 // initializer to reflect that choice. 6221 S.CheckAddressOfMemberAccess(CurInit.get(), Step->Function.FoundDecl); 6222 if (S.DiagnoseUseOfDecl(Step->Function.FoundDecl, Kind.getLocation())) 6223 return ExprError(); 6224 CurInit = S.FixOverloadedFunctionReference(CurInit, 6225 Step->Function.FoundDecl, 6226 Step->Function.Function); 6227 break; 6228 6229 case SK_CastDerivedToBaseRValue: 6230 case SK_CastDerivedToBaseXValue: 6231 case SK_CastDerivedToBaseLValue: { 6232 // We have a derived-to-base cast that produces either an rvalue or an 6233 // lvalue. Perform that cast. 6234 6235 CXXCastPath BasePath; 6236 6237 // Casts to inaccessible base classes are allowed with C-style casts. 6238 bool IgnoreBaseAccess = Kind.isCStyleOrFunctionalCast(); 6239 if (S.CheckDerivedToBaseConversion(SourceType, Step->Type, 6240 CurInit.get()->getLocStart(), 6241 CurInit.get()->getSourceRange(), 6242 &BasePath, IgnoreBaseAccess)) 6243 return ExprError(); 6244 6245 ExprValueKind VK = 6246 Step->Kind == SK_CastDerivedToBaseLValue ? 6247 VK_LValue : 6248 (Step->Kind == SK_CastDerivedToBaseXValue ? 6249 VK_XValue : 6250 VK_RValue); 6251 CurInit = 6252 ImplicitCastExpr::Create(S.Context, Step->Type, CK_DerivedToBase, 6253 CurInit.get(), &BasePath, VK); 6254 break; 6255 } 6256 6257 case SK_BindReference: 6258 // References cannot bind to bit-fields (C++ [dcl.init.ref]p5). 6259 if (CurInit.get()->refersToBitField()) { 6260 // We don't necessarily have an unambiguous source bit-field. 6261 FieldDecl *BitField = CurInit.get()->getSourceBitField(); 6262 S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) 6263 << Entity.getType().isVolatileQualified() 6264 << (BitField ? BitField->getDeclName() : DeclarationName()) 6265 << (BitField != nullptr) 6266 << CurInit.get()->getSourceRange(); 6267 if (BitField) 6268 S.Diag(BitField->getLocation(), diag::note_bitfield_decl); 6269 6270 return ExprError(); 6271 } 6272 6273 if (CurInit.get()->refersToVectorElement()) { 6274 // References cannot bind to vector elements. 6275 S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) 6276 << Entity.getType().isVolatileQualified() 6277 << CurInit.get()->getSourceRange(); 6278 PrintInitLocationNote(S, Entity); 6279 return ExprError(); 6280 } 6281 6282 // Reference binding does not have any corresponding ASTs. 6283 6284 // Check exception specifications 6285 if (S.CheckExceptionSpecCompatibility(CurInit.get(), DestType)) 6286 return ExprError(); 6287 6288 // Even though we didn't materialize a temporary, the binding may still 6289 // extend the lifetime of a temporary. This happens if we bind a reference 6290 // to the result of a cast to reference type. 6291 if (const InitializedEntity *ExtendingEntity = 6292 getEntityForTemporaryLifetimeExtension(&Entity)) 6293 if (performReferenceExtension(CurInit.get(), ExtendingEntity)) 6294 warnOnLifetimeExtension(S, Entity, CurInit.get(), 6295 /*IsInitializerList=*/false, 6296 ExtendingEntity->getDecl()); 6297 6298 break; 6299 6300 case SK_BindReferenceToTemporary: { 6301 // Make sure the "temporary" is actually an rvalue. 6302 assert(CurInit.get()->isRValue() && "not a temporary"); 6303 6304 // Check exception specifications 6305 if (S.CheckExceptionSpecCompatibility(CurInit.get(), DestType)) 6306 return ExprError(); 6307 6308 // Materialize the temporary into memory. 6309 MaterializeTemporaryExpr *MTE = new (S.Context) MaterializeTemporaryExpr( 6310 Entity.getType().getNonReferenceType(), CurInit.get(), 6311 Entity.getType()->isLValueReferenceType()); 6312 6313 // Maybe lifetime-extend the temporary's subobjects to match the 6314 // entity's lifetime. 6315 if (const InitializedEntity *ExtendingEntity = 6316 getEntityForTemporaryLifetimeExtension(&Entity)) 6317 if (performReferenceExtension(MTE, ExtendingEntity)) 6318 warnOnLifetimeExtension(S, Entity, CurInit.get(), /*IsInitializerList=*/false, 6319 ExtendingEntity->getDecl()); 6320 6321 // If we're binding to an Objective-C object that has lifetime, we 6322 // need cleanups. Likewise if we're extending this temporary to automatic 6323 // storage duration -- we need to register its cleanup during the 6324 // full-expression's cleanups. 6325 if ((S.getLangOpts().ObjCAutoRefCount && 6326 MTE->getType()->isObjCLifetimeType()) || 6327 (MTE->getStorageDuration() == SD_Automatic && 6328 MTE->getType().isDestructedType())) 6329 S.ExprNeedsCleanups = true; 6330 6331 CurInit = MTE; 6332 break; 6333 } 6334 6335 case SK_ExtraneousCopyToTemporary: 6336 CurInit = CopyObject(S, Step->Type, Entity, CurInit, 6337 /*IsExtraneousCopy=*/true); 6338 break; 6339 6340 case SK_UserConversion: { 6341 // We have a user-defined conversion that invokes either a constructor 6342 // or a conversion function. 6343 CastKind CastKind; 6344 bool IsCopy = false; 6345 FunctionDecl *Fn = Step->Function.Function; 6346 DeclAccessPair FoundFn = Step->Function.FoundDecl; 6347 bool HadMultipleCandidates = Step->Function.HadMultipleCandidates; 6348 bool CreatedObject = false; 6349 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Fn)) { 6350 // Build a call to the selected constructor. 6351 SmallVector<Expr*, 8> ConstructorArgs; 6352 SourceLocation Loc = CurInit.get()->getLocStart(); 6353 CurInit.get(); // Ownership transferred into MultiExprArg, below. 6354 6355 // Determine the arguments required to actually perform the constructor 6356 // call. 6357 Expr *Arg = CurInit.get(); 6358 if (S.CompleteConstructorCall(Constructor, 6359 MultiExprArg(&Arg, 1), 6360 Loc, ConstructorArgs)) 6361 return ExprError(); 6362 6363 // Build an expression that constructs a temporary. 6364 CurInit = S.BuildCXXConstructExpr(Loc, Step->Type, Constructor, 6365 ConstructorArgs, 6366 HadMultipleCandidates, 6367 /*ListInit*/ false, 6368 /*StdInitListInit*/ false, 6369 /*ZeroInit*/ false, 6370 CXXConstructExpr::CK_Complete, 6371 SourceRange()); 6372 if (CurInit.isInvalid()) 6373 return ExprError(); 6374 6375 S.CheckConstructorAccess(Kind.getLocation(), Constructor, Entity, 6376 FoundFn.getAccess()); 6377 if (S.DiagnoseUseOfDecl(FoundFn, Kind.getLocation())) 6378 return ExprError(); 6379 6380 CastKind = CK_ConstructorConversion; 6381 QualType Class = S.Context.getTypeDeclType(Constructor->getParent()); 6382 if (S.Context.hasSameUnqualifiedType(SourceType, Class) || 6383 S.IsDerivedFrom(Loc, SourceType, Class)) 6384 IsCopy = true; 6385 6386 CreatedObject = true; 6387 } else { 6388 // Build a call to the conversion function. 6389 CXXConversionDecl *Conversion = cast<CXXConversionDecl>(Fn); 6390 S.CheckMemberOperatorAccess(Kind.getLocation(), CurInit.get(), nullptr, 6391 FoundFn); 6392 if (S.DiagnoseUseOfDecl(FoundFn, Kind.getLocation())) 6393 return ExprError(); 6394 6395 // FIXME: Should we move this initialization into a separate 6396 // derived-to-base conversion? I believe the answer is "no", because 6397 // we don't want to turn off access control here for c-style casts. 6398 ExprResult CurInitExprRes = 6399 S.PerformObjectArgumentInitialization(CurInit.get(), 6400 /*Qualifier=*/nullptr, 6401 FoundFn, Conversion); 6402 if(CurInitExprRes.isInvalid()) 6403 return ExprError(); 6404 CurInit = CurInitExprRes; 6405 6406 // Build the actual call to the conversion function. 6407 CurInit = S.BuildCXXMemberCallExpr(CurInit.get(), FoundFn, Conversion, 6408 HadMultipleCandidates); 6409 if (CurInit.isInvalid() || !CurInit.get()) 6410 return ExprError(); 6411 6412 CastKind = CK_UserDefinedConversion; 6413 6414 CreatedObject = Conversion->getReturnType()->isRecordType(); 6415 } 6416 6417 bool RequiresCopy = !IsCopy && !isReferenceBinding(Steps.back()); 6418 bool MaybeBindToTemp = RequiresCopy || shouldBindAsTemporary(Entity); 6419 6420 if (!MaybeBindToTemp && CreatedObject && shouldDestroyTemporary(Entity)) { 6421 QualType T = CurInit.get()->getType(); 6422 if (const RecordType *Record = T->getAs<RecordType>()) { 6423 CXXDestructorDecl *Destructor 6424 = S.LookupDestructor(cast<CXXRecordDecl>(Record->getDecl())); 6425 S.CheckDestructorAccess(CurInit.get()->getLocStart(), Destructor, 6426 S.PDiag(diag::err_access_dtor_temp) << T); 6427 S.MarkFunctionReferenced(CurInit.get()->getLocStart(), Destructor); 6428 if (S.DiagnoseUseOfDecl(Destructor, CurInit.get()->getLocStart())) 6429 return ExprError(); 6430 } 6431 } 6432 6433 CurInit = ImplicitCastExpr::Create(S.Context, CurInit.get()->getType(), 6434 CastKind, CurInit.get(), nullptr, 6435 CurInit.get()->getValueKind()); 6436 if (MaybeBindToTemp) 6437 CurInit = S.MaybeBindToTemporary(CurInit.getAs<Expr>()); 6438 if (RequiresCopy) 6439 CurInit = CopyObject(S, Entity.getType().getNonReferenceType(), Entity, 6440 CurInit, /*IsExtraneousCopy=*/false); 6441 break; 6442 } 6443 6444 case SK_QualificationConversionLValue: 6445 case SK_QualificationConversionXValue: 6446 case SK_QualificationConversionRValue: { 6447 // Perform a qualification conversion; these can never go wrong. 6448 ExprValueKind VK = 6449 Step->Kind == SK_QualificationConversionLValue ? 6450 VK_LValue : 6451 (Step->Kind == SK_QualificationConversionXValue ? 6452 VK_XValue : 6453 VK_RValue); 6454 CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, CK_NoOp, VK); 6455 break; 6456 } 6457 6458 case SK_AtomicConversion: { 6459 assert(CurInit.get()->isRValue() && "cannot convert glvalue to atomic"); 6460 CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, 6461 CK_NonAtomicToAtomic, VK_RValue); 6462 break; 6463 } 6464 6465 case SK_LValueToRValue: { 6466 assert(CurInit.get()->isGLValue() && "cannot load from a prvalue"); 6467 CurInit = ImplicitCastExpr::Create(S.Context, Step->Type, 6468 CK_LValueToRValue, CurInit.get(), 6469 /*BasePath=*/nullptr, VK_RValue); 6470 break; 6471 } 6472 6473 case SK_ConversionSequence: 6474 case SK_ConversionSequenceNoNarrowing: { 6475 Sema::CheckedConversionKind CCK 6476 = Kind.isCStyleCast()? Sema::CCK_CStyleCast 6477 : Kind.isFunctionalCast()? Sema::CCK_FunctionalCast 6478 : Kind.isExplicitCast()? Sema::CCK_OtherCast 6479 : Sema::CCK_ImplicitConversion; 6480 ExprResult CurInitExprRes = 6481 S.PerformImplicitConversion(CurInit.get(), Step->Type, *Step->ICS, 6482 getAssignmentAction(Entity), CCK); 6483 if (CurInitExprRes.isInvalid()) 6484 return ExprError(); 6485 CurInit = CurInitExprRes; 6486 6487 if (Step->Kind == SK_ConversionSequenceNoNarrowing && 6488 S.getLangOpts().CPlusPlus && !CurInit.get()->isValueDependent()) 6489 DiagnoseNarrowingInInitList(S, *Step->ICS, SourceType, Entity.getType(), 6490 CurInit.get()); 6491 break; 6492 } 6493 6494 case SK_ListInitialization: { 6495 InitListExpr *InitList = cast<InitListExpr>(CurInit.get()); 6496 // If we're not initializing the top-level entity, we need to create an 6497 // InitializeTemporary entity for our target type. 6498 QualType Ty = Step->Type; 6499 bool IsTemporary = !S.Context.hasSameType(Entity.getType(), Ty); 6500 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary(Ty); 6501 InitializedEntity InitEntity = IsTemporary ? TempEntity : Entity; 6502 InitListChecker PerformInitList(S, InitEntity, 6503 InitList, Ty, /*VerifyOnly=*/false); 6504 if (PerformInitList.HadError()) 6505 return ExprError(); 6506 6507 // Hack: We must update *ResultType if available in order to set the 6508 // bounds of arrays, e.g. in 'int ar[] = {1, 2, 3};'. 6509 // Worst case: 'const int (&arref)[] = {1, 2, 3};'. 6510 if (ResultType && 6511 ResultType->getNonReferenceType()->isIncompleteArrayType()) { 6512 if ((*ResultType)->isRValueReferenceType()) 6513 Ty = S.Context.getRValueReferenceType(Ty); 6514 else if ((*ResultType)->isLValueReferenceType()) 6515 Ty = S.Context.getLValueReferenceType(Ty, 6516 (*ResultType)->getAs<LValueReferenceType>()->isSpelledAsLValue()); 6517 *ResultType = Ty; 6518 } 6519 6520 InitListExpr *StructuredInitList = 6521 PerformInitList.getFullyStructuredList(); 6522 CurInit.get(); 6523 CurInit = shouldBindAsTemporary(InitEntity) 6524 ? S.MaybeBindToTemporary(StructuredInitList) 6525 : StructuredInitList; 6526 break; 6527 } 6528 6529 case SK_ConstructorInitializationFromList: { 6530 // When an initializer list is passed for a parameter of type "reference 6531 // to object", we don't get an EK_Temporary entity, but instead an 6532 // EK_Parameter entity with reference type. 6533 // FIXME: This is a hack. What we really should do is create a user 6534 // conversion step for this case, but this makes it considerably more 6535 // complicated. For now, this will do. 6536 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary( 6537 Entity.getType().getNonReferenceType()); 6538 bool UseTemporary = Entity.getType()->isReferenceType(); 6539 assert(Args.size() == 1 && "expected a single argument for list init"); 6540 InitListExpr *InitList = cast<InitListExpr>(Args[0]); 6541 S.Diag(InitList->getExprLoc(), diag::warn_cxx98_compat_ctor_list_init) 6542 << InitList->getSourceRange(); 6543 MultiExprArg Arg(InitList->getInits(), InitList->getNumInits()); 6544 CurInit = PerformConstructorInitialization(S, UseTemporary ? TempEntity : 6545 Entity, 6546 Kind, Arg, *Step, 6547 ConstructorInitRequiresZeroInit, 6548 /*IsListInitialization*/true, 6549 /*IsStdInitListInit*/false, 6550 InitList->getLBraceLoc(), 6551 InitList->getRBraceLoc()); 6552 break; 6553 } 6554 6555 case SK_UnwrapInitList: 6556 CurInit = cast<InitListExpr>(CurInit.get())->getInit(0); 6557 break; 6558 6559 case SK_RewrapInitList: { 6560 Expr *E = CurInit.get(); 6561 InitListExpr *Syntactic = Step->WrappingSyntacticList; 6562 InitListExpr *ILE = new (S.Context) InitListExpr(S.Context, 6563 Syntactic->getLBraceLoc(), E, Syntactic->getRBraceLoc()); 6564 ILE->setSyntacticForm(Syntactic); 6565 ILE->setType(E->getType()); 6566 ILE->setValueKind(E->getValueKind()); 6567 CurInit = ILE; 6568 break; 6569 } 6570 6571 case SK_ConstructorInitialization: 6572 case SK_StdInitializerListConstructorCall: { 6573 // When an initializer list is passed for a parameter of type "reference 6574 // to object", we don't get an EK_Temporary entity, but instead an 6575 // EK_Parameter entity with reference type. 6576 // FIXME: This is a hack. What we really should do is create a user 6577 // conversion step for this case, but this makes it considerably more 6578 // complicated. For now, this will do. 6579 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary( 6580 Entity.getType().getNonReferenceType()); 6581 bool UseTemporary = Entity.getType()->isReferenceType(); 6582 bool IsStdInitListInit = 6583 Step->Kind == SK_StdInitializerListConstructorCall; 6584 CurInit = PerformConstructorInitialization( 6585 S, UseTemporary ? TempEntity : Entity, Kind, Args, *Step, 6586 ConstructorInitRequiresZeroInit, 6587 /*IsListInitialization*/IsStdInitListInit, 6588 /*IsStdInitListInitialization*/IsStdInitListInit, 6589 /*LBraceLoc*/SourceLocation(), 6590 /*RBraceLoc*/SourceLocation()); 6591 break; 6592 } 6593 6594 case SK_ZeroInitialization: { 6595 step_iterator NextStep = Step; 6596 ++NextStep; 6597 if (NextStep != StepEnd && 6598 (NextStep->Kind == SK_ConstructorInitialization || 6599 NextStep->Kind == SK_ConstructorInitializationFromList)) { 6600 // The need for zero-initialization is recorded directly into 6601 // the call to the object's constructor within the next step. 6602 ConstructorInitRequiresZeroInit = true; 6603 } else if (Kind.getKind() == InitializationKind::IK_Value && 6604 S.getLangOpts().CPlusPlus && 6605 !Kind.isImplicitValueInit()) { 6606 TypeSourceInfo *TSInfo = Entity.getTypeSourceInfo(); 6607 if (!TSInfo) 6608 TSInfo = S.Context.getTrivialTypeSourceInfo(Step->Type, 6609 Kind.getRange().getBegin()); 6610 6611 CurInit = new (S.Context) CXXScalarValueInitExpr( 6612 TSInfo->getType().getNonLValueExprType(S.Context), TSInfo, 6613 Kind.getRange().getEnd()); 6614 } else { 6615 CurInit = new (S.Context) ImplicitValueInitExpr(Step->Type); 6616 } 6617 break; 6618 } 6619 6620 case SK_CAssignment: { 6621 QualType SourceType = CurInit.get()->getType(); 6622 // Save off the initial CurInit in case we need to emit a diagnostic 6623 ExprResult InitialCurInit = CurInit; 6624 ExprResult Result = CurInit; 6625 Sema::AssignConvertType ConvTy = 6626 S.CheckSingleAssignmentConstraints(Step->Type, Result, true, 6627 Entity.getKind() == InitializedEntity::EK_Parameter_CF_Audited); 6628 if (Result.isInvalid()) 6629 return ExprError(); 6630 CurInit = Result; 6631 6632 // If this is a call, allow conversion to a transparent union. 6633 ExprResult CurInitExprRes = CurInit; 6634 if (ConvTy != Sema::Compatible && 6635 Entity.isParameterKind() && 6636 S.CheckTransparentUnionArgumentConstraints(Step->Type, CurInitExprRes) 6637 == Sema::Compatible) 6638 ConvTy = Sema::Compatible; 6639 if (CurInitExprRes.isInvalid()) 6640 return ExprError(); 6641 CurInit = CurInitExprRes; 6642 6643 bool Complained; 6644 if (S.DiagnoseAssignmentResult(ConvTy, Kind.getLocation(), 6645 Step->Type, SourceType, 6646 InitialCurInit.get(), 6647 getAssignmentAction(Entity, true), 6648 &Complained)) { 6649 PrintInitLocationNote(S, Entity); 6650 return ExprError(); 6651 } else if (Complained) 6652 PrintInitLocationNote(S, Entity); 6653 break; 6654 } 6655 6656 case SK_StringInit: { 6657 QualType Ty = Step->Type; 6658 CheckStringInit(CurInit.get(), ResultType ? *ResultType : Ty, 6659 S.Context.getAsArrayType(Ty), S); 6660 break; 6661 } 6662 6663 case SK_ObjCObjectConversion: 6664 CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, 6665 CK_ObjCObjectLValueCast, 6666 CurInit.get()->getValueKind()); 6667 break; 6668 6669 case SK_ArrayInit: 6670 // Okay: we checked everything before creating this step. Note that 6671 // this is a GNU extension. 6672 S.Diag(Kind.getLocation(), diag::ext_array_init_copy) 6673 << Step->Type << CurInit.get()->getType() 6674 << CurInit.get()->getSourceRange(); 6675 6676 // If the destination type is an incomplete array type, update the 6677 // type accordingly. 6678 if (ResultType) { 6679 if (const IncompleteArrayType *IncompleteDest 6680 = S.Context.getAsIncompleteArrayType(Step->Type)) { 6681 if (const ConstantArrayType *ConstantSource 6682 = S.Context.getAsConstantArrayType(CurInit.get()->getType())) { 6683 *ResultType = S.Context.getConstantArrayType( 6684 IncompleteDest->getElementType(), 6685 ConstantSource->getSize(), 6686 ArrayType::Normal, 0); 6687 } 6688 } 6689 } 6690 break; 6691 6692 case SK_ParenthesizedArrayInit: 6693 // Okay: we checked everything before creating this step. Note that 6694 // this is a GNU extension. 6695 S.Diag(Kind.getLocation(), diag::ext_array_init_parens) 6696 << CurInit.get()->getSourceRange(); 6697 break; 6698 6699 case SK_PassByIndirectCopyRestore: 6700 case SK_PassByIndirectRestore: 6701 checkIndirectCopyRestoreSource(S, CurInit.get()); 6702 CurInit = new (S.Context) ObjCIndirectCopyRestoreExpr( 6703 CurInit.get(), Step->Type, 6704 Step->Kind == SK_PassByIndirectCopyRestore); 6705 break; 6706 6707 case SK_ProduceObjCObject: 6708 CurInit = 6709 ImplicitCastExpr::Create(S.Context, Step->Type, CK_ARCProduceObject, 6710 CurInit.get(), nullptr, VK_RValue); 6711 break; 6712 6713 case SK_StdInitializerList: { 6714 S.Diag(CurInit.get()->getExprLoc(), 6715 diag::warn_cxx98_compat_initializer_list_init) 6716 << CurInit.get()->getSourceRange(); 6717 6718 // Materialize the temporary into memory. 6719 MaterializeTemporaryExpr *MTE = new (S.Context) 6720 MaterializeTemporaryExpr(CurInit.get()->getType(), CurInit.get(), 6721 /*BoundToLvalueReference=*/false); 6722 6723 // Maybe lifetime-extend the array temporary's subobjects to match the 6724 // entity's lifetime. 6725 if (const InitializedEntity *ExtendingEntity = 6726 getEntityForTemporaryLifetimeExtension(&Entity)) 6727 if (performReferenceExtension(MTE, ExtendingEntity)) 6728 warnOnLifetimeExtension(S, Entity, CurInit.get(), 6729 /*IsInitializerList=*/true, 6730 ExtendingEntity->getDecl()); 6731 6732 // Wrap it in a construction of a std::initializer_list<T>. 6733 CurInit = new (S.Context) CXXStdInitializerListExpr(Step->Type, MTE); 6734 6735 // Bind the result, in case the library has given initializer_list a 6736 // non-trivial destructor. 6737 if (shouldBindAsTemporary(Entity)) 6738 CurInit = S.MaybeBindToTemporary(CurInit.get()); 6739 break; 6740 } 6741 6742 case SK_OCLSamplerInit: { 6743 assert(Step->Type->isSamplerT() && 6744 "Sampler initialization on non-sampler type."); 6745 6746 QualType SourceType = CurInit.get()->getType(); 6747 6748 if (Entity.isParameterKind()) { 6749 if (!SourceType->isSamplerT()) 6750 S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) 6751 << SourceType; 6752 } else if (Entity.getKind() != InitializedEntity::EK_Variable) { 6753 llvm_unreachable("Invalid EntityKind!"); 6754 } 6755 6756 break; 6757 } 6758 case SK_OCLZeroEvent: { 6759 assert(Step->Type->isEventT() && 6760 "Event initialization on non-event type."); 6761 6762 CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, 6763 CK_ZeroToOCLEvent, 6764 CurInit.get()->getValueKind()); 6765 break; 6766 } 6767 } 6768 } 6769 6770 // Diagnose non-fatal problems with the completed initialization. 6771 if (Entity.getKind() == InitializedEntity::EK_Member && 6772 cast<FieldDecl>(Entity.getDecl())->isBitField()) 6773 S.CheckBitFieldInitialization(Kind.getLocation(), 6774 cast<FieldDecl>(Entity.getDecl()), 6775 CurInit.get()); 6776 6777 // Check for std::move on construction. 6778 if (const Expr *E = CurInit.get()) { 6779 CheckMoveOnConstruction(S, E, 6780 Entity.getKind() == InitializedEntity::EK_Result); 6781 } 6782 6783 return CurInit; 6784 } 6785 6786 /// Somewhere within T there is an uninitialized reference subobject. 6787 /// Dig it out and diagnose it. 6788 static bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, 6789 QualType T) { 6790 if (T->isReferenceType()) { 6791 S.Diag(Loc, diag::err_reference_without_init) 6792 << T.getNonReferenceType(); 6793 return true; 6794 } 6795 6796 CXXRecordDecl *RD = T->getBaseElementTypeUnsafe()->getAsCXXRecordDecl(); 6797 if (!RD || !RD->hasUninitializedReferenceMember()) 6798 return false; 6799 6800 for (const auto *FI : RD->fields()) { 6801 if (FI->isUnnamedBitfield()) 6802 continue; 6803 6804 if (DiagnoseUninitializedReference(S, FI->getLocation(), FI->getType())) { 6805 S.Diag(Loc, diag::note_value_initialization_here) << RD; 6806 return true; 6807 } 6808 } 6809 6810 for (const auto &BI : RD->bases()) { 6811 if (DiagnoseUninitializedReference(S, BI.getLocStart(), BI.getType())) { 6812 S.Diag(Loc, diag::note_value_initialization_here) << RD; 6813 return true; 6814 } 6815 } 6816 6817 return false; 6818 } 6819 6820 6821 //===----------------------------------------------------------------------===// 6822 // Diagnose initialization failures 6823 //===----------------------------------------------------------------------===// 6824 6825 /// Emit notes associated with an initialization that failed due to a 6826 /// "simple" conversion failure. 6827 static void emitBadConversionNotes(Sema &S, const InitializedEntity &entity, 6828 Expr *op) { 6829 QualType destType = entity.getType(); 6830 if (destType.getNonReferenceType()->isObjCObjectPointerType() && 6831 op->getType()->isObjCObjectPointerType()) { 6832 6833 // Emit a possible note about the conversion failing because the 6834 // operand is a message send with a related result type. 6835 S.EmitRelatedResultTypeNote(op); 6836 6837 // Emit a possible note about a return failing because we're 6838 // expecting a related result type. 6839 if (entity.getKind() == InitializedEntity::EK_Result) 6840 S.EmitRelatedResultTypeNoteForReturn(destType); 6841 } 6842 } 6843 6844 static void diagnoseListInit(Sema &S, const InitializedEntity &Entity, 6845 InitListExpr *InitList) { 6846 QualType DestType = Entity.getType(); 6847 6848 QualType E; 6849 if (S.getLangOpts().CPlusPlus11 && S.isStdInitializerList(DestType, &E)) { 6850 QualType ArrayType = S.Context.getConstantArrayType( 6851 E.withConst(), 6852 llvm::APInt(S.Context.getTypeSize(S.Context.getSizeType()), 6853 InitList->getNumInits()), 6854 clang::ArrayType::Normal, 0); 6855 InitializedEntity HiddenArray = 6856 InitializedEntity::InitializeTemporary(ArrayType); 6857 return diagnoseListInit(S, HiddenArray, InitList); 6858 } 6859 6860 if (DestType->isReferenceType()) { 6861 // A list-initialization failure for a reference means that we tried to 6862 // create a temporary of the inner type (per [dcl.init.list]p3.6) and the 6863 // inner initialization failed. 6864 QualType T = DestType->getAs<ReferenceType>()->getPointeeType(); 6865 diagnoseListInit(S, InitializedEntity::InitializeTemporary(T), InitList); 6866 SourceLocation Loc = InitList->getLocStart(); 6867 if (auto *D = Entity.getDecl()) 6868 Loc = D->getLocation(); 6869 S.Diag(Loc, diag::note_in_reference_temporary_list_initializer) << T; 6870 return; 6871 } 6872 6873 InitListChecker DiagnoseInitList(S, Entity, InitList, DestType, 6874 /*VerifyOnly=*/false); 6875 assert(DiagnoseInitList.HadError() && 6876 "Inconsistent init list check result."); 6877 } 6878 6879 bool InitializationSequence::Diagnose(Sema &S, 6880 const InitializedEntity &Entity, 6881 const InitializationKind &Kind, 6882 ArrayRef<Expr *> Args) { 6883 if (!Failed()) 6884 return false; 6885 6886 QualType DestType = Entity.getType(); 6887 switch (Failure) { 6888 case FK_TooManyInitsForReference: 6889 // FIXME: Customize for the initialized entity? 6890 if (Args.empty()) { 6891 // Dig out the reference subobject which is uninitialized and diagnose it. 6892 // If this is value-initialization, this could be nested some way within 6893 // the target type. 6894 assert(Kind.getKind() == InitializationKind::IK_Value || 6895 DestType->isReferenceType()); 6896 bool Diagnosed = 6897 DiagnoseUninitializedReference(S, Kind.getLocation(), DestType); 6898 assert(Diagnosed && "couldn't find uninitialized reference to diagnose"); 6899 (void)Diagnosed; 6900 } else // FIXME: diagnostic below could be better! 6901 S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) 6902 << SourceRange(Args.front()->getLocStart(), Args.back()->getLocEnd()); 6903 break; 6904 6905 case FK_ArrayNeedsInitList: 6906 S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 0; 6907 break; 6908 case FK_ArrayNeedsInitListOrStringLiteral: 6909 S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 1; 6910 break; 6911 case FK_ArrayNeedsInitListOrWideStringLiteral: 6912 S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 2; 6913 break; 6914 case FK_NarrowStringIntoWideCharArray: 6915 S.Diag(Kind.getLocation(), diag::err_array_init_narrow_string_into_wchar); 6916 break; 6917 case FK_WideStringIntoCharArray: 6918 S.Diag(Kind.getLocation(), diag::err_array_init_wide_string_into_char); 6919 break; 6920 case FK_IncompatWideStringIntoWideChar: 6921 S.Diag(Kind.getLocation(), 6922 diag::err_array_init_incompat_wide_string_into_wchar); 6923 break; 6924 case FK_ArrayTypeMismatch: 6925 case FK_NonConstantArrayInit: 6926 S.Diag(Kind.getLocation(), 6927 (Failure == FK_ArrayTypeMismatch 6928 ? diag::err_array_init_different_type 6929 : diag::err_array_init_non_constant_array)) 6930 << DestType.getNonReferenceType() 6931 << Args[0]->getType() 6932 << Args[0]->getSourceRange(); 6933 break; 6934 6935 case FK_VariableLengthArrayHasInitializer: 6936 S.Diag(Kind.getLocation(), diag::err_variable_object_no_init) 6937 << Args[0]->getSourceRange(); 6938 break; 6939 6940 case FK_AddressOfOverloadFailed: { 6941 DeclAccessPair Found; 6942 S.ResolveAddressOfOverloadedFunction(Args[0], 6943 DestType.getNonReferenceType(), 6944 true, 6945 Found); 6946 break; 6947 } 6948 6949 case FK_AddressOfUnaddressableFunction: { 6950 auto *FD = cast<FunctionDecl>(cast<DeclRefExpr>(Args[0])->getDecl()); 6951 S.checkAddressOfFunctionIsAvailable(FD, /*Complain=*/true, 6952 Args[0]->getLocStart()); 6953 break; 6954 } 6955 6956 case FK_ReferenceInitOverloadFailed: 6957 case FK_UserConversionOverloadFailed: 6958 switch (FailedOverloadResult) { 6959 case OR_Ambiguous: 6960 if (Failure == FK_UserConversionOverloadFailed) 6961 S.Diag(Kind.getLocation(), diag::err_typecheck_ambiguous_condition) 6962 << Args[0]->getType() << DestType 6963 << Args[0]->getSourceRange(); 6964 else 6965 S.Diag(Kind.getLocation(), diag::err_ref_init_ambiguous) 6966 << DestType << Args[0]->getType() 6967 << Args[0]->getSourceRange(); 6968 6969 FailedCandidateSet.NoteCandidates(S, OCD_ViableCandidates, Args); 6970 break; 6971 6972 case OR_No_Viable_Function: 6973 if (!S.RequireCompleteType(Kind.getLocation(), 6974 DestType.getNonReferenceType(), 6975 diag::err_typecheck_nonviable_condition_incomplete, 6976 Args[0]->getType(), Args[0]->getSourceRange())) 6977 S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) 6978 << (Entity.getKind() == InitializedEntity::EK_Result) 6979 << Args[0]->getType() << Args[0]->getSourceRange() 6980 << DestType.getNonReferenceType(); 6981 6982 FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, Args); 6983 break; 6984 6985 case OR_Deleted: { 6986 S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) 6987 << Args[0]->getType() << DestType.getNonReferenceType() 6988 << Args[0]->getSourceRange(); 6989 OverloadCandidateSet::iterator Best; 6990 OverloadingResult Ovl 6991 = FailedCandidateSet.BestViableFunction(S, Kind.getLocation(), Best, 6992 true); 6993 if (Ovl == OR_Deleted) { 6994 S.NoteDeletedFunction(Best->Function); 6995 } else { 6996 llvm_unreachable("Inconsistent overload resolution?"); 6997 } 6998 break; 6999 } 7000 7001 case OR_Success: 7002 llvm_unreachable("Conversion did not fail!"); 7003 } 7004 break; 7005 7006 case FK_NonConstLValueReferenceBindingToTemporary: 7007 if (isa<InitListExpr>(Args[0])) { 7008 S.Diag(Kind.getLocation(), 7009 diag::err_lvalue_reference_bind_to_initlist) 7010 << DestType.getNonReferenceType().isVolatileQualified() 7011 << DestType.getNonReferenceType() 7012 << Args[0]->getSourceRange(); 7013 break; 7014 } 7015 // Intentional fallthrough 7016 7017 case FK_NonConstLValueReferenceBindingToUnrelated: 7018 S.Diag(Kind.getLocation(), 7019 Failure == FK_NonConstLValueReferenceBindingToTemporary 7020 ? diag::err_lvalue_reference_bind_to_temporary 7021 : diag::err_lvalue_reference_bind_to_unrelated) 7022 << DestType.getNonReferenceType().isVolatileQualified() 7023 << DestType.getNonReferenceType() 7024 << Args[0]->getType() 7025 << Args[0]->getSourceRange(); 7026 break; 7027 7028 case FK_RValueReferenceBindingToLValue: 7029 S.Diag(Kind.getLocation(), diag::err_lvalue_to_rvalue_ref) 7030 << DestType.getNonReferenceType() << Args[0]->getType() 7031 << Args[0]->getSourceRange(); 7032 break; 7033 7034 case FK_ReferenceInitDropsQualifiers: { 7035 QualType SourceType = Args[0]->getType(); 7036 QualType NonRefType = DestType.getNonReferenceType(); 7037 Qualifiers DroppedQualifiers = 7038 SourceType.getQualifiers() - NonRefType.getQualifiers(); 7039 7040 S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) 7041 << SourceType 7042 << NonRefType 7043 << DroppedQualifiers.getCVRQualifiers() 7044 << Args[0]->getSourceRange(); 7045 break; 7046 } 7047 7048 case FK_ReferenceInitFailed: 7049 S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) 7050 << DestType.getNonReferenceType() 7051 << Args[0]->isLValue() 7052 << Args[0]->getType() 7053 << Args[0]->getSourceRange(); 7054 emitBadConversionNotes(S, Entity, Args[0]); 7055 break; 7056 7057 case FK_ConversionFailed: { 7058 QualType FromType = Args[0]->getType(); 7059 PartialDiagnostic PDiag = S.PDiag(diag::err_init_conversion_failed) 7060 << (int)Entity.getKind() 7061 << DestType 7062 << Args[0]->isLValue() 7063 << FromType 7064 << Args[0]->getSourceRange(); 7065 S.HandleFunctionTypeMismatch(PDiag, FromType, DestType); 7066 S.Diag(Kind.getLocation(), PDiag); 7067 emitBadConversionNotes(S, Entity, Args[0]); 7068 break; 7069 } 7070 7071 case FK_ConversionFromPropertyFailed: 7072 // No-op. This error has already been reported. 7073 break; 7074 7075 case FK_TooManyInitsForScalar: { 7076 SourceRange R; 7077 7078 auto *InitList = dyn_cast<InitListExpr>(Args[0]); 7079 if (InitList && InitList->getNumInits() >= 1) { 7080 R = SourceRange(InitList->getInit(0)->getLocEnd(), InitList->getLocEnd()); 7081 } else { 7082 assert(Args.size() > 1 && "Expected multiple initializers!"); 7083 R = SourceRange(Args.front()->getLocEnd(), Args.back()->getLocEnd()); 7084 } 7085 7086 R.setBegin(S.getLocForEndOfToken(R.getBegin())); 7087 if (Kind.isCStyleOrFunctionalCast()) 7088 S.Diag(Kind.getLocation(), diag::err_builtin_func_cast_more_than_one_arg) 7089 << R; 7090 else 7091 S.Diag(Kind.getLocation(), diag::err_excess_initializers) 7092 << /*scalar=*/2 << R; 7093 break; 7094 } 7095 7096 case FK_ReferenceBindingToInitList: 7097 S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) 7098 << DestType.getNonReferenceType() << Args[0]->getSourceRange(); 7099 break; 7100 7101 case FK_InitListBadDestinationType: 7102 S.Diag(Kind.getLocation(), diag::err_init_list_bad_dest_type) 7103 << (DestType->isRecordType()) << DestType << Args[0]->getSourceRange(); 7104 break; 7105 7106 case FK_ListConstructorOverloadFailed: 7107 case FK_ConstructorOverloadFailed: { 7108 SourceRange ArgsRange; 7109 if (Args.size()) 7110 ArgsRange = SourceRange(Args.front()->getLocStart(), 7111 Args.back()->getLocEnd()); 7112 7113 if (Failure == FK_ListConstructorOverloadFailed) { 7114 assert(Args.size() == 1 && 7115 "List construction from other than 1 argument."); 7116 InitListExpr *InitList = cast<InitListExpr>(Args[0]); 7117 Args = MultiExprArg(InitList->getInits(), InitList->getNumInits()); 7118 } 7119 7120 // FIXME: Using "DestType" for the entity we're printing is probably 7121 // bad. 7122 switch (FailedOverloadResult) { 7123 case OR_Ambiguous: 7124 S.Diag(Kind.getLocation(), diag::err_ovl_ambiguous_init) 7125 << DestType << ArgsRange; 7126 FailedCandidateSet.NoteCandidates(S, OCD_ViableCandidates, Args); 7127 break; 7128 7129 case OR_No_Viable_Function: 7130 if (Kind.getKind() == InitializationKind::IK_Default && 7131 (Entity.getKind() == InitializedEntity::EK_Base || 7132 Entity.getKind() == InitializedEntity::EK_Member) && 7133 isa<CXXConstructorDecl>(S.CurContext)) { 7134 // This is implicit default initialization of a member or 7135 // base within a constructor. If no viable function was 7136 // found, notify the user that she needs to explicitly 7137 // initialize this base/member. 7138 CXXConstructorDecl *Constructor 7139 = cast<CXXConstructorDecl>(S.CurContext); 7140 if (Entity.getKind() == InitializedEntity::EK_Base) { 7141 S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) 7142 << (Constructor->getInheritedConstructor() ? 2 : 7143 Constructor->isImplicit() ? 1 : 0) 7144 << S.Context.getTypeDeclType(Constructor->getParent()) 7145 << /*base=*/0 7146 << Entity.getType(); 7147 7148 RecordDecl *BaseDecl 7149 = Entity.getBaseSpecifier()->getType()->getAs<RecordType>() 7150 ->getDecl(); 7151 S.Diag(BaseDecl->getLocation(), diag::note_previous_decl) 7152 << S.Context.getTagDeclType(BaseDecl); 7153 } else { 7154 S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) 7155 << (Constructor->getInheritedConstructor() ? 2 : 7156 Constructor->isImplicit() ? 1 : 0) 7157 << S.Context.getTypeDeclType(Constructor->getParent()) 7158 << /*member=*/1 7159 << Entity.getName(); 7160 S.Diag(Entity.getDecl()->getLocation(), 7161 diag::note_member_declared_at); 7162 7163 if (const RecordType *Record 7164 = Entity.getType()->getAs<RecordType>()) 7165 S.Diag(Record->getDecl()->getLocation(), 7166 diag::note_previous_decl) 7167 << S.Context.getTagDeclType(Record->getDecl()); 7168 } 7169 break; 7170 } 7171 7172 S.Diag(Kind.getLocation(), diag::err_ovl_no_viable_function_in_init) 7173 << DestType << ArgsRange; 7174 FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, Args); 7175 break; 7176 7177 case OR_Deleted: { 7178 OverloadCandidateSet::iterator Best; 7179 OverloadingResult Ovl 7180 = FailedCandidateSet.BestViableFunction(S, Kind.getLocation(), Best); 7181 if (Ovl != OR_Deleted) { 7182 S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) 7183 << true << DestType << ArgsRange; 7184 llvm_unreachable("Inconsistent overload resolution?"); 7185 break; 7186 } 7187 7188 // If this is a defaulted or implicitly-declared function, then 7189 // it was implicitly deleted. Make it clear that the deletion was 7190 // implicit. 7191 if (S.isImplicitlyDeleted(Best->Function)) 7192 S.Diag(Kind.getLocation(), diag::err_ovl_deleted_special_init) 7193 << S.getSpecialMember(cast<CXXMethodDecl>(Best->Function)) 7194 << DestType << ArgsRange; 7195 else 7196 S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) 7197 << true << DestType << ArgsRange; 7198 7199 S.NoteDeletedFunction(Best->Function); 7200 break; 7201 } 7202 7203 case OR_Success: 7204 llvm_unreachable("Conversion did not fail!"); 7205 } 7206 } 7207 break; 7208 7209 case FK_DefaultInitOfConst: 7210 if (Entity.getKind() == InitializedEntity::EK_Member && 7211 isa<CXXConstructorDecl>(S.CurContext)) { 7212 // This is implicit default-initialization of a const member in 7213 // a constructor. Complain that it needs to be explicitly 7214 // initialized. 7215 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(S.CurContext); 7216 S.Diag(Kind.getLocation(), diag::err_uninitialized_member_in_ctor) 7217 << (Constructor->getInheritedConstructor() ? 2 : 7218 Constructor->isImplicit() ? 1 : 0) 7219 << S.Context.getTypeDeclType(Constructor->getParent()) 7220 << /*const=*/1 7221 << Entity.getName(); 7222 S.Diag(Entity.getDecl()->getLocation(), diag::note_previous_decl) 7223 << Entity.getName(); 7224 } else { 7225 S.Diag(Kind.getLocation(), diag::err_default_init_const) 7226 << DestType << (bool)DestType->getAs<RecordType>(); 7227 } 7228 break; 7229 7230 case FK_Incomplete: 7231 S.RequireCompleteType(Kind.getLocation(), FailedIncompleteType, 7232 diag::err_init_incomplete_type); 7233 break; 7234 7235 case FK_ListInitializationFailed: { 7236 // Run the init list checker again to emit diagnostics. 7237 InitListExpr *InitList = cast<InitListExpr>(Args[0]); 7238 diagnoseListInit(S, Entity, InitList); 7239 break; 7240 } 7241 7242 case FK_PlaceholderType: { 7243 // FIXME: Already diagnosed! 7244 break; 7245 } 7246 7247 case FK_ExplicitConstructor: { 7248 S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) 7249 << Args[0]->getSourceRange(); 7250 OverloadCandidateSet::iterator Best; 7251 OverloadingResult Ovl 7252 = FailedCandidateSet.BestViableFunction(S, Kind.getLocation(), Best); 7253 (void)Ovl; 7254 assert(Ovl == OR_Success && "Inconsistent overload resolution"); 7255 CXXConstructorDecl *CtorDecl = cast<CXXConstructorDecl>(Best->Function); 7256 S.Diag(CtorDecl->getLocation(), diag::note_constructor_declared_here); 7257 break; 7258 } 7259 } 7260 7261 PrintInitLocationNote(S, Entity); 7262 return true; 7263 } 7264 7265 void InitializationSequence::dump(raw_ostream &OS) const { 7266 switch (SequenceKind) { 7267 case FailedSequence: { 7268 OS << "Failed sequence: "; 7269 switch (Failure) { 7270 case FK_TooManyInitsForReference: 7271 OS << "too many initializers for reference"; 7272 break; 7273 7274 case FK_ArrayNeedsInitList: 7275 OS << "array requires initializer list"; 7276 break; 7277 7278 case FK_AddressOfUnaddressableFunction: 7279 OS << "address of unaddressable function was taken"; 7280 break; 7281 7282 case FK_ArrayNeedsInitListOrStringLiteral: 7283 OS << "array requires initializer list or string literal"; 7284 break; 7285 7286 case FK_ArrayNeedsInitListOrWideStringLiteral: 7287 OS << "array requires initializer list or wide string literal"; 7288 break; 7289 7290 case FK_NarrowStringIntoWideCharArray: 7291 OS << "narrow string into wide char array"; 7292 break; 7293 7294 case FK_WideStringIntoCharArray: 7295 OS << "wide string into char array"; 7296 break; 7297 7298 case FK_IncompatWideStringIntoWideChar: 7299 OS << "incompatible wide string into wide char array"; 7300 break; 7301 7302 case FK_ArrayTypeMismatch: 7303 OS << "array type mismatch"; 7304 break; 7305 7306 case FK_NonConstantArrayInit: 7307 OS << "non-constant array initializer"; 7308 break; 7309 7310 case FK_AddressOfOverloadFailed: 7311 OS << "address of overloaded function failed"; 7312 break; 7313 7314 case FK_ReferenceInitOverloadFailed: 7315 OS << "overload resolution for reference initialization failed"; 7316 break; 7317 7318 case FK_NonConstLValueReferenceBindingToTemporary: 7319 OS << "non-const lvalue reference bound to temporary"; 7320 break; 7321 7322 case FK_NonConstLValueReferenceBindingToUnrelated: 7323 OS << "non-const lvalue reference bound to unrelated type"; 7324 break; 7325 7326 case FK_RValueReferenceBindingToLValue: 7327 OS << "rvalue reference bound to an lvalue"; 7328 break; 7329 7330 case FK_ReferenceInitDropsQualifiers: 7331 OS << "reference initialization drops qualifiers"; 7332 break; 7333 7334 case FK_ReferenceInitFailed: 7335 OS << "reference initialization failed"; 7336 break; 7337 7338 case FK_ConversionFailed: 7339 OS << "conversion failed"; 7340 break; 7341 7342 case FK_ConversionFromPropertyFailed: 7343 OS << "conversion from property failed"; 7344 break; 7345 7346 case FK_TooManyInitsForScalar: 7347 OS << "too many initializers for scalar"; 7348 break; 7349 7350 case FK_ReferenceBindingToInitList: 7351 OS << "referencing binding to initializer list"; 7352 break; 7353 7354 case FK_InitListBadDestinationType: 7355 OS << "initializer list for non-aggregate, non-scalar type"; 7356 break; 7357 7358 case FK_UserConversionOverloadFailed: 7359 OS << "overloading failed for user-defined conversion"; 7360 break; 7361 7362 case FK_ConstructorOverloadFailed: 7363 OS << "constructor overloading failed"; 7364 break; 7365 7366 case FK_DefaultInitOfConst: 7367 OS << "default initialization of a const variable"; 7368 break; 7369 7370 case FK_Incomplete: 7371 OS << "initialization of incomplete type"; 7372 break; 7373 7374 case FK_ListInitializationFailed: 7375 OS << "list initialization checker failure"; 7376 break; 7377 7378 case FK_VariableLengthArrayHasInitializer: 7379 OS << "variable length array has an initializer"; 7380 break; 7381 7382 case FK_PlaceholderType: 7383 OS << "initializer expression isn't contextually valid"; 7384 break; 7385 7386 case FK_ListConstructorOverloadFailed: 7387 OS << "list constructor overloading failed"; 7388 break; 7389 7390 case FK_ExplicitConstructor: 7391 OS << "list copy initialization chose explicit constructor"; 7392 break; 7393 } 7394 OS << '\n'; 7395 return; 7396 } 7397 7398 case DependentSequence: 7399 OS << "Dependent sequence\n"; 7400 return; 7401 7402 case NormalSequence: 7403 OS << "Normal sequence: "; 7404 break; 7405 } 7406 7407 for (step_iterator S = step_begin(), SEnd = step_end(); S != SEnd; ++S) { 7408 if (S != step_begin()) { 7409 OS << " -> "; 7410 } 7411 7412 switch (S->Kind) { 7413 case SK_ResolveAddressOfOverloadedFunction: 7414 OS << "resolve address of overloaded function"; 7415 break; 7416 7417 case SK_CastDerivedToBaseRValue: 7418 OS << "derived-to-base case (rvalue" << S->Type.getAsString() << ")"; 7419 break; 7420 7421 case SK_CastDerivedToBaseXValue: 7422 OS << "derived-to-base case (xvalue" << S->Type.getAsString() << ")"; 7423 break; 7424 7425 case SK_CastDerivedToBaseLValue: 7426 OS << "derived-to-base case (lvalue" << S->Type.getAsString() << ")"; 7427 break; 7428 7429 case SK_BindReference: 7430 OS << "bind reference to lvalue"; 7431 break; 7432 7433 case SK_BindReferenceToTemporary: 7434 OS << "bind reference to a temporary"; 7435 break; 7436 7437 case SK_ExtraneousCopyToTemporary: 7438 OS << "extraneous C++03 copy to temporary"; 7439 break; 7440 7441 case SK_UserConversion: 7442 OS << "user-defined conversion via " << *S->Function.Function; 7443 break; 7444 7445 case SK_QualificationConversionRValue: 7446 OS << "qualification conversion (rvalue)"; 7447 break; 7448 7449 case SK_QualificationConversionXValue: 7450 OS << "qualification conversion (xvalue)"; 7451 break; 7452 7453 case SK_QualificationConversionLValue: 7454 OS << "qualification conversion (lvalue)"; 7455 break; 7456 7457 case SK_AtomicConversion: 7458 OS << "non-atomic-to-atomic conversion"; 7459 break; 7460 7461 case SK_LValueToRValue: 7462 OS << "load (lvalue to rvalue)"; 7463 break; 7464 7465 case SK_ConversionSequence: 7466 OS << "implicit conversion sequence ("; 7467 S->ICS->dump(); // FIXME: use OS 7468 OS << ")"; 7469 break; 7470 7471 case SK_ConversionSequenceNoNarrowing: 7472 OS << "implicit conversion sequence with narrowing prohibited ("; 7473 S->ICS->dump(); // FIXME: use OS 7474 OS << ")"; 7475 break; 7476 7477 case SK_ListInitialization: 7478 OS << "list aggregate initialization"; 7479 break; 7480 7481 case SK_UnwrapInitList: 7482 OS << "unwrap reference initializer list"; 7483 break; 7484 7485 case SK_RewrapInitList: 7486 OS << "rewrap reference initializer list"; 7487 break; 7488 7489 case SK_ConstructorInitialization: 7490 OS << "constructor initialization"; 7491 break; 7492 7493 case SK_ConstructorInitializationFromList: 7494 OS << "list initialization via constructor"; 7495 break; 7496 7497 case SK_ZeroInitialization: 7498 OS << "zero initialization"; 7499 break; 7500 7501 case SK_CAssignment: 7502 OS << "C assignment"; 7503 break; 7504 7505 case SK_StringInit: 7506 OS << "string initialization"; 7507 break; 7508 7509 case SK_ObjCObjectConversion: 7510 OS << "Objective-C object conversion"; 7511 break; 7512 7513 case SK_ArrayInit: 7514 OS << "array initialization"; 7515 break; 7516 7517 case SK_ParenthesizedArrayInit: 7518 OS << "parenthesized array initialization"; 7519 break; 7520 7521 case SK_PassByIndirectCopyRestore: 7522 OS << "pass by indirect copy and restore"; 7523 break; 7524 7525 case SK_PassByIndirectRestore: 7526 OS << "pass by indirect restore"; 7527 break; 7528 7529 case SK_ProduceObjCObject: 7530 OS << "Objective-C object retension"; 7531 break; 7532 7533 case SK_StdInitializerList: 7534 OS << "std::initializer_list from initializer list"; 7535 break; 7536 7537 case SK_StdInitializerListConstructorCall: 7538 OS << "list initialization from std::initializer_list"; 7539 break; 7540 7541 case SK_OCLSamplerInit: 7542 OS << "OpenCL sampler_t from integer constant"; 7543 break; 7544 7545 case SK_OCLZeroEvent: 7546 OS << "OpenCL event_t from zero"; 7547 break; 7548 } 7549 7550 OS << " [" << S->Type.getAsString() << ']'; 7551 } 7552 7553 OS << '\n'; 7554 } 7555 7556 void InitializationSequence::dump() const { 7557 dump(llvm::errs()); 7558 } 7559 7560 static void DiagnoseNarrowingInInitList(Sema &S, 7561 const ImplicitConversionSequence &ICS, 7562 QualType PreNarrowingType, 7563 QualType EntityType, 7564 const Expr *PostInit) { 7565 const StandardConversionSequence *SCS = nullptr; 7566 switch (ICS.getKind()) { 7567 case ImplicitConversionSequence::StandardConversion: 7568 SCS = &ICS.Standard; 7569 break; 7570 case ImplicitConversionSequence::UserDefinedConversion: 7571 SCS = &ICS.UserDefined.After; 7572 break; 7573 case ImplicitConversionSequence::AmbiguousConversion: 7574 case ImplicitConversionSequence::EllipsisConversion: 7575 case ImplicitConversionSequence::BadConversion: 7576 return; 7577 } 7578 7579 // C++11 [dcl.init.list]p7: Check whether this is a narrowing conversion. 7580 APValue ConstantValue; 7581 QualType ConstantType; 7582 switch (SCS->getNarrowingKind(S.Context, PostInit, ConstantValue, 7583 ConstantType)) { 7584 case NK_Not_Narrowing: 7585 // No narrowing occurred. 7586 return; 7587 7588 case NK_Type_Narrowing: 7589 // This was a floating-to-integer conversion, which is always considered a 7590 // narrowing conversion even if the value is a constant and can be 7591 // represented exactly as an integer. 7592 S.Diag(PostInit->getLocStart(), 7593 (S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus11) 7594 ? diag::warn_init_list_type_narrowing 7595 : diag::ext_init_list_type_narrowing) 7596 << PostInit->getSourceRange() 7597 << PreNarrowingType.getLocalUnqualifiedType() 7598 << EntityType.getLocalUnqualifiedType(); 7599 break; 7600 7601 case NK_Constant_Narrowing: 7602 // A constant value was narrowed. 7603 S.Diag(PostInit->getLocStart(), 7604 (S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus11) 7605 ? diag::warn_init_list_constant_narrowing 7606 : diag::ext_init_list_constant_narrowing) 7607 << PostInit->getSourceRange() 7608 << ConstantValue.getAsString(S.getASTContext(), ConstantType) 7609 << EntityType.getLocalUnqualifiedType(); 7610 break; 7611 7612 case NK_Variable_Narrowing: 7613 // A variable's value may have been narrowed. 7614 S.Diag(PostInit->getLocStart(), 7615 (S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus11) 7616 ? diag::warn_init_list_variable_narrowing 7617 : diag::ext_init_list_variable_narrowing) 7618 << PostInit->getSourceRange() 7619 << PreNarrowingType.getLocalUnqualifiedType() 7620 << EntityType.getLocalUnqualifiedType(); 7621 break; 7622 } 7623 7624 SmallString<128> StaticCast; 7625 llvm::raw_svector_ostream OS(StaticCast); 7626 OS << "static_cast<"; 7627 if (const TypedefType *TT = EntityType->getAs<TypedefType>()) { 7628 // It's important to use the typedef's name if there is one so that the 7629 // fixit doesn't break code using types like int64_t. 7630 // 7631 // FIXME: This will break if the typedef requires qualification. But 7632 // getQualifiedNameAsString() includes non-machine-parsable components. 7633 OS << *TT->getDecl(); 7634 } else if (const BuiltinType *BT = EntityType->getAs<BuiltinType>()) 7635 OS << BT->getName(S.getLangOpts()); 7636 else { 7637 // Oops, we didn't find the actual type of the variable. Don't emit a fixit 7638 // with a broken cast. 7639 return; 7640 } 7641 OS << ">("; 7642 S.Diag(PostInit->getLocStart(), diag::note_init_list_narrowing_silence) 7643 << PostInit->getSourceRange() 7644 << FixItHint::CreateInsertion(PostInit->getLocStart(), OS.str()) 7645 << FixItHint::CreateInsertion( 7646 S.getLocForEndOfToken(PostInit->getLocEnd()), ")"); 7647 } 7648 7649 //===----------------------------------------------------------------------===// 7650 // Initialization helper functions 7651 //===----------------------------------------------------------------------===// 7652 bool 7653 Sema::CanPerformCopyInitialization(const InitializedEntity &Entity, 7654 ExprResult Init) { 7655 if (Init.isInvalid()) 7656 return false; 7657 7658 Expr *InitE = Init.get(); 7659 assert(InitE && "No initialization expression"); 7660 7661 InitializationKind Kind 7662 = InitializationKind::CreateCopy(InitE->getLocStart(), SourceLocation()); 7663 InitializationSequence Seq(*this, Entity, Kind, InitE); 7664 return !Seq.Failed(); 7665 } 7666 7667 ExprResult 7668 Sema::PerformCopyInitialization(const InitializedEntity &Entity, 7669 SourceLocation EqualLoc, 7670 ExprResult Init, 7671 bool TopLevelOfInitList, 7672 bool AllowExplicit) { 7673 if (Init.isInvalid()) 7674 return ExprError(); 7675 7676 Expr *InitE = Init.get(); 7677 assert(InitE && "No initialization expression?"); 7678 7679 if (EqualLoc.isInvalid()) 7680 EqualLoc = InitE->getLocStart(); 7681 7682 InitializationKind Kind = InitializationKind::CreateCopy(InitE->getLocStart(), 7683 EqualLoc, 7684 AllowExplicit); 7685 InitializationSequence Seq(*this, Entity, Kind, InitE, TopLevelOfInitList); 7686 7687 ExprResult Result = Seq.Perform(*this, Entity, Kind, InitE); 7688 7689 return Result; 7690 } 7691