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