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_ParenthesizedListInitForReference: 3116 case FK_ArrayNeedsInitList: 3117 case FK_ArrayNeedsInitListOrStringLiteral: 3118 case FK_ArrayNeedsInitListOrWideStringLiteral: 3119 case FK_NarrowStringIntoWideCharArray: 3120 case FK_WideStringIntoCharArray: 3121 case FK_IncompatWideStringIntoWideChar: 3122 case FK_AddressOfOverloadFailed: // FIXME: Could do better 3123 case FK_NonConstLValueReferenceBindingToTemporary: 3124 case FK_NonConstLValueReferenceBindingToBitfield: 3125 case FK_NonConstLValueReferenceBindingToVectorElement: 3126 case FK_NonConstLValueReferenceBindingToUnrelated: 3127 case FK_RValueReferenceBindingToLValue: 3128 case FK_ReferenceInitDropsQualifiers: 3129 case FK_ReferenceInitFailed: 3130 case FK_ConversionFailed: 3131 case FK_ConversionFromPropertyFailed: 3132 case FK_TooManyInitsForScalar: 3133 case FK_ParenthesizedListInitForScalar: 3134 case FK_ReferenceBindingToInitList: 3135 case FK_InitListBadDestinationType: 3136 case FK_DefaultInitOfConst: 3137 case FK_Incomplete: 3138 case FK_ArrayTypeMismatch: 3139 case FK_NonConstantArrayInit: 3140 case FK_ListInitializationFailed: 3141 case FK_VariableLengthArrayHasInitializer: 3142 case FK_PlaceholderType: 3143 case FK_ExplicitConstructor: 3144 case FK_AddressOfUnaddressableFunction: 3145 return false; 3146 3147 case FK_ReferenceInitOverloadFailed: 3148 case FK_UserConversionOverloadFailed: 3149 case FK_ConstructorOverloadFailed: 3150 case FK_ListConstructorOverloadFailed: 3151 return FailedOverloadResult == OR_Ambiguous; 3152 } 3153 3154 llvm_unreachable("Invalid EntityKind!"); 3155 } 3156 3157 bool InitializationSequence::isConstructorInitialization() const { 3158 return !Steps.empty() && Steps.back().Kind == SK_ConstructorInitialization; 3159 } 3160 3161 void 3162 InitializationSequence 3163 ::AddAddressOverloadResolutionStep(FunctionDecl *Function, 3164 DeclAccessPair Found, 3165 bool HadMultipleCandidates) { 3166 Step S; 3167 S.Kind = SK_ResolveAddressOfOverloadedFunction; 3168 S.Type = Function->getType(); 3169 S.Function.HadMultipleCandidates = HadMultipleCandidates; 3170 S.Function.Function = Function; 3171 S.Function.FoundDecl = Found; 3172 Steps.push_back(S); 3173 } 3174 3175 void InitializationSequence::AddDerivedToBaseCastStep(QualType BaseType, 3176 ExprValueKind VK) { 3177 Step S; 3178 switch (VK) { 3179 case VK_RValue: S.Kind = SK_CastDerivedToBaseRValue; break; 3180 case VK_XValue: S.Kind = SK_CastDerivedToBaseXValue; break; 3181 case VK_LValue: S.Kind = SK_CastDerivedToBaseLValue; break; 3182 } 3183 S.Type = BaseType; 3184 Steps.push_back(S); 3185 } 3186 3187 void InitializationSequence::AddReferenceBindingStep(QualType T, 3188 bool BindingTemporary) { 3189 Step S; 3190 S.Kind = BindingTemporary? SK_BindReferenceToTemporary : SK_BindReference; 3191 S.Type = T; 3192 Steps.push_back(S); 3193 } 3194 3195 void InitializationSequence::AddFinalCopy(QualType T) { 3196 Step S; 3197 S.Kind = SK_FinalCopy; 3198 S.Type = T; 3199 Steps.push_back(S); 3200 } 3201 3202 void InitializationSequence::AddExtraneousCopyToTemporary(QualType T) { 3203 Step S; 3204 S.Kind = SK_ExtraneousCopyToTemporary; 3205 S.Type = T; 3206 Steps.push_back(S); 3207 } 3208 3209 void 3210 InitializationSequence::AddUserConversionStep(FunctionDecl *Function, 3211 DeclAccessPair FoundDecl, 3212 QualType T, 3213 bool HadMultipleCandidates) { 3214 Step S; 3215 S.Kind = SK_UserConversion; 3216 S.Type = T; 3217 S.Function.HadMultipleCandidates = HadMultipleCandidates; 3218 S.Function.Function = Function; 3219 S.Function.FoundDecl = FoundDecl; 3220 Steps.push_back(S); 3221 } 3222 3223 void InitializationSequence::AddQualificationConversionStep(QualType Ty, 3224 ExprValueKind VK) { 3225 Step S; 3226 S.Kind = SK_QualificationConversionRValue; // work around a gcc warning 3227 switch (VK) { 3228 case VK_RValue: 3229 S.Kind = SK_QualificationConversionRValue; 3230 break; 3231 case VK_XValue: 3232 S.Kind = SK_QualificationConversionXValue; 3233 break; 3234 case VK_LValue: 3235 S.Kind = SK_QualificationConversionLValue; 3236 break; 3237 } 3238 S.Type = Ty; 3239 Steps.push_back(S); 3240 } 3241 3242 void InitializationSequence::AddAtomicConversionStep(QualType Ty) { 3243 Step S; 3244 S.Kind = SK_AtomicConversion; 3245 S.Type = Ty; 3246 Steps.push_back(S); 3247 } 3248 3249 void InitializationSequence::AddLValueToRValueStep(QualType Ty) { 3250 assert(!Ty.hasQualifiers() && "rvalues may not have qualifiers"); 3251 3252 Step S; 3253 S.Kind = SK_LValueToRValue; 3254 S.Type = Ty; 3255 Steps.push_back(S); 3256 } 3257 3258 void InitializationSequence::AddConversionSequenceStep( 3259 const ImplicitConversionSequence &ICS, QualType T, 3260 bool TopLevelOfInitList) { 3261 Step S; 3262 S.Kind = TopLevelOfInitList ? SK_ConversionSequenceNoNarrowing 3263 : SK_ConversionSequence; 3264 S.Type = T; 3265 S.ICS = new ImplicitConversionSequence(ICS); 3266 Steps.push_back(S); 3267 } 3268 3269 void InitializationSequence::AddListInitializationStep(QualType T) { 3270 Step S; 3271 S.Kind = SK_ListInitialization; 3272 S.Type = T; 3273 Steps.push_back(S); 3274 } 3275 3276 void InitializationSequence::AddConstructorInitializationStep( 3277 DeclAccessPair FoundDecl, CXXConstructorDecl *Constructor, QualType T, 3278 bool HadMultipleCandidates, bool FromInitList, bool AsInitList) { 3279 Step S; 3280 S.Kind = FromInitList ? AsInitList ? SK_StdInitializerListConstructorCall 3281 : SK_ConstructorInitializationFromList 3282 : SK_ConstructorInitialization; 3283 S.Type = T; 3284 S.Function.HadMultipleCandidates = HadMultipleCandidates; 3285 S.Function.Function = Constructor; 3286 S.Function.FoundDecl = FoundDecl; 3287 Steps.push_back(S); 3288 } 3289 3290 void InitializationSequence::AddZeroInitializationStep(QualType T) { 3291 Step S; 3292 S.Kind = SK_ZeroInitialization; 3293 S.Type = T; 3294 Steps.push_back(S); 3295 } 3296 3297 void InitializationSequence::AddCAssignmentStep(QualType T) { 3298 Step S; 3299 S.Kind = SK_CAssignment; 3300 S.Type = T; 3301 Steps.push_back(S); 3302 } 3303 3304 void InitializationSequence::AddStringInitStep(QualType T) { 3305 Step S; 3306 S.Kind = SK_StringInit; 3307 S.Type = T; 3308 Steps.push_back(S); 3309 } 3310 3311 void InitializationSequence::AddObjCObjectConversionStep(QualType T) { 3312 Step S; 3313 S.Kind = SK_ObjCObjectConversion; 3314 S.Type = T; 3315 Steps.push_back(S); 3316 } 3317 3318 void InitializationSequence::AddArrayInitStep(QualType T, bool IsGNUExtension) { 3319 Step S; 3320 S.Kind = IsGNUExtension ? SK_GNUArrayInit : SK_ArrayInit; 3321 S.Type = T; 3322 Steps.push_back(S); 3323 } 3324 3325 void InitializationSequence::AddArrayInitLoopStep(QualType T, QualType EltT) { 3326 Step S; 3327 S.Kind = SK_ArrayLoopIndex; 3328 S.Type = EltT; 3329 Steps.insert(Steps.begin(), S); 3330 3331 S.Kind = SK_ArrayLoopInit; 3332 S.Type = T; 3333 Steps.push_back(S); 3334 } 3335 3336 void InitializationSequence::AddParenthesizedArrayInitStep(QualType T) { 3337 Step S; 3338 S.Kind = SK_ParenthesizedArrayInit; 3339 S.Type = T; 3340 Steps.push_back(S); 3341 } 3342 3343 void InitializationSequence::AddPassByIndirectCopyRestoreStep(QualType type, 3344 bool shouldCopy) { 3345 Step s; 3346 s.Kind = (shouldCopy ? SK_PassByIndirectCopyRestore 3347 : SK_PassByIndirectRestore); 3348 s.Type = type; 3349 Steps.push_back(s); 3350 } 3351 3352 void InitializationSequence::AddProduceObjCObjectStep(QualType T) { 3353 Step S; 3354 S.Kind = SK_ProduceObjCObject; 3355 S.Type = T; 3356 Steps.push_back(S); 3357 } 3358 3359 void InitializationSequence::AddStdInitializerListConstructionStep(QualType T) { 3360 Step S; 3361 S.Kind = SK_StdInitializerList; 3362 S.Type = T; 3363 Steps.push_back(S); 3364 } 3365 3366 void InitializationSequence::AddOCLSamplerInitStep(QualType T) { 3367 Step S; 3368 S.Kind = SK_OCLSamplerInit; 3369 S.Type = T; 3370 Steps.push_back(S); 3371 } 3372 3373 void InitializationSequence::AddOCLZeroEventStep(QualType T) { 3374 Step S; 3375 S.Kind = SK_OCLZeroEvent; 3376 S.Type = T; 3377 Steps.push_back(S); 3378 } 3379 3380 void InitializationSequence::AddOCLZeroQueueStep(QualType T) { 3381 Step S; 3382 S.Kind = SK_OCLZeroQueue; 3383 S.Type = T; 3384 Steps.push_back(S); 3385 } 3386 3387 void InitializationSequence::RewrapReferenceInitList(QualType T, 3388 InitListExpr *Syntactic) { 3389 assert(Syntactic->getNumInits() == 1 && 3390 "Can only rewrap trivial init lists."); 3391 Step S; 3392 S.Kind = SK_UnwrapInitList; 3393 S.Type = Syntactic->getInit(0)->getType(); 3394 Steps.insert(Steps.begin(), S); 3395 3396 S.Kind = SK_RewrapInitList; 3397 S.Type = T; 3398 S.WrappingSyntacticList = Syntactic; 3399 Steps.push_back(S); 3400 } 3401 3402 void InitializationSequence::SetOverloadFailure(FailureKind Failure, 3403 OverloadingResult Result) { 3404 setSequenceKind(FailedSequence); 3405 this->Failure = Failure; 3406 this->FailedOverloadResult = Result; 3407 } 3408 3409 //===----------------------------------------------------------------------===// 3410 // Attempt initialization 3411 //===----------------------------------------------------------------------===// 3412 3413 /// Tries to add a zero initializer. Returns true if that worked. 3414 static bool 3415 maybeRecoverWithZeroInitialization(Sema &S, InitializationSequence &Sequence, 3416 const InitializedEntity &Entity) { 3417 if (Entity.getKind() != InitializedEntity::EK_Variable) 3418 return false; 3419 3420 VarDecl *VD = cast<VarDecl>(Entity.getDecl()); 3421 if (VD->getInit() || VD->getLocEnd().isMacroID()) 3422 return false; 3423 3424 QualType VariableTy = VD->getType().getCanonicalType(); 3425 SourceLocation Loc = S.getLocForEndOfToken(VD->getLocEnd()); 3426 std::string Init = S.getFixItZeroInitializerForType(VariableTy, Loc); 3427 if (!Init.empty()) { 3428 Sequence.AddZeroInitializationStep(Entity.getType()); 3429 Sequence.SetZeroInitializationFixit(Init, Loc); 3430 return true; 3431 } 3432 return false; 3433 } 3434 3435 static void MaybeProduceObjCObject(Sema &S, 3436 InitializationSequence &Sequence, 3437 const InitializedEntity &Entity) { 3438 if (!S.getLangOpts().ObjCAutoRefCount) return; 3439 3440 /// When initializing a parameter, produce the value if it's marked 3441 /// __attribute__((ns_consumed)). 3442 if (Entity.isParameterKind()) { 3443 if (!Entity.isParameterConsumed()) 3444 return; 3445 3446 assert(Entity.getType()->isObjCRetainableType() && 3447 "consuming an object of unretainable type?"); 3448 Sequence.AddProduceObjCObjectStep(Entity.getType()); 3449 3450 /// When initializing a return value, if the return type is a 3451 /// retainable type, then returns need to immediately retain the 3452 /// object. If an autorelease is required, it will be done at the 3453 /// last instant. 3454 } else if (Entity.getKind() == InitializedEntity::EK_Result) { 3455 if (!Entity.getType()->isObjCRetainableType()) 3456 return; 3457 3458 Sequence.AddProduceObjCObjectStep(Entity.getType()); 3459 } 3460 } 3461 3462 static void TryListInitialization(Sema &S, 3463 const InitializedEntity &Entity, 3464 const InitializationKind &Kind, 3465 InitListExpr *InitList, 3466 InitializationSequence &Sequence, 3467 bool TreatUnavailableAsInvalid); 3468 3469 /// \brief When initializing from init list via constructor, handle 3470 /// initialization of an object of type std::initializer_list<T>. 3471 /// 3472 /// \return true if we have handled initialization of an object of type 3473 /// std::initializer_list<T>, false otherwise. 3474 static bool TryInitializerListConstruction(Sema &S, 3475 InitListExpr *List, 3476 QualType DestType, 3477 InitializationSequence &Sequence, 3478 bool TreatUnavailableAsInvalid) { 3479 QualType E; 3480 if (!S.isStdInitializerList(DestType, &E)) 3481 return false; 3482 3483 if (!S.isCompleteType(List->getExprLoc(), E)) { 3484 Sequence.setIncompleteTypeFailure(E); 3485 return true; 3486 } 3487 3488 // Try initializing a temporary array from the init list. 3489 QualType ArrayType = S.Context.getConstantArrayType( 3490 E.withConst(), llvm::APInt(S.Context.getTypeSize(S.Context.getSizeType()), 3491 List->getNumInits()), 3492 clang::ArrayType::Normal, 0); 3493 InitializedEntity HiddenArray = 3494 InitializedEntity::InitializeTemporary(ArrayType); 3495 InitializationKind Kind = 3496 InitializationKind::CreateDirectList(List->getExprLoc()); 3497 TryListInitialization(S, HiddenArray, Kind, List, Sequence, 3498 TreatUnavailableAsInvalid); 3499 if (Sequence) 3500 Sequence.AddStdInitializerListConstructionStep(DestType); 3501 return true; 3502 } 3503 3504 /// Determine if the constructor has the signature of a copy or move 3505 /// constructor for the type T of the class in which it was found. That is, 3506 /// determine if its first parameter is of type T or reference to (possibly 3507 /// cv-qualified) T. 3508 static bool hasCopyOrMoveCtorParam(ASTContext &Ctx, 3509 const ConstructorInfo &Info) { 3510 if (Info.Constructor->getNumParams() == 0) 3511 return false; 3512 3513 QualType ParmT = 3514 Info.Constructor->getParamDecl(0)->getType().getNonReferenceType(); 3515 QualType ClassT = 3516 Ctx.getRecordType(cast<CXXRecordDecl>(Info.FoundDecl->getDeclContext())); 3517 3518 return Ctx.hasSameUnqualifiedType(ParmT, ClassT); 3519 } 3520 3521 static OverloadingResult 3522 ResolveConstructorOverload(Sema &S, SourceLocation DeclLoc, 3523 MultiExprArg Args, 3524 OverloadCandidateSet &CandidateSet, 3525 DeclContext::lookup_result Ctors, 3526 OverloadCandidateSet::iterator &Best, 3527 bool CopyInitializing, bool AllowExplicit, 3528 bool OnlyListConstructors, bool IsListInit, 3529 bool SecondStepOfCopyInit = false) { 3530 CandidateSet.clear(); 3531 3532 for (NamedDecl *D : Ctors) { 3533 auto Info = getConstructorInfo(D); 3534 if (!Info.Constructor || Info.Constructor->isInvalidDecl()) 3535 continue; 3536 3537 if (!AllowExplicit && Info.Constructor->isExplicit()) 3538 continue; 3539 3540 if (OnlyListConstructors && !S.isInitListConstructor(Info.Constructor)) 3541 continue; 3542 3543 // C++11 [over.best.ics]p4: 3544 // ... and the constructor or user-defined conversion function is a 3545 // candidate by 3546 // - 13.3.1.3, when the argument is the temporary in the second step 3547 // of a class copy-initialization, or 3548 // - 13.3.1.4, 13.3.1.5, or 13.3.1.6 (in all cases), [not handled here] 3549 // - the second phase of 13.3.1.7 when the initializer list has exactly 3550 // one element that is itself an initializer list, and the target is 3551 // the first parameter of a constructor of class X, and the conversion 3552 // is to X or reference to (possibly cv-qualified X), 3553 // user-defined conversion sequences are not considered. 3554 bool SuppressUserConversions = 3555 SecondStepOfCopyInit || 3556 (IsListInit && Args.size() == 1 && isa<InitListExpr>(Args[0]) && 3557 hasCopyOrMoveCtorParam(S.Context, Info)); 3558 3559 if (Info.ConstructorTmpl) 3560 S.AddTemplateOverloadCandidate(Info.ConstructorTmpl, Info.FoundDecl, 3561 /*ExplicitArgs*/ nullptr, Args, 3562 CandidateSet, SuppressUserConversions); 3563 else { 3564 // C++ [over.match.copy]p1: 3565 // - When initializing a temporary to be bound to the first parameter 3566 // of a constructor [for type T] that takes a reference to possibly 3567 // cv-qualified T as its first argument, called with a single 3568 // argument in the context of direct-initialization, explicit 3569 // conversion functions are also considered. 3570 // FIXME: What if a constructor template instantiates to such a signature? 3571 bool AllowExplicitConv = AllowExplicit && !CopyInitializing && 3572 Args.size() == 1 && 3573 hasCopyOrMoveCtorParam(S.Context, Info); 3574 S.AddOverloadCandidate(Info.Constructor, Info.FoundDecl, Args, 3575 CandidateSet, SuppressUserConversions, 3576 /*PartialOverloading=*/false, 3577 /*AllowExplicit=*/AllowExplicitConv); 3578 } 3579 } 3580 3581 // Perform overload resolution and return the result. 3582 return CandidateSet.BestViableFunction(S, DeclLoc, Best); 3583 } 3584 3585 /// \brief Attempt initialization by constructor (C++ [dcl.init]), which 3586 /// enumerates the constructors of the initialized entity and performs overload 3587 /// resolution to select the best. 3588 /// \param DestType The destination class type. 3589 /// \param DestArrayType The destination type, which is either DestType or 3590 /// a (possibly multidimensional) array of DestType. 3591 /// \param IsListInit Is this list-initialization? 3592 /// \param IsInitListCopy Is this non-list-initialization resulting from a 3593 /// list-initialization from {x} where x is the same 3594 /// type as the entity? 3595 static void TryConstructorInitialization(Sema &S, 3596 const InitializedEntity &Entity, 3597 const InitializationKind &Kind, 3598 MultiExprArg Args, QualType DestType, 3599 QualType DestArrayType, 3600 InitializationSequence &Sequence, 3601 bool IsListInit = false, 3602 bool IsInitListCopy = false) { 3603 assert(((!IsListInit && !IsInitListCopy) || 3604 (Args.size() == 1 && isa<InitListExpr>(Args[0]))) && 3605 "IsListInit/IsInitListCopy must come with a single initializer list " 3606 "argument."); 3607 InitListExpr *ILE = 3608 (IsListInit || IsInitListCopy) ? cast<InitListExpr>(Args[0]) : nullptr; 3609 MultiExprArg UnwrappedArgs = 3610 ILE ? MultiExprArg(ILE->getInits(), ILE->getNumInits()) : Args; 3611 3612 // The type we're constructing needs to be complete. 3613 if (!S.isCompleteType(Kind.getLocation(), DestType)) { 3614 Sequence.setIncompleteTypeFailure(DestType); 3615 return; 3616 } 3617 3618 // C++1z [dcl.init]p17: 3619 // - If the initializer expression is a prvalue and the cv-unqualified 3620 // version of the source type is the same class as the class of the 3621 // destination, the initializer expression is used to initialize the 3622 // destination object. 3623 // Per DR (no number yet), this does not apply when initializing a base 3624 // class or delegating to another constructor from a mem-initializer. 3625 if (S.getLangOpts().CPlusPlus1z && 3626 Entity.getKind() != InitializedEntity::EK_Base && 3627 Entity.getKind() != InitializedEntity::EK_Delegating && 3628 UnwrappedArgs.size() == 1 && UnwrappedArgs[0]->isRValue() && 3629 S.Context.hasSameUnqualifiedType(UnwrappedArgs[0]->getType(), DestType)) { 3630 // Convert qualifications if necessary. 3631 Sequence.AddQualificationConversionStep(DestType, VK_RValue); 3632 if (ILE) 3633 Sequence.RewrapReferenceInitList(DestType, ILE); 3634 return; 3635 } 3636 3637 const RecordType *DestRecordType = DestType->getAs<RecordType>(); 3638 assert(DestRecordType && "Constructor initialization requires record type"); 3639 CXXRecordDecl *DestRecordDecl 3640 = cast<CXXRecordDecl>(DestRecordType->getDecl()); 3641 3642 // Build the candidate set directly in the initialization sequence 3643 // structure, so that it will persist if we fail. 3644 OverloadCandidateSet &CandidateSet = Sequence.getFailedCandidateSet(); 3645 3646 // Determine whether we are allowed to call explicit constructors or 3647 // explicit conversion operators. 3648 bool AllowExplicit = Kind.AllowExplicit() || IsListInit; 3649 bool CopyInitialization = Kind.getKind() == InitializationKind::IK_Copy; 3650 3651 // - Otherwise, if T is a class type, constructors are considered. The 3652 // applicable constructors are enumerated, and the best one is chosen 3653 // through overload resolution. 3654 DeclContext::lookup_result Ctors = S.LookupConstructors(DestRecordDecl); 3655 3656 OverloadingResult Result = OR_No_Viable_Function; 3657 OverloadCandidateSet::iterator Best; 3658 bool AsInitializerList = false; 3659 3660 // C++11 [over.match.list]p1, per DR1467: 3661 // When objects of non-aggregate type T are list-initialized, such that 3662 // 8.5.4 [dcl.init.list] specifies that overload resolution is performed 3663 // according to the rules in this section, overload resolution selects 3664 // the constructor in two phases: 3665 // 3666 // - Initially, the candidate functions are the initializer-list 3667 // constructors of the class T and the argument list consists of the 3668 // initializer list as a single argument. 3669 if (IsListInit) { 3670 AsInitializerList = true; 3671 3672 // If the initializer list has no elements and T has a default constructor, 3673 // the first phase is omitted. 3674 if (!(UnwrappedArgs.empty() && DestRecordDecl->hasDefaultConstructor())) 3675 Result = ResolveConstructorOverload(S, Kind.getLocation(), Args, 3676 CandidateSet, Ctors, Best, 3677 CopyInitialization, AllowExplicit, 3678 /*OnlyListConstructor=*/true, 3679 IsListInit); 3680 } 3681 3682 // C++11 [over.match.list]p1: 3683 // - If no viable initializer-list constructor is found, overload resolution 3684 // is performed again, where the candidate functions are all the 3685 // constructors of the class T and the argument list consists of the 3686 // elements of the initializer list. 3687 if (Result == OR_No_Viable_Function) { 3688 AsInitializerList = false; 3689 Result = ResolveConstructorOverload(S, Kind.getLocation(), UnwrappedArgs, 3690 CandidateSet, Ctors, Best, 3691 CopyInitialization, AllowExplicit, 3692 /*OnlyListConstructors=*/false, 3693 IsListInit); 3694 } 3695 if (Result) { 3696 Sequence.SetOverloadFailure(IsListInit ? 3697 InitializationSequence::FK_ListConstructorOverloadFailed : 3698 InitializationSequence::FK_ConstructorOverloadFailed, 3699 Result); 3700 return; 3701 } 3702 3703 // C++11 [dcl.init]p6: 3704 // If a program calls for the default initialization of an object 3705 // of a const-qualified type T, T shall be a class type with a 3706 // user-provided default constructor. 3707 // C++ core issue 253 proposal: 3708 // If the implicit default constructor initializes all subobjects, no 3709 // initializer should be required. 3710 // The 253 proposal is for example needed to process libstdc++ headers in 5.x. 3711 CXXConstructorDecl *CtorDecl = cast<CXXConstructorDecl>(Best->Function); 3712 if (Kind.getKind() == InitializationKind::IK_Default && 3713 Entity.getType().isConstQualified()) { 3714 if (!CtorDecl->getParent()->allowConstDefaultInit()) { 3715 if (!maybeRecoverWithZeroInitialization(S, Sequence, Entity)) 3716 Sequence.SetFailed(InitializationSequence::FK_DefaultInitOfConst); 3717 return; 3718 } 3719 } 3720 3721 // C++11 [over.match.list]p1: 3722 // In copy-list-initialization, if an explicit constructor is chosen, the 3723 // initializer is ill-formed. 3724 if (IsListInit && !Kind.AllowExplicit() && CtorDecl->isExplicit()) { 3725 Sequence.SetFailed(InitializationSequence::FK_ExplicitConstructor); 3726 return; 3727 } 3728 3729 // Add the constructor initialization step. Any cv-qualification conversion is 3730 // subsumed by the initialization. 3731 bool HadMultipleCandidates = (CandidateSet.size() > 1); 3732 Sequence.AddConstructorInitializationStep( 3733 Best->FoundDecl, CtorDecl, DestArrayType, HadMultipleCandidates, 3734 IsListInit | IsInitListCopy, AsInitializerList); 3735 } 3736 3737 static bool 3738 ResolveOverloadedFunctionForReferenceBinding(Sema &S, 3739 Expr *Initializer, 3740 QualType &SourceType, 3741 QualType &UnqualifiedSourceType, 3742 QualType UnqualifiedTargetType, 3743 InitializationSequence &Sequence) { 3744 if (S.Context.getCanonicalType(UnqualifiedSourceType) == 3745 S.Context.OverloadTy) { 3746 DeclAccessPair Found; 3747 bool HadMultipleCandidates = false; 3748 if (FunctionDecl *Fn 3749 = S.ResolveAddressOfOverloadedFunction(Initializer, 3750 UnqualifiedTargetType, 3751 false, Found, 3752 &HadMultipleCandidates)) { 3753 Sequence.AddAddressOverloadResolutionStep(Fn, Found, 3754 HadMultipleCandidates); 3755 SourceType = Fn->getType(); 3756 UnqualifiedSourceType = SourceType.getUnqualifiedType(); 3757 } else if (!UnqualifiedTargetType->isRecordType()) { 3758 Sequence.SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 3759 return true; 3760 } 3761 } 3762 return false; 3763 } 3764 3765 static void TryReferenceInitializationCore(Sema &S, 3766 const InitializedEntity &Entity, 3767 const InitializationKind &Kind, 3768 Expr *Initializer, 3769 QualType cv1T1, QualType T1, 3770 Qualifiers T1Quals, 3771 QualType cv2T2, QualType T2, 3772 Qualifiers T2Quals, 3773 InitializationSequence &Sequence); 3774 3775 static void TryValueInitialization(Sema &S, 3776 const InitializedEntity &Entity, 3777 const InitializationKind &Kind, 3778 InitializationSequence &Sequence, 3779 InitListExpr *InitList = nullptr); 3780 3781 /// \brief Attempt list initialization of a reference. 3782 static void TryReferenceListInitialization(Sema &S, 3783 const InitializedEntity &Entity, 3784 const InitializationKind &Kind, 3785 InitListExpr *InitList, 3786 InitializationSequence &Sequence, 3787 bool TreatUnavailableAsInvalid) { 3788 // First, catch C++03 where this isn't possible. 3789 if (!S.getLangOpts().CPlusPlus11) { 3790 Sequence.SetFailed(InitializationSequence::FK_ReferenceBindingToInitList); 3791 return; 3792 } 3793 // Can't reference initialize a compound literal. 3794 if (Entity.getKind() == InitializedEntity::EK_CompoundLiteralInit) { 3795 Sequence.SetFailed(InitializationSequence::FK_ReferenceBindingToInitList); 3796 return; 3797 } 3798 3799 QualType DestType = Entity.getType(); 3800 QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType(); 3801 Qualifiers T1Quals; 3802 QualType T1 = S.Context.getUnqualifiedArrayType(cv1T1, T1Quals); 3803 3804 // Reference initialization via an initializer list works thus: 3805 // If the initializer list consists of a single element that is 3806 // reference-related to the referenced type, bind directly to that element 3807 // (possibly creating temporaries). 3808 // Otherwise, initialize a temporary with the initializer list and 3809 // bind to that. 3810 if (InitList->getNumInits() == 1) { 3811 Expr *Initializer = InitList->getInit(0); 3812 QualType cv2T2 = Initializer->getType(); 3813 Qualifiers T2Quals; 3814 QualType T2 = S.Context.getUnqualifiedArrayType(cv2T2, T2Quals); 3815 3816 // If this fails, creating a temporary wouldn't work either. 3817 if (ResolveOverloadedFunctionForReferenceBinding(S, Initializer, cv2T2, T2, 3818 T1, Sequence)) 3819 return; 3820 3821 SourceLocation DeclLoc = Initializer->getLocStart(); 3822 bool dummy1, dummy2, dummy3; 3823 Sema::ReferenceCompareResult RefRelationship 3824 = S.CompareReferenceRelationship(DeclLoc, cv1T1, cv2T2, dummy1, 3825 dummy2, dummy3); 3826 if (RefRelationship >= Sema::Ref_Related) { 3827 // Try to bind the reference here. 3828 TryReferenceInitializationCore(S, Entity, Kind, Initializer, cv1T1, T1, 3829 T1Quals, cv2T2, T2, T2Quals, Sequence); 3830 if (Sequence) 3831 Sequence.RewrapReferenceInitList(cv1T1, InitList); 3832 return; 3833 } 3834 3835 // Update the initializer if we've resolved an overloaded function. 3836 if (Sequence.step_begin() != Sequence.step_end()) 3837 Sequence.RewrapReferenceInitList(cv1T1, InitList); 3838 } 3839 3840 // Not reference-related. Create a temporary and bind to that. 3841 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary(cv1T1); 3842 3843 TryListInitialization(S, TempEntity, Kind, InitList, Sequence, 3844 TreatUnavailableAsInvalid); 3845 if (Sequence) { 3846 if (DestType->isRValueReferenceType() || 3847 (T1Quals.hasConst() && !T1Quals.hasVolatile())) 3848 Sequence.AddReferenceBindingStep(cv1T1, /*bindingTemporary=*/true); 3849 else 3850 Sequence.SetFailed( 3851 InitializationSequence::FK_NonConstLValueReferenceBindingToTemporary); 3852 } 3853 } 3854 3855 /// \brief Attempt list initialization (C++0x [dcl.init.list]) 3856 static void TryListInitialization(Sema &S, 3857 const InitializedEntity &Entity, 3858 const InitializationKind &Kind, 3859 InitListExpr *InitList, 3860 InitializationSequence &Sequence, 3861 bool TreatUnavailableAsInvalid) { 3862 QualType DestType = Entity.getType(); 3863 3864 // C++ doesn't allow scalar initialization with more than one argument. 3865 // But C99 complex numbers are scalars and it makes sense there. 3866 if (S.getLangOpts().CPlusPlus && DestType->isScalarType() && 3867 !DestType->isAnyComplexType() && InitList->getNumInits() > 1) { 3868 Sequence.SetFailed(InitializationSequence::FK_TooManyInitsForScalar); 3869 return; 3870 } 3871 if (DestType->isReferenceType()) { 3872 TryReferenceListInitialization(S, Entity, Kind, InitList, Sequence, 3873 TreatUnavailableAsInvalid); 3874 return; 3875 } 3876 3877 if (DestType->isRecordType() && 3878 !S.isCompleteType(InitList->getLocStart(), DestType)) { 3879 Sequence.setIncompleteTypeFailure(DestType); 3880 return; 3881 } 3882 3883 // C++11 [dcl.init.list]p3, per DR1467: 3884 // - If T is a class type and the initializer list has a single element of 3885 // type cv U, where U is T or a class derived from T, the object is 3886 // initialized from that element (by copy-initialization for 3887 // copy-list-initialization, or by direct-initialization for 3888 // direct-list-initialization). 3889 // - Otherwise, if T is a character array and the initializer list has a 3890 // single element that is an appropriately-typed string literal 3891 // (8.5.2 [dcl.init.string]), initialization is performed as described 3892 // in that section. 3893 // - Otherwise, if T is an aggregate, [...] (continue below). 3894 if (S.getLangOpts().CPlusPlus11 && InitList->getNumInits() == 1) { 3895 if (DestType->isRecordType()) { 3896 QualType InitType = InitList->getInit(0)->getType(); 3897 if (S.Context.hasSameUnqualifiedType(InitType, DestType) || 3898 S.IsDerivedFrom(InitList->getLocStart(), InitType, DestType)) { 3899 Expr *InitListAsExpr = InitList; 3900 TryConstructorInitialization(S, Entity, Kind, InitListAsExpr, DestType, 3901 DestType, Sequence, 3902 /*InitListSyntax*/false, 3903 /*IsInitListCopy*/true); 3904 return; 3905 } 3906 } 3907 if (const ArrayType *DestAT = S.Context.getAsArrayType(DestType)) { 3908 Expr *SubInit[1] = {InitList->getInit(0)}; 3909 if (!isa<VariableArrayType>(DestAT) && 3910 IsStringInit(SubInit[0], DestAT, S.Context) == SIF_None) { 3911 InitializationKind SubKind = 3912 Kind.getKind() == InitializationKind::IK_DirectList 3913 ? InitializationKind::CreateDirect(Kind.getLocation(), 3914 InitList->getLBraceLoc(), 3915 InitList->getRBraceLoc()) 3916 : Kind; 3917 Sequence.InitializeFrom(S, Entity, SubKind, SubInit, 3918 /*TopLevelOfInitList*/ true, 3919 TreatUnavailableAsInvalid); 3920 3921 // TryStringLiteralInitialization() (in InitializeFrom()) will fail if 3922 // the element is not an appropriately-typed string literal, in which 3923 // case we should proceed as in C++11 (below). 3924 if (Sequence) { 3925 Sequence.RewrapReferenceInitList(Entity.getType(), InitList); 3926 return; 3927 } 3928 } 3929 } 3930 } 3931 3932 // C++11 [dcl.init.list]p3: 3933 // - If T is an aggregate, aggregate initialization is performed. 3934 if ((DestType->isRecordType() && !DestType->isAggregateType()) || 3935 (S.getLangOpts().CPlusPlus11 && 3936 S.isStdInitializerList(DestType, nullptr))) { 3937 if (S.getLangOpts().CPlusPlus11) { 3938 // - Otherwise, if the initializer list has no elements and T is a 3939 // class type with a default constructor, the object is 3940 // value-initialized. 3941 if (InitList->getNumInits() == 0) { 3942 CXXRecordDecl *RD = DestType->getAsCXXRecordDecl(); 3943 if (RD->hasDefaultConstructor()) { 3944 TryValueInitialization(S, Entity, Kind, Sequence, InitList); 3945 return; 3946 } 3947 } 3948 3949 // - Otherwise, if T is a specialization of std::initializer_list<E>, 3950 // an initializer_list object constructed [...] 3951 if (TryInitializerListConstruction(S, InitList, DestType, Sequence, 3952 TreatUnavailableAsInvalid)) 3953 return; 3954 3955 // - Otherwise, if T is a class type, constructors are considered. 3956 Expr *InitListAsExpr = InitList; 3957 TryConstructorInitialization(S, Entity, Kind, InitListAsExpr, DestType, 3958 DestType, Sequence, /*InitListSyntax*/true); 3959 } else 3960 Sequence.SetFailed(InitializationSequence::FK_InitListBadDestinationType); 3961 return; 3962 } 3963 3964 if (S.getLangOpts().CPlusPlus && !DestType->isAggregateType() && 3965 InitList->getNumInits() == 1) { 3966 Expr *E = InitList->getInit(0); 3967 3968 // - Otherwise, if T is an enumeration with a fixed underlying type, 3969 // the initializer-list has a single element v, and the initialization 3970 // is direct-list-initialization, the object is initialized with the 3971 // value T(v); if a narrowing conversion is required to convert v to 3972 // the underlying type of T, the program is ill-formed. 3973 auto *ET = DestType->getAs<EnumType>(); 3974 if (S.getLangOpts().CPlusPlus1z && 3975 Kind.getKind() == InitializationKind::IK_DirectList && 3976 ET && ET->getDecl()->isFixed() && 3977 !S.Context.hasSameUnqualifiedType(E->getType(), DestType) && 3978 (E->getType()->isIntegralOrEnumerationType() || 3979 E->getType()->isFloatingType())) { 3980 // There are two ways that T(v) can work when T is an enumeration type. 3981 // If there is either an implicit conversion sequence from v to T or 3982 // a conversion function that can convert from v to T, then we use that. 3983 // Otherwise, if v is of integral, enumeration, or floating-point type, 3984 // it is converted to the enumeration type via its underlying type. 3985 // There is no overlap possible between these two cases (except when the 3986 // source value is already of the destination type), and the first 3987 // case is handled by the general case for single-element lists below. 3988 ImplicitConversionSequence ICS; 3989 ICS.setStandard(); 3990 ICS.Standard.setAsIdentityConversion(); 3991 if (!E->isRValue()) 3992 ICS.Standard.First = ICK_Lvalue_To_Rvalue; 3993 // If E is of a floating-point type, then the conversion is ill-formed 3994 // due to narrowing, but go through the motions in order to produce the 3995 // right diagnostic. 3996 ICS.Standard.Second = E->getType()->isFloatingType() 3997 ? ICK_Floating_Integral 3998 : ICK_Integral_Conversion; 3999 ICS.Standard.setFromType(E->getType()); 4000 ICS.Standard.setToType(0, E->getType()); 4001 ICS.Standard.setToType(1, DestType); 4002 ICS.Standard.setToType(2, DestType); 4003 Sequence.AddConversionSequenceStep(ICS, ICS.Standard.getToType(2), 4004 /*TopLevelOfInitList*/true); 4005 Sequence.RewrapReferenceInitList(Entity.getType(), InitList); 4006 return; 4007 } 4008 4009 // - Otherwise, if the initializer list has a single element of type E 4010 // [...references are handled above...], the object or reference is 4011 // initialized from that element (by copy-initialization for 4012 // copy-list-initialization, or by direct-initialization for 4013 // direct-list-initialization); if a narrowing conversion is required 4014 // to convert the element to T, the program is ill-formed. 4015 // 4016 // Per core-24034, this is direct-initialization if we were performing 4017 // direct-list-initialization and copy-initialization otherwise. 4018 // We can't use InitListChecker for this, because it always performs 4019 // copy-initialization. This only matters if we might use an 'explicit' 4020 // conversion operator, so we only need to handle the cases where the source 4021 // is of record type. 4022 if (InitList->getInit(0)->getType()->isRecordType()) { 4023 InitializationKind SubKind = 4024 Kind.getKind() == InitializationKind::IK_DirectList 4025 ? InitializationKind::CreateDirect(Kind.getLocation(), 4026 InitList->getLBraceLoc(), 4027 InitList->getRBraceLoc()) 4028 : Kind; 4029 Expr *SubInit[1] = { InitList->getInit(0) }; 4030 Sequence.InitializeFrom(S, Entity, SubKind, SubInit, 4031 /*TopLevelOfInitList*/true, 4032 TreatUnavailableAsInvalid); 4033 if (Sequence) 4034 Sequence.RewrapReferenceInitList(Entity.getType(), InitList); 4035 return; 4036 } 4037 } 4038 4039 InitListChecker CheckInitList(S, Entity, InitList, 4040 DestType, /*VerifyOnly=*/true, TreatUnavailableAsInvalid); 4041 if (CheckInitList.HadError()) { 4042 Sequence.SetFailed(InitializationSequence::FK_ListInitializationFailed); 4043 return; 4044 } 4045 4046 // Add the list initialization step with the built init list. 4047 Sequence.AddListInitializationStep(DestType); 4048 } 4049 4050 /// \brief Try a reference initialization that involves calling a conversion 4051 /// function. 4052 static OverloadingResult TryRefInitWithConversionFunction( 4053 Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, 4054 Expr *Initializer, bool AllowRValues, bool IsLValueRef, 4055 InitializationSequence &Sequence) { 4056 QualType DestType = Entity.getType(); 4057 QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType(); 4058 QualType T1 = cv1T1.getUnqualifiedType(); 4059 QualType cv2T2 = Initializer->getType(); 4060 QualType T2 = cv2T2.getUnqualifiedType(); 4061 4062 bool DerivedToBase; 4063 bool ObjCConversion; 4064 bool ObjCLifetimeConversion; 4065 assert(!S.CompareReferenceRelationship(Initializer->getLocStart(), 4066 T1, T2, DerivedToBase, 4067 ObjCConversion, 4068 ObjCLifetimeConversion) && 4069 "Must have incompatible references when binding via conversion"); 4070 (void)DerivedToBase; 4071 (void)ObjCConversion; 4072 (void)ObjCLifetimeConversion; 4073 4074 // Build the candidate set directly in the initialization sequence 4075 // structure, so that it will persist if we fail. 4076 OverloadCandidateSet &CandidateSet = Sequence.getFailedCandidateSet(); 4077 CandidateSet.clear(); 4078 4079 // Determine whether we are allowed to call explicit constructors or 4080 // explicit conversion operators. 4081 bool AllowExplicit = Kind.AllowExplicit(); 4082 bool AllowExplicitConvs = Kind.allowExplicitConversionFunctionsInRefBinding(); 4083 4084 const RecordType *T1RecordType = nullptr; 4085 if (AllowRValues && (T1RecordType = T1->getAs<RecordType>()) && 4086 S.isCompleteType(Kind.getLocation(), T1)) { 4087 // The type we're converting to is a class type. Enumerate its constructors 4088 // to see if there is a suitable conversion. 4089 CXXRecordDecl *T1RecordDecl = cast<CXXRecordDecl>(T1RecordType->getDecl()); 4090 4091 for (NamedDecl *D : S.LookupConstructors(T1RecordDecl)) { 4092 auto Info = getConstructorInfo(D); 4093 if (!Info.Constructor) 4094 continue; 4095 4096 if (!Info.Constructor->isInvalidDecl() && 4097 Info.Constructor->isConvertingConstructor(AllowExplicit)) { 4098 if (Info.ConstructorTmpl) 4099 S.AddTemplateOverloadCandidate(Info.ConstructorTmpl, Info.FoundDecl, 4100 /*ExplicitArgs*/ nullptr, 4101 Initializer, CandidateSet, 4102 /*SuppressUserConversions=*/true); 4103 else 4104 S.AddOverloadCandidate(Info.Constructor, Info.FoundDecl, 4105 Initializer, CandidateSet, 4106 /*SuppressUserConversions=*/true); 4107 } 4108 } 4109 } 4110 if (T1RecordType && T1RecordType->getDecl()->isInvalidDecl()) 4111 return OR_No_Viable_Function; 4112 4113 const RecordType *T2RecordType = nullptr; 4114 if ((T2RecordType = T2->getAs<RecordType>()) && 4115 S.isCompleteType(Kind.getLocation(), T2)) { 4116 // The type we're converting from is a class type, enumerate its conversion 4117 // functions. 4118 CXXRecordDecl *T2RecordDecl = cast<CXXRecordDecl>(T2RecordType->getDecl()); 4119 4120 const auto &Conversions = T2RecordDecl->getVisibleConversionFunctions(); 4121 for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) { 4122 NamedDecl *D = *I; 4123 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext()); 4124 if (isa<UsingShadowDecl>(D)) 4125 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 4126 4127 FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D); 4128 CXXConversionDecl *Conv; 4129 if (ConvTemplate) 4130 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 4131 else 4132 Conv = cast<CXXConversionDecl>(D); 4133 4134 // If the conversion function doesn't return a reference type, 4135 // it can't be considered for this conversion unless we're allowed to 4136 // consider rvalues. 4137 // FIXME: Do we need to make sure that we only consider conversion 4138 // candidates with reference-compatible results? That might be needed to 4139 // break recursion. 4140 if ((AllowExplicitConvs || !Conv->isExplicit()) && 4141 (AllowRValues || Conv->getConversionType()->isLValueReferenceType())){ 4142 if (ConvTemplate) 4143 S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), 4144 ActingDC, Initializer, 4145 DestType, CandidateSet, 4146 /*AllowObjCConversionOnExplicit=*/ 4147 false); 4148 else 4149 S.AddConversionCandidate(Conv, I.getPair(), ActingDC, 4150 Initializer, DestType, CandidateSet, 4151 /*AllowObjCConversionOnExplicit=*/false); 4152 } 4153 } 4154 } 4155 if (T2RecordType && T2RecordType->getDecl()->isInvalidDecl()) 4156 return OR_No_Viable_Function; 4157 4158 SourceLocation DeclLoc = Initializer->getLocStart(); 4159 4160 // Perform overload resolution. If it fails, return the failed result. 4161 OverloadCandidateSet::iterator Best; 4162 if (OverloadingResult Result 4163 = CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) 4164 return Result; 4165 4166 FunctionDecl *Function = Best->Function; 4167 // This is the overload that will be used for this initialization step if we 4168 // use this initialization. Mark it as referenced. 4169 Function->setReferenced(); 4170 4171 // Compute the returned type and value kind of the conversion. 4172 QualType cv3T3; 4173 if (isa<CXXConversionDecl>(Function)) 4174 cv3T3 = Function->getReturnType(); 4175 else 4176 cv3T3 = T1; 4177 4178 ExprValueKind VK = VK_RValue; 4179 if (cv3T3->isLValueReferenceType()) 4180 VK = VK_LValue; 4181 else if (const auto *RRef = cv3T3->getAs<RValueReferenceType>()) 4182 VK = RRef->getPointeeType()->isFunctionType() ? VK_LValue : VK_XValue; 4183 cv3T3 = cv3T3.getNonLValueExprType(S.Context); 4184 4185 // Add the user-defined conversion step. 4186 bool HadMultipleCandidates = (CandidateSet.size() > 1); 4187 Sequence.AddUserConversionStep(Function, Best->FoundDecl, cv3T3, 4188 HadMultipleCandidates); 4189 4190 // Determine whether we'll need to perform derived-to-base adjustments or 4191 // other conversions. 4192 bool NewDerivedToBase = false; 4193 bool NewObjCConversion = false; 4194 bool NewObjCLifetimeConversion = false; 4195 Sema::ReferenceCompareResult NewRefRelationship 4196 = S.CompareReferenceRelationship(DeclLoc, T1, cv3T3, 4197 NewDerivedToBase, NewObjCConversion, 4198 NewObjCLifetimeConversion); 4199 4200 // Add the final conversion sequence, if necessary. 4201 if (NewRefRelationship == Sema::Ref_Incompatible) { 4202 assert(!isa<CXXConstructorDecl>(Function) && 4203 "should not have conversion after constructor"); 4204 4205 ImplicitConversionSequence ICS; 4206 ICS.setStandard(); 4207 ICS.Standard = Best->FinalConversion; 4208 Sequence.AddConversionSequenceStep(ICS, ICS.Standard.getToType(2)); 4209 4210 // Every implicit conversion results in a prvalue, except for a glvalue 4211 // derived-to-base conversion, which we handle below. 4212 cv3T3 = ICS.Standard.getToType(2); 4213 VK = VK_RValue; 4214 } 4215 4216 // If the converted initializer is a prvalue, its type T4 is adjusted to 4217 // type "cv1 T4" and the temporary materialization conversion is applied. 4218 // 4219 // We adjust the cv-qualifications to match the reference regardless of 4220 // whether we have a prvalue so that the AST records the change. In this 4221 // case, T4 is "cv3 T3". 4222 QualType cv1T4 = S.Context.getQualifiedType(cv3T3, cv1T1.getQualifiers()); 4223 if (cv1T4.getQualifiers() != cv3T3.getQualifiers()) 4224 Sequence.AddQualificationConversionStep(cv1T4, VK); 4225 Sequence.AddReferenceBindingStep(cv1T4, VK == VK_RValue); 4226 VK = IsLValueRef ? VK_LValue : VK_XValue; 4227 4228 if (NewDerivedToBase) 4229 Sequence.AddDerivedToBaseCastStep(cv1T1, VK); 4230 else if (NewObjCConversion) 4231 Sequence.AddObjCObjectConversionStep(cv1T1); 4232 4233 return OR_Success; 4234 } 4235 4236 static void CheckCXX98CompatAccessibleCopy(Sema &S, 4237 const InitializedEntity &Entity, 4238 Expr *CurInitExpr); 4239 4240 /// \brief Attempt reference initialization (C++0x [dcl.init.ref]) 4241 static void TryReferenceInitialization(Sema &S, 4242 const InitializedEntity &Entity, 4243 const InitializationKind &Kind, 4244 Expr *Initializer, 4245 InitializationSequence &Sequence) { 4246 QualType DestType = Entity.getType(); 4247 QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType(); 4248 Qualifiers T1Quals; 4249 QualType T1 = S.Context.getUnqualifiedArrayType(cv1T1, T1Quals); 4250 QualType cv2T2 = Initializer->getType(); 4251 Qualifiers T2Quals; 4252 QualType T2 = S.Context.getUnqualifiedArrayType(cv2T2, T2Quals); 4253 4254 // If the initializer is the address of an overloaded function, try 4255 // to resolve the overloaded function. If all goes well, T2 is the 4256 // type of the resulting function. 4257 if (ResolveOverloadedFunctionForReferenceBinding(S, Initializer, cv2T2, T2, 4258 T1, Sequence)) 4259 return; 4260 4261 // Delegate everything else to a subfunction. 4262 TryReferenceInitializationCore(S, Entity, Kind, Initializer, cv1T1, T1, 4263 T1Quals, cv2T2, T2, T2Quals, Sequence); 4264 } 4265 4266 /// Determine whether an expression is a non-referenceable glvalue (one to 4267 /// which a reference can never bind). Attemting to bind a reference to 4268 /// such a glvalue will always create a temporary. 4269 static bool isNonReferenceableGLValue(Expr *E) { 4270 return E->refersToBitField() || E->refersToVectorElement(); 4271 } 4272 4273 /// \brief Reference initialization without resolving overloaded functions. 4274 static void TryReferenceInitializationCore(Sema &S, 4275 const InitializedEntity &Entity, 4276 const InitializationKind &Kind, 4277 Expr *Initializer, 4278 QualType cv1T1, QualType T1, 4279 Qualifiers T1Quals, 4280 QualType cv2T2, QualType T2, 4281 Qualifiers T2Quals, 4282 InitializationSequence &Sequence) { 4283 QualType DestType = Entity.getType(); 4284 SourceLocation DeclLoc = Initializer->getLocStart(); 4285 // Compute some basic properties of the types and the initializer. 4286 bool isLValueRef = DestType->isLValueReferenceType(); 4287 bool isRValueRef = !isLValueRef; 4288 bool DerivedToBase = false; 4289 bool ObjCConversion = false; 4290 bool ObjCLifetimeConversion = false; 4291 Expr::Classification InitCategory = Initializer->Classify(S.Context); 4292 Sema::ReferenceCompareResult RefRelationship 4293 = S.CompareReferenceRelationship(DeclLoc, cv1T1, cv2T2, DerivedToBase, 4294 ObjCConversion, ObjCLifetimeConversion); 4295 4296 // C++0x [dcl.init.ref]p5: 4297 // A reference to type "cv1 T1" is initialized by an expression of type 4298 // "cv2 T2" as follows: 4299 // 4300 // - If the reference is an lvalue reference and the initializer 4301 // expression 4302 // Note the analogous bullet points for rvalue refs to functions. Because 4303 // there are no function rvalues in C++, rvalue refs to functions are treated 4304 // like lvalue refs. 4305 OverloadingResult ConvOvlResult = OR_Success; 4306 bool T1Function = T1->isFunctionType(); 4307 if (isLValueRef || T1Function) { 4308 if (InitCategory.isLValue() && !isNonReferenceableGLValue(Initializer) && 4309 (RefRelationship == Sema::Ref_Compatible || 4310 (Kind.isCStyleOrFunctionalCast() && 4311 RefRelationship == Sema::Ref_Related))) { 4312 // - is an lvalue (but is not a bit-field), and "cv1 T1" is 4313 // reference-compatible with "cv2 T2," or 4314 if (T1Quals != T2Quals) 4315 // Convert to cv1 T2. This should only add qualifiers unless this is a 4316 // c-style cast. The removal of qualifiers in that case notionally 4317 // happens after the reference binding, but that doesn't matter. 4318 Sequence.AddQualificationConversionStep( 4319 S.Context.getQualifiedType(T2, T1Quals), 4320 Initializer->getValueKind()); 4321 if (DerivedToBase) 4322 Sequence.AddDerivedToBaseCastStep(cv1T1, VK_LValue); 4323 else if (ObjCConversion) 4324 Sequence.AddObjCObjectConversionStep(cv1T1); 4325 4326 // We only create a temporary here when binding a reference to a 4327 // bit-field or vector element. Those cases are't supposed to be 4328 // handled by this bullet, but the outcome is the same either way. 4329 Sequence.AddReferenceBindingStep(cv1T1, false); 4330 return; 4331 } 4332 4333 // - has a class type (i.e., T2 is a class type), where T1 is not 4334 // reference-related to T2, and can be implicitly converted to an 4335 // lvalue of type "cv3 T3," where "cv1 T1" is reference-compatible 4336 // with "cv3 T3" (this conversion is selected by enumerating the 4337 // applicable conversion functions (13.3.1.6) and choosing the best 4338 // one through overload resolution (13.3)), 4339 // If we have an rvalue ref to function type here, the rhs must be 4340 // an rvalue. DR1287 removed the "implicitly" here. 4341 if (RefRelationship == Sema::Ref_Incompatible && T2->isRecordType() && 4342 (isLValueRef || InitCategory.isRValue())) { 4343 ConvOvlResult = TryRefInitWithConversionFunction( 4344 S, Entity, Kind, Initializer, /*AllowRValues*/ isRValueRef, 4345 /*IsLValueRef*/ isLValueRef, Sequence); 4346 if (ConvOvlResult == OR_Success) 4347 return; 4348 if (ConvOvlResult != OR_No_Viable_Function) 4349 Sequence.SetOverloadFailure( 4350 InitializationSequence::FK_ReferenceInitOverloadFailed, 4351 ConvOvlResult); 4352 } 4353 } 4354 4355 // - Otherwise, the reference shall be an lvalue reference to a 4356 // non-volatile const type (i.e., cv1 shall be const), or the reference 4357 // shall be an rvalue reference. 4358 if (isLValueRef && !(T1Quals.hasConst() && !T1Quals.hasVolatile())) { 4359 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) 4360 Sequence.SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 4361 else if (ConvOvlResult && !Sequence.getFailedCandidateSet().empty()) 4362 Sequence.SetOverloadFailure( 4363 InitializationSequence::FK_ReferenceInitOverloadFailed, 4364 ConvOvlResult); 4365 else if (!InitCategory.isLValue()) 4366 Sequence.SetFailed( 4367 InitializationSequence::FK_NonConstLValueReferenceBindingToTemporary); 4368 else { 4369 InitializationSequence::FailureKind FK; 4370 switch (RefRelationship) { 4371 case Sema::Ref_Compatible: 4372 if (Initializer->refersToBitField()) 4373 FK = InitializationSequence:: 4374 FK_NonConstLValueReferenceBindingToBitfield; 4375 else if (Initializer->refersToVectorElement()) 4376 FK = InitializationSequence:: 4377 FK_NonConstLValueReferenceBindingToVectorElement; 4378 else 4379 llvm_unreachable("unexpected kind of compatible initializer"); 4380 break; 4381 case Sema::Ref_Related: 4382 FK = InitializationSequence::FK_ReferenceInitDropsQualifiers; 4383 break; 4384 case Sema::Ref_Incompatible: 4385 FK = InitializationSequence:: 4386 FK_NonConstLValueReferenceBindingToUnrelated; 4387 break; 4388 } 4389 Sequence.SetFailed(FK); 4390 } 4391 return; 4392 } 4393 4394 // - If the initializer expression 4395 // - is an 4396 // [<=14] xvalue (but not a bit-field), class prvalue, array prvalue, or 4397 // [1z] rvalue (but not a bit-field) or 4398 // function lvalue and "cv1 T1" is reference-compatible with "cv2 T2" 4399 // 4400 // Note: functions are handled above and below rather than here... 4401 if (!T1Function && 4402 (RefRelationship == Sema::Ref_Compatible || 4403 (Kind.isCStyleOrFunctionalCast() && 4404 RefRelationship == Sema::Ref_Related)) && 4405 ((InitCategory.isXValue() && !isNonReferenceableGLValue(Initializer)) || 4406 (InitCategory.isPRValue() && 4407 (S.getLangOpts().CPlusPlus1z || T2->isRecordType() || 4408 T2->isArrayType())))) { 4409 ExprValueKind ValueKind = InitCategory.isXValue() ? VK_XValue : VK_RValue; 4410 if (InitCategory.isPRValue() && T2->isRecordType()) { 4411 // The corresponding bullet in C++03 [dcl.init.ref]p5 gives the 4412 // compiler the freedom to perform a copy here or bind to the 4413 // object, while C++0x requires that we bind directly to the 4414 // object. Hence, we always bind to the object without making an 4415 // extra copy. However, in C++03 requires that we check for the 4416 // presence of a suitable copy constructor: 4417 // 4418 // The constructor that would be used to make the copy shall 4419 // be callable whether or not the copy is actually done. 4420 if (!S.getLangOpts().CPlusPlus11 && !S.getLangOpts().MicrosoftExt) 4421 Sequence.AddExtraneousCopyToTemporary(cv2T2); 4422 else if (S.getLangOpts().CPlusPlus11) 4423 CheckCXX98CompatAccessibleCopy(S, Entity, Initializer); 4424 } 4425 4426 // C++1z [dcl.init.ref]/5.2.1.2: 4427 // If the converted initializer is a prvalue, its type T4 is adjusted 4428 // to type "cv1 T4" and the temporary materialization conversion is 4429 // applied. 4430 QualType cv1T4 = S.Context.getQualifiedType(cv2T2, T1Quals); 4431 if (T1Quals != T2Quals) 4432 Sequence.AddQualificationConversionStep(cv1T4, ValueKind); 4433 Sequence.AddReferenceBindingStep(cv1T4, ValueKind == VK_RValue); 4434 ValueKind = isLValueRef ? VK_LValue : VK_XValue; 4435 4436 // In any case, the reference is bound to the resulting glvalue (or to 4437 // an appropriate base class subobject). 4438 if (DerivedToBase) 4439 Sequence.AddDerivedToBaseCastStep(cv1T1, ValueKind); 4440 else if (ObjCConversion) 4441 Sequence.AddObjCObjectConversionStep(cv1T1); 4442 return; 4443 } 4444 4445 // - has a class type (i.e., T2 is a class type), where T1 is not 4446 // reference-related to T2, and can be implicitly converted to an 4447 // xvalue, class prvalue, or function lvalue of type "cv3 T3", 4448 // where "cv1 T1" is reference-compatible with "cv3 T3", 4449 // 4450 // DR1287 removes the "implicitly" here. 4451 if (T2->isRecordType()) { 4452 if (RefRelationship == Sema::Ref_Incompatible) { 4453 ConvOvlResult = TryRefInitWithConversionFunction( 4454 S, Entity, Kind, Initializer, /*AllowRValues*/ true, 4455 /*IsLValueRef*/ isLValueRef, Sequence); 4456 if (ConvOvlResult) 4457 Sequence.SetOverloadFailure( 4458 InitializationSequence::FK_ReferenceInitOverloadFailed, 4459 ConvOvlResult); 4460 4461 return; 4462 } 4463 4464 if (RefRelationship == Sema::Ref_Compatible && 4465 isRValueRef && InitCategory.isLValue()) { 4466 Sequence.SetFailed( 4467 InitializationSequence::FK_RValueReferenceBindingToLValue); 4468 return; 4469 } 4470 4471 Sequence.SetFailed(InitializationSequence::FK_ReferenceInitDropsQualifiers); 4472 return; 4473 } 4474 4475 // - Otherwise, a temporary of type "cv1 T1" is created and initialized 4476 // from the initializer expression using the rules for a non-reference 4477 // copy-initialization (8.5). The reference is then bound to the 4478 // temporary. [...] 4479 4480 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary(cv1T1); 4481 4482 // FIXME: Why do we use an implicit conversion here rather than trying 4483 // copy-initialization? 4484 ImplicitConversionSequence ICS 4485 = S.TryImplicitConversion(Initializer, TempEntity.getType(), 4486 /*SuppressUserConversions=*/false, 4487 /*AllowExplicit=*/false, 4488 /*FIXME:InOverloadResolution=*/false, 4489 /*CStyle=*/Kind.isCStyleOrFunctionalCast(), 4490 /*AllowObjCWritebackConversion=*/false); 4491 4492 if (ICS.isBad()) { 4493 // FIXME: Use the conversion function set stored in ICS to turn 4494 // this into an overloading ambiguity diagnostic. However, we need 4495 // to keep that set as an OverloadCandidateSet rather than as some 4496 // other kind of set. 4497 if (ConvOvlResult && !Sequence.getFailedCandidateSet().empty()) 4498 Sequence.SetOverloadFailure( 4499 InitializationSequence::FK_ReferenceInitOverloadFailed, 4500 ConvOvlResult); 4501 else if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) 4502 Sequence.SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 4503 else 4504 Sequence.SetFailed(InitializationSequence::FK_ReferenceInitFailed); 4505 return; 4506 } else { 4507 Sequence.AddConversionSequenceStep(ICS, TempEntity.getType()); 4508 } 4509 4510 // [...] If T1 is reference-related to T2, cv1 must be the 4511 // same cv-qualification as, or greater cv-qualification 4512 // than, cv2; otherwise, the program is ill-formed. 4513 unsigned T1CVRQuals = T1Quals.getCVRQualifiers(); 4514 unsigned T2CVRQuals = T2Quals.getCVRQualifiers(); 4515 if (RefRelationship == Sema::Ref_Related && 4516 (T1CVRQuals | T2CVRQuals) != T1CVRQuals) { 4517 Sequence.SetFailed(InitializationSequence::FK_ReferenceInitDropsQualifiers); 4518 return; 4519 } 4520 4521 // [...] If T1 is reference-related to T2 and the reference is an rvalue 4522 // reference, the initializer expression shall not be an lvalue. 4523 if (RefRelationship >= Sema::Ref_Related && !isLValueRef && 4524 InitCategory.isLValue()) { 4525 Sequence.SetFailed( 4526 InitializationSequence::FK_RValueReferenceBindingToLValue); 4527 return; 4528 } 4529 4530 Sequence.AddReferenceBindingStep(cv1T1, /*bindingTemporary=*/true); 4531 } 4532 4533 /// \brief Attempt character array initialization from a string literal 4534 /// (C++ [dcl.init.string], C99 6.7.8). 4535 static void TryStringLiteralInitialization(Sema &S, 4536 const InitializedEntity &Entity, 4537 const InitializationKind &Kind, 4538 Expr *Initializer, 4539 InitializationSequence &Sequence) { 4540 Sequence.AddStringInitStep(Entity.getType()); 4541 } 4542 4543 /// \brief Attempt value initialization (C++ [dcl.init]p7). 4544 static void TryValueInitialization(Sema &S, 4545 const InitializedEntity &Entity, 4546 const InitializationKind &Kind, 4547 InitializationSequence &Sequence, 4548 InitListExpr *InitList) { 4549 assert((!InitList || InitList->getNumInits() == 0) && 4550 "Shouldn't use value-init for non-empty init lists"); 4551 4552 // C++98 [dcl.init]p5, C++11 [dcl.init]p7: 4553 // 4554 // To value-initialize an object of type T means: 4555 QualType T = Entity.getType(); 4556 4557 // -- if T is an array type, then each element is value-initialized; 4558 T = S.Context.getBaseElementType(T); 4559 4560 if (const RecordType *RT = T->getAs<RecordType>()) { 4561 if (CXXRecordDecl *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) { 4562 bool NeedZeroInitialization = true; 4563 // C++98: 4564 // -- if T is a class type (clause 9) with a user-declared constructor 4565 // (12.1), then the default constructor for T is called (and the 4566 // initialization is ill-formed if T has no accessible default 4567 // constructor); 4568 // C++11: 4569 // -- if T is a class type (clause 9) with either no default constructor 4570 // (12.1 [class.ctor]) or a default constructor that is user-provided 4571 // or deleted, then the object is default-initialized; 4572 // 4573 // Note that the C++11 rule is the same as the C++98 rule if there are no 4574 // defaulted or deleted constructors, so we just use it unconditionally. 4575 CXXConstructorDecl *CD = S.LookupDefaultConstructor(ClassDecl); 4576 if (!CD || !CD->getCanonicalDecl()->isDefaulted() || CD->isDeleted()) 4577 NeedZeroInitialization = false; 4578 4579 // -- if T is a (possibly cv-qualified) non-union class type without a 4580 // user-provided or deleted default constructor, then the object is 4581 // zero-initialized and, if T has a non-trivial default constructor, 4582 // default-initialized; 4583 // The 'non-union' here was removed by DR1502. The 'non-trivial default 4584 // constructor' part was removed by DR1507. 4585 if (NeedZeroInitialization) 4586 Sequence.AddZeroInitializationStep(Entity.getType()); 4587 4588 // C++03: 4589 // -- if T is a non-union class type without a user-declared constructor, 4590 // then every non-static data member and base class component of T is 4591 // value-initialized; 4592 // [...] A program that calls for [...] value-initialization of an 4593 // entity of reference type is ill-formed. 4594 // 4595 // C++11 doesn't need this handling, because value-initialization does not 4596 // occur recursively there, and the implicit default constructor is 4597 // defined as deleted in the problematic cases. 4598 if (!S.getLangOpts().CPlusPlus11 && 4599 ClassDecl->hasUninitializedReferenceMember()) { 4600 Sequence.SetFailed(InitializationSequence::FK_TooManyInitsForReference); 4601 return; 4602 } 4603 4604 // If this is list-value-initialization, pass the empty init list on when 4605 // building the constructor call. This affects the semantics of a few 4606 // things (such as whether an explicit default constructor can be called). 4607 Expr *InitListAsExpr = InitList; 4608 MultiExprArg Args(&InitListAsExpr, InitList ? 1 : 0); 4609 bool InitListSyntax = InitList; 4610 4611 // FIXME: Instead of creating a CXXConstructExpr of array type here, 4612 // wrap a class-typed CXXConstructExpr in an ArrayInitLoopExpr. 4613 return TryConstructorInitialization( 4614 S, Entity, Kind, Args, T, Entity.getType(), Sequence, InitListSyntax); 4615 } 4616 } 4617 4618 Sequence.AddZeroInitializationStep(Entity.getType()); 4619 } 4620 4621 /// \brief Attempt default initialization (C++ [dcl.init]p6). 4622 static void TryDefaultInitialization(Sema &S, 4623 const InitializedEntity &Entity, 4624 const InitializationKind &Kind, 4625 InitializationSequence &Sequence) { 4626 assert(Kind.getKind() == InitializationKind::IK_Default); 4627 4628 // C++ [dcl.init]p6: 4629 // To default-initialize an object of type T means: 4630 // - if T is an array type, each element is default-initialized; 4631 QualType DestType = S.Context.getBaseElementType(Entity.getType()); 4632 4633 // - if T is a (possibly cv-qualified) class type (Clause 9), the default 4634 // constructor for T is called (and the initialization is ill-formed if 4635 // T has no accessible default constructor); 4636 if (DestType->isRecordType() && S.getLangOpts().CPlusPlus) { 4637 TryConstructorInitialization(S, Entity, Kind, None, DestType, 4638 Entity.getType(), Sequence); 4639 return; 4640 } 4641 4642 // - otherwise, no initialization is performed. 4643 4644 // If a program calls for the default initialization of an object of 4645 // a const-qualified type T, T shall be a class type with a user-provided 4646 // default constructor. 4647 if (DestType.isConstQualified() && S.getLangOpts().CPlusPlus) { 4648 if (!maybeRecoverWithZeroInitialization(S, Sequence, Entity)) 4649 Sequence.SetFailed(InitializationSequence::FK_DefaultInitOfConst); 4650 return; 4651 } 4652 4653 // If the destination type has a lifetime property, zero-initialize it. 4654 if (DestType.getQualifiers().hasObjCLifetime()) { 4655 Sequence.AddZeroInitializationStep(Entity.getType()); 4656 return; 4657 } 4658 } 4659 4660 /// \brief Attempt a user-defined conversion between two types (C++ [dcl.init]), 4661 /// which enumerates all conversion functions and performs overload resolution 4662 /// to select the best. 4663 static void TryUserDefinedConversion(Sema &S, 4664 QualType DestType, 4665 const InitializationKind &Kind, 4666 Expr *Initializer, 4667 InitializationSequence &Sequence, 4668 bool TopLevelOfInitList) { 4669 assert(!DestType->isReferenceType() && "References are handled elsewhere"); 4670 QualType SourceType = Initializer->getType(); 4671 assert((DestType->isRecordType() || SourceType->isRecordType()) && 4672 "Must have a class type to perform a user-defined conversion"); 4673 4674 // Build the candidate set directly in the initialization sequence 4675 // structure, so that it will persist if we fail. 4676 OverloadCandidateSet &CandidateSet = Sequence.getFailedCandidateSet(); 4677 CandidateSet.clear(); 4678 4679 // Determine whether we are allowed to call explicit constructors or 4680 // explicit conversion operators. 4681 bool AllowExplicit = Kind.AllowExplicit(); 4682 4683 if (const RecordType *DestRecordType = DestType->getAs<RecordType>()) { 4684 // The type we're converting to is a class type. Enumerate its constructors 4685 // to see if there is a suitable conversion. 4686 CXXRecordDecl *DestRecordDecl 4687 = cast<CXXRecordDecl>(DestRecordType->getDecl()); 4688 4689 // Try to complete the type we're converting to. 4690 if (S.isCompleteType(Kind.getLocation(), DestType)) { 4691 for (NamedDecl *D : S.LookupConstructors(DestRecordDecl)) { 4692 auto Info = getConstructorInfo(D); 4693 if (!Info.Constructor) 4694 continue; 4695 4696 if (!Info.Constructor->isInvalidDecl() && 4697 Info.Constructor->isConvertingConstructor(AllowExplicit)) { 4698 if (Info.ConstructorTmpl) 4699 S.AddTemplateOverloadCandidate(Info.ConstructorTmpl, Info.FoundDecl, 4700 /*ExplicitArgs*/ nullptr, 4701 Initializer, CandidateSet, 4702 /*SuppressUserConversions=*/true); 4703 else 4704 S.AddOverloadCandidate(Info.Constructor, Info.FoundDecl, 4705 Initializer, CandidateSet, 4706 /*SuppressUserConversions=*/true); 4707 } 4708 } 4709 } 4710 } 4711 4712 SourceLocation DeclLoc = Initializer->getLocStart(); 4713 4714 if (const RecordType *SourceRecordType = SourceType->getAs<RecordType>()) { 4715 // The type we're converting from is a class type, enumerate its conversion 4716 // functions. 4717 4718 // We can only enumerate the conversion functions for a complete type; if 4719 // the type isn't complete, simply skip this step. 4720 if (S.isCompleteType(DeclLoc, SourceType)) { 4721 CXXRecordDecl *SourceRecordDecl 4722 = cast<CXXRecordDecl>(SourceRecordType->getDecl()); 4723 4724 const auto &Conversions = 4725 SourceRecordDecl->getVisibleConversionFunctions(); 4726 for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) { 4727 NamedDecl *D = *I; 4728 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext()); 4729 if (isa<UsingShadowDecl>(D)) 4730 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 4731 4732 FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D); 4733 CXXConversionDecl *Conv; 4734 if (ConvTemplate) 4735 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 4736 else 4737 Conv = cast<CXXConversionDecl>(D); 4738 4739 if (AllowExplicit || !Conv->isExplicit()) { 4740 if (ConvTemplate) 4741 S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), 4742 ActingDC, Initializer, DestType, 4743 CandidateSet, AllowExplicit); 4744 else 4745 S.AddConversionCandidate(Conv, I.getPair(), ActingDC, 4746 Initializer, DestType, CandidateSet, 4747 AllowExplicit); 4748 } 4749 } 4750 } 4751 } 4752 4753 // Perform overload resolution. If it fails, return the failed result. 4754 OverloadCandidateSet::iterator Best; 4755 if (OverloadingResult Result 4756 = CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) { 4757 Sequence.SetOverloadFailure( 4758 InitializationSequence::FK_UserConversionOverloadFailed, 4759 Result); 4760 return; 4761 } 4762 4763 FunctionDecl *Function = Best->Function; 4764 Function->setReferenced(); 4765 bool HadMultipleCandidates = (CandidateSet.size() > 1); 4766 4767 if (isa<CXXConstructorDecl>(Function)) { 4768 // Add the user-defined conversion step. Any cv-qualification conversion is 4769 // subsumed by the initialization. Per DR5, the created temporary is of the 4770 // cv-unqualified type of the destination. 4771 Sequence.AddUserConversionStep(Function, Best->FoundDecl, 4772 DestType.getUnqualifiedType(), 4773 HadMultipleCandidates); 4774 4775 // C++14 and before: 4776 // - if the function is a constructor, the call initializes a temporary 4777 // of the cv-unqualified version of the destination type. The [...] 4778 // temporary [...] is then used to direct-initialize, according to the 4779 // rules above, the object that is the destination of the 4780 // copy-initialization. 4781 // Note that this just performs a simple object copy from the temporary. 4782 // 4783 // C++1z: 4784 // - if the function is a constructor, the call is a prvalue of the 4785 // cv-unqualified version of the destination type whose return object 4786 // is initialized by the constructor. The call is used to 4787 // direct-initialize, according to the rules above, the object that 4788 // is the destination of the copy-initialization. 4789 // Therefore we need to do nothing further. 4790 // 4791 // FIXME: Mark this copy as extraneous. 4792 if (!S.getLangOpts().CPlusPlus1z) 4793 Sequence.AddFinalCopy(DestType); 4794 else if (DestType.hasQualifiers()) 4795 Sequence.AddQualificationConversionStep(DestType, VK_RValue); 4796 return; 4797 } 4798 4799 // Add the user-defined conversion step that calls the conversion function. 4800 QualType ConvType = Function->getCallResultType(); 4801 Sequence.AddUserConversionStep(Function, Best->FoundDecl, ConvType, 4802 HadMultipleCandidates); 4803 4804 if (ConvType->getAs<RecordType>()) { 4805 // The call is used to direct-initialize [...] the object that is the 4806 // destination of the copy-initialization. 4807 // 4808 // In C++1z, this does not call a constructor if we enter /17.6.1: 4809 // - If the initializer expression is a prvalue and the cv-unqualified 4810 // version of the source type is the same as the class of the 4811 // destination [... do not make an extra copy] 4812 // 4813 // FIXME: Mark this copy as extraneous. 4814 if (!S.getLangOpts().CPlusPlus1z || 4815 Function->getReturnType()->isReferenceType() || 4816 !S.Context.hasSameUnqualifiedType(ConvType, DestType)) 4817 Sequence.AddFinalCopy(DestType); 4818 else if (!S.Context.hasSameType(ConvType, DestType)) 4819 Sequence.AddQualificationConversionStep(DestType, VK_RValue); 4820 return; 4821 } 4822 4823 // If the conversion following the call to the conversion function 4824 // is interesting, add it as a separate step. 4825 if (Best->FinalConversion.First || Best->FinalConversion.Second || 4826 Best->FinalConversion.Third) { 4827 ImplicitConversionSequence ICS; 4828 ICS.setStandard(); 4829 ICS.Standard = Best->FinalConversion; 4830 Sequence.AddConversionSequenceStep(ICS, DestType, TopLevelOfInitList); 4831 } 4832 } 4833 4834 /// An egregious hack for compatibility with libstdc++-4.2: in <tr1/hashtable>, 4835 /// a function with a pointer return type contains a 'return false;' statement. 4836 /// In C++11, 'false' is not a null pointer, so this breaks the build of any 4837 /// code using that header. 4838 /// 4839 /// Work around this by treating 'return false;' as zero-initializing the result 4840 /// if it's used in a pointer-returning function in a system header. 4841 static bool isLibstdcxxPointerReturnFalseHack(Sema &S, 4842 const InitializedEntity &Entity, 4843 const Expr *Init) { 4844 return S.getLangOpts().CPlusPlus11 && 4845 Entity.getKind() == InitializedEntity::EK_Result && 4846 Entity.getType()->isPointerType() && 4847 isa<CXXBoolLiteralExpr>(Init) && 4848 !cast<CXXBoolLiteralExpr>(Init)->getValue() && 4849 S.getSourceManager().isInSystemHeader(Init->getExprLoc()); 4850 } 4851 4852 /// The non-zero enum values here are indexes into diagnostic alternatives. 4853 enum InvalidICRKind { IIK_okay, IIK_nonlocal, IIK_nonscalar }; 4854 4855 /// Determines whether this expression is an acceptable ICR source. 4856 static InvalidICRKind isInvalidICRSource(ASTContext &C, Expr *e, 4857 bool isAddressOf, bool &isWeakAccess) { 4858 // Skip parens. 4859 e = e->IgnoreParens(); 4860 4861 // Skip address-of nodes. 4862 if (UnaryOperator *op = dyn_cast<UnaryOperator>(e)) { 4863 if (op->getOpcode() == UO_AddrOf) 4864 return isInvalidICRSource(C, op->getSubExpr(), /*addressof*/ true, 4865 isWeakAccess); 4866 4867 // Skip certain casts. 4868 } else if (CastExpr *ce = dyn_cast<CastExpr>(e)) { 4869 switch (ce->getCastKind()) { 4870 case CK_Dependent: 4871 case CK_BitCast: 4872 case CK_LValueBitCast: 4873 case CK_NoOp: 4874 return isInvalidICRSource(C, ce->getSubExpr(), isAddressOf, isWeakAccess); 4875 4876 case CK_ArrayToPointerDecay: 4877 return IIK_nonscalar; 4878 4879 case CK_NullToPointer: 4880 return IIK_okay; 4881 4882 default: 4883 break; 4884 } 4885 4886 // If we have a declaration reference, it had better be a local variable. 4887 } else if (isa<DeclRefExpr>(e)) { 4888 // set isWeakAccess to true, to mean that there will be an implicit 4889 // load which requires a cleanup. 4890 if (e->getType().getObjCLifetime() == Qualifiers::OCL_Weak) 4891 isWeakAccess = true; 4892 4893 if (!isAddressOf) return IIK_nonlocal; 4894 4895 VarDecl *var = dyn_cast<VarDecl>(cast<DeclRefExpr>(e)->getDecl()); 4896 if (!var) return IIK_nonlocal; 4897 4898 return (var->hasLocalStorage() ? IIK_okay : IIK_nonlocal); 4899 4900 // If we have a conditional operator, check both sides. 4901 } else if (ConditionalOperator *cond = dyn_cast<ConditionalOperator>(e)) { 4902 if (InvalidICRKind iik = isInvalidICRSource(C, cond->getLHS(), isAddressOf, 4903 isWeakAccess)) 4904 return iik; 4905 4906 return isInvalidICRSource(C, cond->getRHS(), isAddressOf, isWeakAccess); 4907 4908 // These are never scalar. 4909 } else if (isa<ArraySubscriptExpr>(e)) { 4910 return IIK_nonscalar; 4911 4912 // Otherwise, it needs to be a null pointer constant. 4913 } else { 4914 return (e->isNullPointerConstant(C, Expr::NPC_ValueDependentIsNull) 4915 ? IIK_okay : IIK_nonlocal); 4916 } 4917 4918 return IIK_nonlocal; 4919 } 4920 4921 /// Check whether the given expression is a valid operand for an 4922 /// indirect copy/restore. 4923 static void checkIndirectCopyRestoreSource(Sema &S, Expr *src) { 4924 assert(src->isRValue()); 4925 bool isWeakAccess = false; 4926 InvalidICRKind iik = isInvalidICRSource(S.Context, src, false, isWeakAccess); 4927 // If isWeakAccess to true, there will be an implicit 4928 // load which requires a cleanup. 4929 if (S.getLangOpts().ObjCAutoRefCount && isWeakAccess) 4930 S.Cleanup.setExprNeedsCleanups(true); 4931 4932 if (iik == IIK_okay) return; 4933 4934 S.Diag(src->getExprLoc(), diag::err_arc_nonlocal_writeback) 4935 << ((unsigned) iik - 1) // shift index into diagnostic explanations 4936 << src->getSourceRange(); 4937 } 4938 4939 /// \brief Determine whether we have compatible array types for the 4940 /// purposes of GNU by-copy array initialization. 4941 static bool hasCompatibleArrayTypes(ASTContext &Context, const ArrayType *Dest, 4942 const ArrayType *Source) { 4943 // If the source and destination array types are equivalent, we're 4944 // done. 4945 if (Context.hasSameType(QualType(Dest, 0), QualType(Source, 0))) 4946 return true; 4947 4948 // Make sure that the element types are the same. 4949 if (!Context.hasSameType(Dest->getElementType(), Source->getElementType())) 4950 return false; 4951 4952 // The only mismatch we allow is when the destination is an 4953 // incomplete array type and the source is a constant array type. 4954 return Source->isConstantArrayType() && Dest->isIncompleteArrayType(); 4955 } 4956 4957 static bool tryObjCWritebackConversion(Sema &S, 4958 InitializationSequence &Sequence, 4959 const InitializedEntity &Entity, 4960 Expr *Initializer) { 4961 bool ArrayDecay = false; 4962 QualType ArgType = Initializer->getType(); 4963 QualType ArgPointee; 4964 if (const ArrayType *ArgArrayType = S.Context.getAsArrayType(ArgType)) { 4965 ArrayDecay = true; 4966 ArgPointee = ArgArrayType->getElementType(); 4967 ArgType = S.Context.getPointerType(ArgPointee); 4968 } 4969 4970 // Handle write-back conversion. 4971 QualType ConvertedArgType; 4972 if (!S.isObjCWritebackConversion(ArgType, Entity.getType(), 4973 ConvertedArgType)) 4974 return false; 4975 4976 // We should copy unless we're passing to an argument explicitly 4977 // marked 'out'. 4978 bool ShouldCopy = true; 4979 if (ParmVarDecl *param = cast_or_null<ParmVarDecl>(Entity.getDecl())) 4980 ShouldCopy = (param->getObjCDeclQualifier() != ParmVarDecl::OBJC_TQ_Out); 4981 4982 // Do we need an lvalue conversion? 4983 if (ArrayDecay || Initializer->isGLValue()) { 4984 ImplicitConversionSequence ICS; 4985 ICS.setStandard(); 4986 ICS.Standard.setAsIdentityConversion(); 4987 4988 QualType ResultType; 4989 if (ArrayDecay) { 4990 ICS.Standard.First = ICK_Array_To_Pointer; 4991 ResultType = S.Context.getPointerType(ArgPointee); 4992 } else { 4993 ICS.Standard.First = ICK_Lvalue_To_Rvalue; 4994 ResultType = Initializer->getType().getNonLValueExprType(S.Context); 4995 } 4996 4997 Sequence.AddConversionSequenceStep(ICS, ResultType); 4998 } 4999 5000 Sequence.AddPassByIndirectCopyRestoreStep(Entity.getType(), ShouldCopy); 5001 return true; 5002 } 5003 5004 static bool TryOCLSamplerInitialization(Sema &S, 5005 InitializationSequence &Sequence, 5006 QualType DestType, 5007 Expr *Initializer) { 5008 if (!S.getLangOpts().OpenCL || !DestType->isSamplerT() || 5009 (!Initializer->isIntegerConstantExpr(S.Context) && 5010 !Initializer->getType()->isSamplerT())) 5011 return false; 5012 5013 Sequence.AddOCLSamplerInitStep(DestType); 5014 return true; 5015 } 5016 5017 // 5018 // OpenCL 1.2 spec, s6.12.10 5019 // 5020 // The event argument can also be used to associate the 5021 // async_work_group_copy with a previous async copy allowing 5022 // an event to be shared by multiple async copies; otherwise 5023 // event should be zero. 5024 // 5025 static bool TryOCLZeroEventInitialization(Sema &S, 5026 InitializationSequence &Sequence, 5027 QualType DestType, 5028 Expr *Initializer) { 5029 if (!S.getLangOpts().OpenCL || !DestType->isEventT() || 5030 !Initializer->isIntegerConstantExpr(S.getASTContext()) || 5031 (Initializer->EvaluateKnownConstInt(S.getASTContext()) != 0)) 5032 return false; 5033 5034 Sequence.AddOCLZeroEventStep(DestType); 5035 return true; 5036 } 5037 5038 static bool TryOCLZeroQueueInitialization(Sema &S, 5039 InitializationSequence &Sequence, 5040 QualType DestType, 5041 Expr *Initializer) { 5042 if (!S.getLangOpts().OpenCL || S.getLangOpts().OpenCLVersion < 200 || 5043 !DestType->isQueueT() || 5044 !Initializer->isIntegerConstantExpr(S.getASTContext()) || 5045 (Initializer->EvaluateKnownConstInt(S.getASTContext()) != 0)) 5046 return false; 5047 5048 Sequence.AddOCLZeroQueueStep(DestType); 5049 return true; 5050 } 5051 5052 InitializationSequence::InitializationSequence(Sema &S, 5053 const InitializedEntity &Entity, 5054 const InitializationKind &Kind, 5055 MultiExprArg Args, 5056 bool TopLevelOfInitList, 5057 bool TreatUnavailableAsInvalid) 5058 : FailedCandidateSet(Kind.getLocation(), OverloadCandidateSet::CSK_Normal) { 5059 InitializeFrom(S, Entity, Kind, Args, TopLevelOfInitList, 5060 TreatUnavailableAsInvalid); 5061 } 5062 5063 /// Tries to get a FunctionDecl out of `E`. If it succeeds and we can take the 5064 /// address of that function, this returns true. Otherwise, it returns false. 5065 static bool isExprAnUnaddressableFunction(Sema &S, const Expr *E) { 5066 auto *DRE = dyn_cast<DeclRefExpr>(E); 5067 if (!DRE || !isa<FunctionDecl>(DRE->getDecl())) 5068 return false; 5069 5070 return !S.checkAddressOfFunctionIsAvailable( 5071 cast<FunctionDecl>(DRE->getDecl())); 5072 } 5073 5074 /// Determine whether we can perform an elementwise array copy for this kind 5075 /// of entity. 5076 static bool canPerformArrayCopy(const InitializedEntity &Entity) { 5077 switch (Entity.getKind()) { 5078 case InitializedEntity::EK_LambdaCapture: 5079 // C++ [expr.prim.lambda]p24: 5080 // For array members, the array elements are direct-initialized in 5081 // increasing subscript order. 5082 return true; 5083 5084 case InitializedEntity::EK_Variable: 5085 // C++ [dcl.decomp]p1: 5086 // [...] each element is copy-initialized or direct-initialized from the 5087 // corresponding element of the assignment-expression [...] 5088 return isa<DecompositionDecl>(Entity.getDecl()); 5089 5090 case InitializedEntity::EK_Member: 5091 // C++ [class.copy.ctor]p14: 5092 // - if the member is an array, each element is direct-initialized with 5093 // the corresponding subobject of x 5094 return Entity.isImplicitMemberInitializer(); 5095 5096 case InitializedEntity::EK_ArrayElement: 5097 // All the above cases are intended to apply recursively, even though none 5098 // of them actually say that. 5099 if (auto *E = Entity.getParent()) 5100 return canPerformArrayCopy(*E); 5101 break; 5102 5103 default: 5104 break; 5105 } 5106 5107 return false; 5108 } 5109 5110 void InitializationSequence::InitializeFrom(Sema &S, 5111 const InitializedEntity &Entity, 5112 const InitializationKind &Kind, 5113 MultiExprArg Args, 5114 bool TopLevelOfInitList, 5115 bool TreatUnavailableAsInvalid) { 5116 ASTContext &Context = S.Context; 5117 5118 // Eliminate non-overload placeholder types in the arguments. We 5119 // need to do this before checking whether types are dependent 5120 // because lowering a pseudo-object expression might well give us 5121 // something of dependent type. 5122 for (unsigned I = 0, E = Args.size(); I != E; ++I) 5123 if (Args[I]->getType()->isNonOverloadPlaceholderType()) { 5124 // FIXME: should we be doing this here? 5125 ExprResult result = S.CheckPlaceholderExpr(Args[I]); 5126 if (result.isInvalid()) { 5127 SetFailed(FK_PlaceholderType); 5128 return; 5129 } 5130 Args[I] = result.get(); 5131 } 5132 5133 // C++0x [dcl.init]p16: 5134 // The semantics of initializers are as follows. The destination type is 5135 // the type of the object or reference being initialized and the source 5136 // type is the type of the initializer expression. The source type is not 5137 // defined when the initializer is a braced-init-list or when it is a 5138 // parenthesized list of expressions. 5139 QualType DestType = Entity.getType(); 5140 5141 if (DestType->isDependentType() || 5142 Expr::hasAnyTypeDependentArguments(Args)) { 5143 SequenceKind = DependentSequence; 5144 return; 5145 } 5146 5147 // Almost everything is a normal sequence. 5148 setSequenceKind(NormalSequence); 5149 5150 QualType SourceType; 5151 Expr *Initializer = nullptr; 5152 if (Args.size() == 1) { 5153 Initializer = Args[0]; 5154 if (S.getLangOpts().ObjC1) { 5155 if (S.CheckObjCBridgeRelatedConversions(Initializer->getLocStart(), 5156 DestType, Initializer->getType(), 5157 Initializer) || 5158 S.ConversionToObjCStringLiteralCheck(DestType, Initializer)) 5159 Args[0] = Initializer; 5160 } 5161 if (!isa<InitListExpr>(Initializer)) 5162 SourceType = Initializer->getType(); 5163 } 5164 5165 // - If the initializer is a (non-parenthesized) braced-init-list, the 5166 // object is list-initialized (8.5.4). 5167 if (Kind.getKind() != InitializationKind::IK_Direct) { 5168 if (InitListExpr *InitList = dyn_cast_or_null<InitListExpr>(Initializer)) { 5169 TryListInitialization(S, Entity, Kind, InitList, *this, 5170 TreatUnavailableAsInvalid); 5171 return; 5172 } 5173 } 5174 5175 // - If the destination type is a reference type, see 8.5.3. 5176 if (DestType->isReferenceType()) { 5177 // C++0x [dcl.init.ref]p1: 5178 // A variable declared to be a T& or T&&, that is, "reference to type T" 5179 // (8.3.2), shall be initialized by an object, or function, of type T or 5180 // by an object that can be converted into a T. 5181 // (Therefore, multiple arguments are not permitted.) 5182 if (Args.size() != 1) 5183 SetFailed(FK_TooManyInitsForReference); 5184 // C++17 [dcl.init.ref]p5: 5185 // A reference [...] is initialized by an expression [...] as follows: 5186 // If the initializer is not an expression, presumably we should reject, 5187 // but the standard fails to actually say so. 5188 else if (isa<InitListExpr>(Args[0])) 5189 SetFailed(FK_ParenthesizedListInitForReference); 5190 else 5191 TryReferenceInitialization(S, Entity, Kind, Args[0], *this); 5192 return; 5193 } 5194 5195 // - If the initializer is (), the object is value-initialized. 5196 if (Kind.getKind() == InitializationKind::IK_Value || 5197 (Kind.getKind() == InitializationKind::IK_Direct && Args.empty())) { 5198 TryValueInitialization(S, Entity, Kind, *this); 5199 return; 5200 } 5201 5202 // Handle default initialization. 5203 if (Kind.getKind() == InitializationKind::IK_Default) { 5204 TryDefaultInitialization(S, Entity, Kind, *this); 5205 return; 5206 } 5207 5208 // - If the destination type is an array of characters, an array of 5209 // char16_t, an array of char32_t, or an array of wchar_t, and the 5210 // initializer is a string literal, see 8.5.2. 5211 // - Otherwise, if the destination type is an array, the program is 5212 // ill-formed. 5213 if (const ArrayType *DestAT = Context.getAsArrayType(DestType)) { 5214 if (Initializer && isa<VariableArrayType>(DestAT)) { 5215 SetFailed(FK_VariableLengthArrayHasInitializer); 5216 return; 5217 } 5218 5219 if (Initializer) { 5220 switch (IsStringInit(Initializer, DestAT, Context)) { 5221 case SIF_None: 5222 TryStringLiteralInitialization(S, Entity, Kind, Initializer, *this); 5223 return; 5224 case SIF_NarrowStringIntoWideChar: 5225 SetFailed(FK_NarrowStringIntoWideCharArray); 5226 return; 5227 case SIF_WideStringIntoChar: 5228 SetFailed(FK_WideStringIntoCharArray); 5229 return; 5230 case SIF_IncompatWideStringIntoWideChar: 5231 SetFailed(FK_IncompatWideStringIntoWideChar); 5232 return; 5233 case SIF_Other: 5234 break; 5235 } 5236 } 5237 5238 // Some kinds of initialization permit an array to be initialized from 5239 // another array of the same type, and perform elementwise initialization. 5240 if (Initializer && isa<ConstantArrayType>(DestAT) && 5241 S.Context.hasSameUnqualifiedType(Initializer->getType(), 5242 Entity.getType()) && 5243 canPerformArrayCopy(Entity)) { 5244 // If source is a prvalue, use it directly. 5245 if (Initializer->getValueKind() == VK_RValue) { 5246 AddArrayInitStep(DestType, /*IsGNUExtension*/false); 5247 return; 5248 } 5249 5250 // Emit element-at-a-time copy loop. 5251 InitializedEntity Element = 5252 InitializedEntity::InitializeElement(S.Context, 0, Entity); 5253 QualType InitEltT = 5254 Context.getAsArrayType(Initializer->getType())->getElementType(); 5255 OpaqueValueExpr OVE(Initializer->getExprLoc(), InitEltT, 5256 Initializer->getValueKind(), 5257 Initializer->getObjectKind()); 5258 Expr *OVEAsExpr = &OVE; 5259 InitializeFrom(S, Element, Kind, OVEAsExpr, TopLevelOfInitList, 5260 TreatUnavailableAsInvalid); 5261 if (!Failed()) 5262 AddArrayInitLoopStep(Entity.getType(), InitEltT); 5263 return; 5264 } 5265 5266 // Note: as an GNU C extension, we allow initialization of an 5267 // array from a compound literal that creates an array of the same 5268 // type, so long as the initializer has no side effects. 5269 if (!S.getLangOpts().CPlusPlus && Initializer && 5270 isa<CompoundLiteralExpr>(Initializer->IgnoreParens()) && 5271 Initializer->getType()->isArrayType()) { 5272 const ArrayType *SourceAT 5273 = Context.getAsArrayType(Initializer->getType()); 5274 if (!hasCompatibleArrayTypes(S.Context, DestAT, SourceAT)) 5275 SetFailed(FK_ArrayTypeMismatch); 5276 else if (Initializer->HasSideEffects(S.Context)) 5277 SetFailed(FK_NonConstantArrayInit); 5278 else { 5279 AddArrayInitStep(DestType, /*IsGNUExtension*/true); 5280 } 5281 } 5282 // Note: as a GNU C++ extension, we allow list-initialization of a 5283 // class member of array type from a parenthesized initializer list. 5284 else if (S.getLangOpts().CPlusPlus && 5285 Entity.getKind() == InitializedEntity::EK_Member && 5286 Initializer && isa<InitListExpr>(Initializer)) { 5287 TryListInitialization(S, Entity, Kind, cast<InitListExpr>(Initializer), 5288 *this, TreatUnavailableAsInvalid); 5289 AddParenthesizedArrayInitStep(DestType); 5290 } else if (DestAT->getElementType()->isCharType()) 5291 SetFailed(FK_ArrayNeedsInitListOrStringLiteral); 5292 else if (IsWideCharCompatible(DestAT->getElementType(), Context)) 5293 SetFailed(FK_ArrayNeedsInitListOrWideStringLiteral); 5294 else 5295 SetFailed(FK_ArrayNeedsInitList); 5296 5297 return; 5298 } 5299 5300 // Determine whether we should consider writeback conversions for 5301 // Objective-C ARC. 5302 bool allowObjCWritebackConversion = S.getLangOpts().ObjCAutoRefCount && 5303 Entity.isParameterKind(); 5304 5305 // We're at the end of the line for C: it's either a write-back conversion 5306 // or it's a C assignment. There's no need to check anything else. 5307 if (!S.getLangOpts().CPlusPlus) { 5308 // If allowed, check whether this is an Objective-C writeback conversion. 5309 if (allowObjCWritebackConversion && 5310 tryObjCWritebackConversion(S, *this, Entity, Initializer)) { 5311 return; 5312 } 5313 5314 if (TryOCLSamplerInitialization(S, *this, DestType, Initializer)) 5315 return; 5316 5317 if (TryOCLZeroEventInitialization(S, *this, DestType, Initializer)) 5318 return; 5319 5320 if (TryOCLZeroQueueInitialization(S, *this, DestType, Initializer)) 5321 return; 5322 5323 // Handle initialization in C 5324 AddCAssignmentStep(DestType); 5325 MaybeProduceObjCObject(S, *this, Entity); 5326 return; 5327 } 5328 5329 assert(S.getLangOpts().CPlusPlus); 5330 5331 // - If the destination type is a (possibly cv-qualified) class type: 5332 if (DestType->isRecordType()) { 5333 // - If the initialization is direct-initialization, or if it is 5334 // copy-initialization where the cv-unqualified version of the 5335 // source type is the same class as, or a derived class of, the 5336 // class of the destination, constructors are considered. [...] 5337 if (Kind.getKind() == InitializationKind::IK_Direct || 5338 (Kind.getKind() == InitializationKind::IK_Copy && 5339 (Context.hasSameUnqualifiedType(SourceType, DestType) || 5340 S.IsDerivedFrom(Initializer->getLocStart(), SourceType, DestType)))) 5341 TryConstructorInitialization(S, Entity, Kind, Args, 5342 DestType, DestType, *this); 5343 // - Otherwise (i.e., for the remaining copy-initialization cases), 5344 // user-defined conversion sequences that can convert from the source 5345 // type to the destination type or (when a conversion function is 5346 // used) to a derived class thereof are enumerated as described in 5347 // 13.3.1.4, and the best one is chosen through overload resolution 5348 // (13.3). 5349 else 5350 TryUserDefinedConversion(S, DestType, Kind, Initializer, *this, 5351 TopLevelOfInitList); 5352 return; 5353 } 5354 5355 assert(Args.size() >= 1 && "Zero-argument case handled above"); 5356 5357 // The remaining cases all need a source type. 5358 if (Args.size() > 1) { 5359 SetFailed(FK_TooManyInitsForScalar); 5360 return; 5361 } else if (isa<InitListExpr>(Args[0])) { 5362 SetFailed(FK_ParenthesizedListInitForScalar); 5363 return; 5364 } 5365 5366 // - Otherwise, if the source type is a (possibly cv-qualified) class 5367 // type, conversion functions are considered. 5368 if (!SourceType.isNull() && SourceType->isRecordType()) { 5369 // For a conversion to _Atomic(T) from either T or a class type derived 5370 // from T, initialize the T object then convert to _Atomic type. 5371 bool NeedAtomicConversion = false; 5372 if (const AtomicType *Atomic = DestType->getAs<AtomicType>()) { 5373 if (Context.hasSameUnqualifiedType(SourceType, Atomic->getValueType()) || 5374 S.IsDerivedFrom(Initializer->getLocStart(), SourceType, 5375 Atomic->getValueType())) { 5376 DestType = Atomic->getValueType(); 5377 NeedAtomicConversion = true; 5378 } 5379 } 5380 5381 TryUserDefinedConversion(S, DestType, Kind, Initializer, *this, 5382 TopLevelOfInitList); 5383 MaybeProduceObjCObject(S, *this, Entity); 5384 if (!Failed() && NeedAtomicConversion) 5385 AddAtomicConversionStep(Entity.getType()); 5386 return; 5387 } 5388 5389 // - Otherwise, the initial value of the object being initialized is the 5390 // (possibly converted) value of the initializer expression. Standard 5391 // conversions (Clause 4) will be used, if necessary, to convert the 5392 // initializer expression to the cv-unqualified version of the 5393 // destination type; no user-defined conversions are considered. 5394 5395 ImplicitConversionSequence ICS 5396 = S.TryImplicitConversion(Initializer, DestType, 5397 /*SuppressUserConversions*/true, 5398 /*AllowExplicitConversions*/ false, 5399 /*InOverloadResolution*/ false, 5400 /*CStyle=*/Kind.isCStyleOrFunctionalCast(), 5401 allowObjCWritebackConversion); 5402 5403 if (ICS.isStandard() && 5404 ICS.Standard.Second == ICK_Writeback_Conversion) { 5405 // Objective-C ARC writeback conversion. 5406 5407 // We should copy unless we're passing to an argument explicitly 5408 // marked 'out'. 5409 bool ShouldCopy = true; 5410 if (ParmVarDecl *Param = cast_or_null<ParmVarDecl>(Entity.getDecl())) 5411 ShouldCopy = (Param->getObjCDeclQualifier() != ParmVarDecl::OBJC_TQ_Out); 5412 5413 // If there was an lvalue adjustment, add it as a separate conversion. 5414 if (ICS.Standard.First == ICK_Array_To_Pointer || 5415 ICS.Standard.First == ICK_Lvalue_To_Rvalue) { 5416 ImplicitConversionSequence LvalueICS; 5417 LvalueICS.setStandard(); 5418 LvalueICS.Standard.setAsIdentityConversion(); 5419 LvalueICS.Standard.setAllToTypes(ICS.Standard.getToType(0)); 5420 LvalueICS.Standard.First = ICS.Standard.First; 5421 AddConversionSequenceStep(LvalueICS, ICS.Standard.getToType(0)); 5422 } 5423 5424 AddPassByIndirectCopyRestoreStep(DestType, ShouldCopy); 5425 } else if (ICS.isBad()) { 5426 DeclAccessPair dap; 5427 if (isLibstdcxxPointerReturnFalseHack(S, Entity, Initializer)) { 5428 AddZeroInitializationStep(Entity.getType()); 5429 } else if (Initializer->getType() == Context.OverloadTy && 5430 !S.ResolveAddressOfOverloadedFunction(Initializer, DestType, 5431 false, dap)) 5432 SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 5433 else if (Initializer->getType()->isFunctionType() && 5434 isExprAnUnaddressableFunction(S, Initializer)) 5435 SetFailed(InitializationSequence::FK_AddressOfUnaddressableFunction); 5436 else 5437 SetFailed(InitializationSequence::FK_ConversionFailed); 5438 } else { 5439 AddConversionSequenceStep(ICS, DestType, TopLevelOfInitList); 5440 5441 MaybeProduceObjCObject(S, *this, Entity); 5442 } 5443 } 5444 5445 InitializationSequence::~InitializationSequence() { 5446 for (auto &S : Steps) 5447 S.Destroy(); 5448 } 5449 5450 //===----------------------------------------------------------------------===// 5451 // Perform initialization 5452 //===----------------------------------------------------------------------===// 5453 static Sema::AssignmentAction 5454 getAssignmentAction(const InitializedEntity &Entity, bool Diagnose = false) { 5455 switch(Entity.getKind()) { 5456 case InitializedEntity::EK_Variable: 5457 case InitializedEntity::EK_New: 5458 case InitializedEntity::EK_Exception: 5459 case InitializedEntity::EK_Base: 5460 case InitializedEntity::EK_Delegating: 5461 return Sema::AA_Initializing; 5462 5463 case InitializedEntity::EK_Parameter: 5464 if (Entity.getDecl() && 5465 isa<ObjCMethodDecl>(Entity.getDecl()->getDeclContext())) 5466 return Sema::AA_Sending; 5467 5468 return Sema::AA_Passing; 5469 5470 case InitializedEntity::EK_Parameter_CF_Audited: 5471 if (Entity.getDecl() && 5472 isa<ObjCMethodDecl>(Entity.getDecl()->getDeclContext())) 5473 return Sema::AA_Sending; 5474 5475 return !Diagnose ? Sema::AA_Passing : Sema::AA_Passing_CFAudited; 5476 5477 case InitializedEntity::EK_Result: 5478 return Sema::AA_Returning; 5479 5480 case InitializedEntity::EK_Temporary: 5481 case InitializedEntity::EK_RelatedResult: 5482 // FIXME: Can we tell apart casting vs. converting? 5483 return Sema::AA_Casting; 5484 5485 case InitializedEntity::EK_Member: 5486 case InitializedEntity::EK_Binding: 5487 case InitializedEntity::EK_ArrayElement: 5488 case InitializedEntity::EK_VectorElement: 5489 case InitializedEntity::EK_ComplexElement: 5490 case InitializedEntity::EK_BlockElement: 5491 case InitializedEntity::EK_LambdaCapture: 5492 case InitializedEntity::EK_CompoundLiteralInit: 5493 return Sema::AA_Initializing; 5494 } 5495 5496 llvm_unreachable("Invalid EntityKind!"); 5497 } 5498 5499 /// \brief Whether we should bind a created object as a temporary when 5500 /// initializing the given entity. 5501 static bool shouldBindAsTemporary(const InitializedEntity &Entity) { 5502 switch (Entity.getKind()) { 5503 case InitializedEntity::EK_ArrayElement: 5504 case InitializedEntity::EK_Member: 5505 case InitializedEntity::EK_Result: 5506 case InitializedEntity::EK_New: 5507 case InitializedEntity::EK_Variable: 5508 case InitializedEntity::EK_Base: 5509 case InitializedEntity::EK_Delegating: 5510 case InitializedEntity::EK_VectorElement: 5511 case InitializedEntity::EK_ComplexElement: 5512 case InitializedEntity::EK_Exception: 5513 case InitializedEntity::EK_BlockElement: 5514 case InitializedEntity::EK_LambdaCapture: 5515 case InitializedEntity::EK_CompoundLiteralInit: 5516 return false; 5517 5518 case InitializedEntity::EK_Parameter: 5519 case InitializedEntity::EK_Parameter_CF_Audited: 5520 case InitializedEntity::EK_Temporary: 5521 case InitializedEntity::EK_RelatedResult: 5522 case InitializedEntity::EK_Binding: 5523 return true; 5524 } 5525 5526 llvm_unreachable("missed an InitializedEntity kind?"); 5527 } 5528 5529 /// \brief Whether the given entity, when initialized with an object 5530 /// created for that initialization, requires destruction. 5531 static bool shouldDestroyEntity(const InitializedEntity &Entity) { 5532 switch (Entity.getKind()) { 5533 case InitializedEntity::EK_Result: 5534 case InitializedEntity::EK_New: 5535 case InitializedEntity::EK_Base: 5536 case InitializedEntity::EK_Delegating: 5537 case InitializedEntity::EK_VectorElement: 5538 case InitializedEntity::EK_ComplexElement: 5539 case InitializedEntity::EK_BlockElement: 5540 case InitializedEntity::EK_LambdaCapture: 5541 return false; 5542 5543 case InitializedEntity::EK_Member: 5544 case InitializedEntity::EK_Binding: 5545 case InitializedEntity::EK_Variable: 5546 case InitializedEntity::EK_Parameter: 5547 case InitializedEntity::EK_Parameter_CF_Audited: 5548 case InitializedEntity::EK_Temporary: 5549 case InitializedEntity::EK_ArrayElement: 5550 case InitializedEntity::EK_Exception: 5551 case InitializedEntity::EK_CompoundLiteralInit: 5552 case InitializedEntity::EK_RelatedResult: 5553 return true; 5554 } 5555 5556 llvm_unreachable("missed an InitializedEntity kind?"); 5557 } 5558 5559 /// \brief Get the location at which initialization diagnostics should appear. 5560 static SourceLocation getInitializationLoc(const InitializedEntity &Entity, 5561 Expr *Initializer) { 5562 switch (Entity.getKind()) { 5563 case InitializedEntity::EK_Result: 5564 return Entity.getReturnLoc(); 5565 5566 case InitializedEntity::EK_Exception: 5567 return Entity.getThrowLoc(); 5568 5569 case InitializedEntity::EK_Variable: 5570 case InitializedEntity::EK_Binding: 5571 return Entity.getDecl()->getLocation(); 5572 5573 case InitializedEntity::EK_LambdaCapture: 5574 return Entity.getCaptureLoc(); 5575 5576 case InitializedEntity::EK_ArrayElement: 5577 case InitializedEntity::EK_Member: 5578 case InitializedEntity::EK_Parameter: 5579 case InitializedEntity::EK_Parameter_CF_Audited: 5580 case InitializedEntity::EK_Temporary: 5581 case InitializedEntity::EK_New: 5582 case InitializedEntity::EK_Base: 5583 case InitializedEntity::EK_Delegating: 5584 case InitializedEntity::EK_VectorElement: 5585 case InitializedEntity::EK_ComplexElement: 5586 case InitializedEntity::EK_BlockElement: 5587 case InitializedEntity::EK_CompoundLiteralInit: 5588 case InitializedEntity::EK_RelatedResult: 5589 return Initializer->getLocStart(); 5590 } 5591 llvm_unreachable("missed an InitializedEntity kind?"); 5592 } 5593 5594 /// \brief Make a (potentially elidable) temporary copy of the object 5595 /// provided by the given initializer by calling the appropriate copy 5596 /// constructor. 5597 /// 5598 /// \param S The Sema object used for type-checking. 5599 /// 5600 /// \param T The type of the temporary object, which must either be 5601 /// the type of the initializer expression or a superclass thereof. 5602 /// 5603 /// \param Entity The entity being initialized. 5604 /// 5605 /// \param CurInit The initializer expression. 5606 /// 5607 /// \param IsExtraneousCopy Whether this is an "extraneous" copy that 5608 /// is permitted in C++03 (but not C++0x) when binding a reference to 5609 /// an rvalue. 5610 /// 5611 /// \returns An expression that copies the initializer expression into 5612 /// a temporary object, or an error expression if a copy could not be 5613 /// created. 5614 static ExprResult CopyObject(Sema &S, 5615 QualType T, 5616 const InitializedEntity &Entity, 5617 ExprResult CurInit, 5618 bool IsExtraneousCopy) { 5619 if (CurInit.isInvalid()) 5620 return CurInit; 5621 // Determine which class type we're copying to. 5622 Expr *CurInitExpr = (Expr *)CurInit.get(); 5623 CXXRecordDecl *Class = nullptr; 5624 if (const RecordType *Record = T->getAs<RecordType>()) 5625 Class = cast<CXXRecordDecl>(Record->getDecl()); 5626 if (!Class) 5627 return CurInit; 5628 5629 SourceLocation Loc = getInitializationLoc(Entity, CurInit.get()); 5630 5631 // Make sure that the type we are copying is complete. 5632 if (S.RequireCompleteType(Loc, T, diag::err_temp_copy_incomplete)) 5633 return CurInit; 5634 5635 // Perform overload resolution using the class's constructors. Per 5636 // C++11 [dcl.init]p16, second bullet for class types, this initialization 5637 // is direct-initialization. 5638 OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal); 5639 DeclContext::lookup_result Ctors = S.LookupConstructors(Class); 5640 5641 OverloadCandidateSet::iterator Best; 5642 switch (ResolveConstructorOverload( 5643 S, Loc, CurInitExpr, CandidateSet, Ctors, Best, 5644 /*CopyInitializing=*/false, /*AllowExplicit=*/true, 5645 /*OnlyListConstructors=*/false, /*IsListInit=*/false, 5646 /*SecondStepOfCopyInit=*/true)) { 5647 case OR_Success: 5648 break; 5649 5650 case OR_No_Viable_Function: 5651 S.Diag(Loc, IsExtraneousCopy && !S.isSFINAEContext() 5652 ? diag::ext_rvalue_to_reference_temp_copy_no_viable 5653 : diag::err_temp_copy_no_viable) 5654 << (int)Entity.getKind() << CurInitExpr->getType() 5655 << CurInitExpr->getSourceRange(); 5656 CandidateSet.NoteCandidates(S, OCD_AllCandidates, CurInitExpr); 5657 if (!IsExtraneousCopy || S.isSFINAEContext()) 5658 return ExprError(); 5659 return CurInit; 5660 5661 case OR_Ambiguous: 5662 S.Diag(Loc, diag::err_temp_copy_ambiguous) 5663 << (int)Entity.getKind() << CurInitExpr->getType() 5664 << CurInitExpr->getSourceRange(); 5665 CandidateSet.NoteCandidates(S, OCD_ViableCandidates, CurInitExpr); 5666 return ExprError(); 5667 5668 case OR_Deleted: 5669 S.Diag(Loc, diag::err_temp_copy_deleted) 5670 << (int)Entity.getKind() << CurInitExpr->getType() 5671 << CurInitExpr->getSourceRange(); 5672 S.NoteDeletedFunction(Best->Function); 5673 return ExprError(); 5674 } 5675 5676 bool HadMultipleCandidates = CandidateSet.size() > 1; 5677 5678 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function); 5679 SmallVector<Expr*, 8> ConstructorArgs; 5680 CurInit.get(); // Ownership transferred into MultiExprArg, below. 5681 5682 S.CheckConstructorAccess(Loc, Constructor, Best->FoundDecl, Entity, 5683 IsExtraneousCopy); 5684 5685 if (IsExtraneousCopy) { 5686 // If this is a totally extraneous copy for C++03 reference 5687 // binding purposes, just return the original initialization 5688 // expression. We don't generate an (elided) copy operation here 5689 // because doing so would require us to pass down a flag to avoid 5690 // infinite recursion, where each step adds another extraneous, 5691 // elidable copy. 5692 5693 // Instantiate the default arguments of any extra parameters in 5694 // the selected copy constructor, as if we were going to create a 5695 // proper call to the copy constructor. 5696 for (unsigned I = 1, N = Constructor->getNumParams(); I != N; ++I) { 5697 ParmVarDecl *Parm = Constructor->getParamDecl(I); 5698 if (S.RequireCompleteType(Loc, Parm->getType(), 5699 diag::err_call_incomplete_argument)) 5700 break; 5701 5702 // Build the default argument expression; we don't actually care 5703 // if this succeeds or not, because this routine will complain 5704 // if there was a problem. 5705 S.BuildCXXDefaultArgExpr(Loc, Constructor, Parm); 5706 } 5707 5708 return CurInitExpr; 5709 } 5710 5711 // Determine the arguments required to actually perform the 5712 // constructor call (we might have derived-to-base conversions, or 5713 // the copy constructor may have default arguments). 5714 if (S.CompleteConstructorCall(Constructor, CurInitExpr, Loc, ConstructorArgs)) 5715 return ExprError(); 5716 5717 // C++0x [class.copy]p32: 5718 // When certain criteria are met, an implementation is allowed to 5719 // omit the copy/move construction of a class object, even if the 5720 // copy/move constructor and/or destructor for the object have 5721 // side effects. [...] 5722 // - when a temporary class object that has not been bound to a 5723 // reference (12.2) would be copied/moved to a class object 5724 // with the same cv-unqualified type, the copy/move operation 5725 // can be omitted by constructing the temporary object 5726 // directly into the target of the omitted copy/move 5727 // 5728 // Note that the other three bullets are handled elsewhere. Copy 5729 // elision for return statements and throw expressions are handled as part 5730 // of constructor initialization, while copy elision for exception handlers 5731 // is handled by the run-time. 5732 // 5733 // FIXME: If the function parameter is not the same type as the temporary, we 5734 // should still be able to elide the copy, but we don't have a way to 5735 // represent in the AST how much should be elided in this case. 5736 bool Elidable = 5737 CurInitExpr->isTemporaryObject(S.Context, Class) && 5738 S.Context.hasSameUnqualifiedType( 5739 Best->Function->getParamDecl(0)->getType().getNonReferenceType(), 5740 CurInitExpr->getType()); 5741 5742 // Actually perform the constructor call. 5743 CurInit = S.BuildCXXConstructExpr(Loc, T, Best->FoundDecl, Constructor, 5744 Elidable, 5745 ConstructorArgs, 5746 HadMultipleCandidates, 5747 /*ListInit*/ false, 5748 /*StdInitListInit*/ false, 5749 /*ZeroInit*/ false, 5750 CXXConstructExpr::CK_Complete, 5751 SourceRange()); 5752 5753 // If we're supposed to bind temporaries, do so. 5754 if (!CurInit.isInvalid() && shouldBindAsTemporary(Entity)) 5755 CurInit = S.MaybeBindToTemporary(CurInit.getAs<Expr>()); 5756 return CurInit; 5757 } 5758 5759 /// \brief Check whether elidable copy construction for binding a reference to 5760 /// a temporary would have succeeded if we were building in C++98 mode, for 5761 /// -Wc++98-compat. 5762 static void CheckCXX98CompatAccessibleCopy(Sema &S, 5763 const InitializedEntity &Entity, 5764 Expr *CurInitExpr) { 5765 assert(S.getLangOpts().CPlusPlus11); 5766 5767 const RecordType *Record = CurInitExpr->getType()->getAs<RecordType>(); 5768 if (!Record) 5769 return; 5770 5771 SourceLocation Loc = getInitializationLoc(Entity, CurInitExpr); 5772 if (S.Diags.isIgnored(diag::warn_cxx98_compat_temp_copy, Loc)) 5773 return; 5774 5775 // Find constructors which would have been considered. 5776 OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal); 5777 DeclContext::lookup_result Ctors = 5778 S.LookupConstructors(cast<CXXRecordDecl>(Record->getDecl())); 5779 5780 // Perform overload resolution. 5781 OverloadCandidateSet::iterator Best; 5782 OverloadingResult OR = ResolveConstructorOverload( 5783 S, Loc, CurInitExpr, CandidateSet, Ctors, Best, 5784 /*CopyInitializing=*/false, /*AllowExplicit=*/true, 5785 /*OnlyListConstructors=*/false, /*IsListInit=*/false, 5786 /*SecondStepOfCopyInit=*/true); 5787 5788 PartialDiagnostic Diag = S.PDiag(diag::warn_cxx98_compat_temp_copy) 5789 << OR << (int)Entity.getKind() << CurInitExpr->getType() 5790 << CurInitExpr->getSourceRange(); 5791 5792 switch (OR) { 5793 case OR_Success: 5794 S.CheckConstructorAccess(Loc, cast<CXXConstructorDecl>(Best->Function), 5795 Best->FoundDecl, Entity, Diag); 5796 // FIXME: Check default arguments as far as that's possible. 5797 break; 5798 5799 case OR_No_Viable_Function: 5800 S.Diag(Loc, Diag); 5801 CandidateSet.NoteCandidates(S, OCD_AllCandidates, CurInitExpr); 5802 break; 5803 5804 case OR_Ambiguous: 5805 S.Diag(Loc, Diag); 5806 CandidateSet.NoteCandidates(S, OCD_ViableCandidates, CurInitExpr); 5807 break; 5808 5809 case OR_Deleted: 5810 S.Diag(Loc, Diag); 5811 S.NoteDeletedFunction(Best->Function); 5812 break; 5813 } 5814 } 5815 5816 void InitializationSequence::PrintInitLocationNote(Sema &S, 5817 const InitializedEntity &Entity) { 5818 if (Entity.isParameterKind() && Entity.getDecl()) { 5819 if (Entity.getDecl()->getLocation().isInvalid()) 5820 return; 5821 5822 if (Entity.getDecl()->getDeclName()) 5823 S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_named_here) 5824 << Entity.getDecl()->getDeclName(); 5825 else 5826 S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_here); 5827 } 5828 else if (Entity.getKind() == InitializedEntity::EK_RelatedResult && 5829 Entity.getMethodDecl()) 5830 S.Diag(Entity.getMethodDecl()->getLocation(), 5831 diag::note_method_return_type_change) 5832 << Entity.getMethodDecl()->getDeclName(); 5833 } 5834 5835 /// Returns true if the parameters describe a constructor initialization of 5836 /// an explicit temporary object, e.g. "Point(x, y)". 5837 static bool isExplicitTemporary(const InitializedEntity &Entity, 5838 const InitializationKind &Kind, 5839 unsigned NumArgs) { 5840 switch (Entity.getKind()) { 5841 case InitializedEntity::EK_Temporary: 5842 case InitializedEntity::EK_CompoundLiteralInit: 5843 case InitializedEntity::EK_RelatedResult: 5844 break; 5845 default: 5846 return false; 5847 } 5848 5849 switch (Kind.getKind()) { 5850 case InitializationKind::IK_DirectList: 5851 return true; 5852 // FIXME: Hack to work around cast weirdness. 5853 case InitializationKind::IK_Direct: 5854 case InitializationKind::IK_Value: 5855 return NumArgs != 1; 5856 default: 5857 return false; 5858 } 5859 } 5860 5861 static ExprResult 5862 PerformConstructorInitialization(Sema &S, 5863 const InitializedEntity &Entity, 5864 const InitializationKind &Kind, 5865 MultiExprArg Args, 5866 const InitializationSequence::Step& Step, 5867 bool &ConstructorInitRequiresZeroInit, 5868 bool IsListInitialization, 5869 bool IsStdInitListInitialization, 5870 SourceLocation LBraceLoc, 5871 SourceLocation RBraceLoc) { 5872 unsigned NumArgs = Args.size(); 5873 CXXConstructorDecl *Constructor 5874 = cast<CXXConstructorDecl>(Step.Function.Function); 5875 bool HadMultipleCandidates = Step.Function.HadMultipleCandidates; 5876 5877 // Build a call to the selected constructor. 5878 SmallVector<Expr*, 8> ConstructorArgs; 5879 SourceLocation Loc = (Kind.isCopyInit() && Kind.getEqualLoc().isValid()) 5880 ? Kind.getEqualLoc() 5881 : Kind.getLocation(); 5882 5883 if (Kind.getKind() == InitializationKind::IK_Default) { 5884 // Force even a trivial, implicit default constructor to be 5885 // semantically checked. We do this explicitly because we don't build 5886 // the definition for completely trivial constructors. 5887 assert(Constructor->getParent() && "No parent class for constructor."); 5888 if (Constructor->isDefaulted() && Constructor->isDefaultConstructor() && 5889 Constructor->isTrivial() && !Constructor->isUsed(false)) 5890 S.DefineImplicitDefaultConstructor(Loc, Constructor); 5891 } 5892 5893 ExprResult CurInit((Expr *)nullptr); 5894 5895 // C++ [over.match.copy]p1: 5896 // - When initializing a temporary to be bound to the first parameter 5897 // of a constructor that takes a reference to possibly cv-qualified 5898 // T as its first argument, called with a single argument in the 5899 // context of direct-initialization, explicit conversion functions 5900 // are also considered. 5901 bool AllowExplicitConv = 5902 Kind.AllowExplicit() && !Kind.isCopyInit() && Args.size() == 1 && 5903 hasCopyOrMoveCtorParam(S.Context, 5904 getConstructorInfo(Step.Function.FoundDecl)); 5905 5906 // Determine the arguments required to actually perform the constructor 5907 // call. 5908 if (S.CompleteConstructorCall(Constructor, Args, 5909 Loc, ConstructorArgs, 5910 AllowExplicitConv, 5911 IsListInitialization)) 5912 return ExprError(); 5913 5914 5915 if (isExplicitTemporary(Entity, Kind, NumArgs)) { 5916 // An explicitly-constructed temporary, e.g., X(1, 2). 5917 if (S.DiagnoseUseOfDecl(Constructor, Loc)) 5918 return ExprError(); 5919 5920 TypeSourceInfo *TSInfo = Entity.getTypeSourceInfo(); 5921 if (!TSInfo) 5922 TSInfo = S.Context.getTrivialTypeSourceInfo(Entity.getType(), Loc); 5923 SourceRange ParenOrBraceRange = 5924 (Kind.getKind() == InitializationKind::IK_DirectList) 5925 ? SourceRange(LBraceLoc, RBraceLoc) 5926 : Kind.getParenRange(); 5927 5928 if (auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>( 5929 Step.Function.FoundDecl.getDecl())) { 5930 Constructor = S.findInheritingConstructor(Loc, Constructor, Shadow); 5931 if (S.DiagnoseUseOfDecl(Constructor, Loc)) 5932 return ExprError(); 5933 } 5934 S.MarkFunctionReferenced(Loc, Constructor); 5935 5936 CurInit = new (S.Context) CXXTemporaryObjectExpr( 5937 S.Context, Constructor, 5938 Entity.getType().getNonLValueExprType(S.Context), TSInfo, 5939 ConstructorArgs, ParenOrBraceRange, HadMultipleCandidates, 5940 IsListInitialization, IsStdInitListInitialization, 5941 ConstructorInitRequiresZeroInit); 5942 } else { 5943 CXXConstructExpr::ConstructionKind ConstructKind = 5944 CXXConstructExpr::CK_Complete; 5945 5946 if (Entity.getKind() == InitializedEntity::EK_Base) { 5947 ConstructKind = Entity.getBaseSpecifier()->isVirtual() ? 5948 CXXConstructExpr::CK_VirtualBase : 5949 CXXConstructExpr::CK_NonVirtualBase; 5950 } else if (Entity.getKind() == InitializedEntity::EK_Delegating) { 5951 ConstructKind = CXXConstructExpr::CK_Delegating; 5952 } 5953 5954 // Only get the parenthesis or brace range if it is a list initialization or 5955 // direct construction. 5956 SourceRange ParenOrBraceRange; 5957 if (IsListInitialization) 5958 ParenOrBraceRange = SourceRange(LBraceLoc, RBraceLoc); 5959 else if (Kind.getKind() == InitializationKind::IK_Direct) 5960 ParenOrBraceRange = Kind.getParenRange(); 5961 5962 // If the entity allows NRVO, mark the construction as elidable 5963 // unconditionally. 5964 if (Entity.allowsNRVO()) 5965 CurInit = S.BuildCXXConstructExpr(Loc, Step.Type, 5966 Step.Function.FoundDecl, 5967 Constructor, /*Elidable=*/true, 5968 ConstructorArgs, 5969 HadMultipleCandidates, 5970 IsListInitialization, 5971 IsStdInitListInitialization, 5972 ConstructorInitRequiresZeroInit, 5973 ConstructKind, 5974 ParenOrBraceRange); 5975 else 5976 CurInit = S.BuildCXXConstructExpr(Loc, Step.Type, 5977 Step.Function.FoundDecl, 5978 Constructor, 5979 ConstructorArgs, 5980 HadMultipleCandidates, 5981 IsListInitialization, 5982 IsStdInitListInitialization, 5983 ConstructorInitRequiresZeroInit, 5984 ConstructKind, 5985 ParenOrBraceRange); 5986 } 5987 if (CurInit.isInvalid()) 5988 return ExprError(); 5989 5990 // Only check access if all of that succeeded. 5991 S.CheckConstructorAccess(Loc, Constructor, Step.Function.FoundDecl, Entity); 5992 if (S.DiagnoseUseOfDecl(Step.Function.FoundDecl, Loc)) 5993 return ExprError(); 5994 5995 if (shouldBindAsTemporary(Entity)) 5996 CurInit = S.MaybeBindToTemporary(CurInit.get()); 5997 5998 return CurInit; 5999 } 6000 6001 /// Determine whether the specified InitializedEntity definitely has a lifetime 6002 /// longer than the current full-expression. Conservatively returns false if 6003 /// it's unclear. 6004 static bool 6005 InitializedEntityOutlivesFullExpression(const InitializedEntity &Entity) { 6006 const InitializedEntity *Top = &Entity; 6007 while (Top->getParent()) 6008 Top = Top->getParent(); 6009 6010 switch (Top->getKind()) { 6011 case InitializedEntity::EK_Variable: 6012 case InitializedEntity::EK_Result: 6013 case InitializedEntity::EK_Exception: 6014 case InitializedEntity::EK_Member: 6015 case InitializedEntity::EK_Binding: 6016 case InitializedEntity::EK_New: 6017 case InitializedEntity::EK_Base: 6018 case InitializedEntity::EK_Delegating: 6019 return true; 6020 6021 case InitializedEntity::EK_ArrayElement: 6022 case InitializedEntity::EK_VectorElement: 6023 case InitializedEntity::EK_BlockElement: 6024 case InitializedEntity::EK_ComplexElement: 6025 // Could not determine what the full initialization is. Assume it might not 6026 // outlive the full-expression. 6027 return false; 6028 6029 case InitializedEntity::EK_Parameter: 6030 case InitializedEntity::EK_Parameter_CF_Audited: 6031 case InitializedEntity::EK_Temporary: 6032 case InitializedEntity::EK_LambdaCapture: 6033 case InitializedEntity::EK_CompoundLiteralInit: 6034 case InitializedEntity::EK_RelatedResult: 6035 // The entity being initialized might not outlive the full-expression. 6036 return false; 6037 } 6038 6039 llvm_unreachable("unknown entity kind"); 6040 } 6041 6042 /// Determine the declaration which an initialized entity ultimately refers to, 6043 /// for the purpose of lifetime-extending a temporary bound to a reference in 6044 /// the initialization of \p Entity. 6045 static const InitializedEntity *getEntityForTemporaryLifetimeExtension( 6046 const InitializedEntity *Entity, 6047 const InitializedEntity *FallbackDecl = nullptr) { 6048 // C++11 [class.temporary]p5: 6049 switch (Entity->getKind()) { 6050 case InitializedEntity::EK_Variable: 6051 // The temporary [...] persists for the lifetime of the reference 6052 return Entity; 6053 6054 case InitializedEntity::EK_Member: 6055 // For subobjects, we look at the complete object. 6056 if (Entity->getParent()) 6057 return getEntityForTemporaryLifetimeExtension(Entity->getParent(), 6058 Entity); 6059 6060 // except: 6061 // -- A temporary bound to a reference member in a constructor's 6062 // ctor-initializer persists until the constructor exits. 6063 return Entity; 6064 6065 case InitializedEntity::EK_Binding: 6066 // Per [dcl.decomp]p3, the binding is treated as a variable of reference 6067 // type. 6068 return Entity; 6069 6070 case InitializedEntity::EK_Parameter: 6071 case InitializedEntity::EK_Parameter_CF_Audited: 6072 // -- A temporary bound to a reference parameter in a function call 6073 // persists until the completion of the full-expression containing 6074 // the call. 6075 case InitializedEntity::EK_Result: 6076 // -- The lifetime of a temporary bound to the returned value in a 6077 // function return statement is not extended; the temporary is 6078 // destroyed at the end of the full-expression in the return statement. 6079 case InitializedEntity::EK_New: 6080 // -- A temporary bound to a reference in a new-initializer persists 6081 // until the completion of the full-expression containing the 6082 // new-initializer. 6083 return nullptr; 6084 6085 case InitializedEntity::EK_Temporary: 6086 case InitializedEntity::EK_CompoundLiteralInit: 6087 case InitializedEntity::EK_RelatedResult: 6088 // We don't yet know the storage duration of the surrounding temporary. 6089 // Assume it's got full-expression duration for now, it will patch up our 6090 // storage duration if that's not correct. 6091 return nullptr; 6092 6093 case InitializedEntity::EK_ArrayElement: 6094 // For subobjects, we look at the complete object. 6095 return getEntityForTemporaryLifetimeExtension(Entity->getParent(), 6096 FallbackDecl); 6097 6098 case InitializedEntity::EK_Base: 6099 // For subobjects, we look at the complete object. 6100 if (Entity->getParent()) 6101 return getEntityForTemporaryLifetimeExtension(Entity->getParent(), 6102 Entity); 6103 // Fall through. 6104 case InitializedEntity::EK_Delegating: 6105 // We can reach this case for aggregate initialization in a constructor: 6106 // struct A { int &&r; }; 6107 // struct B : A { B() : A{0} {} }; 6108 // In this case, use the innermost field decl as the context. 6109 return FallbackDecl; 6110 6111 case InitializedEntity::EK_BlockElement: 6112 case InitializedEntity::EK_LambdaCapture: 6113 case InitializedEntity::EK_Exception: 6114 case InitializedEntity::EK_VectorElement: 6115 case InitializedEntity::EK_ComplexElement: 6116 return nullptr; 6117 } 6118 llvm_unreachable("unknown entity kind"); 6119 } 6120 6121 static void performLifetimeExtension(Expr *Init, 6122 const InitializedEntity *ExtendingEntity); 6123 6124 /// Update a glvalue expression that is used as the initializer of a reference 6125 /// to note that its lifetime is extended. 6126 /// \return \c true if any temporary had its lifetime extended. 6127 static bool 6128 performReferenceExtension(Expr *Init, 6129 const InitializedEntity *ExtendingEntity) { 6130 // Walk past any constructs which we can lifetime-extend across. 6131 Expr *Old; 6132 do { 6133 Old = Init; 6134 6135 if (InitListExpr *ILE = dyn_cast<InitListExpr>(Init)) { 6136 if (ILE->getNumInits() == 1 && ILE->isGLValue()) { 6137 // This is just redundant braces around an initializer. Step over it. 6138 Init = ILE->getInit(0); 6139 } 6140 } 6141 6142 // Step over any subobject adjustments; we may have a materialized 6143 // temporary inside them. 6144 Init = const_cast<Expr *>(Init->skipRValueSubobjectAdjustments()); 6145 6146 // Per current approach for DR1376, look through casts to reference type 6147 // when performing lifetime extension. 6148 if (CastExpr *CE = dyn_cast<CastExpr>(Init)) 6149 if (CE->getSubExpr()->isGLValue()) 6150 Init = CE->getSubExpr(); 6151 6152 // Per the current approach for DR1299, look through array element access 6153 // when performing lifetime extension. 6154 if (auto *ASE = dyn_cast<ArraySubscriptExpr>(Init)) 6155 Init = ASE->getBase(); 6156 } while (Init != Old); 6157 6158 if (MaterializeTemporaryExpr *ME = dyn_cast<MaterializeTemporaryExpr>(Init)) { 6159 // Update the storage duration of the materialized temporary. 6160 // FIXME: Rebuild the expression instead of mutating it. 6161 ME->setExtendingDecl(ExtendingEntity->getDecl(), 6162 ExtendingEntity->allocateManglingNumber()); 6163 performLifetimeExtension(ME->GetTemporaryExpr(), ExtendingEntity); 6164 return true; 6165 } 6166 6167 return false; 6168 } 6169 6170 /// Update a prvalue expression that is going to be materialized as a 6171 /// lifetime-extended temporary. 6172 static void performLifetimeExtension(Expr *Init, 6173 const InitializedEntity *ExtendingEntity) { 6174 // Dig out the expression which constructs the extended temporary. 6175 Init = const_cast<Expr *>(Init->skipRValueSubobjectAdjustments()); 6176 6177 if (CXXBindTemporaryExpr *BTE = dyn_cast<CXXBindTemporaryExpr>(Init)) 6178 Init = BTE->getSubExpr(); 6179 6180 if (CXXStdInitializerListExpr *ILE = 6181 dyn_cast<CXXStdInitializerListExpr>(Init)) { 6182 performReferenceExtension(ILE->getSubExpr(), ExtendingEntity); 6183 return; 6184 } 6185 6186 if (InitListExpr *ILE = dyn_cast<InitListExpr>(Init)) { 6187 if (ILE->getType()->isArrayType()) { 6188 for (unsigned I = 0, N = ILE->getNumInits(); I != N; ++I) 6189 performLifetimeExtension(ILE->getInit(I), ExtendingEntity); 6190 return; 6191 } 6192 6193 if (CXXRecordDecl *RD = ILE->getType()->getAsCXXRecordDecl()) { 6194 assert(RD->isAggregate() && "aggregate init on non-aggregate"); 6195 6196 // If we lifetime-extend a braced initializer which is initializing an 6197 // aggregate, and that aggregate contains reference members which are 6198 // bound to temporaries, those temporaries are also lifetime-extended. 6199 if (RD->isUnion() && ILE->getInitializedFieldInUnion() && 6200 ILE->getInitializedFieldInUnion()->getType()->isReferenceType()) 6201 performReferenceExtension(ILE->getInit(0), ExtendingEntity); 6202 else { 6203 unsigned Index = 0; 6204 for (const auto *I : RD->fields()) { 6205 if (Index >= ILE->getNumInits()) 6206 break; 6207 if (I->isUnnamedBitfield()) 6208 continue; 6209 Expr *SubInit = ILE->getInit(Index); 6210 if (I->getType()->isReferenceType()) 6211 performReferenceExtension(SubInit, ExtendingEntity); 6212 else if (isa<InitListExpr>(SubInit) || 6213 isa<CXXStdInitializerListExpr>(SubInit)) 6214 // This may be either aggregate-initialization of a member or 6215 // initialization of a std::initializer_list object. Either way, 6216 // we should recursively lifetime-extend that initializer. 6217 performLifetimeExtension(SubInit, ExtendingEntity); 6218 ++Index; 6219 } 6220 } 6221 } 6222 } 6223 } 6224 6225 static void warnOnLifetimeExtension(Sema &S, const InitializedEntity &Entity, 6226 const Expr *Init, bool IsInitializerList, 6227 const ValueDecl *ExtendingDecl) { 6228 // Warn if a field lifetime-extends a temporary. 6229 if (isa<FieldDecl>(ExtendingDecl)) { 6230 if (IsInitializerList) { 6231 S.Diag(Init->getExprLoc(), diag::warn_dangling_std_initializer_list) 6232 << /*at end of constructor*/true; 6233 return; 6234 } 6235 6236 bool IsSubobjectMember = false; 6237 for (const InitializedEntity *Ent = Entity.getParent(); Ent; 6238 Ent = Ent->getParent()) { 6239 if (Ent->getKind() != InitializedEntity::EK_Base) { 6240 IsSubobjectMember = true; 6241 break; 6242 } 6243 } 6244 S.Diag(Init->getExprLoc(), 6245 diag::warn_bind_ref_member_to_temporary) 6246 << ExtendingDecl << Init->getSourceRange() 6247 << IsSubobjectMember << IsInitializerList; 6248 if (IsSubobjectMember) 6249 S.Diag(ExtendingDecl->getLocation(), 6250 diag::note_ref_subobject_of_member_declared_here); 6251 else 6252 S.Diag(ExtendingDecl->getLocation(), 6253 diag::note_ref_or_ptr_member_declared_here) 6254 << /*is pointer*/false; 6255 } 6256 } 6257 6258 static void DiagnoseNarrowingInInitList(Sema &S, 6259 const ImplicitConversionSequence &ICS, 6260 QualType PreNarrowingType, 6261 QualType EntityType, 6262 const Expr *PostInit); 6263 6264 /// Provide warnings when std::move is used on construction. 6265 static void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, 6266 bool IsReturnStmt) { 6267 if (!InitExpr) 6268 return; 6269 6270 if (S.inTemplateInstantiation()) 6271 return; 6272 6273 QualType DestType = InitExpr->getType(); 6274 if (!DestType->isRecordType()) 6275 return; 6276 6277 unsigned DiagID = 0; 6278 if (IsReturnStmt) { 6279 const CXXConstructExpr *CCE = 6280 dyn_cast<CXXConstructExpr>(InitExpr->IgnoreParens()); 6281 if (!CCE || CCE->getNumArgs() != 1) 6282 return; 6283 6284 if (!CCE->getConstructor()->isCopyOrMoveConstructor()) 6285 return; 6286 6287 InitExpr = CCE->getArg(0)->IgnoreImpCasts(); 6288 } 6289 6290 // Find the std::move call and get the argument. 6291 const CallExpr *CE = dyn_cast<CallExpr>(InitExpr->IgnoreParens()); 6292 if (!CE || CE->getNumArgs() != 1) 6293 return; 6294 6295 const FunctionDecl *MoveFunction = CE->getDirectCallee(); 6296 if (!MoveFunction || !MoveFunction->isInStdNamespace() || 6297 !MoveFunction->getIdentifier() || 6298 !MoveFunction->getIdentifier()->isStr("move")) 6299 return; 6300 6301 const Expr *Arg = CE->getArg(0)->IgnoreImplicit(); 6302 6303 if (IsReturnStmt) { 6304 const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Arg->IgnoreParenImpCasts()); 6305 if (!DRE || DRE->refersToEnclosingVariableOrCapture()) 6306 return; 6307 6308 const VarDecl *VD = dyn_cast<VarDecl>(DRE->getDecl()); 6309 if (!VD || !VD->hasLocalStorage()) 6310 return; 6311 6312 QualType SourceType = VD->getType(); 6313 if (!SourceType->isRecordType()) 6314 return; 6315 6316 if (!S.Context.hasSameUnqualifiedType(DestType, SourceType)) { 6317 return; 6318 } 6319 6320 // If we're returning a function parameter, copy elision 6321 // is not possible. 6322 if (isa<ParmVarDecl>(VD)) 6323 DiagID = diag::warn_redundant_move_on_return; 6324 else 6325 DiagID = diag::warn_pessimizing_move_on_return; 6326 } else { 6327 DiagID = diag::warn_pessimizing_move_on_initialization; 6328 const Expr *ArgStripped = Arg->IgnoreImplicit()->IgnoreParens(); 6329 if (!ArgStripped->isRValue() || !ArgStripped->getType()->isRecordType()) 6330 return; 6331 } 6332 6333 S.Diag(CE->getLocStart(), DiagID); 6334 6335 // Get all the locations for a fix-it. Don't emit the fix-it if any location 6336 // is within a macro. 6337 SourceLocation CallBegin = CE->getCallee()->getLocStart(); 6338 if (CallBegin.isMacroID()) 6339 return; 6340 SourceLocation RParen = CE->getRParenLoc(); 6341 if (RParen.isMacroID()) 6342 return; 6343 SourceLocation LParen; 6344 SourceLocation ArgLoc = Arg->getLocStart(); 6345 6346 // Special testing for the argument location. Since the fix-it needs the 6347 // location right before the argument, the argument location can be in a 6348 // macro only if it is at the beginning of the macro. 6349 while (ArgLoc.isMacroID() && 6350 S.getSourceManager().isAtStartOfImmediateMacroExpansion(ArgLoc)) { 6351 ArgLoc = S.getSourceManager().getImmediateExpansionRange(ArgLoc).first; 6352 } 6353 6354 if (LParen.isMacroID()) 6355 return; 6356 6357 LParen = ArgLoc.getLocWithOffset(-1); 6358 6359 S.Diag(CE->getLocStart(), diag::note_remove_move) 6360 << FixItHint::CreateRemoval(SourceRange(CallBegin, LParen)) 6361 << FixItHint::CreateRemoval(SourceRange(RParen, RParen)); 6362 } 6363 6364 static void CheckForNullPointerDereference(Sema &S, const Expr *E) { 6365 // Check to see if we are dereferencing a null pointer. If so, this is 6366 // undefined behavior, so warn about it. This only handles the pattern 6367 // "*null", which is a very syntactic check. 6368 if (const UnaryOperator *UO = dyn_cast<UnaryOperator>(E->IgnoreParenCasts())) 6369 if (UO->getOpcode() == UO_Deref && 6370 UO->getSubExpr()->IgnoreParenCasts()-> 6371 isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull)) { 6372 S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, 6373 S.PDiag(diag::warn_binding_null_to_reference) 6374 << UO->getSubExpr()->getSourceRange()); 6375 } 6376 } 6377 6378 MaterializeTemporaryExpr * 6379 Sema::CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary, 6380 bool BoundToLvalueReference) { 6381 auto MTE = new (Context) 6382 MaterializeTemporaryExpr(T, Temporary, BoundToLvalueReference); 6383 6384 // Order an ExprWithCleanups for lifetime marks. 6385 // 6386 // TODO: It'll be good to have a single place to check the access of the 6387 // destructor and generate ExprWithCleanups for various uses. Currently these 6388 // are done in both CreateMaterializeTemporaryExpr and MaybeBindToTemporary, 6389 // but there may be a chance to merge them. 6390 Cleanup.setExprNeedsCleanups(false); 6391 return MTE; 6392 } 6393 6394 ExprResult Sema::TemporaryMaterializationConversion(Expr *E) { 6395 // In C++98, we don't want to implicitly create an xvalue. 6396 // FIXME: This means that AST consumers need to deal with "prvalues" that 6397 // denote materialized temporaries. Maybe we should add another ValueKind 6398 // for "xvalue pretending to be a prvalue" for C++98 support. 6399 if (!E->isRValue() || !getLangOpts().CPlusPlus11) 6400 return E; 6401 6402 // C++1z [conv.rval]/1: T shall be a complete type. 6403 // FIXME: Does this ever matter (can we form a prvalue of incomplete type)? 6404 // If so, we should check for a non-abstract class type here too. 6405 QualType T = E->getType(); 6406 if (RequireCompleteType(E->getExprLoc(), T, diag::err_incomplete_type)) 6407 return ExprError(); 6408 6409 return CreateMaterializeTemporaryExpr(E->getType(), E, false); 6410 } 6411 6412 ExprResult 6413 InitializationSequence::Perform(Sema &S, 6414 const InitializedEntity &Entity, 6415 const InitializationKind &Kind, 6416 MultiExprArg Args, 6417 QualType *ResultType) { 6418 if (Failed()) { 6419 Diagnose(S, Entity, Kind, Args); 6420 return ExprError(); 6421 } 6422 if (!ZeroInitializationFixit.empty()) { 6423 unsigned DiagID = diag::err_default_init_const; 6424 if (Decl *D = Entity.getDecl()) 6425 if (S.getLangOpts().MSVCCompat && D->hasAttr<SelectAnyAttr>()) 6426 DiagID = diag::ext_default_init_const; 6427 6428 // The initialization would have succeeded with this fixit. Since the fixit 6429 // is on the error, we need to build a valid AST in this case, so this isn't 6430 // handled in the Failed() branch above. 6431 QualType DestType = Entity.getType(); 6432 S.Diag(Kind.getLocation(), DiagID) 6433 << DestType << (bool)DestType->getAs<RecordType>() 6434 << FixItHint::CreateInsertion(ZeroInitializationFixitLoc, 6435 ZeroInitializationFixit); 6436 } 6437 6438 if (getKind() == DependentSequence) { 6439 // If the declaration is a non-dependent, incomplete array type 6440 // that has an initializer, then its type will be completed once 6441 // the initializer is instantiated. 6442 if (ResultType && !Entity.getType()->isDependentType() && 6443 Args.size() == 1) { 6444 QualType DeclType = Entity.getType(); 6445 if (const IncompleteArrayType *ArrayT 6446 = S.Context.getAsIncompleteArrayType(DeclType)) { 6447 // FIXME: We don't currently have the ability to accurately 6448 // compute the length of an initializer list without 6449 // performing full type-checking of the initializer list 6450 // (since we have to determine where braces are implicitly 6451 // introduced and such). So, we fall back to making the array 6452 // type a dependently-sized array type with no specified 6453 // bound. 6454 if (isa<InitListExpr>((Expr *)Args[0])) { 6455 SourceRange Brackets; 6456 6457 // Scavange the location of the brackets from the entity, if we can. 6458 if (auto *DD = dyn_cast_or_null<DeclaratorDecl>(Entity.getDecl())) { 6459 if (TypeSourceInfo *TInfo = DD->getTypeSourceInfo()) { 6460 TypeLoc TL = TInfo->getTypeLoc(); 6461 if (IncompleteArrayTypeLoc ArrayLoc = 6462 TL.getAs<IncompleteArrayTypeLoc>()) 6463 Brackets = ArrayLoc.getBracketsRange(); 6464 } 6465 } 6466 6467 *ResultType 6468 = S.Context.getDependentSizedArrayType(ArrayT->getElementType(), 6469 /*NumElts=*/nullptr, 6470 ArrayT->getSizeModifier(), 6471 ArrayT->getIndexTypeCVRQualifiers(), 6472 Brackets); 6473 } 6474 6475 } 6476 } 6477 if (Kind.getKind() == InitializationKind::IK_Direct && 6478 !Kind.isExplicitCast()) { 6479 // Rebuild the ParenListExpr. 6480 SourceRange ParenRange = Kind.getParenRange(); 6481 return S.ActOnParenListExpr(ParenRange.getBegin(), ParenRange.getEnd(), 6482 Args); 6483 } 6484 assert(Kind.getKind() == InitializationKind::IK_Copy || 6485 Kind.isExplicitCast() || 6486 Kind.getKind() == InitializationKind::IK_DirectList); 6487 return ExprResult(Args[0]); 6488 } 6489 6490 // No steps means no initialization. 6491 if (Steps.empty()) 6492 return ExprResult((Expr *)nullptr); 6493 6494 if (S.getLangOpts().CPlusPlus11 && Entity.getType()->isReferenceType() && 6495 Args.size() == 1 && isa<InitListExpr>(Args[0]) && 6496 !Entity.isParameterKind()) { 6497 // Produce a C++98 compatibility warning if we are initializing a reference 6498 // from an initializer list. For parameters, we produce a better warning 6499 // elsewhere. 6500 Expr *Init = Args[0]; 6501 S.Diag(Init->getLocStart(), diag::warn_cxx98_compat_reference_list_init) 6502 << Init->getSourceRange(); 6503 } 6504 6505 // Diagnose cases where we initialize a pointer to an array temporary, and the 6506 // pointer obviously outlives the temporary. 6507 if (Args.size() == 1 && Args[0]->getType()->isArrayType() && 6508 Entity.getType()->isPointerType() && 6509 InitializedEntityOutlivesFullExpression(Entity)) { 6510 const Expr *Init = Args[0]->skipRValueSubobjectAdjustments(); 6511 if (auto *MTE = dyn_cast<MaterializeTemporaryExpr>(Init)) 6512 Init = MTE->GetTemporaryExpr(); 6513 Expr::LValueClassification Kind = Init->ClassifyLValue(S.Context); 6514 if (Kind == Expr::LV_ClassTemporary || Kind == Expr::LV_ArrayTemporary) 6515 S.Diag(Init->getLocStart(), diag::warn_temporary_array_to_pointer_decay) 6516 << Init->getSourceRange(); 6517 } 6518 6519 QualType DestType = Entity.getType().getNonReferenceType(); 6520 // FIXME: Ugly hack around the fact that Entity.getType() is not 6521 // the same as Entity.getDecl()->getType() in cases involving type merging, 6522 // and we want latter when it makes sense. 6523 if (ResultType) 6524 *ResultType = Entity.getDecl() ? Entity.getDecl()->getType() : 6525 Entity.getType(); 6526 6527 ExprResult CurInit((Expr *)nullptr); 6528 SmallVector<Expr*, 4> ArrayLoopCommonExprs; 6529 6530 // For initialization steps that start with a single initializer, 6531 // grab the only argument out the Args and place it into the "current" 6532 // initializer. 6533 switch (Steps.front().Kind) { 6534 case SK_ResolveAddressOfOverloadedFunction: 6535 case SK_CastDerivedToBaseRValue: 6536 case SK_CastDerivedToBaseXValue: 6537 case SK_CastDerivedToBaseLValue: 6538 case SK_BindReference: 6539 case SK_BindReferenceToTemporary: 6540 case SK_FinalCopy: 6541 case SK_ExtraneousCopyToTemporary: 6542 case SK_UserConversion: 6543 case SK_QualificationConversionLValue: 6544 case SK_QualificationConversionXValue: 6545 case SK_QualificationConversionRValue: 6546 case SK_AtomicConversion: 6547 case SK_LValueToRValue: 6548 case SK_ConversionSequence: 6549 case SK_ConversionSequenceNoNarrowing: 6550 case SK_ListInitialization: 6551 case SK_UnwrapInitList: 6552 case SK_RewrapInitList: 6553 case SK_CAssignment: 6554 case SK_StringInit: 6555 case SK_ObjCObjectConversion: 6556 case SK_ArrayLoopIndex: 6557 case SK_ArrayLoopInit: 6558 case SK_ArrayInit: 6559 case SK_GNUArrayInit: 6560 case SK_ParenthesizedArrayInit: 6561 case SK_PassByIndirectCopyRestore: 6562 case SK_PassByIndirectRestore: 6563 case SK_ProduceObjCObject: 6564 case SK_StdInitializerList: 6565 case SK_OCLSamplerInit: 6566 case SK_OCLZeroEvent: 6567 case SK_OCLZeroQueue: { 6568 assert(Args.size() == 1); 6569 CurInit = Args[0]; 6570 if (!CurInit.get()) return ExprError(); 6571 break; 6572 } 6573 6574 case SK_ConstructorInitialization: 6575 case SK_ConstructorInitializationFromList: 6576 case SK_StdInitializerListConstructorCall: 6577 case SK_ZeroInitialization: 6578 break; 6579 } 6580 6581 // Promote from an unevaluated context to an unevaluated list context in 6582 // C++11 list-initialization; we need to instantiate entities usable in 6583 // constant expressions here in order to perform narrowing checks =( 6584 EnterExpressionEvaluationContext Evaluated( 6585 S, EnterExpressionEvaluationContext::InitList, 6586 CurInit.get() && isa<InitListExpr>(CurInit.get())); 6587 6588 // C++ [class.abstract]p2: 6589 // no objects of an abstract class can be created except as subobjects 6590 // of a class derived from it 6591 auto checkAbstractType = [&](QualType T) -> bool { 6592 if (Entity.getKind() == InitializedEntity::EK_Base || 6593 Entity.getKind() == InitializedEntity::EK_Delegating) 6594 return false; 6595 return S.RequireNonAbstractType(Kind.getLocation(), T, 6596 diag::err_allocation_of_abstract_type); 6597 }; 6598 6599 // Walk through the computed steps for the initialization sequence, 6600 // performing the specified conversions along the way. 6601 bool ConstructorInitRequiresZeroInit = false; 6602 for (step_iterator Step = step_begin(), StepEnd = step_end(); 6603 Step != StepEnd; ++Step) { 6604 if (CurInit.isInvalid()) 6605 return ExprError(); 6606 6607 QualType SourceType = CurInit.get() ? CurInit.get()->getType() : QualType(); 6608 6609 switch (Step->Kind) { 6610 case SK_ResolveAddressOfOverloadedFunction: 6611 // Overload resolution determined which function invoke; update the 6612 // initializer to reflect that choice. 6613 S.CheckAddressOfMemberAccess(CurInit.get(), Step->Function.FoundDecl); 6614 if (S.DiagnoseUseOfDecl(Step->Function.FoundDecl, Kind.getLocation())) 6615 return ExprError(); 6616 CurInit = S.FixOverloadedFunctionReference(CurInit, 6617 Step->Function.FoundDecl, 6618 Step->Function.Function); 6619 break; 6620 6621 case SK_CastDerivedToBaseRValue: 6622 case SK_CastDerivedToBaseXValue: 6623 case SK_CastDerivedToBaseLValue: { 6624 // We have a derived-to-base cast that produces either an rvalue or an 6625 // lvalue. Perform that cast. 6626 6627 CXXCastPath BasePath; 6628 6629 // Casts to inaccessible base classes are allowed with C-style casts. 6630 bool IgnoreBaseAccess = Kind.isCStyleOrFunctionalCast(); 6631 if (S.CheckDerivedToBaseConversion(SourceType, Step->Type, 6632 CurInit.get()->getLocStart(), 6633 CurInit.get()->getSourceRange(), 6634 &BasePath, IgnoreBaseAccess)) 6635 return ExprError(); 6636 6637 ExprValueKind VK = 6638 Step->Kind == SK_CastDerivedToBaseLValue ? 6639 VK_LValue : 6640 (Step->Kind == SK_CastDerivedToBaseXValue ? 6641 VK_XValue : 6642 VK_RValue); 6643 CurInit = 6644 ImplicitCastExpr::Create(S.Context, Step->Type, CK_DerivedToBase, 6645 CurInit.get(), &BasePath, VK); 6646 break; 6647 } 6648 6649 case SK_BindReference: 6650 // Reference binding does not have any corresponding ASTs. 6651 6652 // Check exception specifications 6653 if (S.CheckExceptionSpecCompatibility(CurInit.get(), DestType)) 6654 return ExprError(); 6655 6656 // Even though we didn't materialize a temporary, the binding may still 6657 // extend the lifetime of a temporary. This happens if we bind a reference 6658 // to the result of a cast to reference type. 6659 if (const InitializedEntity *ExtendingEntity = 6660 getEntityForTemporaryLifetimeExtension(&Entity)) 6661 if (performReferenceExtension(CurInit.get(), ExtendingEntity)) 6662 warnOnLifetimeExtension(S, Entity, CurInit.get(), 6663 /*IsInitializerList=*/false, 6664 ExtendingEntity->getDecl()); 6665 6666 CheckForNullPointerDereference(S, CurInit.get()); 6667 break; 6668 6669 case SK_BindReferenceToTemporary: { 6670 // Make sure the "temporary" is actually an rvalue. 6671 assert(CurInit.get()->isRValue() && "not a temporary"); 6672 6673 // Check exception specifications 6674 if (S.CheckExceptionSpecCompatibility(CurInit.get(), DestType)) 6675 return ExprError(); 6676 6677 // Materialize the temporary into memory. 6678 MaterializeTemporaryExpr *MTE = S.CreateMaterializeTemporaryExpr( 6679 Step->Type, CurInit.get(), Entity.getType()->isLValueReferenceType()); 6680 6681 // Maybe lifetime-extend the temporary's subobjects to match the 6682 // entity's lifetime. 6683 if (const InitializedEntity *ExtendingEntity = 6684 getEntityForTemporaryLifetimeExtension(&Entity)) 6685 if (performReferenceExtension(MTE, ExtendingEntity)) 6686 warnOnLifetimeExtension(S, Entity, CurInit.get(), 6687 /*IsInitializerList=*/false, 6688 ExtendingEntity->getDecl()); 6689 6690 // If we're extending this temporary to automatic storage duration -- we 6691 // need to register its cleanup during the full-expression's cleanups. 6692 if (MTE->getStorageDuration() == SD_Automatic && 6693 MTE->getType().isDestructedType()) 6694 S.Cleanup.setExprNeedsCleanups(true); 6695 6696 CurInit = MTE; 6697 break; 6698 } 6699 6700 case SK_FinalCopy: 6701 if (checkAbstractType(Step->Type)) 6702 return ExprError(); 6703 6704 // If the overall initialization is initializing a temporary, we already 6705 // bound our argument if it was necessary to do so. If not (if we're 6706 // ultimately initializing a non-temporary), our argument needs to be 6707 // bound since it's initializing a function parameter. 6708 // FIXME: This is a mess. Rationalize temporary destruction. 6709 if (!shouldBindAsTemporary(Entity)) 6710 CurInit = S.MaybeBindToTemporary(CurInit.get()); 6711 CurInit = CopyObject(S, Step->Type, Entity, CurInit, 6712 /*IsExtraneousCopy=*/false); 6713 break; 6714 6715 case SK_ExtraneousCopyToTemporary: 6716 CurInit = CopyObject(S, Step->Type, Entity, CurInit, 6717 /*IsExtraneousCopy=*/true); 6718 break; 6719 6720 case SK_UserConversion: { 6721 // We have a user-defined conversion that invokes either a constructor 6722 // or a conversion function. 6723 CastKind CastKind; 6724 FunctionDecl *Fn = Step->Function.Function; 6725 DeclAccessPair FoundFn = Step->Function.FoundDecl; 6726 bool HadMultipleCandidates = Step->Function.HadMultipleCandidates; 6727 bool CreatedObject = false; 6728 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Fn)) { 6729 // Build a call to the selected constructor. 6730 SmallVector<Expr*, 8> ConstructorArgs; 6731 SourceLocation Loc = CurInit.get()->getLocStart(); 6732 6733 // Determine the arguments required to actually perform the constructor 6734 // call. 6735 Expr *Arg = CurInit.get(); 6736 if (S.CompleteConstructorCall(Constructor, 6737 MultiExprArg(&Arg, 1), 6738 Loc, ConstructorArgs)) 6739 return ExprError(); 6740 6741 // Build an expression that constructs a temporary. 6742 CurInit = S.BuildCXXConstructExpr(Loc, Step->Type, 6743 FoundFn, Constructor, 6744 ConstructorArgs, 6745 HadMultipleCandidates, 6746 /*ListInit*/ false, 6747 /*StdInitListInit*/ false, 6748 /*ZeroInit*/ false, 6749 CXXConstructExpr::CK_Complete, 6750 SourceRange()); 6751 if (CurInit.isInvalid()) 6752 return ExprError(); 6753 6754 S.CheckConstructorAccess(Kind.getLocation(), Constructor, FoundFn, 6755 Entity); 6756 if (S.DiagnoseUseOfDecl(FoundFn, Kind.getLocation())) 6757 return ExprError(); 6758 6759 CastKind = CK_ConstructorConversion; 6760 CreatedObject = true; 6761 } else { 6762 // Build a call to the conversion function. 6763 CXXConversionDecl *Conversion = cast<CXXConversionDecl>(Fn); 6764 S.CheckMemberOperatorAccess(Kind.getLocation(), CurInit.get(), nullptr, 6765 FoundFn); 6766 if (S.DiagnoseUseOfDecl(FoundFn, Kind.getLocation())) 6767 return ExprError(); 6768 6769 // FIXME: Should we move this initialization into a separate 6770 // derived-to-base conversion? I believe the answer is "no", because 6771 // we don't want to turn off access control here for c-style casts. 6772 CurInit = S.PerformObjectArgumentInitialization(CurInit.get(), 6773 /*Qualifier=*/nullptr, 6774 FoundFn, Conversion); 6775 if (CurInit.isInvalid()) 6776 return ExprError(); 6777 6778 // Build the actual call to the conversion function. 6779 CurInit = S.BuildCXXMemberCallExpr(CurInit.get(), FoundFn, Conversion, 6780 HadMultipleCandidates); 6781 if (CurInit.isInvalid()) 6782 return ExprError(); 6783 6784 CastKind = CK_UserDefinedConversion; 6785 CreatedObject = Conversion->getReturnType()->isRecordType(); 6786 } 6787 6788 if (CreatedObject && checkAbstractType(CurInit.get()->getType())) 6789 return ExprError(); 6790 6791 CurInit = ImplicitCastExpr::Create(S.Context, CurInit.get()->getType(), 6792 CastKind, CurInit.get(), nullptr, 6793 CurInit.get()->getValueKind()); 6794 6795 if (shouldBindAsTemporary(Entity)) 6796 // The overall entity is temporary, so this expression should be 6797 // destroyed at the end of its full-expression. 6798 CurInit = S.MaybeBindToTemporary(CurInit.getAs<Expr>()); 6799 else if (CreatedObject && shouldDestroyEntity(Entity)) { 6800 // The object outlasts the full-expression, but we need to prepare for 6801 // a destructor being run on it. 6802 // FIXME: It makes no sense to do this here. This should happen 6803 // regardless of how we initialized the entity. 6804 QualType T = CurInit.get()->getType(); 6805 if (const RecordType *Record = T->getAs<RecordType>()) { 6806 CXXDestructorDecl *Destructor 6807 = S.LookupDestructor(cast<CXXRecordDecl>(Record->getDecl())); 6808 S.CheckDestructorAccess(CurInit.get()->getLocStart(), Destructor, 6809 S.PDiag(diag::err_access_dtor_temp) << T); 6810 S.MarkFunctionReferenced(CurInit.get()->getLocStart(), Destructor); 6811 if (S.DiagnoseUseOfDecl(Destructor, CurInit.get()->getLocStart())) 6812 return ExprError(); 6813 } 6814 } 6815 break; 6816 } 6817 6818 case SK_QualificationConversionLValue: 6819 case SK_QualificationConversionXValue: 6820 case SK_QualificationConversionRValue: { 6821 // Perform a qualification conversion; these can never go wrong. 6822 ExprValueKind VK = 6823 Step->Kind == SK_QualificationConversionLValue ? 6824 VK_LValue : 6825 (Step->Kind == SK_QualificationConversionXValue ? 6826 VK_XValue : 6827 VK_RValue); 6828 CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, CK_NoOp, VK); 6829 break; 6830 } 6831 6832 case SK_AtomicConversion: { 6833 assert(CurInit.get()->isRValue() && "cannot convert glvalue to atomic"); 6834 CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, 6835 CK_NonAtomicToAtomic, VK_RValue); 6836 break; 6837 } 6838 6839 case SK_LValueToRValue: { 6840 assert(CurInit.get()->isGLValue() && "cannot load from a prvalue"); 6841 CurInit = ImplicitCastExpr::Create(S.Context, Step->Type, 6842 CK_LValueToRValue, CurInit.get(), 6843 /*BasePath=*/nullptr, VK_RValue); 6844 break; 6845 } 6846 6847 case SK_ConversionSequence: 6848 case SK_ConversionSequenceNoNarrowing: { 6849 Sema::CheckedConversionKind CCK 6850 = Kind.isCStyleCast()? Sema::CCK_CStyleCast 6851 : Kind.isFunctionalCast()? Sema::CCK_FunctionalCast 6852 : Kind.isExplicitCast()? Sema::CCK_OtherCast 6853 : Sema::CCK_ImplicitConversion; 6854 ExprResult CurInitExprRes = 6855 S.PerformImplicitConversion(CurInit.get(), Step->Type, *Step->ICS, 6856 getAssignmentAction(Entity), CCK); 6857 if (CurInitExprRes.isInvalid()) 6858 return ExprError(); 6859 6860 S.DiscardMisalignedMemberAddress(Step->Type.getTypePtr(), CurInit.get()); 6861 6862 CurInit = CurInitExprRes; 6863 6864 if (Step->Kind == SK_ConversionSequenceNoNarrowing && 6865 S.getLangOpts().CPlusPlus) 6866 DiagnoseNarrowingInInitList(S, *Step->ICS, SourceType, Entity.getType(), 6867 CurInit.get()); 6868 6869 break; 6870 } 6871 6872 case SK_ListInitialization: { 6873 if (checkAbstractType(Step->Type)) 6874 return ExprError(); 6875 6876 InitListExpr *InitList = cast<InitListExpr>(CurInit.get()); 6877 // If we're not initializing the top-level entity, we need to create an 6878 // InitializeTemporary entity for our target type. 6879 QualType Ty = Step->Type; 6880 bool IsTemporary = !S.Context.hasSameType(Entity.getType(), Ty); 6881 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary(Ty); 6882 InitializedEntity InitEntity = IsTemporary ? TempEntity : Entity; 6883 InitListChecker PerformInitList(S, InitEntity, 6884 InitList, Ty, /*VerifyOnly=*/false, 6885 /*TreatUnavailableAsInvalid=*/false); 6886 if (PerformInitList.HadError()) 6887 return ExprError(); 6888 6889 // Hack: We must update *ResultType if available in order to set the 6890 // bounds of arrays, e.g. in 'int ar[] = {1, 2, 3};'. 6891 // Worst case: 'const int (&arref)[] = {1, 2, 3};'. 6892 if (ResultType && 6893 ResultType->getNonReferenceType()->isIncompleteArrayType()) { 6894 if ((*ResultType)->isRValueReferenceType()) 6895 Ty = S.Context.getRValueReferenceType(Ty); 6896 else if ((*ResultType)->isLValueReferenceType()) 6897 Ty = S.Context.getLValueReferenceType(Ty, 6898 (*ResultType)->getAs<LValueReferenceType>()->isSpelledAsLValue()); 6899 *ResultType = Ty; 6900 } 6901 6902 InitListExpr *StructuredInitList = 6903 PerformInitList.getFullyStructuredList(); 6904 CurInit.get(); 6905 CurInit = shouldBindAsTemporary(InitEntity) 6906 ? S.MaybeBindToTemporary(StructuredInitList) 6907 : StructuredInitList; 6908 break; 6909 } 6910 6911 case SK_ConstructorInitializationFromList: { 6912 if (checkAbstractType(Step->Type)) 6913 return ExprError(); 6914 6915 // When an initializer list is passed for a parameter of type "reference 6916 // to object", we don't get an EK_Temporary entity, but instead an 6917 // EK_Parameter entity with reference type. 6918 // FIXME: This is a hack. What we really should do is create a user 6919 // conversion step for this case, but this makes it considerably more 6920 // complicated. For now, this will do. 6921 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary( 6922 Entity.getType().getNonReferenceType()); 6923 bool UseTemporary = Entity.getType()->isReferenceType(); 6924 assert(Args.size() == 1 && "expected a single argument for list init"); 6925 InitListExpr *InitList = cast<InitListExpr>(Args[0]); 6926 S.Diag(InitList->getExprLoc(), diag::warn_cxx98_compat_ctor_list_init) 6927 << InitList->getSourceRange(); 6928 MultiExprArg Arg(InitList->getInits(), InitList->getNumInits()); 6929 CurInit = PerformConstructorInitialization(S, UseTemporary ? TempEntity : 6930 Entity, 6931 Kind, Arg, *Step, 6932 ConstructorInitRequiresZeroInit, 6933 /*IsListInitialization*/true, 6934 /*IsStdInitListInit*/false, 6935 InitList->getLBraceLoc(), 6936 InitList->getRBraceLoc()); 6937 break; 6938 } 6939 6940 case SK_UnwrapInitList: 6941 CurInit = cast<InitListExpr>(CurInit.get())->getInit(0); 6942 break; 6943 6944 case SK_RewrapInitList: { 6945 Expr *E = CurInit.get(); 6946 InitListExpr *Syntactic = Step->WrappingSyntacticList; 6947 InitListExpr *ILE = new (S.Context) InitListExpr(S.Context, 6948 Syntactic->getLBraceLoc(), E, Syntactic->getRBraceLoc()); 6949 ILE->setSyntacticForm(Syntactic); 6950 ILE->setType(E->getType()); 6951 ILE->setValueKind(E->getValueKind()); 6952 CurInit = ILE; 6953 break; 6954 } 6955 6956 case SK_ConstructorInitialization: 6957 case SK_StdInitializerListConstructorCall: { 6958 if (checkAbstractType(Step->Type)) 6959 return ExprError(); 6960 6961 // When an initializer list is passed for a parameter of type "reference 6962 // to object", we don't get an EK_Temporary entity, but instead an 6963 // EK_Parameter entity with reference type. 6964 // FIXME: This is a hack. What we really should do is create a user 6965 // conversion step for this case, but this makes it considerably more 6966 // complicated. For now, this will do. 6967 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary( 6968 Entity.getType().getNonReferenceType()); 6969 bool UseTemporary = Entity.getType()->isReferenceType(); 6970 bool IsStdInitListInit = 6971 Step->Kind == SK_StdInitializerListConstructorCall; 6972 Expr *Source = CurInit.get(); 6973 CurInit = PerformConstructorInitialization( 6974 S, UseTemporary ? TempEntity : Entity, Kind, 6975 Source ? MultiExprArg(Source) : Args, *Step, 6976 ConstructorInitRequiresZeroInit, 6977 /*IsListInitialization*/ IsStdInitListInit, 6978 /*IsStdInitListInitialization*/ IsStdInitListInit, 6979 /*LBraceLoc*/ SourceLocation(), 6980 /*RBraceLoc*/ SourceLocation()); 6981 break; 6982 } 6983 6984 case SK_ZeroInitialization: { 6985 step_iterator NextStep = Step; 6986 ++NextStep; 6987 if (NextStep != StepEnd && 6988 (NextStep->Kind == SK_ConstructorInitialization || 6989 NextStep->Kind == SK_ConstructorInitializationFromList)) { 6990 // The need for zero-initialization is recorded directly into 6991 // the call to the object's constructor within the next step. 6992 ConstructorInitRequiresZeroInit = true; 6993 } else if (Kind.getKind() == InitializationKind::IK_Value && 6994 S.getLangOpts().CPlusPlus && 6995 !Kind.isImplicitValueInit()) { 6996 TypeSourceInfo *TSInfo = Entity.getTypeSourceInfo(); 6997 if (!TSInfo) 6998 TSInfo = S.Context.getTrivialTypeSourceInfo(Step->Type, 6999 Kind.getRange().getBegin()); 7000 7001 CurInit = new (S.Context) CXXScalarValueInitExpr( 7002 Entity.getType().getNonLValueExprType(S.Context), TSInfo, 7003 Kind.getRange().getEnd()); 7004 } else { 7005 CurInit = new (S.Context) ImplicitValueInitExpr(Step->Type); 7006 } 7007 break; 7008 } 7009 7010 case SK_CAssignment: { 7011 QualType SourceType = CurInit.get()->getType(); 7012 // Save off the initial CurInit in case we need to emit a diagnostic 7013 ExprResult InitialCurInit = CurInit; 7014 ExprResult Result = CurInit; 7015 Sema::AssignConvertType ConvTy = 7016 S.CheckSingleAssignmentConstraints(Step->Type, Result, true, 7017 Entity.getKind() == InitializedEntity::EK_Parameter_CF_Audited); 7018 if (Result.isInvalid()) 7019 return ExprError(); 7020 CurInit = Result; 7021 7022 // If this is a call, allow conversion to a transparent union. 7023 ExprResult CurInitExprRes = CurInit; 7024 if (ConvTy != Sema::Compatible && 7025 Entity.isParameterKind() && 7026 S.CheckTransparentUnionArgumentConstraints(Step->Type, CurInitExprRes) 7027 == Sema::Compatible) 7028 ConvTy = Sema::Compatible; 7029 if (CurInitExprRes.isInvalid()) 7030 return ExprError(); 7031 CurInit = CurInitExprRes; 7032 7033 bool Complained; 7034 if (S.DiagnoseAssignmentResult(ConvTy, Kind.getLocation(), 7035 Step->Type, SourceType, 7036 InitialCurInit.get(), 7037 getAssignmentAction(Entity, true), 7038 &Complained)) { 7039 PrintInitLocationNote(S, Entity); 7040 return ExprError(); 7041 } else if (Complained) 7042 PrintInitLocationNote(S, Entity); 7043 break; 7044 } 7045 7046 case SK_StringInit: { 7047 QualType Ty = Step->Type; 7048 CheckStringInit(CurInit.get(), ResultType ? *ResultType : Ty, 7049 S.Context.getAsArrayType(Ty), S); 7050 break; 7051 } 7052 7053 case SK_ObjCObjectConversion: 7054 CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, 7055 CK_ObjCObjectLValueCast, 7056 CurInit.get()->getValueKind()); 7057 break; 7058 7059 case SK_ArrayLoopIndex: { 7060 Expr *Cur = CurInit.get(); 7061 Expr *BaseExpr = new (S.Context) 7062 OpaqueValueExpr(Cur->getExprLoc(), Cur->getType(), 7063 Cur->getValueKind(), Cur->getObjectKind(), Cur); 7064 Expr *IndexExpr = 7065 new (S.Context) ArrayInitIndexExpr(S.Context.getSizeType()); 7066 CurInit = S.CreateBuiltinArraySubscriptExpr( 7067 BaseExpr, Kind.getLocation(), IndexExpr, Kind.getLocation()); 7068 ArrayLoopCommonExprs.push_back(BaseExpr); 7069 break; 7070 } 7071 7072 case SK_ArrayLoopInit: { 7073 assert(!ArrayLoopCommonExprs.empty() && 7074 "mismatched SK_ArrayLoopIndex and SK_ArrayLoopInit"); 7075 Expr *Common = ArrayLoopCommonExprs.pop_back_val(); 7076 CurInit = new (S.Context) ArrayInitLoopExpr(Step->Type, Common, 7077 CurInit.get()); 7078 break; 7079 } 7080 7081 case SK_GNUArrayInit: 7082 // Okay: we checked everything before creating this step. Note that 7083 // this is a GNU extension. 7084 S.Diag(Kind.getLocation(), diag::ext_array_init_copy) 7085 << Step->Type << CurInit.get()->getType() 7086 << CurInit.get()->getSourceRange(); 7087 LLVM_FALLTHROUGH; 7088 case SK_ArrayInit: 7089 // If the destination type is an incomplete array type, update the 7090 // type accordingly. 7091 if (ResultType) { 7092 if (const IncompleteArrayType *IncompleteDest 7093 = S.Context.getAsIncompleteArrayType(Step->Type)) { 7094 if (const ConstantArrayType *ConstantSource 7095 = S.Context.getAsConstantArrayType(CurInit.get()->getType())) { 7096 *ResultType = S.Context.getConstantArrayType( 7097 IncompleteDest->getElementType(), 7098 ConstantSource->getSize(), 7099 ArrayType::Normal, 0); 7100 } 7101 } 7102 } 7103 break; 7104 7105 case SK_ParenthesizedArrayInit: 7106 // Okay: we checked everything before creating this step. Note that 7107 // this is a GNU extension. 7108 S.Diag(Kind.getLocation(), diag::ext_array_init_parens) 7109 << CurInit.get()->getSourceRange(); 7110 break; 7111 7112 case SK_PassByIndirectCopyRestore: 7113 case SK_PassByIndirectRestore: 7114 checkIndirectCopyRestoreSource(S, CurInit.get()); 7115 CurInit = new (S.Context) ObjCIndirectCopyRestoreExpr( 7116 CurInit.get(), Step->Type, 7117 Step->Kind == SK_PassByIndirectCopyRestore); 7118 break; 7119 7120 case SK_ProduceObjCObject: 7121 CurInit = 7122 ImplicitCastExpr::Create(S.Context, Step->Type, CK_ARCProduceObject, 7123 CurInit.get(), nullptr, VK_RValue); 7124 break; 7125 7126 case SK_StdInitializerList: { 7127 S.Diag(CurInit.get()->getExprLoc(), 7128 diag::warn_cxx98_compat_initializer_list_init) 7129 << CurInit.get()->getSourceRange(); 7130 7131 // Materialize the temporary into memory. 7132 MaterializeTemporaryExpr *MTE = S.CreateMaterializeTemporaryExpr( 7133 CurInit.get()->getType(), CurInit.get(), 7134 /*BoundToLvalueReference=*/false); 7135 7136 // Maybe lifetime-extend the array temporary's subobjects to match the 7137 // entity's lifetime. 7138 if (const InitializedEntity *ExtendingEntity = 7139 getEntityForTemporaryLifetimeExtension(&Entity)) 7140 if (performReferenceExtension(MTE, ExtendingEntity)) 7141 warnOnLifetimeExtension(S, Entity, CurInit.get(), 7142 /*IsInitializerList=*/true, 7143 ExtendingEntity->getDecl()); 7144 7145 // Wrap it in a construction of a std::initializer_list<T>. 7146 CurInit = new (S.Context) CXXStdInitializerListExpr(Step->Type, MTE); 7147 7148 // Bind the result, in case the library has given initializer_list a 7149 // non-trivial destructor. 7150 if (shouldBindAsTemporary(Entity)) 7151 CurInit = S.MaybeBindToTemporary(CurInit.get()); 7152 break; 7153 } 7154 7155 case SK_OCLSamplerInit: { 7156 // Sampler initialzation have 5 cases: 7157 // 1. function argument passing 7158 // 1a. argument is a file-scope variable 7159 // 1b. argument is a function-scope variable 7160 // 1c. argument is one of caller function's parameters 7161 // 2. variable initialization 7162 // 2a. initializing a file-scope variable 7163 // 2b. initializing a function-scope variable 7164 // 7165 // For file-scope variables, since they cannot be initialized by function 7166 // call of __translate_sampler_initializer in LLVM IR, their references 7167 // need to be replaced by a cast from their literal initializers to 7168 // sampler type. Since sampler variables can only be used in function 7169 // calls as arguments, we only need to replace them when handling the 7170 // argument passing. 7171 assert(Step->Type->isSamplerT() && 7172 "Sampler initialization on non-sampler type."); 7173 Expr *Init = CurInit.get(); 7174 QualType SourceType = Init->getType(); 7175 // Case 1 7176 if (Entity.isParameterKind()) { 7177 if (!SourceType->isSamplerT()) { 7178 S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) 7179 << SourceType; 7180 break; 7181 } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Init)) { 7182 auto Var = cast<VarDecl>(DRE->getDecl()); 7183 // Case 1b and 1c 7184 // No cast from integer to sampler is needed. 7185 if (!Var->hasGlobalStorage()) { 7186 CurInit = ImplicitCastExpr::Create(S.Context, Step->Type, 7187 CK_LValueToRValue, Init, 7188 /*BasePath=*/nullptr, VK_RValue); 7189 break; 7190 } 7191 // Case 1a 7192 // For function call with a file-scope sampler variable as argument, 7193 // get the integer literal. 7194 // Do not diagnose if the file-scope variable does not have initializer 7195 // since this has already been diagnosed when parsing the variable 7196 // declaration. 7197 if (!Var->getInit() || !isa<ImplicitCastExpr>(Var->getInit())) 7198 break; 7199 Init = cast<ImplicitCastExpr>(const_cast<Expr*>( 7200 Var->getInit()))->getSubExpr(); 7201 SourceType = Init->getType(); 7202 } 7203 } else { 7204 // Case 2 7205 // Check initializer is 32 bit integer constant. 7206 // If the initializer is taken from global variable, do not diagnose since 7207 // this has already been done when parsing the variable declaration. 7208 if (!Init->isConstantInitializer(S.Context, false)) 7209 break; 7210 7211 if (!SourceType->isIntegerType() || 7212 32 != S.Context.getIntWidth(SourceType)) { 7213 S.Diag(Kind.getLocation(), diag::err_sampler_initializer_not_integer) 7214 << SourceType; 7215 break; 7216 } 7217 7218 llvm::APSInt Result; 7219 Init->EvaluateAsInt(Result, S.Context); 7220 const uint64_t SamplerValue = Result.getLimitedValue(); 7221 // 32-bit value of sampler's initializer is interpreted as 7222 // bit-field with the following structure: 7223 // |unspecified|Filter|Addressing Mode| Normalized Coords| 7224 // |31 6|5 4|3 1| 0| 7225 // This structure corresponds to enum values of sampler properties 7226 // defined in SPIR spec v1.2 and also opencl-c.h 7227 unsigned AddressingMode = (0x0E & SamplerValue) >> 1; 7228 unsigned FilterMode = (0x30 & SamplerValue) >> 4; 7229 if (FilterMode != 1 && FilterMode != 2) 7230 S.Diag(Kind.getLocation(), 7231 diag::warn_sampler_initializer_invalid_bits) 7232 << "Filter Mode"; 7233 if (AddressingMode > 4) 7234 S.Diag(Kind.getLocation(), 7235 diag::warn_sampler_initializer_invalid_bits) 7236 << "Addressing Mode"; 7237 } 7238 7239 // Cases 1a, 2a and 2b 7240 // Insert cast from integer to sampler. 7241 CurInit = S.ImpCastExprToType(Init, S.Context.OCLSamplerTy, 7242 CK_IntToOCLSampler); 7243 break; 7244 } 7245 case SK_OCLZeroEvent: { 7246 assert(Step->Type->isEventT() && 7247 "Event initialization on non-event type."); 7248 7249 CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, 7250 CK_ZeroToOCLEvent, 7251 CurInit.get()->getValueKind()); 7252 break; 7253 } 7254 case SK_OCLZeroQueue: { 7255 assert(Step->Type->isQueueT() && 7256 "Event initialization on non queue type."); 7257 7258 CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, 7259 CK_ZeroToOCLQueue, 7260 CurInit.get()->getValueKind()); 7261 break; 7262 } 7263 } 7264 } 7265 7266 // Diagnose non-fatal problems with the completed initialization. 7267 if (Entity.getKind() == InitializedEntity::EK_Member && 7268 cast<FieldDecl>(Entity.getDecl())->isBitField()) 7269 S.CheckBitFieldInitialization(Kind.getLocation(), 7270 cast<FieldDecl>(Entity.getDecl()), 7271 CurInit.get()); 7272 7273 // Check for std::move on construction. 7274 if (const Expr *E = CurInit.get()) { 7275 CheckMoveOnConstruction(S, E, 7276 Entity.getKind() == InitializedEntity::EK_Result); 7277 } 7278 7279 return CurInit; 7280 } 7281 7282 /// Somewhere within T there is an uninitialized reference subobject. 7283 /// Dig it out and diagnose it. 7284 static bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, 7285 QualType T) { 7286 if (T->isReferenceType()) { 7287 S.Diag(Loc, diag::err_reference_without_init) 7288 << T.getNonReferenceType(); 7289 return true; 7290 } 7291 7292 CXXRecordDecl *RD = T->getBaseElementTypeUnsafe()->getAsCXXRecordDecl(); 7293 if (!RD || !RD->hasUninitializedReferenceMember()) 7294 return false; 7295 7296 for (const auto *FI : RD->fields()) { 7297 if (FI->isUnnamedBitfield()) 7298 continue; 7299 7300 if (DiagnoseUninitializedReference(S, FI->getLocation(), FI->getType())) { 7301 S.Diag(Loc, diag::note_value_initialization_here) << RD; 7302 return true; 7303 } 7304 } 7305 7306 for (const auto &BI : RD->bases()) { 7307 if (DiagnoseUninitializedReference(S, BI.getLocStart(), BI.getType())) { 7308 S.Diag(Loc, diag::note_value_initialization_here) << RD; 7309 return true; 7310 } 7311 } 7312 7313 return false; 7314 } 7315 7316 7317 //===----------------------------------------------------------------------===// 7318 // Diagnose initialization failures 7319 //===----------------------------------------------------------------------===// 7320 7321 /// Emit notes associated with an initialization that failed due to a 7322 /// "simple" conversion failure. 7323 static void emitBadConversionNotes(Sema &S, const InitializedEntity &entity, 7324 Expr *op) { 7325 QualType destType = entity.getType(); 7326 if (destType.getNonReferenceType()->isObjCObjectPointerType() && 7327 op->getType()->isObjCObjectPointerType()) { 7328 7329 // Emit a possible note about the conversion failing because the 7330 // operand is a message send with a related result type. 7331 S.EmitRelatedResultTypeNote(op); 7332 7333 // Emit a possible note about a return failing because we're 7334 // expecting a related result type. 7335 if (entity.getKind() == InitializedEntity::EK_Result) 7336 S.EmitRelatedResultTypeNoteForReturn(destType); 7337 } 7338 } 7339 7340 static void diagnoseListInit(Sema &S, const InitializedEntity &Entity, 7341 InitListExpr *InitList) { 7342 QualType DestType = Entity.getType(); 7343 7344 QualType E; 7345 if (S.getLangOpts().CPlusPlus11 && S.isStdInitializerList(DestType, &E)) { 7346 QualType ArrayType = S.Context.getConstantArrayType( 7347 E.withConst(), 7348 llvm::APInt(S.Context.getTypeSize(S.Context.getSizeType()), 7349 InitList->getNumInits()), 7350 clang::ArrayType::Normal, 0); 7351 InitializedEntity HiddenArray = 7352 InitializedEntity::InitializeTemporary(ArrayType); 7353 return diagnoseListInit(S, HiddenArray, InitList); 7354 } 7355 7356 if (DestType->isReferenceType()) { 7357 // A list-initialization failure for a reference means that we tried to 7358 // create a temporary of the inner type (per [dcl.init.list]p3.6) and the 7359 // inner initialization failed. 7360 QualType T = DestType->getAs<ReferenceType>()->getPointeeType(); 7361 diagnoseListInit(S, InitializedEntity::InitializeTemporary(T), InitList); 7362 SourceLocation Loc = InitList->getLocStart(); 7363 if (auto *D = Entity.getDecl()) 7364 Loc = D->getLocation(); 7365 S.Diag(Loc, diag::note_in_reference_temporary_list_initializer) << T; 7366 return; 7367 } 7368 7369 InitListChecker DiagnoseInitList(S, Entity, InitList, DestType, 7370 /*VerifyOnly=*/false, 7371 /*TreatUnavailableAsInvalid=*/false); 7372 assert(DiagnoseInitList.HadError() && 7373 "Inconsistent init list check result."); 7374 } 7375 7376 bool InitializationSequence::Diagnose(Sema &S, 7377 const InitializedEntity &Entity, 7378 const InitializationKind &Kind, 7379 ArrayRef<Expr *> Args) { 7380 if (!Failed()) 7381 return false; 7382 7383 QualType DestType = Entity.getType(); 7384 switch (Failure) { 7385 case FK_TooManyInitsForReference: 7386 // FIXME: Customize for the initialized entity? 7387 if (Args.empty()) { 7388 // Dig out the reference subobject which is uninitialized and diagnose it. 7389 // If this is value-initialization, this could be nested some way within 7390 // the target type. 7391 assert(Kind.getKind() == InitializationKind::IK_Value || 7392 DestType->isReferenceType()); 7393 bool Diagnosed = 7394 DiagnoseUninitializedReference(S, Kind.getLocation(), DestType); 7395 assert(Diagnosed && "couldn't find uninitialized reference to diagnose"); 7396 (void)Diagnosed; 7397 } else // FIXME: diagnostic below could be better! 7398 S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) 7399 << SourceRange(Args.front()->getLocStart(), Args.back()->getLocEnd()); 7400 break; 7401 case FK_ParenthesizedListInitForReference: 7402 S.Diag(Kind.getLocation(), diag::err_list_init_in_parens) 7403 << 1 << Entity.getType() << Args[0]->getSourceRange(); 7404 break; 7405 7406 case FK_ArrayNeedsInitList: 7407 S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 0; 7408 break; 7409 case FK_ArrayNeedsInitListOrStringLiteral: 7410 S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 1; 7411 break; 7412 case FK_ArrayNeedsInitListOrWideStringLiteral: 7413 S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 2; 7414 break; 7415 case FK_NarrowStringIntoWideCharArray: 7416 S.Diag(Kind.getLocation(), diag::err_array_init_narrow_string_into_wchar); 7417 break; 7418 case FK_WideStringIntoCharArray: 7419 S.Diag(Kind.getLocation(), diag::err_array_init_wide_string_into_char); 7420 break; 7421 case FK_IncompatWideStringIntoWideChar: 7422 S.Diag(Kind.getLocation(), 7423 diag::err_array_init_incompat_wide_string_into_wchar); 7424 break; 7425 case FK_ArrayTypeMismatch: 7426 case FK_NonConstantArrayInit: 7427 S.Diag(Kind.getLocation(), 7428 (Failure == FK_ArrayTypeMismatch 7429 ? diag::err_array_init_different_type 7430 : diag::err_array_init_non_constant_array)) 7431 << DestType.getNonReferenceType() 7432 << Args[0]->getType() 7433 << Args[0]->getSourceRange(); 7434 break; 7435 7436 case FK_VariableLengthArrayHasInitializer: 7437 S.Diag(Kind.getLocation(), diag::err_variable_object_no_init) 7438 << Args[0]->getSourceRange(); 7439 break; 7440 7441 case FK_AddressOfOverloadFailed: { 7442 DeclAccessPair Found; 7443 S.ResolveAddressOfOverloadedFunction(Args[0], 7444 DestType.getNonReferenceType(), 7445 true, 7446 Found); 7447 break; 7448 } 7449 7450 case FK_AddressOfUnaddressableFunction: { 7451 auto *FD = cast<FunctionDecl>(cast<DeclRefExpr>(Args[0])->getDecl()); 7452 S.checkAddressOfFunctionIsAvailable(FD, /*Complain=*/true, 7453 Args[0]->getLocStart()); 7454 break; 7455 } 7456 7457 case FK_ReferenceInitOverloadFailed: 7458 case FK_UserConversionOverloadFailed: 7459 switch (FailedOverloadResult) { 7460 case OR_Ambiguous: 7461 if (Failure == FK_UserConversionOverloadFailed) 7462 S.Diag(Kind.getLocation(), diag::err_typecheck_ambiguous_condition) 7463 << Args[0]->getType() << DestType 7464 << Args[0]->getSourceRange(); 7465 else 7466 S.Diag(Kind.getLocation(), diag::err_ref_init_ambiguous) 7467 << DestType << Args[0]->getType() 7468 << Args[0]->getSourceRange(); 7469 7470 FailedCandidateSet.NoteCandidates(S, OCD_ViableCandidates, Args); 7471 break; 7472 7473 case OR_No_Viable_Function: 7474 if (!S.RequireCompleteType(Kind.getLocation(), 7475 DestType.getNonReferenceType(), 7476 diag::err_typecheck_nonviable_condition_incomplete, 7477 Args[0]->getType(), Args[0]->getSourceRange())) 7478 S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) 7479 << (Entity.getKind() == InitializedEntity::EK_Result) 7480 << Args[0]->getType() << Args[0]->getSourceRange() 7481 << DestType.getNonReferenceType(); 7482 7483 FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, Args); 7484 break; 7485 7486 case OR_Deleted: { 7487 S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) 7488 << Args[0]->getType() << DestType.getNonReferenceType() 7489 << Args[0]->getSourceRange(); 7490 OverloadCandidateSet::iterator Best; 7491 OverloadingResult Ovl 7492 = FailedCandidateSet.BestViableFunction(S, Kind.getLocation(), Best, 7493 true); 7494 if (Ovl == OR_Deleted) { 7495 S.NoteDeletedFunction(Best->Function); 7496 } else { 7497 llvm_unreachable("Inconsistent overload resolution?"); 7498 } 7499 break; 7500 } 7501 7502 case OR_Success: 7503 llvm_unreachable("Conversion did not fail!"); 7504 } 7505 break; 7506 7507 case FK_NonConstLValueReferenceBindingToTemporary: 7508 if (isa<InitListExpr>(Args[0])) { 7509 S.Diag(Kind.getLocation(), 7510 diag::err_lvalue_reference_bind_to_initlist) 7511 << DestType.getNonReferenceType().isVolatileQualified() 7512 << DestType.getNonReferenceType() 7513 << Args[0]->getSourceRange(); 7514 break; 7515 } 7516 // Intentional fallthrough 7517 7518 case FK_NonConstLValueReferenceBindingToUnrelated: 7519 S.Diag(Kind.getLocation(), 7520 Failure == FK_NonConstLValueReferenceBindingToTemporary 7521 ? diag::err_lvalue_reference_bind_to_temporary 7522 : diag::err_lvalue_reference_bind_to_unrelated) 7523 << DestType.getNonReferenceType().isVolatileQualified() 7524 << DestType.getNonReferenceType() 7525 << Args[0]->getType() 7526 << Args[0]->getSourceRange(); 7527 break; 7528 7529 case FK_NonConstLValueReferenceBindingToBitfield: { 7530 // We don't necessarily have an unambiguous source bit-field. 7531 FieldDecl *BitField = Args[0]->getSourceBitField(); 7532 S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) 7533 << DestType.isVolatileQualified() 7534 << (BitField ? BitField->getDeclName() : DeclarationName()) 7535 << (BitField != nullptr) 7536 << Args[0]->getSourceRange(); 7537 if (BitField) 7538 S.Diag(BitField->getLocation(), diag::note_bitfield_decl); 7539 break; 7540 } 7541 7542 case FK_NonConstLValueReferenceBindingToVectorElement: 7543 S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) 7544 << DestType.isVolatileQualified() 7545 << Args[0]->getSourceRange(); 7546 break; 7547 7548 case FK_RValueReferenceBindingToLValue: 7549 S.Diag(Kind.getLocation(), diag::err_lvalue_to_rvalue_ref) 7550 << DestType.getNonReferenceType() << Args[0]->getType() 7551 << Args[0]->getSourceRange(); 7552 break; 7553 7554 case FK_ReferenceInitDropsQualifiers: { 7555 QualType SourceType = Args[0]->getType(); 7556 QualType NonRefType = DestType.getNonReferenceType(); 7557 Qualifiers DroppedQualifiers = 7558 SourceType.getQualifiers() - NonRefType.getQualifiers(); 7559 7560 S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) 7561 << SourceType 7562 << NonRefType 7563 << DroppedQualifiers.getCVRQualifiers() 7564 << Args[0]->getSourceRange(); 7565 break; 7566 } 7567 7568 case FK_ReferenceInitFailed: 7569 S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) 7570 << DestType.getNonReferenceType() 7571 << Args[0]->isLValue() 7572 << Args[0]->getType() 7573 << Args[0]->getSourceRange(); 7574 emitBadConversionNotes(S, Entity, Args[0]); 7575 break; 7576 7577 case FK_ConversionFailed: { 7578 QualType FromType = Args[0]->getType(); 7579 PartialDiagnostic PDiag = S.PDiag(diag::err_init_conversion_failed) 7580 << (int)Entity.getKind() 7581 << DestType 7582 << Args[0]->isLValue() 7583 << FromType 7584 << Args[0]->getSourceRange(); 7585 S.HandleFunctionTypeMismatch(PDiag, FromType, DestType); 7586 S.Diag(Kind.getLocation(), PDiag); 7587 emitBadConversionNotes(S, Entity, Args[0]); 7588 break; 7589 } 7590 7591 case FK_ConversionFromPropertyFailed: 7592 // No-op. This error has already been reported. 7593 break; 7594 7595 case FK_TooManyInitsForScalar: { 7596 SourceRange R; 7597 7598 auto *InitList = dyn_cast<InitListExpr>(Args[0]); 7599 if (InitList && InitList->getNumInits() >= 1) { 7600 R = SourceRange(InitList->getInit(0)->getLocEnd(), InitList->getLocEnd()); 7601 } else { 7602 assert(Args.size() > 1 && "Expected multiple initializers!"); 7603 R = SourceRange(Args.front()->getLocEnd(), Args.back()->getLocEnd()); 7604 } 7605 7606 R.setBegin(S.getLocForEndOfToken(R.getBegin())); 7607 if (Kind.isCStyleOrFunctionalCast()) 7608 S.Diag(Kind.getLocation(), diag::err_builtin_func_cast_more_than_one_arg) 7609 << R; 7610 else 7611 S.Diag(Kind.getLocation(), diag::err_excess_initializers) 7612 << /*scalar=*/2 << R; 7613 break; 7614 } 7615 7616 case FK_ParenthesizedListInitForScalar: 7617 S.Diag(Kind.getLocation(), diag::err_list_init_in_parens) 7618 << 0 << Entity.getType() << Args[0]->getSourceRange(); 7619 break; 7620 7621 case FK_ReferenceBindingToInitList: 7622 S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) 7623 << DestType.getNonReferenceType() << Args[0]->getSourceRange(); 7624 break; 7625 7626 case FK_InitListBadDestinationType: 7627 S.Diag(Kind.getLocation(), diag::err_init_list_bad_dest_type) 7628 << (DestType->isRecordType()) << DestType << Args[0]->getSourceRange(); 7629 break; 7630 7631 case FK_ListConstructorOverloadFailed: 7632 case FK_ConstructorOverloadFailed: { 7633 SourceRange ArgsRange; 7634 if (Args.size()) 7635 ArgsRange = SourceRange(Args.front()->getLocStart(), 7636 Args.back()->getLocEnd()); 7637 7638 if (Failure == FK_ListConstructorOverloadFailed) { 7639 assert(Args.size() == 1 && 7640 "List construction from other than 1 argument."); 7641 InitListExpr *InitList = cast<InitListExpr>(Args[0]); 7642 Args = MultiExprArg(InitList->getInits(), InitList->getNumInits()); 7643 } 7644 7645 // FIXME: Using "DestType" for the entity we're printing is probably 7646 // bad. 7647 switch (FailedOverloadResult) { 7648 case OR_Ambiguous: 7649 S.Diag(Kind.getLocation(), diag::err_ovl_ambiguous_init) 7650 << DestType << ArgsRange; 7651 FailedCandidateSet.NoteCandidates(S, OCD_ViableCandidates, Args); 7652 break; 7653 7654 case OR_No_Viable_Function: 7655 if (Kind.getKind() == InitializationKind::IK_Default && 7656 (Entity.getKind() == InitializedEntity::EK_Base || 7657 Entity.getKind() == InitializedEntity::EK_Member) && 7658 isa<CXXConstructorDecl>(S.CurContext)) { 7659 // This is implicit default initialization of a member or 7660 // base within a constructor. If no viable function was 7661 // found, notify the user that they need to explicitly 7662 // initialize this base/member. 7663 CXXConstructorDecl *Constructor 7664 = cast<CXXConstructorDecl>(S.CurContext); 7665 const CXXRecordDecl *InheritedFrom = nullptr; 7666 if (auto Inherited = Constructor->getInheritedConstructor()) 7667 InheritedFrom = Inherited.getShadowDecl()->getNominatedBaseClass(); 7668 if (Entity.getKind() == InitializedEntity::EK_Base) { 7669 S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) 7670 << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) 7671 << S.Context.getTypeDeclType(Constructor->getParent()) 7672 << /*base=*/0 7673 << Entity.getType() 7674 << InheritedFrom; 7675 7676 RecordDecl *BaseDecl 7677 = Entity.getBaseSpecifier()->getType()->getAs<RecordType>() 7678 ->getDecl(); 7679 S.Diag(BaseDecl->getLocation(), diag::note_previous_decl) 7680 << S.Context.getTagDeclType(BaseDecl); 7681 } else { 7682 S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) 7683 << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) 7684 << S.Context.getTypeDeclType(Constructor->getParent()) 7685 << /*member=*/1 7686 << Entity.getName() 7687 << InheritedFrom; 7688 S.Diag(Entity.getDecl()->getLocation(), 7689 diag::note_member_declared_at); 7690 7691 if (const RecordType *Record 7692 = Entity.getType()->getAs<RecordType>()) 7693 S.Diag(Record->getDecl()->getLocation(), 7694 diag::note_previous_decl) 7695 << S.Context.getTagDeclType(Record->getDecl()); 7696 } 7697 break; 7698 } 7699 7700 S.Diag(Kind.getLocation(), diag::err_ovl_no_viable_function_in_init) 7701 << DestType << ArgsRange; 7702 FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, Args); 7703 break; 7704 7705 case OR_Deleted: { 7706 OverloadCandidateSet::iterator Best; 7707 OverloadingResult Ovl 7708 = FailedCandidateSet.BestViableFunction(S, Kind.getLocation(), Best); 7709 if (Ovl != OR_Deleted) { 7710 S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) 7711 << true << DestType << ArgsRange; 7712 llvm_unreachable("Inconsistent overload resolution?"); 7713 break; 7714 } 7715 7716 // If this is a defaulted or implicitly-declared function, then 7717 // it was implicitly deleted. Make it clear that the deletion was 7718 // implicit. 7719 if (S.isImplicitlyDeleted(Best->Function)) 7720 S.Diag(Kind.getLocation(), diag::err_ovl_deleted_special_init) 7721 << S.getSpecialMember(cast<CXXMethodDecl>(Best->Function)) 7722 << DestType << ArgsRange; 7723 else 7724 S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) 7725 << true << DestType << ArgsRange; 7726 7727 S.NoteDeletedFunction(Best->Function); 7728 break; 7729 } 7730 7731 case OR_Success: 7732 llvm_unreachable("Conversion did not fail!"); 7733 } 7734 } 7735 break; 7736 7737 case FK_DefaultInitOfConst: 7738 if (Entity.getKind() == InitializedEntity::EK_Member && 7739 isa<CXXConstructorDecl>(S.CurContext)) { 7740 // This is implicit default-initialization of a const member in 7741 // a constructor. Complain that it needs to be explicitly 7742 // initialized. 7743 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(S.CurContext); 7744 S.Diag(Kind.getLocation(), diag::err_uninitialized_member_in_ctor) 7745 << (Constructor->getInheritedConstructor() ? 2 : 7746 Constructor->isImplicit() ? 1 : 0) 7747 << S.Context.getTypeDeclType(Constructor->getParent()) 7748 << /*const=*/1 7749 << Entity.getName(); 7750 S.Diag(Entity.getDecl()->getLocation(), diag::note_previous_decl) 7751 << Entity.getName(); 7752 } else { 7753 S.Diag(Kind.getLocation(), diag::err_default_init_const) 7754 << DestType << (bool)DestType->getAs<RecordType>(); 7755 } 7756 break; 7757 7758 case FK_Incomplete: 7759 S.RequireCompleteType(Kind.getLocation(), FailedIncompleteType, 7760 diag::err_init_incomplete_type); 7761 break; 7762 7763 case FK_ListInitializationFailed: { 7764 // Run the init list checker again to emit diagnostics. 7765 InitListExpr *InitList = cast<InitListExpr>(Args[0]); 7766 diagnoseListInit(S, Entity, InitList); 7767 break; 7768 } 7769 7770 case FK_PlaceholderType: { 7771 // FIXME: Already diagnosed! 7772 break; 7773 } 7774 7775 case FK_ExplicitConstructor: { 7776 S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) 7777 << Args[0]->getSourceRange(); 7778 OverloadCandidateSet::iterator Best; 7779 OverloadingResult Ovl 7780 = FailedCandidateSet.BestViableFunction(S, Kind.getLocation(), Best); 7781 (void)Ovl; 7782 assert(Ovl == OR_Success && "Inconsistent overload resolution"); 7783 CXXConstructorDecl *CtorDecl = cast<CXXConstructorDecl>(Best->Function); 7784 S.Diag(CtorDecl->getLocation(), 7785 diag::note_explicit_ctor_deduction_guide_here) << false; 7786 break; 7787 } 7788 } 7789 7790 PrintInitLocationNote(S, Entity); 7791 return true; 7792 } 7793 7794 void InitializationSequence::dump(raw_ostream &OS) const { 7795 switch (SequenceKind) { 7796 case FailedSequence: { 7797 OS << "Failed sequence: "; 7798 switch (Failure) { 7799 case FK_TooManyInitsForReference: 7800 OS << "too many initializers for reference"; 7801 break; 7802 7803 case FK_ParenthesizedListInitForReference: 7804 OS << "parenthesized list init for reference"; 7805 break; 7806 7807 case FK_ArrayNeedsInitList: 7808 OS << "array requires initializer list"; 7809 break; 7810 7811 case FK_AddressOfUnaddressableFunction: 7812 OS << "address of unaddressable function was taken"; 7813 break; 7814 7815 case FK_ArrayNeedsInitListOrStringLiteral: 7816 OS << "array requires initializer list or string literal"; 7817 break; 7818 7819 case FK_ArrayNeedsInitListOrWideStringLiteral: 7820 OS << "array requires initializer list or wide string literal"; 7821 break; 7822 7823 case FK_NarrowStringIntoWideCharArray: 7824 OS << "narrow string into wide char array"; 7825 break; 7826 7827 case FK_WideStringIntoCharArray: 7828 OS << "wide string into char array"; 7829 break; 7830 7831 case FK_IncompatWideStringIntoWideChar: 7832 OS << "incompatible wide string into wide char array"; 7833 break; 7834 7835 case FK_ArrayTypeMismatch: 7836 OS << "array type mismatch"; 7837 break; 7838 7839 case FK_NonConstantArrayInit: 7840 OS << "non-constant array initializer"; 7841 break; 7842 7843 case FK_AddressOfOverloadFailed: 7844 OS << "address of overloaded function failed"; 7845 break; 7846 7847 case FK_ReferenceInitOverloadFailed: 7848 OS << "overload resolution for reference initialization failed"; 7849 break; 7850 7851 case FK_NonConstLValueReferenceBindingToTemporary: 7852 OS << "non-const lvalue reference bound to temporary"; 7853 break; 7854 7855 case FK_NonConstLValueReferenceBindingToBitfield: 7856 OS << "non-const lvalue reference bound to bit-field"; 7857 break; 7858 7859 case FK_NonConstLValueReferenceBindingToVectorElement: 7860 OS << "non-const lvalue reference bound to vector element"; 7861 break; 7862 7863 case FK_NonConstLValueReferenceBindingToUnrelated: 7864 OS << "non-const lvalue reference bound to unrelated type"; 7865 break; 7866 7867 case FK_RValueReferenceBindingToLValue: 7868 OS << "rvalue reference bound to an lvalue"; 7869 break; 7870 7871 case FK_ReferenceInitDropsQualifiers: 7872 OS << "reference initialization drops qualifiers"; 7873 break; 7874 7875 case FK_ReferenceInitFailed: 7876 OS << "reference initialization failed"; 7877 break; 7878 7879 case FK_ConversionFailed: 7880 OS << "conversion failed"; 7881 break; 7882 7883 case FK_ConversionFromPropertyFailed: 7884 OS << "conversion from property failed"; 7885 break; 7886 7887 case FK_TooManyInitsForScalar: 7888 OS << "too many initializers for scalar"; 7889 break; 7890 7891 case FK_ParenthesizedListInitForScalar: 7892 OS << "parenthesized list init for reference"; 7893 break; 7894 7895 case FK_ReferenceBindingToInitList: 7896 OS << "referencing binding to initializer list"; 7897 break; 7898 7899 case FK_InitListBadDestinationType: 7900 OS << "initializer list for non-aggregate, non-scalar type"; 7901 break; 7902 7903 case FK_UserConversionOverloadFailed: 7904 OS << "overloading failed for user-defined conversion"; 7905 break; 7906 7907 case FK_ConstructorOverloadFailed: 7908 OS << "constructor overloading failed"; 7909 break; 7910 7911 case FK_DefaultInitOfConst: 7912 OS << "default initialization of a const variable"; 7913 break; 7914 7915 case FK_Incomplete: 7916 OS << "initialization of incomplete type"; 7917 break; 7918 7919 case FK_ListInitializationFailed: 7920 OS << "list initialization checker failure"; 7921 break; 7922 7923 case FK_VariableLengthArrayHasInitializer: 7924 OS << "variable length array has an initializer"; 7925 break; 7926 7927 case FK_PlaceholderType: 7928 OS << "initializer expression isn't contextually valid"; 7929 break; 7930 7931 case FK_ListConstructorOverloadFailed: 7932 OS << "list constructor overloading failed"; 7933 break; 7934 7935 case FK_ExplicitConstructor: 7936 OS << "list copy initialization chose explicit constructor"; 7937 break; 7938 } 7939 OS << '\n'; 7940 return; 7941 } 7942 7943 case DependentSequence: 7944 OS << "Dependent sequence\n"; 7945 return; 7946 7947 case NormalSequence: 7948 OS << "Normal sequence: "; 7949 break; 7950 } 7951 7952 for (step_iterator S = step_begin(), SEnd = step_end(); S != SEnd; ++S) { 7953 if (S != step_begin()) { 7954 OS << " -> "; 7955 } 7956 7957 switch (S->Kind) { 7958 case SK_ResolveAddressOfOverloadedFunction: 7959 OS << "resolve address of overloaded function"; 7960 break; 7961 7962 case SK_CastDerivedToBaseRValue: 7963 OS << "derived-to-base (rvalue)"; 7964 break; 7965 7966 case SK_CastDerivedToBaseXValue: 7967 OS << "derived-to-base (xvalue)"; 7968 break; 7969 7970 case SK_CastDerivedToBaseLValue: 7971 OS << "derived-to-base (lvalue)"; 7972 break; 7973 7974 case SK_BindReference: 7975 OS << "bind reference to lvalue"; 7976 break; 7977 7978 case SK_BindReferenceToTemporary: 7979 OS << "bind reference to a temporary"; 7980 break; 7981 7982 case SK_FinalCopy: 7983 OS << "final copy in class direct-initialization"; 7984 break; 7985 7986 case SK_ExtraneousCopyToTemporary: 7987 OS << "extraneous C++03 copy to temporary"; 7988 break; 7989 7990 case SK_UserConversion: 7991 OS << "user-defined conversion via " << *S->Function.Function; 7992 break; 7993 7994 case SK_QualificationConversionRValue: 7995 OS << "qualification conversion (rvalue)"; 7996 break; 7997 7998 case SK_QualificationConversionXValue: 7999 OS << "qualification conversion (xvalue)"; 8000 break; 8001 8002 case SK_QualificationConversionLValue: 8003 OS << "qualification conversion (lvalue)"; 8004 break; 8005 8006 case SK_AtomicConversion: 8007 OS << "non-atomic-to-atomic conversion"; 8008 break; 8009 8010 case SK_LValueToRValue: 8011 OS << "load (lvalue to rvalue)"; 8012 break; 8013 8014 case SK_ConversionSequence: 8015 OS << "implicit conversion sequence ("; 8016 S->ICS->dump(); // FIXME: use OS 8017 OS << ")"; 8018 break; 8019 8020 case SK_ConversionSequenceNoNarrowing: 8021 OS << "implicit conversion sequence with narrowing prohibited ("; 8022 S->ICS->dump(); // FIXME: use OS 8023 OS << ")"; 8024 break; 8025 8026 case SK_ListInitialization: 8027 OS << "list aggregate initialization"; 8028 break; 8029 8030 case SK_UnwrapInitList: 8031 OS << "unwrap reference initializer list"; 8032 break; 8033 8034 case SK_RewrapInitList: 8035 OS << "rewrap reference initializer list"; 8036 break; 8037 8038 case SK_ConstructorInitialization: 8039 OS << "constructor initialization"; 8040 break; 8041 8042 case SK_ConstructorInitializationFromList: 8043 OS << "list initialization via constructor"; 8044 break; 8045 8046 case SK_ZeroInitialization: 8047 OS << "zero initialization"; 8048 break; 8049 8050 case SK_CAssignment: 8051 OS << "C assignment"; 8052 break; 8053 8054 case SK_StringInit: 8055 OS << "string initialization"; 8056 break; 8057 8058 case SK_ObjCObjectConversion: 8059 OS << "Objective-C object conversion"; 8060 break; 8061 8062 case SK_ArrayLoopIndex: 8063 OS << "indexing for array initialization loop"; 8064 break; 8065 8066 case SK_ArrayLoopInit: 8067 OS << "array initialization loop"; 8068 break; 8069 8070 case SK_ArrayInit: 8071 OS << "array initialization"; 8072 break; 8073 8074 case SK_GNUArrayInit: 8075 OS << "array initialization (GNU extension)"; 8076 break; 8077 8078 case SK_ParenthesizedArrayInit: 8079 OS << "parenthesized array initialization"; 8080 break; 8081 8082 case SK_PassByIndirectCopyRestore: 8083 OS << "pass by indirect copy and restore"; 8084 break; 8085 8086 case SK_PassByIndirectRestore: 8087 OS << "pass by indirect restore"; 8088 break; 8089 8090 case SK_ProduceObjCObject: 8091 OS << "Objective-C object retension"; 8092 break; 8093 8094 case SK_StdInitializerList: 8095 OS << "std::initializer_list from initializer list"; 8096 break; 8097 8098 case SK_StdInitializerListConstructorCall: 8099 OS << "list initialization from std::initializer_list"; 8100 break; 8101 8102 case SK_OCLSamplerInit: 8103 OS << "OpenCL sampler_t from integer constant"; 8104 break; 8105 8106 case SK_OCLZeroEvent: 8107 OS << "OpenCL event_t from zero"; 8108 break; 8109 8110 case SK_OCLZeroQueue: 8111 OS << "OpenCL queue_t from zero"; 8112 break; 8113 } 8114 8115 OS << " [" << S->Type.getAsString() << ']'; 8116 } 8117 8118 OS << '\n'; 8119 } 8120 8121 void InitializationSequence::dump() const { 8122 dump(llvm::errs()); 8123 } 8124 8125 static void DiagnoseNarrowingInInitList(Sema &S, 8126 const ImplicitConversionSequence &ICS, 8127 QualType PreNarrowingType, 8128 QualType EntityType, 8129 const Expr *PostInit) { 8130 const StandardConversionSequence *SCS = nullptr; 8131 switch (ICS.getKind()) { 8132 case ImplicitConversionSequence::StandardConversion: 8133 SCS = &ICS.Standard; 8134 break; 8135 case ImplicitConversionSequence::UserDefinedConversion: 8136 SCS = &ICS.UserDefined.After; 8137 break; 8138 case ImplicitConversionSequence::AmbiguousConversion: 8139 case ImplicitConversionSequence::EllipsisConversion: 8140 case ImplicitConversionSequence::BadConversion: 8141 return; 8142 } 8143 8144 // C++11 [dcl.init.list]p7: Check whether this is a narrowing conversion. 8145 APValue ConstantValue; 8146 QualType ConstantType; 8147 switch (SCS->getNarrowingKind(S.Context, PostInit, ConstantValue, 8148 ConstantType)) { 8149 case NK_Not_Narrowing: 8150 case NK_Dependent_Narrowing: 8151 // No narrowing occurred. 8152 return; 8153 8154 case NK_Type_Narrowing: 8155 // This was a floating-to-integer conversion, which is always considered a 8156 // narrowing conversion even if the value is a constant and can be 8157 // represented exactly as an integer. 8158 S.Diag(PostInit->getLocStart(), 8159 (S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus11) 8160 ? diag::warn_init_list_type_narrowing 8161 : diag::ext_init_list_type_narrowing) 8162 << PostInit->getSourceRange() 8163 << PreNarrowingType.getLocalUnqualifiedType() 8164 << EntityType.getLocalUnqualifiedType(); 8165 break; 8166 8167 case NK_Constant_Narrowing: 8168 // A constant value was narrowed. 8169 S.Diag(PostInit->getLocStart(), 8170 (S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus11) 8171 ? diag::warn_init_list_constant_narrowing 8172 : diag::ext_init_list_constant_narrowing) 8173 << PostInit->getSourceRange() 8174 << ConstantValue.getAsString(S.getASTContext(), ConstantType) 8175 << EntityType.getLocalUnqualifiedType(); 8176 break; 8177 8178 case NK_Variable_Narrowing: 8179 // A variable's value may have been narrowed. 8180 S.Diag(PostInit->getLocStart(), 8181 (S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus11) 8182 ? diag::warn_init_list_variable_narrowing 8183 : diag::ext_init_list_variable_narrowing) 8184 << PostInit->getSourceRange() 8185 << PreNarrowingType.getLocalUnqualifiedType() 8186 << EntityType.getLocalUnqualifiedType(); 8187 break; 8188 } 8189 8190 SmallString<128> StaticCast; 8191 llvm::raw_svector_ostream OS(StaticCast); 8192 OS << "static_cast<"; 8193 if (const TypedefType *TT = EntityType->getAs<TypedefType>()) { 8194 // It's important to use the typedef's name if there is one so that the 8195 // fixit doesn't break code using types like int64_t. 8196 // 8197 // FIXME: This will break if the typedef requires qualification. But 8198 // getQualifiedNameAsString() includes non-machine-parsable components. 8199 OS << *TT->getDecl(); 8200 } else if (const BuiltinType *BT = EntityType->getAs<BuiltinType>()) 8201 OS << BT->getName(S.getLangOpts()); 8202 else { 8203 // Oops, we didn't find the actual type of the variable. Don't emit a fixit 8204 // with a broken cast. 8205 return; 8206 } 8207 OS << ">("; 8208 S.Diag(PostInit->getLocStart(), diag::note_init_list_narrowing_silence) 8209 << PostInit->getSourceRange() 8210 << FixItHint::CreateInsertion(PostInit->getLocStart(), OS.str()) 8211 << FixItHint::CreateInsertion( 8212 S.getLocForEndOfToken(PostInit->getLocEnd()), ")"); 8213 } 8214 8215 //===----------------------------------------------------------------------===// 8216 // Initialization helper functions 8217 //===----------------------------------------------------------------------===// 8218 bool 8219 Sema::CanPerformCopyInitialization(const InitializedEntity &Entity, 8220 ExprResult Init) { 8221 if (Init.isInvalid()) 8222 return false; 8223 8224 Expr *InitE = Init.get(); 8225 assert(InitE && "No initialization expression"); 8226 8227 InitializationKind Kind 8228 = InitializationKind::CreateCopy(InitE->getLocStart(), SourceLocation()); 8229 InitializationSequence Seq(*this, Entity, Kind, InitE); 8230 return !Seq.Failed(); 8231 } 8232 8233 ExprResult 8234 Sema::PerformCopyInitialization(const InitializedEntity &Entity, 8235 SourceLocation EqualLoc, 8236 ExprResult Init, 8237 bool TopLevelOfInitList, 8238 bool AllowExplicit) { 8239 if (Init.isInvalid()) 8240 return ExprError(); 8241 8242 Expr *InitE = Init.get(); 8243 assert(InitE && "No initialization expression?"); 8244 8245 if (EqualLoc.isInvalid()) 8246 EqualLoc = InitE->getLocStart(); 8247 8248 InitializationKind Kind = InitializationKind::CreateCopy(InitE->getLocStart(), 8249 EqualLoc, 8250 AllowExplicit); 8251 InitializationSequence Seq(*this, Entity, Kind, InitE, TopLevelOfInitList); 8252 8253 ExprResult Result = Seq.Perform(*this, Entity, Kind, InitE); 8254 8255 return Result; 8256 } 8257 8258 QualType Sema::DeduceTemplateSpecializationFromInitializer( 8259 TypeSourceInfo *TSInfo, const InitializedEntity &Entity, 8260 const InitializationKind &Kind, MultiExprArg Inits) { 8261 auto *DeducedTST = dyn_cast<DeducedTemplateSpecializationType>( 8262 TSInfo->getType()->getContainedDeducedType()); 8263 assert(DeducedTST && "not a deduced template specialization type"); 8264 8265 // We can only perform deduction for class templates. 8266 auto TemplateName = DeducedTST->getTemplateName(); 8267 auto *Template = 8268 dyn_cast_or_null<ClassTemplateDecl>(TemplateName.getAsTemplateDecl()); 8269 if (!Template) { 8270 Diag(Kind.getLocation(), 8271 diag::err_deduced_non_class_template_specialization_type) 8272 << (int)getTemplateNameKindForDiagnostics(TemplateName) << TemplateName; 8273 if (auto *TD = TemplateName.getAsTemplateDecl()) 8274 Diag(TD->getLocation(), diag::note_template_decl_here); 8275 return QualType(); 8276 } 8277 8278 // Can't deduce from dependent arguments. 8279 if (Expr::hasAnyTypeDependentArguments(Inits)) 8280 return Context.DependentTy; 8281 8282 // FIXME: Perform "exact type" matching first, per CWG discussion? 8283 // Or implement this via an implied 'T(T) -> T' deduction guide? 8284 8285 // FIXME: Do we need/want a std::initializer_list<T> special case? 8286 8287 // Look up deduction guides, including those synthesized from constructors. 8288 // 8289 // C++1z [over.match.class.deduct]p1: 8290 // A set of functions and function templates is formed comprising: 8291 // - For each constructor of the class template designated by the 8292 // template-name, a function template [...] 8293 // - For each deduction-guide, a function or function template [...] 8294 DeclarationNameInfo NameInfo( 8295 Context.DeclarationNames.getCXXDeductionGuideName(Template), 8296 TSInfo->getTypeLoc().getEndLoc()); 8297 LookupResult Guides(*this, NameInfo, LookupOrdinaryName); 8298 LookupQualifiedName(Guides, Template->getDeclContext()); 8299 8300 // FIXME: Do not diagnose inaccessible deduction guides. The standard isn't 8301 // clear on this, but they're not found by name so access does not apply. 8302 Guides.suppressDiagnostics(); 8303 8304 // Figure out if this is list-initialization. 8305 InitListExpr *ListInit = 8306 (Inits.size() == 1 && Kind.getKind() != InitializationKind::IK_Direct) 8307 ? dyn_cast<InitListExpr>(Inits[0]) 8308 : nullptr; 8309 8310 // C++1z [over.match.class.deduct]p1: 8311 // Initialization and overload resolution are performed as described in 8312 // [dcl.init] and [over.match.ctor], [over.match.copy], or [over.match.list] 8313 // (as appropriate for the type of initialization performed) for an object 8314 // of a hypothetical class type, where the selected functions and function 8315 // templates are considered to be the constructors of that class type 8316 // 8317 // Since we know we're initializing a class type of a type unrelated to that 8318 // of the initializer, this reduces to something fairly reasonable. 8319 OverloadCandidateSet Candidates(Kind.getLocation(), 8320 OverloadCandidateSet::CSK_Normal); 8321 OverloadCandidateSet::iterator Best; 8322 auto tryToResolveOverload = 8323 [&](bool OnlyListConstructors) -> OverloadingResult { 8324 Candidates.clear(); 8325 for (auto I = Guides.begin(), E = Guides.end(); I != E; ++I) { 8326 NamedDecl *D = (*I)->getUnderlyingDecl(); 8327 if (D->isInvalidDecl()) 8328 continue; 8329 8330 auto *TD = dyn_cast<FunctionTemplateDecl>(D); 8331 auto *GD = dyn_cast_or_null<CXXDeductionGuideDecl>( 8332 TD ? TD->getTemplatedDecl() : dyn_cast<FunctionDecl>(D)); 8333 if (!GD) 8334 continue; 8335 8336 // C++ [over.match.ctor]p1: (non-list copy-initialization from non-class) 8337 // For copy-initialization, the candidate functions are all the 8338 // converting constructors (12.3.1) of that class. 8339 // C++ [over.match.copy]p1: (non-list copy-initialization from class) 8340 // The converting constructors of T are candidate functions. 8341 if (Kind.isCopyInit() && !ListInit) { 8342 // Only consider converting constructors. 8343 if (GD->isExplicit()) 8344 continue; 8345 8346 // When looking for a converting constructor, deduction guides that 8347 // could never be called with one argument are not interesting to 8348 // check or note. 8349 if (GD->getMinRequiredArguments() > 1 || 8350 (GD->getNumParams() == 0 && !GD->isVariadic())) 8351 continue; 8352 } 8353 8354 // C++ [over.match.list]p1.1: (first phase list initialization) 8355 // Initially, the candidate functions are the initializer-list 8356 // constructors of the class T 8357 if (OnlyListConstructors && !isInitListConstructor(GD)) 8358 continue; 8359 8360 // C++ [over.match.list]p1.2: (second phase list initialization) 8361 // the candidate functions are all the constructors of the class T 8362 // C++ [over.match.ctor]p1: (all other cases) 8363 // the candidate functions are all the constructors of the class of 8364 // the object being initialized 8365 8366 // C++ [over.best.ics]p4: 8367 // When [...] the constructor [...] is a candidate by 8368 // - [over.match.copy] (in all cases) 8369 // FIXME: The "second phase of [over.match.list] case can also 8370 // theoretically happen here, but it's not clear whether we can 8371 // ever have a parameter of the right type. 8372 bool SuppressUserConversions = Kind.isCopyInit(); 8373 8374 if (TD) 8375 AddTemplateOverloadCandidate(TD, I.getPair(), /*ExplicitArgs*/ nullptr, 8376 Inits, Candidates, 8377 SuppressUserConversions); 8378 else 8379 AddOverloadCandidate(GD, I.getPair(), Inits, Candidates, 8380 SuppressUserConversions); 8381 } 8382 return Candidates.BestViableFunction(*this, Kind.getLocation(), Best); 8383 }; 8384 8385 OverloadingResult Result = OR_No_Viable_Function; 8386 8387 // C++11 [over.match.list]p1, per DR1467: for list-initialization, first 8388 // try initializer-list constructors. 8389 if (ListInit) { 8390 bool TryListConstructors = true; 8391 8392 // Try list constructors unless the list is empty and the class has one or 8393 // more default constructors, in which case those constructors win. 8394 if (!ListInit->getNumInits()) { 8395 for (NamedDecl *D : Guides) { 8396 auto *FD = dyn_cast<FunctionDecl>(D->getUnderlyingDecl()); 8397 if (FD && FD->getMinRequiredArguments() == 0) { 8398 TryListConstructors = false; 8399 break; 8400 } 8401 } 8402 } 8403 8404 if (TryListConstructors) 8405 Result = tryToResolveOverload(/*OnlyListConstructor*/true); 8406 // Then unwrap the initializer list and try again considering all 8407 // constructors. 8408 Inits = MultiExprArg(ListInit->getInits(), ListInit->getNumInits()); 8409 } 8410 8411 // If list-initialization fails, or if we're doing any other kind of 8412 // initialization, we (eventually) consider constructors. 8413 if (Result == OR_No_Viable_Function) 8414 Result = tryToResolveOverload(/*OnlyListConstructor*/false); 8415 8416 switch (Result) { 8417 case OR_Ambiguous: 8418 Diag(Kind.getLocation(), diag::err_deduced_class_template_ctor_ambiguous) 8419 << TemplateName; 8420 // FIXME: For list-initialization candidates, it'd usually be better to 8421 // list why they were not viable when given the initializer list itself as 8422 // an argument. 8423 Candidates.NoteCandidates(*this, OCD_ViableCandidates, Inits); 8424 return QualType(); 8425 8426 case OR_No_Viable_Function: { 8427 CXXRecordDecl *Primary = 8428 cast<ClassTemplateDecl>(Template)->getTemplatedDecl(); 8429 bool Complete = 8430 isCompleteType(Kind.getLocation(), Context.getTypeDeclType(Primary)); 8431 Diag(Kind.getLocation(), 8432 Complete ? diag::err_deduced_class_template_ctor_no_viable 8433 : diag::err_deduced_class_template_incomplete) 8434 << TemplateName << !Guides.empty(); 8435 Candidates.NoteCandidates(*this, OCD_AllCandidates, Inits); 8436 return QualType(); 8437 } 8438 8439 case OR_Deleted: { 8440 Diag(Kind.getLocation(), diag::err_deduced_class_template_deleted) 8441 << TemplateName; 8442 NoteDeletedFunction(Best->Function); 8443 return QualType(); 8444 } 8445 8446 case OR_Success: 8447 // C++ [over.match.list]p1: 8448 // In copy-list-initialization, if an explicit constructor is chosen, the 8449 // initialization is ill-formed. 8450 if (Kind.isCopyInit() && ListInit && 8451 cast<CXXDeductionGuideDecl>(Best->Function)->isExplicit()) { 8452 bool IsDeductionGuide = !Best->Function->isImplicit(); 8453 Diag(Kind.getLocation(), diag::err_deduced_class_template_explicit) 8454 << TemplateName << IsDeductionGuide; 8455 Diag(Best->Function->getLocation(), 8456 diag::note_explicit_ctor_deduction_guide_here) 8457 << IsDeductionGuide; 8458 return QualType(); 8459 } 8460 8461 // Make sure we didn't select an unusable deduction guide, and mark it 8462 // as referenced. 8463 DiagnoseUseOfDecl(Best->Function, Kind.getLocation()); 8464 MarkFunctionReferenced(Kind.getLocation(), Best->Function); 8465 break; 8466 } 8467 8468 // C++ [dcl.type.class.deduct]p1: 8469 // The placeholder is replaced by the return type of the function selected 8470 // by overload resolution for class template deduction. 8471 return SubstAutoType(TSInfo->getType(), Best->Function->getReturnType()); 8472 } 8473