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