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/Designator.h" 15 #include "clang/Sema/Initialization.h" 16 #include "clang/Sema/Lookup.h" 17 #include "clang/Sema/SemaInternal.h" 18 #include "clang/Lex/Preprocessor.h" 19 #include "clang/AST/ASTContext.h" 20 #include "clang/AST/DeclObjC.h" 21 #include "clang/AST/ExprCXX.h" 22 #include "clang/AST/ExprObjC.h" 23 #include "clang/AST/TypeLoc.h" 24 #include "llvm/Support/ErrorHandling.h" 25 #include "llvm/Support/raw_ostream.h" 26 #include <map> 27 using namespace clang; 28 29 //===----------------------------------------------------------------------===// 30 // Sema Initialization Checking 31 //===----------------------------------------------------------------------===// 32 33 static Expr *IsStringInit(Expr *Init, const ArrayType *AT, 34 ASTContext &Context) { 35 if (!isa<ConstantArrayType>(AT) && !isa<IncompleteArrayType>(AT)) 36 return 0; 37 38 // See if this is a string literal or @encode. 39 Init = Init->IgnoreParens(); 40 41 // Handle @encode, which is a narrow string. 42 if (isa<ObjCEncodeExpr>(Init) && AT->getElementType()->isCharType()) 43 return Init; 44 45 // Otherwise we can only handle string literals. 46 StringLiteral *SL = dyn_cast<StringLiteral>(Init); 47 if (SL == 0) return 0; 48 49 QualType ElemTy = Context.getCanonicalType(AT->getElementType()); 50 51 switch (SL->getKind()) { 52 case StringLiteral::Ascii: 53 case StringLiteral::UTF8: 54 // char array can be initialized with a narrow string. 55 // Only allow char x[] = "foo"; not char x[] = L"foo"; 56 return ElemTy->isCharType() ? Init : 0; 57 case StringLiteral::UTF16: 58 return ElemTy->isChar16Type() ? Init : 0; 59 case StringLiteral::UTF32: 60 return ElemTy->isChar32Type() ? Init : 0; 61 case StringLiteral::Wide: 62 // wchar_t array can be initialized with a wide string: C99 6.7.8p15 (with 63 // correction from DR343): "An array with element type compatible with a 64 // qualified or unqualified version of wchar_t may be initialized by a wide 65 // string literal, optionally enclosed in braces." 66 if (Context.typesAreCompatible(Context.getWCharType(), 67 ElemTy.getUnqualifiedType())) 68 return Init; 69 70 return 0; 71 } 72 73 llvm_unreachable("missed a StringLiteral kind?"); 74 } 75 76 static Expr *IsStringInit(Expr *init, QualType declType, ASTContext &Context) { 77 const ArrayType *arrayType = Context.getAsArrayType(declType); 78 if (!arrayType) return 0; 79 80 return IsStringInit(init, arrayType, Context); 81 } 82 83 static void CheckStringInit(Expr *Str, QualType &DeclT, const ArrayType *AT, 84 Sema &S) { 85 // Get the length of the string as parsed. 86 uint64_t StrLength = 87 cast<ConstantArrayType>(Str->getType())->getSize().getZExtValue(); 88 89 90 if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(AT)) { 91 // C99 6.7.8p14. We have an array of character type with unknown size 92 // being initialized to a string literal. 93 llvm::APSInt ConstVal(32); 94 ConstVal = StrLength; 95 // Return a new array type (C99 6.7.8p22). 96 DeclT = S.Context.getConstantArrayType(IAT->getElementType(), 97 ConstVal, 98 ArrayType::Normal, 0); 99 return; 100 } 101 102 const ConstantArrayType *CAT = cast<ConstantArrayType>(AT); 103 104 // We have an array of character type with known size. However, 105 // the size may be smaller or larger than the string we are initializing. 106 // FIXME: Avoid truncation for 64-bit length strings. 107 if (S.getLangOptions().CPlusPlus) { 108 if (StringLiteral *SL = dyn_cast<StringLiteral>(Str)) { 109 // For Pascal strings it's OK to strip off the terminating null character, 110 // so the example below is valid: 111 // 112 // unsigned char a[2] = "\pa"; 113 if (SL->isPascal()) 114 StrLength--; 115 } 116 117 // [dcl.init.string]p2 118 if (StrLength > CAT->getSize().getZExtValue()) 119 S.Diag(Str->getSourceRange().getBegin(), 120 diag::err_initializer_string_for_char_array_too_long) 121 << Str->getSourceRange(); 122 } else { 123 // C99 6.7.8p14. 124 if (StrLength-1 > CAT->getSize().getZExtValue()) 125 S.Diag(Str->getSourceRange().getBegin(), 126 diag::warn_initializer_string_for_char_array_too_long) 127 << Str->getSourceRange(); 128 } 129 130 // Set the type to the actual size that we are initializing. If we have 131 // something like: 132 // char x[1] = "foo"; 133 // then this will set the string literal's type to char[1]. 134 Str->setType(DeclT); 135 } 136 137 //===----------------------------------------------------------------------===// 138 // Semantic checking for initializer lists. 139 //===----------------------------------------------------------------------===// 140 141 /// @brief Semantic checking for initializer lists. 142 /// 143 /// The InitListChecker class contains a set of routines that each 144 /// handle the initialization of a certain kind of entity, e.g., 145 /// arrays, vectors, struct/union types, scalars, etc. The 146 /// InitListChecker itself performs a recursive walk of the subobject 147 /// structure of the type to be initialized, while stepping through 148 /// the initializer list one element at a time. The IList and Index 149 /// parameters to each of the Check* routines contain the active 150 /// (syntactic) initializer list and the index into that initializer 151 /// list that represents the current initializer. Each routine is 152 /// responsible for moving that Index forward as it consumes elements. 153 /// 154 /// Each Check* routine also has a StructuredList/StructuredIndex 155 /// arguments, which contains the current "structured" (semantic) 156 /// initializer list and the index into that initializer list where we 157 /// are copying initializers as we map them over to the semantic 158 /// list. Once we have completed our recursive walk of the subobject 159 /// structure, we will have constructed a full semantic initializer 160 /// list. 161 /// 162 /// C99 designators cause changes in the initializer list traversal, 163 /// because they make the initialization "jump" into a specific 164 /// subobject and then continue the initialization from that 165 /// point. CheckDesignatedInitializer() recursively steps into the 166 /// designated subobject and manages backing out the recursion to 167 /// initialize the subobjects after the one designated. 168 namespace { 169 class InitListChecker { 170 Sema &SemaRef; 171 bool hadError; 172 bool VerifyOnly; // no diagnostics, no structure building 173 bool AllowBraceElision; 174 std::map<InitListExpr *, InitListExpr *> SyntacticToSemantic; 175 InitListExpr *FullyStructuredList; 176 177 void CheckImplicitInitList(const InitializedEntity &Entity, 178 InitListExpr *ParentIList, QualType T, 179 unsigned &Index, InitListExpr *StructuredList, 180 unsigned &StructuredIndex); 181 void CheckExplicitInitList(const InitializedEntity &Entity, 182 InitListExpr *IList, QualType &T, 183 unsigned &Index, InitListExpr *StructuredList, 184 unsigned &StructuredIndex, 185 bool TopLevelObject = false); 186 void CheckListElementTypes(const InitializedEntity &Entity, 187 InitListExpr *IList, QualType &DeclType, 188 bool SubobjectIsDesignatorContext, 189 unsigned &Index, 190 InitListExpr *StructuredList, 191 unsigned &StructuredIndex, 192 bool TopLevelObject = false); 193 void CheckSubElementType(const InitializedEntity &Entity, 194 InitListExpr *IList, QualType ElemType, 195 unsigned &Index, 196 InitListExpr *StructuredList, 197 unsigned &StructuredIndex); 198 void CheckComplexType(const InitializedEntity &Entity, 199 InitListExpr *IList, QualType DeclType, 200 unsigned &Index, 201 InitListExpr *StructuredList, 202 unsigned &StructuredIndex); 203 void CheckScalarType(const InitializedEntity &Entity, 204 InitListExpr *IList, QualType DeclType, 205 unsigned &Index, 206 InitListExpr *StructuredList, 207 unsigned &StructuredIndex); 208 void CheckReferenceType(const InitializedEntity &Entity, 209 InitListExpr *IList, QualType DeclType, 210 unsigned &Index, 211 InitListExpr *StructuredList, 212 unsigned &StructuredIndex); 213 void CheckVectorType(const InitializedEntity &Entity, 214 InitListExpr *IList, QualType DeclType, unsigned &Index, 215 InitListExpr *StructuredList, 216 unsigned &StructuredIndex); 217 void CheckStructUnionTypes(const InitializedEntity &Entity, 218 InitListExpr *IList, QualType DeclType, 219 RecordDecl::field_iterator Field, 220 bool SubobjectIsDesignatorContext, unsigned &Index, 221 InitListExpr *StructuredList, 222 unsigned &StructuredIndex, 223 bool TopLevelObject = false); 224 void CheckArrayType(const InitializedEntity &Entity, 225 InitListExpr *IList, QualType &DeclType, 226 llvm::APSInt elementIndex, 227 bool SubobjectIsDesignatorContext, unsigned &Index, 228 InitListExpr *StructuredList, 229 unsigned &StructuredIndex); 230 bool CheckDesignatedInitializer(const InitializedEntity &Entity, 231 InitListExpr *IList, DesignatedInitExpr *DIE, 232 unsigned DesigIdx, 233 QualType &CurrentObjectType, 234 RecordDecl::field_iterator *NextField, 235 llvm::APSInt *NextElementIndex, 236 unsigned &Index, 237 InitListExpr *StructuredList, 238 unsigned &StructuredIndex, 239 bool FinishSubobjectInit, 240 bool TopLevelObject); 241 InitListExpr *getStructuredSubobjectInit(InitListExpr *IList, unsigned Index, 242 QualType CurrentObjectType, 243 InitListExpr *StructuredList, 244 unsigned StructuredIndex, 245 SourceRange InitRange); 246 void UpdateStructuredListElement(InitListExpr *StructuredList, 247 unsigned &StructuredIndex, 248 Expr *expr); 249 int numArrayElements(QualType DeclType); 250 int numStructUnionElements(QualType DeclType); 251 252 void FillInValueInitForField(unsigned Init, FieldDecl *Field, 253 const InitializedEntity &ParentEntity, 254 InitListExpr *ILE, bool &RequiresSecondPass); 255 void FillInValueInitializations(const InitializedEntity &Entity, 256 InitListExpr *ILE, bool &RequiresSecondPass); 257 bool CheckFlexibleArrayInit(const InitializedEntity &Entity, 258 Expr *InitExpr, FieldDecl *Field, 259 bool TopLevelObject); 260 void CheckValueInitializable(const InitializedEntity &Entity); 261 262 public: 263 InitListChecker(Sema &S, const InitializedEntity &Entity, 264 InitListExpr *IL, QualType &T, bool VerifyOnly, 265 bool AllowBraceElision); 266 bool HadError() { return hadError; } 267 268 // @brief Retrieves the fully-structured initializer list used for 269 // semantic analysis and code generation. 270 InitListExpr *getFullyStructuredList() const { return FullyStructuredList; } 271 }; 272 } // end anonymous namespace 273 274 void InitListChecker::CheckValueInitializable(const InitializedEntity &Entity) { 275 assert(VerifyOnly && 276 "CheckValueInitializable is only inteded for verification mode."); 277 278 SourceLocation Loc; 279 InitializationKind Kind = InitializationKind::CreateValue(Loc, Loc, Loc, 280 true); 281 InitializationSequence InitSeq(SemaRef, Entity, Kind, 0, 0); 282 if (InitSeq.Failed()) 283 hadError = true; 284 } 285 286 void InitListChecker::FillInValueInitForField(unsigned Init, FieldDecl *Field, 287 const InitializedEntity &ParentEntity, 288 InitListExpr *ILE, 289 bool &RequiresSecondPass) { 290 SourceLocation Loc = ILE->getSourceRange().getBegin(); 291 unsigned NumInits = ILE->getNumInits(); 292 InitializedEntity MemberEntity 293 = InitializedEntity::InitializeMember(Field, &ParentEntity); 294 if (Init >= NumInits || !ILE->getInit(Init)) { 295 // FIXME: We probably don't need to handle references 296 // specially here, since value-initialization of references is 297 // handled in InitializationSequence. 298 if (Field->getType()->isReferenceType()) { 299 // C++ [dcl.init.aggr]p9: 300 // If an incomplete or empty initializer-list leaves a 301 // member of reference type uninitialized, the program is 302 // ill-formed. 303 SemaRef.Diag(Loc, diag::err_init_reference_member_uninitialized) 304 << Field->getType() 305 << ILE->getSyntacticForm()->getSourceRange(); 306 SemaRef.Diag(Field->getLocation(), 307 diag::note_uninit_reference_member); 308 hadError = true; 309 return; 310 } 311 312 InitializationKind Kind = InitializationKind::CreateValue(Loc, Loc, Loc, 313 true); 314 InitializationSequence InitSeq(SemaRef, MemberEntity, Kind, 0, 0); 315 if (!InitSeq) { 316 InitSeq.Diagnose(SemaRef, MemberEntity, Kind, 0, 0); 317 hadError = true; 318 return; 319 } 320 321 ExprResult MemberInit 322 = InitSeq.Perform(SemaRef, MemberEntity, Kind, MultiExprArg()); 323 if (MemberInit.isInvalid()) { 324 hadError = true; 325 return; 326 } 327 328 if (hadError) { 329 // Do nothing 330 } else if (Init < NumInits) { 331 ILE->setInit(Init, MemberInit.takeAs<Expr>()); 332 } else if (InitSeq.isConstructorInitialization()) { 333 // Value-initialization requires a constructor call, so 334 // extend the initializer list to include the constructor 335 // call and make a note that we'll need to take another pass 336 // through the initializer list. 337 ILE->updateInit(SemaRef.Context, Init, MemberInit.takeAs<Expr>()); 338 RequiresSecondPass = true; 339 } 340 } else if (InitListExpr *InnerILE 341 = dyn_cast<InitListExpr>(ILE->getInit(Init))) 342 FillInValueInitializations(MemberEntity, InnerILE, 343 RequiresSecondPass); 344 } 345 346 /// Recursively replaces NULL values within the given initializer list 347 /// with expressions that perform value-initialization of the 348 /// appropriate type. 349 void 350 InitListChecker::FillInValueInitializations(const InitializedEntity &Entity, 351 InitListExpr *ILE, 352 bool &RequiresSecondPass) { 353 assert((ILE->getType() != SemaRef.Context.VoidTy) && 354 "Should not have void type"); 355 SourceLocation Loc = ILE->getSourceRange().getBegin(); 356 if (ILE->getSyntacticForm()) 357 Loc = ILE->getSyntacticForm()->getSourceRange().getBegin(); 358 359 if (const RecordType *RType = ILE->getType()->getAs<RecordType>()) { 360 if (RType->getDecl()->isUnion() && 361 ILE->getInitializedFieldInUnion()) 362 FillInValueInitForField(0, ILE->getInitializedFieldInUnion(), 363 Entity, ILE, RequiresSecondPass); 364 else { 365 unsigned Init = 0; 366 for (RecordDecl::field_iterator 367 Field = RType->getDecl()->field_begin(), 368 FieldEnd = RType->getDecl()->field_end(); 369 Field != FieldEnd; ++Field) { 370 if (Field->isUnnamedBitfield()) 371 continue; 372 373 if (hadError) 374 return; 375 376 FillInValueInitForField(Init, *Field, Entity, ILE, RequiresSecondPass); 377 if (hadError) 378 return; 379 380 ++Init; 381 382 // Only look at the first initialization of a union. 383 if (RType->getDecl()->isUnion()) 384 break; 385 } 386 } 387 388 return; 389 } 390 391 QualType ElementType; 392 393 InitializedEntity ElementEntity = Entity; 394 unsigned NumInits = ILE->getNumInits(); 395 unsigned NumElements = NumInits; 396 if (const ArrayType *AType = SemaRef.Context.getAsArrayType(ILE->getType())) { 397 ElementType = AType->getElementType(); 398 if (const ConstantArrayType *CAType = dyn_cast<ConstantArrayType>(AType)) 399 NumElements = CAType->getSize().getZExtValue(); 400 ElementEntity = InitializedEntity::InitializeElement(SemaRef.Context, 401 0, Entity); 402 } else if (const VectorType *VType = ILE->getType()->getAs<VectorType>()) { 403 ElementType = VType->getElementType(); 404 NumElements = VType->getNumElements(); 405 ElementEntity = InitializedEntity::InitializeElement(SemaRef.Context, 406 0, Entity); 407 } else 408 ElementType = ILE->getType(); 409 410 411 for (unsigned Init = 0; Init != NumElements; ++Init) { 412 if (hadError) 413 return; 414 415 if (ElementEntity.getKind() == InitializedEntity::EK_ArrayElement || 416 ElementEntity.getKind() == InitializedEntity::EK_VectorElement) 417 ElementEntity.setElementIndex(Init); 418 419 if (Init >= NumInits || !ILE->getInit(Init)) { 420 InitializationKind Kind = InitializationKind::CreateValue(Loc, Loc, Loc, 421 true); 422 InitializationSequence InitSeq(SemaRef, ElementEntity, Kind, 0, 0); 423 if (!InitSeq) { 424 InitSeq.Diagnose(SemaRef, ElementEntity, Kind, 0, 0); 425 hadError = true; 426 return; 427 } 428 429 ExprResult ElementInit 430 = InitSeq.Perform(SemaRef, ElementEntity, Kind, MultiExprArg()); 431 if (ElementInit.isInvalid()) { 432 hadError = true; 433 return; 434 } 435 436 if (hadError) { 437 // Do nothing 438 } else if (Init < NumInits) { 439 // For arrays, just set the expression used for value-initialization 440 // of the "holes" in the array. 441 if (ElementEntity.getKind() == InitializedEntity::EK_ArrayElement) 442 ILE->setArrayFiller(ElementInit.takeAs<Expr>()); 443 else 444 ILE->setInit(Init, ElementInit.takeAs<Expr>()); 445 } else { 446 // For arrays, just set the expression used for value-initialization 447 // of the rest of elements and exit. 448 if (ElementEntity.getKind() == InitializedEntity::EK_ArrayElement) { 449 ILE->setArrayFiller(ElementInit.takeAs<Expr>()); 450 return; 451 } 452 453 if (InitSeq.isConstructorInitialization()) { 454 // Value-initialization requires a constructor call, so 455 // extend the initializer list to include the constructor 456 // call and make a note that we'll need to take another pass 457 // through the initializer list. 458 ILE->updateInit(SemaRef.Context, Init, ElementInit.takeAs<Expr>()); 459 RequiresSecondPass = true; 460 } 461 } 462 } else if (InitListExpr *InnerILE 463 = dyn_cast<InitListExpr>(ILE->getInit(Init))) 464 FillInValueInitializations(ElementEntity, InnerILE, RequiresSecondPass); 465 } 466 } 467 468 469 InitListChecker::InitListChecker(Sema &S, const InitializedEntity &Entity, 470 InitListExpr *IL, QualType &T, 471 bool VerifyOnly, bool AllowBraceElision) 472 : SemaRef(S), VerifyOnly(VerifyOnly), AllowBraceElision(AllowBraceElision) { 473 hadError = false; 474 475 unsigned newIndex = 0; 476 unsigned newStructuredIndex = 0; 477 FullyStructuredList 478 = getStructuredSubobjectInit(IL, newIndex, T, 0, 0, IL->getSourceRange()); 479 CheckExplicitInitList(Entity, IL, T, newIndex, 480 FullyStructuredList, newStructuredIndex, 481 /*TopLevelObject=*/true); 482 483 if (!hadError && !VerifyOnly) { 484 bool RequiresSecondPass = false; 485 FillInValueInitializations(Entity, FullyStructuredList, RequiresSecondPass); 486 if (RequiresSecondPass && !hadError) 487 FillInValueInitializations(Entity, FullyStructuredList, 488 RequiresSecondPass); 489 } 490 } 491 492 int InitListChecker::numArrayElements(QualType DeclType) { 493 // FIXME: use a proper constant 494 int maxElements = 0x7FFFFFFF; 495 if (const ConstantArrayType *CAT = 496 SemaRef.Context.getAsConstantArrayType(DeclType)) { 497 maxElements = static_cast<int>(CAT->getSize().getZExtValue()); 498 } 499 return maxElements; 500 } 501 502 int InitListChecker::numStructUnionElements(QualType DeclType) { 503 RecordDecl *structDecl = DeclType->getAs<RecordType>()->getDecl(); 504 int InitializableMembers = 0; 505 for (RecordDecl::field_iterator 506 Field = structDecl->field_begin(), 507 FieldEnd = structDecl->field_end(); 508 Field != FieldEnd; ++Field) { 509 if (!Field->isUnnamedBitfield()) 510 ++InitializableMembers; 511 } 512 if (structDecl->isUnion()) 513 return std::min(InitializableMembers, 1); 514 return InitializableMembers - structDecl->hasFlexibleArrayMember(); 515 } 516 517 void InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, 518 InitListExpr *ParentIList, 519 QualType T, unsigned &Index, 520 InitListExpr *StructuredList, 521 unsigned &StructuredIndex) { 522 int maxElements = 0; 523 524 if (T->isArrayType()) 525 maxElements = numArrayElements(T); 526 else if (T->isRecordType()) 527 maxElements = numStructUnionElements(T); 528 else if (T->isVectorType()) 529 maxElements = T->getAs<VectorType>()->getNumElements(); 530 else 531 llvm_unreachable("CheckImplicitInitList(): Illegal type"); 532 533 if (maxElements == 0) { 534 if (!VerifyOnly) 535 SemaRef.Diag(ParentIList->getInit(Index)->getLocStart(), 536 diag::err_implicit_empty_initializer); 537 ++Index; 538 hadError = true; 539 return; 540 } 541 542 // Build a structured initializer list corresponding to this subobject. 543 InitListExpr *StructuredSubobjectInitList 544 = getStructuredSubobjectInit(ParentIList, Index, T, StructuredList, 545 StructuredIndex, 546 SourceRange(ParentIList->getInit(Index)->getSourceRange().getBegin(), 547 ParentIList->getSourceRange().getEnd())); 548 unsigned StructuredSubobjectInitIndex = 0; 549 550 // Check the element types and build the structural subobject. 551 unsigned StartIndex = Index; 552 CheckListElementTypes(Entity, ParentIList, T, 553 /*SubobjectIsDesignatorContext=*/false, Index, 554 StructuredSubobjectInitList, 555 StructuredSubobjectInitIndex); 556 557 if (VerifyOnly) { 558 if (!AllowBraceElision && (T->isArrayType() || T->isRecordType())) 559 hadError = true; 560 } else { 561 StructuredSubobjectInitList->setType(T); 562 563 unsigned EndIndex = (Index == StartIndex? StartIndex : Index - 1); 564 // Update the structured sub-object initializer so that it's ending 565 // range corresponds with the end of the last initializer it used. 566 if (EndIndex < ParentIList->getNumInits()) { 567 SourceLocation EndLoc 568 = ParentIList->getInit(EndIndex)->getSourceRange().getEnd(); 569 StructuredSubobjectInitList->setRBraceLoc(EndLoc); 570 } 571 572 // Complain about missing braces. 573 if (T->isArrayType() || T->isRecordType()) { 574 SemaRef.Diag(StructuredSubobjectInitList->getLocStart(), 575 AllowBraceElision ? diag::warn_missing_braces : 576 diag::err_missing_braces) 577 << StructuredSubobjectInitList->getSourceRange() 578 << FixItHint::CreateInsertion( 579 StructuredSubobjectInitList->getLocStart(), "{") 580 << FixItHint::CreateInsertion( 581 SemaRef.PP.getLocForEndOfToken( 582 StructuredSubobjectInitList->getLocEnd()), 583 "}"); 584 if (!AllowBraceElision) 585 hadError = true; 586 } 587 } 588 } 589 590 void InitListChecker::CheckExplicitInitList(const InitializedEntity &Entity, 591 InitListExpr *IList, QualType &T, 592 unsigned &Index, 593 InitListExpr *StructuredList, 594 unsigned &StructuredIndex, 595 bool TopLevelObject) { 596 assert(IList->isExplicit() && "Illegal Implicit InitListExpr"); 597 if (!VerifyOnly) { 598 SyntacticToSemantic[IList] = StructuredList; 599 StructuredList->setSyntacticForm(IList); 600 } 601 CheckListElementTypes(Entity, IList, T, /*SubobjectIsDesignatorContext=*/true, 602 Index, StructuredList, StructuredIndex, TopLevelObject); 603 if (!VerifyOnly) { 604 QualType ExprTy = T.getNonLValueExprType(SemaRef.Context); 605 IList->setType(ExprTy); 606 StructuredList->setType(ExprTy); 607 } 608 if (hadError) 609 return; 610 611 if (Index < IList->getNumInits()) { 612 // We have leftover initializers 613 if (VerifyOnly) { 614 if (SemaRef.getLangOptions().CPlusPlus || 615 (SemaRef.getLangOptions().OpenCL && 616 IList->getType()->isVectorType())) { 617 hadError = true; 618 } 619 return; 620 } 621 622 if (StructuredIndex == 1 && 623 IsStringInit(StructuredList->getInit(0), T, SemaRef.Context)) { 624 unsigned DK = diag::warn_excess_initializers_in_char_array_initializer; 625 if (SemaRef.getLangOptions().CPlusPlus) { 626 DK = diag::err_excess_initializers_in_char_array_initializer; 627 hadError = true; 628 } 629 // Special-case 630 SemaRef.Diag(IList->getInit(Index)->getLocStart(), DK) 631 << IList->getInit(Index)->getSourceRange(); 632 } else if (!T->isIncompleteType()) { 633 // Don't complain for incomplete types, since we'll get an error 634 // elsewhere 635 QualType CurrentObjectType = StructuredList->getType(); 636 int initKind = 637 CurrentObjectType->isArrayType()? 0 : 638 CurrentObjectType->isVectorType()? 1 : 639 CurrentObjectType->isScalarType()? 2 : 640 CurrentObjectType->isUnionType()? 3 : 641 4; 642 643 unsigned DK = diag::warn_excess_initializers; 644 if (SemaRef.getLangOptions().CPlusPlus) { 645 DK = diag::err_excess_initializers; 646 hadError = true; 647 } 648 if (SemaRef.getLangOptions().OpenCL && initKind == 1) { 649 DK = diag::err_excess_initializers; 650 hadError = true; 651 } 652 653 SemaRef.Diag(IList->getInit(Index)->getLocStart(), DK) 654 << initKind << IList->getInit(Index)->getSourceRange(); 655 } 656 } 657 658 if (!VerifyOnly && T->isScalarType() && IList->getNumInits() == 1 && 659 !TopLevelObject) 660 SemaRef.Diag(IList->getLocStart(), diag::warn_braces_around_scalar_init) 661 << IList->getSourceRange() 662 << FixItHint::CreateRemoval(IList->getLocStart()) 663 << FixItHint::CreateRemoval(IList->getLocEnd()); 664 } 665 666 void InitListChecker::CheckListElementTypes(const InitializedEntity &Entity, 667 InitListExpr *IList, 668 QualType &DeclType, 669 bool SubobjectIsDesignatorContext, 670 unsigned &Index, 671 InitListExpr *StructuredList, 672 unsigned &StructuredIndex, 673 bool TopLevelObject) { 674 if (DeclType->isAnyComplexType() && SubobjectIsDesignatorContext) { 675 // Explicitly braced initializer for complex type can be real+imaginary 676 // parts. 677 CheckComplexType(Entity, IList, DeclType, Index, 678 StructuredList, StructuredIndex); 679 } else if (DeclType->isScalarType()) { 680 CheckScalarType(Entity, IList, DeclType, Index, 681 StructuredList, StructuredIndex); 682 } else if (DeclType->isVectorType()) { 683 CheckVectorType(Entity, IList, DeclType, Index, 684 StructuredList, StructuredIndex); 685 } else if (DeclType->isAggregateType()) { 686 if (DeclType->isRecordType()) { 687 RecordDecl *RD = DeclType->getAs<RecordType>()->getDecl(); 688 CheckStructUnionTypes(Entity, IList, DeclType, RD->field_begin(), 689 SubobjectIsDesignatorContext, Index, 690 StructuredList, StructuredIndex, 691 TopLevelObject); 692 } else if (DeclType->isArrayType()) { 693 llvm::APSInt Zero( 694 SemaRef.Context.getTypeSize(SemaRef.Context.getSizeType()), 695 false); 696 CheckArrayType(Entity, IList, DeclType, Zero, 697 SubobjectIsDesignatorContext, Index, 698 StructuredList, StructuredIndex); 699 } else 700 llvm_unreachable("Aggregate that isn't a structure or array?!"); 701 } else if (DeclType->isVoidType() || DeclType->isFunctionType()) { 702 // This type is invalid, issue a diagnostic. 703 ++Index; 704 if (!VerifyOnly) 705 SemaRef.Diag(IList->getLocStart(), diag::err_illegal_initializer_type) 706 << DeclType; 707 hadError = true; 708 } else if (DeclType->isRecordType()) { 709 // C++ [dcl.init]p14: 710 // [...] If the class is an aggregate (8.5.1), and the initializer 711 // is a brace-enclosed list, see 8.5.1. 712 // 713 // Note: 8.5.1 is handled below; here, we diagnose the case where 714 // we have an initializer list and a destination type that is not 715 // an aggregate. 716 // FIXME: In C++0x, this is yet another form of initialization. 717 if (!VerifyOnly) 718 SemaRef.Diag(IList->getLocStart(), diag::err_init_non_aggr_init_list) 719 << DeclType << IList->getSourceRange(); 720 hadError = true; 721 } else if (DeclType->isReferenceType()) { 722 CheckReferenceType(Entity, IList, DeclType, Index, 723 StructuredList, StructuredIndex); 724 } else if (DeclType->isObjCObjectType()) { 725 if (!VerifyOnly) 726 SemaRef.Diag(IList->getLocStart(), diag::err_init_objc_class) 727 << DeclType; 728 hadError = true; 729 } else { 730 if (!VerifyOnly) 731 SemaRef.Diag(IList->getLocStart(), diag::err_illegal_initializer_type) 732 << DeclType; 733 hadError = true; 734 } 735 } 736 737 void InitListChecker::CheckSubElementType(const InitializedEntity &Entity, 738 InitListExpr *IList, 739 QualType ElemType, 740 unsigned &Index, 741 InitListExpr *StructuredList, 742 unsigned &StructuredIndex) { 743 Expr *expr = IList->getInit(Index); 744 if (InitListExpr *SubInitList = dyn_cast<InitListExpr>(expr)) { 745 unsigned newIndex = 0; 746 unsigned newStructuredIndex = 0; 747 InitListExpr *newStructuredList 748 = getStructuredSubobjectInit(IList, Index, ElemType, 749 StructuredList, StructuredIndex, 750 SubInitList->getSourceRange()); 751 CheckExplicitInitList(Entity, SubInitList, ElemType, newIndex, 752 newStructuredList, newStructuredIndex); 753 ++StructuredIndex; 754 ++Index; 755 return; 756 } else if (ElemType->isScalarType()) { 757 return CheckScalarType(Entity, IList, ElemType, Index, 758 StructuredList, StructuredIndex); 759 } else if (ElemType->isReferenceType()) { 760 return CheckReferenceType(Entity, IList, ElemType, Index, 761 StructuredList, StructuredIndex); 762 } 763 764 if (const ArrayType *arrayType = SemaRef.Context.getAsArrayType(ElemType)) { 765 // arrayType can be incomplete if we're initializing a flexible 766 // array member. There's nothing we can do with the completed 767 // type here, though. 768 769 if (Expr *Str = IsStringInit(expr, arrayType, SemaRef.Context)) { 770 if (!VerifyOnly) { 771 CheckStringInit(Str, ElemType, arrayType, SemaRef); 772 UpdateStructuredListElement(StructuredList, StructuredIndex, Str); 773 } 774 ++Index; 775 return; 776 } 777 778 // Fall through for subaggregate initialization. 779 780 } else if (SemaRef.getLangOptions().CPlusPlus) { 781 // C++ [dcl.init.aggr]p12: 782 // All implicit type conversions (clause 4) are considered when 783 // initializing the aggregate member with an initializer from 784 // an initializer-list. If the initializer can initialize a 785 // member, the member is initialized. [...] 786 787 // FIXME: Better EqualLoc? 788 InitializationKind Kind = 789 InitializationKind::CreateCopy(expr->getLocStart(), SourceLocation()); 790 InitializationSequence Seq(SemaRef, Entity, Kind, &expr, 1); 791 792 if (Seq) { 793 if (!VerifyOnly) { 794 ExprResult Result = 795 Seq.Perform(SemaRef, Entity, Kind, MultiExprArg(&expr, 1)); 796 if (Result.isInvalid()) 797 hadError = true; 798 799 UpdateStructuredListElement(StructuredList, StructuredIndex, 800 Result.takeAs<Expr>()); 801 } 802 ++Index; 803 return; 804 } 805 806 // Fall through for subaggregate initialization 807 } else { 808 // C99 6.7.8p13: 809 // 810 // The initializer for a structure or union object that has 811 // automatic storage duration shall be either an initializer 812 // list as described below, or a single expression that has 813 // compatible structure or union type. In the latter case, the 814 // initial value of the object, including unnamed members, is 815 // that of the expression. 816 ExprResult ExprRes = SemaRef.Owned(expr); 817 if ((ElemType->isRecordType() || ElemType->isVectorType()) && 818 SemaRef.CheckSingleAssignmentConstraints(ElemType, ExprRes, 819 !VerifyOnly) 820 == Sema::Compatible) { 821 if (ExprRes.isInvalid()) 822 hadError = true; 823 else { 824 ExprRes = SemaRef.DefaultFunctionArrayLvalueConversion(ExprRes.take()); 825 if (ExprRes.isInvalid()) 826 hadError = true; 827 } 828 UpdateStructuredListElement(StructuredList, StructuredIndex, 829 ExprRes.takeAs<Expr>()); 830 ++Index; 831 return; 832 } 833 ExprRes.release(); 834 // Fall through for subaggregate initialization 835 } 836 837 // C++ [dcl.init.aggr]p12: 838 // 839 // [...] Otherwise, if the member is itself a non-empty 840 // subaggregate, brace elision is assumed and the initializer is 841 // considered for the initialization of the first member of 842 // the subaggregate. 843 if (!SemaRef.getLangOptions().OpenCL && 844 (ElemType->isAggregateType() || ElemType->isVectorType())) { 845 CheckImplicitInitList(Entity, IList, ElemType, Index, StructuredList, 846 StructuredIndex); 847 ++StructuredIndex; 848 } else { 849 if (!VerifyOnly) { 850 // We cannot initialize this element, so let 851 // PerformCopyInitialization produce the appropriate diagnostic. 852 SemaRef.PerformCopyInitialization(Entity, SourceLocation(), 853 SemaRef.Owned(expr), 854 /*TopLevelOfInitList=*/true); 855 } 856 hadError = true; 857 ++Index; 858 ++StructuredIndex; 859 } 860 } 861 862 void InitListChecker::CheckComplexType(const InitializedEntity &Entity, 863 InitListExpr *IList, QualType DeclType, 864 unsigned &Index, 865 InitListExpr *StructuredList, 866 unsigned &StructuredIndex) { 867 assert(Index == 0 && "Index in explicit init list must be zero"); 868 869 // As an extension, clang supports complex initializers, which initialize 870 // a complex number component-wise. When an explicit initializer list for 871 // a complex number contains two two initializers, this extension kicks in: 872 // it exepcts the initializer list to contain two elements convertible to 873 // the element type of the complex type. The first element initializes 874 // the real part, and the second element intitializes the imaginary part. 875 876 if (IList->getNumInits() != 2) 877 return CheckScalarType(Entity, IList, DeclType, Index, StructuredList, 878 StructuredIndex); 879 880 // This is an extension in C. (The builtin _Complex type does not exist 881 // in the C++ standard.) 882 if (!SemaRef.getLangOptions().CPlusPlus && !VerifyOnly) 883 SemaRef.Diag(IList->getLocStart(), diag::ext_complex_component_init) 884 << IList->getSourceRange(); 885 886 // Initialize the complex number. 887 QualType elementType = DeclType->getAs<ComplexType>()->getElementType(); 888 InitializedEntity ElementEntity = 889 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity); 890 891 for (unsigned i = 0; i < 2; ++i) { 892 ElementEntity.setElementIndex(Index); 893 CheckSubElementType(ElementEntity, IList, elementType, Index, 894 StructuredList, StructuredIndex); 895 } 896 } 897 898 899 void InitListChecker::CheckScalarType(const InitializedEntity &Entity, 900 InitListExpr *IList, QualType DeclType, 901 unsigned &Index, 902 InitListExpr *StructuredList, 903 unsigned &StructuredIndex) { 904 if (Index >= IList->getNumInits()) { 905 if (!SemaRef.getLangOptions().CPlusPlus0x) { 906 if (!VerifyOnly) 907 SemaRef.Diag(IList->getLocStart(), diag::err_empty_scalar_initializer) 908 << IList->getSourceRange(); 909 hadError = true; 910 } 911 ++Index; 912 ++StructuredIndex; 913 return; 914 } 915 916 Expr *expr = IList->getInit(Index); 917 if (InitListExpr *SubIList = dyn_cast<InitListExpr>(expr)) { 918 if (!VerifyOnly) 919 SemaRef.Diag(SubIList->getLocStart(), 920 diag::warn_many_braces_around_scalar_init) 921 << SubIList->getSourceRange(); 922 923 CheckScalarType(Entity, SubIList, DeclType, Index, StructuredList, 924 StructuredIndex); 925 return; 926 } else if (isa<DesignatedInitExpr>(expr)) { 927 if (!VerifyOnly) 928 SemaRef.Diag(expr->getSourceRange().getBegin(), 929 diag::err_designator_for_scalar_init) 930 << DeclType << expr->getSourceRange(); 931 hadError = true; 932 ++Index; 933 ++StructuredIndex; 934 return; 935 } 936 937 if (VerifyOnly) { 938 if (!SemaRef.CanPerformCopyInitialization(Entity, SemaRef.Owned(expr))) 939 hadError = true; 940 ++Index; 941 return; 942 } 943 944 ExprResult Result = 945 SemaRef.PerformCopyInitialization(Entity, expr->getLocStart(), 946 SemaRef.Owned(expr), 947 /*TopLevelOfInitList=*/true); 948 949 Expr *ResultExpr = 0; 950 951 if (Result.isInvalid()) 952 hadError = true; // types weren't compatible. 953 else { 954 ResultExpr = Result.takeAs<Expr>(); 955 956 if (ResultExpr != expr) { 957 // The type was promoted, update initializer list. 958 IList->setInit(Index, ResultExpr); 959 } 960 } 961 if (hadError) 962 ++StructuredIndex; 963 else 964 UpdateStructuredListElement(StructuredList, StructuredIndex, ResultExpr); 965 ++Index; 966 } 967 968 void InitListChecker::CheckReferenceType(const InitializedEntity &Entity, 969 InitListExpr *IList, QualType DeclType, 970 unsigned &Index, 971 InitListExpr *StructuredList, 972 unsigned &StructuredIndex) { 973 if (Index >= IList->getNumInits()) { 974 // FIXME: It would be wonderful if we could point at the actual member. In 975 // general, it would be useful to pass location information down the stack, 976 // so that we know the location (or decl) of the "current object" being 977 // initialized. 978 if (!VerifyOnly) 979 SemaRef.Diag(IList->getLocStart(), 980 diag::err_init_reference_member_uninitialized) 981 << DeclType 982 << IList->getSourceRange(); 983 hadError = true; 984 ++Index; 985 ++StructuredIndex; 986 return; 987 } 988 989 Expr *expr = IList->getInit(Index); 990 if (isa<InitListExpr>(expr)) { 991 // FIXME: Allowed in C++11. 992 if (!VerifyOnly) 993 SemaRef.Diag(IList->getLocStart(), diag::err_init_non_aggr_init_list) 994 << DeclType << IList->getSourceRange(); 995 hadError = true; 996 ++Index; 997 ++StructuredIndex; 998 return; 999 } 1000 1001 if (VerifyOnly) { 1002 if (!SemaRef.CanPerformCopyInitialization(Entity, SemaRef.Owned(expr))) 1003 hadError = true; 1004 ++Index; 1005 return; 1006 } 1007 1008 ExprResult Result = 1009 SemaRef.PerformCopyInitialization(Entity, expr->getLocStart(), 1010 SemaRef.Owned(expr), 1011 /*TopLevelOfInitList=*/true); 1012 1013 if (Result.isInvalid()) 1014 hadError = true; 1015 1016 expr = Result.takeAs<Expr>(); 1017 IList->setInit(Index, expr); 1018 1019 if (hadError) 1020 ++StructuredIndex; 1021 else 1022 UpdateStructuredListElement(StructuredList, StructuredIndex, expr); 1023 ++Index; 1024 } 1025 1026 void InitListChecker::CheckVectorType(const InitializedEntity &Entity, 1027 InitListExpr *IList, QualType DeclType, 1028 unsigned &Index, 1029 InitListExpr *StructuredList, 1030 unsigned &StructuredIndex) { 1031 const VectorType *VT = DeclType->getAs<VectorType>(); 1032 unsigned maxElements = VT->getNumElements(); 1033 unsigned numEltsInit = 0; 1034 QualType elementType = VT->getElementType(); 1035 1036 if (Index >= IList->getNumInits()) { 1037 // Make sure the element type can be value-initialized. 1038 if (VerifyOnly) 1039 CheckValueInitializable( 1040 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity)); 1041 return; 1042 } 1043 1044 if (!SemaRef.getLangOptions().OpenCL) { 1045 // If the initializing element is a vector, try to copy-initialize 1046 // instead of breaking it apart (which is doomed to failure anyway). 1047 Expr *Init = IList->getInit(Index); 1048 if (!isa<InitListExpr>(Init) && Init->getType()->isVectorType()) { 1049 if (VerifyOnly) { 1050 if (!SemaRef.CanPerformCopyInitialization(Entity, SemaRef.Owned(Init))) 1051 hadError = true; 1052 ++Index; 1053 return; 1054 } 1055 1056 ExprResult Result = 1057 SemaRef.PerformCopyInitialization(Entity, Init->getLocStart(), 1058 SemaRef.Owned(Init), 1059 /*TopLevelOfInitList=*/true); 1060 1061 Expr *ResultExpr = 0; 1062 if (Result.isInvalid()) 1063 hadError = true; // types weren't compatible. 1064 else { 1065 ResultExpr = Result.takeAs<Expr>(); 1066 1067 if (ResultExpr != Init) { 1068 // The type was promoted, update initializer list. 1069 IList->setInit(Index, ResultExpr); 1070 } 1071 } 1072 if (hadError) 1073 ++StructuredIndex; 1074 else 1075 UpdateStructuredListElement(StructuredList, StructuredIndex, 1076 ResultExpr); 1077 ++Index; 1078 return; 1079 } 1080 1081 InitializedEntity ElementEntity = 1082 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity); 1083 1084 for (unsigned i = 0; i < maxElements; ++i, ++numEltsInit) { 1085 // Don't attempt to go past the end of the init list 1086 if (Index >= IList->getNumInits()) { 1087 if (VerifyOnly) 1088 CheckValueInitializable(ElementEntity); 1089 break; 1090 } 1091 1092 ElementEntity.setElementIndex(Index); 1093 CheckSubElementType(ElementEntity, IList, elementType, Index, 1094 StructuredList, StructuredIndex); 1095 } 1096 return; 1097 } 1098 1099 InitializedEntity ElementEntity = 1100 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity); 1101 1102 // OpenCL initializers allows vectors to be constructed from vectors. 1103 for (unsigned i = 0; i < maxElements; ++i) { 1104 // Don't attempt to go past the end of the init list 1105 if (Index >= IList->getNumInits()) 1106 break; 1107 1108 ElementEntity.setElementIndex(Index); 1109 1110 QualType IType = IList->getInit(Index)->getType(); 1111 if (!IType->isVectorType()) { 1112 CheckSubElementType(ElementEntity, IList, elementType, Index, 1113 StructuredList, StructuredIndex); 1114 ++numEltsInit; 1115 } else { 1116 QualType VecType; 1117 const VectorType *IVT = IType->getAs<VectorType>(); 1118 unsigned numIElts = IVT->getNumElements(); 1119 1120 if (IType->isExtVectorType()) 1121 VecType = SemaRef.Context.getExtVectorType(elementType, numIElts); 1122 else 1123 VecType = SemaRef.Context.getVectorType(elementType, numIElts, 1124 IVT->getVectorKind()); 1125 CheckSubElementType(ElementEntity, IList, VecType, Index, 1126 StructuredList, StructuredIndex); 1127 numEltsInit += numIElts; 1128 } 1129 } 1130 1131 // OpenCL requires all elements to be initialized. 1132 if (numEltsInit != maxElements) { 1133 if (!VerifyOnly) 1134 SemaRef.Diag(IList->getSourceRange().getBegin(), 1135 diag::err_vector_incorrect_num_initializers) 1136 << (numEltsInit < maxElements) << maxElements << numEltsInit; 1137 hadError = true; 1138 } 1139 } 1140 1141 void InitListChecker::CheckArrayType(const InitializedEntity &Entity, 1142 InitListExpr *IList, QualType &DeclType, 1143 llvm::APSInt elementIndex, 1144 bool SubobjectIsDesignatorContext, 1145 unsigned &Index, 1146 InitListExpr *StructuredList, 1147 unsigned &StructuredIndex) { 1148 const ArrayType *arrayType = SemaRef.Context.getAsArrayType(DeclType); 1149 1150 // Check for the special-case of initializing an array with a string. 1151 if (Index < IList->getNumInits()) { 1152 if (Expr *Str = IsStringInit(IList->getInit(Index), arrayType, 1153 SemaRef.Context)) { 1154 // We place the string literal directly into the resulting 1155 // initializer list. This is the only place where the structure 1156 // of the structured initializer list doesn't match exactly, 1157 // because doing so would involve allocating one character 1158 // constant for each string. 1159 if (!VerifyOnly) { 1160 CheckStringInit(Str, DeclType, arrayType, SemaRef); 1161 UpdateStructuredListElement(StructuredList, StructuredIndex, Str); 1162 StructuredList->resizeInits(SemaRef.Context, StructuredIndex); 1163 } 1164 ++Index; 1165 return; 1166 } 1167 } 1168 if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(arrayType)) { 1169 // Check for VLAs; in standard C it would be possible to check this 1170 // earlier, but I don't know where clang accepts VLAs (gcc accepts 1171 // them in all sorts of strange places). 1172 if (!VerifyOnly) 1173 SemaRef.Diag(VAT->getSizeExpr()->getLocStart(), 1174 diag::err_variable_object_no_init) 1175 << VAT->getSizeExpr()->getSourceRange(); 1176 hadError = true; 1177 ++Index; 1178 ++StructuredIndex; 1179 return; 1180 } 1181 1182 // We might know the maximum number of elements in advance. 1183 llvm::APSInt maxElements(elementIndex.getBitWidth(), 1184 elementIndex.isUnsigned()); 1185 bool maxElementsKnown = false; 1186 if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(arrayType)) { 1187 maxElements = CAT->getSize(); 1188 elementIndex = elementIndex.extOrTrunc(maxElements.getBitWidth()); 1189 elementIndex.setIsUnsigned(maxElements.isUnsigned()); 1190 maxElementsKnown = true; 1191 } 1192 1193 QualType elementType = arrayType->getElementType(); 1194 while (Index < IList->getNumInits()) { 1195 Expr *Init = IList->getInit(Index); 1196 if (DesignatedInitExpr *DIE = dyn_cast<DesignatedInitExpr>(Init)) { 1197 // If we're not the subobject that matches up with the '{' for 1198 // the designator, we shouldn't be handling the 1199 // designator. Return immediately. 1200 if (!SubobjectIsDesignatorContext) 1201 return; 1202 1203 // Handle this designated initializer. elementIndex will be 1204 // updated to be the next array element we'll initialize. 1205 if (CheckDesignatedInitializer(Entity, IList, DIE, 0, 1206 DeclType, 0, &elementIndex, Index, 1207 StructuredList, StructuredIndex, true, 1208 false)) { 1209 hadError = true; 1210 continue; 1211 } 1212 1213 if (elementIndex.getBitWidth() > maxElements.getBitWidth()) 1214 maxElements = maxElements.extend(elementIndex.getBitWidth()); 1215 else if (elementIndex.getBitWidth() < maxElements.getBitWidth()) 1216 elementIndex = elementIndex.extend(maxElements.getBitWidth()); 1217 elementIndex.setIsUnsigned(maxElements.isUnsigned()); 1218 1219 // If the array is of incomplete type, keep track of the number of 1220 // elements in the initializer. 1221 if (!maxElementsKnown && elementIndex > maxElements) 1222 maxElements = elementIndex; 1223 1224 continue; 1225 } 1226 1227 // If we know the maximum number of elements, and we've already 1228 // hit it, stop consuming elements in the initializer list. 1229 if (maxElementsKnown && elementIndex == maxElements) 1230 break; 1231 1232 InitializedEntity ElementEntity = 1233 InitializedEntity::InitializeElement(SemaRef.Context, StructuredIndex, 1234 Entity); 1235 // Check this element. 1236 CheckSubElementType(ElementEntity, IList, elementType, Index, 1237 StructuredList, StructuredIndex); 1238 ++elementIndex; 1239 1240 // If the array is of incomplete type, keep track of the number of 1241 // elements in the initializer. 1242 if (!maxElementsKnown && elementIndex > maxElements) 1243 maxElements = elementIndex; 1244 } 1245 if (!hadError && DeclType->isIncompleteArrayType() && !VerifyOnly) { 1246 // If this is an incomplete array type, the actual type needs to 1247 // be calculated here. 1248 llvm::APSInt Zero(maxElements.getBitWidth(), maxElements.isUnsigned()); 1249 if (maxElements == Zero) { 1250 // Sizing an array implicitly to zero is not allowed by ISO C, 1251 // but is supported by GNU. 1252 SemaRef.Diag(IList->getLocStart(), 1253 diag::ext_typecheck_zero_array_size); 1254 } 1255 1256 DeclType = SemaRef.Context.getConstantArrayType(elementType, maxElements, 1257 ArrayType::Normal, 0); 1258 } 1259 if (!hadError && VerifyOnly) { 1260 // Check if there are any members of the array that get value-initialized. 1261 // If so, check if doing that is possible. 1262 // FIXME: This needs to detect holes left by designated initializers too. 1263 if (maxElementsKnown && elementIndex < maxElements) 1264 CheckValueInitializable(InitializedEntity::InitializeElement( 1265 SemaRef.Context, 0, Entity)); 1266 } 1267 } 1268 1269 bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, 1270 Expr *InitExpr, 1271 FieldDecl *Field, 1272 bool TopLevelObject) { 1273 // Handle GNU flexible array initializers. 1274 unsigned FlexArrayDiag; 1275 if (isa<InitListExpr>(InitExpr) && 1276 cast<InitListExpr>(InitExpr)->getNumInits() == 0) { 1277 // Empty flexible array init always allowed as an extension 1278 FlexArrayDiag = diag::ext_flexible_array_init; 1279 } else if (SemaRef.getLangOptions().CPlusPlus) { 1280 // Disallow flexible array init in C++; it is not required for gcc 1281 // compatibility, and it needs work to IRGen correctly in general. 1282 FlexArrayDiag = diag::err_flexible_array_init; 1283 } else if (!TopLevelObject) { 1284 // Disallow flexible array init on non-top-level object 1285 FlexArrayDiag = diag::err_flexible_array_init; 1286 } else if (Entity.getKind() != InitializedEntity::EK_Variable) { 1287 // Disallow flexible array init on anything which is not a variable. 1288 FlexArrayDiag = diag::err_flexible_array_init; 1289 } else if (cast<VarDecl>(Entity.getDecl())->hasLocalStorage()) { 1290 // Disallow flexible array init on local variables. 1291 FlexArrayDiag = diag::err_flexible_array_init; 1292 } else { 1293 // Allow other cases. 1294 FlexArrayDiag = diag::ext_flexible_array_init; 1295 } 1296 1297 if (!VerifyOnly) { 1298 SemaRef.Diag(InitExpr->getSourceRange().getBegin(), 1299 FlexArrayDiag) 1300 << InitExpr->getSourceRange().getBegin(); 1301 SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) 1302 << Field; 1303 } 1304 1305 return FlexArrayDiag != diag::ext_flexible_array_init; 1306 } 1307 1308 void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, 1309 InitListExpr *IList, 1310 QualType DeclType, 1311 RecordDecl::field_iterator Field, 1312 bool SubobjectIsDesignatorContext, 1313 unsigned &Index, 1314 InitListExpr *StructuredList, 1315 unsigned &StructuredIndex, 1316 bool TopLevelObject) { 1317 RecordDecl* structDecl = DeclType->getAs<RecordType>()->getDecl(); 1318 1319 // If the record is invalid, some of it's members are invalid. To avoid 1320 // confusion, we forgo checking the intializer for the entire record. 1321 if (structDecl->isInvalidDecl()) { 1322 hadError = true; 1323 return; 1324 } 1325 1326 if (DeclType->isUnionType() && IList->getNumInits() == 0) { 1327 // Value-initialize the first named member of the union. 1328 RecordDecl *RD = DeclType->getAs<RecordType>()->getDecl(); 1329 for (RecordDecl::field_iterator FieldEnd = RD->field_end(); 1330 Field != FieldEnd; ++Field) { 1331 if (Field->getDeclName()) { 1332 if (VerifyOnly) 1333 CheckValueInitializable( 1334 InitializedEntity::InitializeMember(*Field, &Entity)); 1335 else 1336 StructuredList->setInitializedFieldInUnion(*Field); 1337 break; 1338 } 1339 } 1340 return; 1341 } 1342 1343 // If structDecl is a forward declaration, this loop won't do 1344 // anything except look at designated initializers; That's okay, 1345 // because an error should get printed out elsewhere. It might be 1346 // worthwhile to skip over the rest of the initializer, though. 1347 RecordDecl *RD = DeclType->getAs<RecordType>()->getDecl(); 1348 RecordDecl::field_iterator FieldEnd = RD->field_end(); 1349 bool InitializedSomething = false; 1350 bool CheckForMissingFields = true; 1351 while (Index < IList->getNumInits()) { 1352 Expr *Init = IList->getInit(Index); 1353 1354 if (DesignatedInitExpr *DIE = dyn_cast<DesignatedInitExpr>(Init)) { 1355 // If we're not the subobject that matches up with the '{' for 1356 // the designator, we shouldn't be handling the 1357 // designator. Return immediately. 1358 if (!SubobjectIsDesignatorContext) 1359 return; 1360 1361 // Handle this designated initializer. Field will be updated to 1362 // the next field that we'll be initializing. 1363 if (CheckDesignatedInitializer(Entity, IList, DIE, 0, 1364 DeclType, &Field, 0, Index, 1365 StructuredList, StructuredIndex, 1366 true, TopLevelObject)) 1367 hadError = true; 1368 1369 InitializedSomething = true; 1370 1371 // Disable check for missing fields when designators are used. 1372 // This matches gcc behaviour. 1373 CheckForMissingFields = false; 1374 continue; 1375 } 1376 1377 if (Field == FieldEnd) { 1378 // We've run out of fields. We're done. 1379 break; 1380 } 1381 1382 // We've already initialized a member of a union. We're done. 1383 if (InitializedSomething && DeclType->isUnionType()) 1384 break; 1385 1386 // If we've hit the flexible array member at the end, we're done. 1387 if (Field->getType()->isIncompleteArrayType()) 1388 break; 1389 1390 if (Field->isUnnamedBitfield()) { 1391 // Don't initialize unnamed bitfields, e.g. "int : 20;" 1392 ++Field; 1393 continue; 1394 } 1395 1396 // Make sure we can use this declaration. 1397 bool InvalidUse; 1398 if (VerifyOnly) 1399 InvalidUse = !SemaRef.CanUseDecl(*Field); 1400 else 1401 InvalidUse = SemaRef.DiagnoseUseOfDecl(*Field, 1402 IList->getInit(Index)->getLocStart()); 1403 if (InvalidUse) { 1404 ++Index; 1405 ++Field; 1406 hadError = true; 1407 continue; 1408 } 1409 1410 InitializedEntity MemberEntity = 1411 InitializedEntity::InitializeMember(*Field, &Entity); 1412 CheckSubElementType(MemberEntity, IList, Field->getType(), Index, 1413 StructuredList, StructuredIndex); 1414 InitializedSomething = true; 1415 1416 if (DeclType->isUnionType() && !VerifyOnly) { 1417 // Initialize the first field within the union. 1418 StructuredList->setInitializedFieldInUnion(*Field); 1419 } 1420 1421 ++Field; 1422 } 1423 1424 // Emit warnings for missing struct field initializers. 1425 if (!VerifyOnly && InitializedSomething && CheckForMissingFields && 1426 Field != FieldEnd && !Field->getType()->isIncompleteArrayType() && 1427 !DeclType->isUnionType()) { 1428 // It is possible we have one or more unnamed bitfields remaining. 1429 // Find first (if any) named field and emit warning. 1430 for (RecordDecl::field_iterator it = Field, end = RD->field_end(); 1431 it != end; ++it) { 1432 if (!it->isUnnamedBitfield()) { 1433 SemaRef.Diag(IList->getSourceRange().getEnd(), 1434 diag::warn_missing_field_initializers) << it->getName(); 1435 break; 1436 } 1437 } 1438 } 1439 1440 // Check that any remaining fields can be value-initialized. 1441 if (VerifyOnly && Field != FieldEnd && !DeclType->isUnionType() && 1442 !Field->getType()->isIncompleteArrayType()) { 1443 // FIXME: Should check for holes left by designated initializers too. 1444 for (; Field != FieldEnd && !hadError; ++Field) { 1445 if (!Field->isUnnamedBitfield()) 1446 CheckValueInitializable( 1447 InitializedEntity::InitializeMember(*Field, &Entity)); 1448 } 1449 } 1450 1451 if (Field == FieldEnd || !Field->getType()->isIncompleteArrayType() || 1452 Index >= IList->getNumInits()) 1453 return; 1454 1455 if (CheckFlexibleArrayInit(Entity, IList->getInit(Index), *Field, 1456 TopLevelObject)) { 1457 hadError = true; 1458 ++Index; 1459 return; 1460 } 1461 1462 InitializedEntity MemberEntity = 1463 InitializedEntity::InitializeMember(*Field, &Entity); 1464 1465 if (isa<InitListExpr>(IList->getInit(Index))) 1466 CheckSubElementType(MemberEntity, IList, Field->getType(), Index, 1467 StructuredList, StructuredIndex); 1468 else 1469 CheckImplicitInitList(MemberEntity, IList, Field->getType(), Index, 1470 StructuredList, StructuredIndex); 1471 } 1472 1473 /// \brief Expand a field designator that refers to a member of an 1474 /// anonymous struct or union into a series of field designators that 1475 /// refers to the field within the appropriate subobject. 1476 /// 1477 static void ExpandAnonymousFieldDesignator(Sema &SemaRef, 1478 DesignatedInitExpr *DIE, 1479 unsigned DesigIdx, 1480 IndirectFieldDecl *IndirectField) { 1481 typedef DesignatedInitExpr::Designator Designator; 1482 1483 // Build the replacement designators. 1484 SmallVector<Designator, 4> Replacements; 1485 for (IndirectFieldDecl::chain_iterator PI = IndirectField->chain_begin(), 1486 PE = IndirectField->chain_end(); PI != PE; ++PI) { 1487 if (PI + 1 == PE) 1488 Replacements.push_back(Designator((IdentifierInfo *)0, 1489 DIE->getDesignator(DesigIdx)->getDotLoc(), 1490 DIE->getDesignator(DesigIdx)->getFieldLoc())); 1491 else 1492 Replacements.push_back(Designator((IdentifierInfo *)0, SourceLocation(), 1493 SourceLocation())); 1494 assert(isa<FieldDecl>(*PI)); 1495 Replacements.back().setField(cast<FieldDecl>(*PI)); 1496 } 1497 1498 // Expand the current designator into the set of replacement 1499 // designators, so we have a full subobject path down to where the 1500 // member of the anonymous struct/union is actually stored. 1501 DIE->ExpandDesignator(SemaRef.Context, DesigIdx, &Replacements[0], 1502 &Replacements[0] + Replacements.size()); 1503 } 1504 1505 /// \brief Given an implicit anonymous field, search the IndirectField that 1506 /// corresponds to FieldName. 1507 static IndirectFieldDecl *FindIndirectFieldDesignator(FieldDecl *AnonField, 1508 IdentifierInfo *FieldName) { 1509 assert(AnonField->isAnonymousStructOrUnion()); 1510 Decl *NextDecl = AnonField->getNextDeclInContext(); 1511 while (IndirectFieldDecl *IF = dyn_cast<IndirectFieldDecl>(NextDecl)) { 1512 if (FieldName && FieldName == IF->getAnonField()->getIdentifier()) 1513 return IF; 1514 NextDecl = NextDecl->getNextDeclInContext(); 1515 } 1516 return 0; 1517 } 1518 1519 static DesignatedInitExpr *CloneDesignatedInitExpr(Sema &SemaRef, 1520 DesignatedInitExpr *DIE) { 1521 unsigned NumIndexExprs = DIE->getNumSubExprs() - 1; 1522 SmallVector<Expr*, 4> IndexExprs(NumIndexExprs); 1523 for (unsigned I = 0; I < NumIndexExprs; ++I) 1524 IndexExprs[I] = DIE->getSubExpr(I + 1); 1525 return DesignatedInitExpr::Create(SemaRef.Context, DIE->designators_begin(), 1526 DIE->size(), IndexExprs.data(), 1527 NumIndexExprs, DIE->getEqualOrColonLoc(), 1528 DIE->usesGNUSyntax(), DIE->getInit()); 1529 } 1530 1531 /// @brief Check the well-formedness of a C99 designated initializer. 1532 /// 1533 /// Determines whether the designated initializer @p DIE, which 1534 /// resides at the given @p Index within the initializer list @p 1535 /// IList, is well-formed for a current object of type @p DeclType 1536 /// (C99 6.7.8). The actual subobject that this designator refers to 1537 /// within the current subobject is returned in either 1538 /// @p NextField or @p NextElementIndex (whichever is appropriate). 1539 /// 1540 /// @param IList The initializer list in which this designated 1541 /// initializer occurs. 1542 /// 1543 /// @param DIE The designated initializer expression. 1544 /// 1545 /// @param DesigIdx The index of the current designator. 1546 /// 1547 /// @param DeclType The type of the "current object" (C99 6.7.8p17), 1548 /// into which the designation in @p DIE should refer. 1549 /// 1550 /// @param NextField If non-NULL and the first designator in @p DIE is 1551 /// a field, this will be set to the field declaration corresponding 1552 /// to the field named by the designator. 1553 /// 1554 /// @param NextElementIndex If non-NULL and the first designator in @p 1555 /// DIE is an array designator or GNU array-range designator, this 1556 /// will be set to the last index initialized by this designator. 1557 /// 1558 /// @param Index Index into @p IList where the designated initializer 1559 /// @p DIE occurs. 1560 /// 1561 /// @param StructuredList The initializer list expression that 1562 /// describes all of the subobject initializers in the order they'll 1563 /// actually be initialized. 1564 /// 1565 /// @returns true if there was an error, false otherwise. 1566 bool 1567 InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, 1568 InitListExpr *IList, 1569 DesignatedInitExpr *DIE, 1570 unsigned DesigIdx, 1571 QualType &CurrentObjectType, 1572 RecordDecl::field_iterator *NextField, 1573 llvm::APSInt *NextElementIndex, 1574 unsigned &Index, 1575 InitListExpr *StructuredList, 1576 unsigned &StructuredIndex, 1577 bool FinishSubobjectInit, 1578 bool TopLevelObject) { 1579 if (DesigIdx == DIE->size()) { 1580 // Check the actual initialization for the designated object type. 1581 bool prevHadError = hadError; 1582 1583 // Temporarily remove the designator expression from the 1584 // initializer list that the child calls see, so that we don't try 1585 // to re-process the designator. 1586 unsigned OldIndex = Index; 1587 IList->setInit(OldIndex, DIE->getInit()); 1588 1589 CheckSubElementType(Entity, IList, CurrentObjectType, Index, 1590 StructuredList, StructuredIndex); 1591 1592 // Restore the designated initializer expression in the syntactic 1593 // form of the initializer list. 1594 if (IList->getInit(OldIndex) != DIE->getInit()) 1595 DIE->setInit(IList->getInit(OldIndex)); 1596 IList->setInit(OldIndex, DIE); 1597 1598 return hadError && !prevHadError; 1599 } 1600 1601 DesignatedInitExpr::Designator *D = DIE->getDesignator(DesigIdx); 1602 bool IsFirstDesignator = (DesigIdx == 0); 1603 if (!VerifyOnly) { 1604 assert((IsFirstDesignator || StructuredList) && 1605 "Need a non-designated initializer list to start from"); 1606 1607 // Determine the structural initializer list that corresponds to the 1608 // current subobject. 1609 StructuredList = IsFirstDesignator? SyntacticToSemantic[IList] 1610 : getStructuredSubobjectInit(IList, Index, CurrentObjectType, 1611 StructuredList, StructuredIndex, 1612 SourceRange(D->getStartLocation(), 1613 DIE->getSourceRange().getEnd())); 1614 assert(StructuredList && "Expected a structured initializer list"); 1615 } 1616 1617 if (D->isFieldDesignator()) { 1618 // C99 6.7.8p7: 1619 // 1620 // If a designator has the form 1621 // 1622 // . identifier 1623 // 1624 // then the current object (defined below) shall have 1625 // structure or union type and the identifier shall be the 1626 // name of a member of that type. 1627 const RecordType *RT = CurrentObjectType->getAs<RecordType>(); 1628 if (!RT) { 1629 SourceLocation Loc = D->getDotLoc(); 1630 if (Loc.isInvalid()) 1631 Loc = D->getFieldLoc(); 1632 if (!VerifyOnly) 1633 SemaRef.Diag(Loc, diag::err_field_designator_non_aggr) 1634 << SemaRef.getLangOptions().CPlusPlus << CurrentObjectType; 1635 ++Index; 1636 return true; 1637 } 1638 1639 // Note: we perform a linear search of the fields here, despite 1640 // the fact that we have a faster lookup method, because we always 1641 // need to compute the field's index. 1642 FieldDecl *KnownField = D->getField(); 1643 IdentifierInfo *FieldName = D->getFieldName(); 1644 unsigned FieldIndex = 0; 1645 RecordDecl::field_iterator 1646 Field = RT->getDecl()->field_begin(), 1647 FieldEnd = RT->getDecl()->field_end(); 1648 for (; Field != FieldEnd; ++Field) { 1649 if (Field->isUnnamedBitfield()) 1650 continue; 1651 1652 // If we find a field representing an anonymous field, look in the 1653 // IndirectFieldDecl that follow for the designated initializer. 1654 if (!KnownField && Field->isAnonymousStructOrUnion()) { 1655 if (IndirectFieldDecl *IF = 1656 FindIndirectFieldDesignator(*Field, FieldName)) { 1657 // In verify mode, don't modify the original. 1658 if (VerifyOnly) 1659 DIE = CloneDesignatedInitExpr(SemaRef, DIE); 1660 ExpandAnonymousFieldDesignator(SemaRef, DIE, DesigIdx, IF); 1661 D = DIE->getDesignator(DesigIdx); 1662 break; 1663 } 1664 } 1665 if (KnownField && KnownField == *Field) 1666 break; 1667 if (FieldName && FieldName == Field->getIdentifier()) 1668 break; 1669 1670 ++FieldIndex; 1671 } 1672 1673 if (Field == FieldEnd) { 1674 if (VerifyOnly) { 1675 ++Index; 1676 return true; // No typo correction when just trying this out. 1677 } 1678 1679 // There was no normal field in the struct with the designated 1680 // name. Perform another lookup for this name, which may find 1681 // something that we can't designate (e.g., a member function), 1682 // may find nothing, or may find a member of an anonymous 1683 // struct/union. 1684 DeclContext::lookup_result Lookup = RT->getDecl()->lookup(FieldName); 1685 FieldDecl *ReplacementField = 0; 1686 if (Lookup.first == Lookup.second) { 1687 // Name lookup didn't find anything. Determine whether this 1688 // was a typo for another field name. 1689 LookupResult R(SemaRef, FieldName, D->getFieldLoc(), 1690 Sema::LookupMemberName); 1691 TypoCorrection Corrected = SemaRef.CorrectTypo( 1692 DeclarationNameInfo(FieldName, D->getFieldLoc()), 1693 Sema::LookupMemberName, /*Scope=*/NULL, /*SS=*/NULL, 1694 RT->getDecl(), false, Sema::CTC_NoKeywords); 1695 if ((ReplacementField = Corrected.getCorrectionDeclAs<FieldDecl>()) && 1696 ReplacementField->getDeclContext()->getRedeclContext() 1697 ->Equals(RT->getDecl())) { 1698 std::string CorrectedStr( 1699 Corrected.getAsString(SemaRef.getLangOptions())); 1700 std::string CorrectedQuotedStr( 1701 Corrected.getQuoted(SemaRef.getLangOptions())); 1702 SemaRef.Diag(D->getFieldLoc(), 1703 diag::err_field_designator_unknown_suggest) 1704 << FieldName << CurrentObjectType << CorrectedQuotedStr 1705 << FixItHint::CreateReplacement(D->getFieldLoc(), CorrectedStr); 1706 SemaRef.Diag(ReplacementField->getLocation(), 1707 diag::note_previous_decl) << CorrectedQuotedStr; 1708 hadError = true; 1709 } else { 1710 SemaRef.Diag(D->getFieldLoc(), diag::err_field_designator_unknown) 1711 << FieldName << CurrentObjectType; 1712 ++Index; 1713 return true; 1714 } 1715 } 1716 1717 if (!ReplacementField) { 1718 // Name lookup found something, but it wasn't a field. 1719 SemaRef.Diag(D->getFieldLoc(), diag::err_field_designator_nonfield) 1720 << FieldName; 1721 SemaRef.Diag((*Lookup.first)->getLocation(), 1722 diag::note_field_designator_found); 1723 ++Index; 1724 return true; 1725 } 1726 1727 if (!KnownField) { 1728 // The replacement field comes from typo correction; find it 1729 // in the list of fields. 1730 FieldIndex = 0; 1731 Field = RT->getDecl()->field_begin(); 1732 for (; Field != FieldEnd; ++Field) { 1733 if (Field->isUnnamedBitfield()) 1734 continue; 1735 1736 if (ReplacementField == *Field || 1737 Field->getIdentifier() == ReplacementField->getIdentifier()) 1738 break; 1739 1740 ++FieldIndex; 1741 } 1742 } 1743 } 1744 1745 // All of the fields of a union are located at the same place in 1746 // the initializer list. 1747 if (RT->getDecl()->isUnion()) { 1748 FieldIndex = 0; 1749 if (!VerifyOnly) 1750 StructuredList->setInitializedFieldInUnion(*Field); 1751 } 1752 1753 // Make sure we can use this declaration. 1754 bool InvalidUse; 1755 if (VerifyOnly) 1756 InvalidUse = !SemaRef.CanUseDecl(*Field); 1757 else 1758 InvalidUse = SemaRef.DiagnoseUseOfDecl(*Field, D->getFieldLoc()); 1759 if (InvalidUse) { 1760 ++Index; 1761 return true; 1762 } 1763 1764 if (!VerifyOnly) { 1765 // Update the designator with the field declaration. 1766 D->setField(*Field); 1767 1768 // Make sure that our non-designated initializer list has space 1769 // for a subobject corresponding to this field. 1770 if (FieldIndex >= StructuredList->getNumInits()) 1771 StructuredList->resizeInits(SemaRef.Context, FieldIndex + 1); 1772 } 1773 1774 // This designator names a flexible array member. 1775 if (Field->getType()->isIncompleteArrayType()) { 1776 bool Invalid = false; 1777 if ((DesigIdx + 1) != DIE->size()) { 1778 // We can't designate an object within the flexible array 1779 // member (because GCC doesn't allow it). 1780 if (!VerifyOnly) { 1781 DesignatedInitExpr::Designator *NextD 1782 = DIE->getDesignator(DesigIdx + 1); 1783 SemaRef.Diag(NextD->getStartLocation(), 1784 diag::err_designator_into_flexible_array_member) 1785 << SourceRange(NextD->getStartLocation(), 1786 DIE->getSourceRange().getEnd()); 1787 SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) 1788 << *Field; 1789 } 1790 Invalid = true; 1791 } 1792 1793 if (!hadError && !isa<InitListExpr>(DIE->getInit()) && 1794 !isa<StringLiteral>(DIE->getInit())) { 1795 // The initializer is not an initializer list. 1796 if (!VerifyOnly) { 1797 SemaRef.Diag(DIE->getInit()->getSourceRange().getBegin(), 1798 diag::err_flexible_array_init_needs_braces) 1799 << DIE->getInit()->getSourceRange(); 1800 SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) 1801 << *Field; 1802 } 1803 Invalid = true; 1804 } 1805 1806 // Check GNU flexible array initializer. 1807 if (!Invalid && CheckFlexibleArrayInit(Entity, DIE->getInit(), *Field, 1808 TopLevelObject)) 1809 Invalid = true; 1810 1811 if (Invalid) { 1812 ++Index; 1813 return true; 1814 } 1815 1816 // Initialize the array. 1817 bool prevHadError = hadError; 1818 unsigned newStructuredIndex = FieldIndex; 1819 unsigned OldIndex = Index; 1820 IList->setInit(Index, DIE->getInit()); 1821 1822 InitializedEntity MemberEntity = 1823 InitializedEntity::InitializeMember(*Field, &Entity); 1824 CheckSubElementType(MemberEntity, IList, Field->getType(), Index, 1825 StructuredList, newStructuredIndex); 1826 1827 IList->setInit(OldIndex, DIE); 1828 if (hadError && !prevHadError) { 1829 ++Field; 1830 ++FieldIndex; 1831 if (NextField) 1832 *NextField = Field; 1833 StructuredIndex = FieldIndex; 1834 return true; 1835 } 1836 } else { 1837 // Recurse to check later designated subobjects. 1838 QualType FieldType = (*Field)->getType(); 1839 unsigned newStructuredIndex = FieldIndex; 1840 1841 InitializedEntity MemberEntity = 1842 InitializedEntity::InitializeMember(*Field, &Entity); 1843 if (CheckDesignatedInitializer(MemberEntity, IList, DIE, DesigIdx + 1, 1844 FieldType, 0, 0, Index, 1845 StructuredList, newStructuredIndex, 1846 true, false)) 1847 return true; 1848 } 1849 1850 // Find the position of the next field to be initialized in this 1851 // subobject. 1852 ++Field; 1853 ++FieldIndex; 1854 1855 // If this the first designator, our caller will continue checking 1856 // the rest of this struct/class/union subobject. 1857 if (IsFirstDesignator) { 1858 if (NextField) 1859 *NextField = Field; 1860 StructuredIndex = FieldIndex; 1861 return false; 1862 } 1863 1864 if (!FinishSubobjectInit) 1865 return false; 1866 1867 // We've already initialized something in the union; we're done. 1868 if (RT->getDecl()->isUnion()) 1869 return hadError; 1870 1871 // Check the remaining fields within this class/struct/union subobject. 1872 bool prevHadError = hadError; 1873 1874 CheckStructUnionTypes(Entity, IList, CurrentObjectType, Field, false, Index, 1875 StructuredList, FieldIndex); 1876 return hadError && !prevHadError; 1877 } 1878 1879 // C99 6.7.8p6: 1880 // 1881 // If a designator has the form 1882 // 1883 // [ constant-expression ] 1884 // 1885 // then the current object (defined below) shall have array 1886 // type and the expression shall be an integer constant 1887 // expression. If the array is of unknown size, any 1888 // nonnegative value is valid. 1889 // 1890 // Additionally, cope with the GNU extension that permits 1891 // designators of the form 1892 // 1893 // [ constant-expression ... constant-expression ] 1894 const ArrayType *AT = SemaRef.Context.getAsArrayType(CurrentObjectType); 1895 if (!AT) { 1896 if (!VerifyOnly) 1897 SemaRef.Diag(D->getLBracketLoc(), diag::err_array_designator_non_array) 1898 << CurrentObjectType; 1899 ++Index; 1900 return true; 1901 } 1902 1903 Expr *IndexExpr = 0; 1904 llvm::APSInt DesignatedStartIndex, DesignatedEndIndex; 1905 if (D->isArrayDesignator()) { 1906 IndexExpr = DIE->getArrayIndex(*D); 1907 DesignatedStartIndex = IndexExpr->EvaluateKnownConstInt(SemaRef.Context); 1908 DesignatedEndIndex = DesignatedStartIndex; 1909 } else { 1910 assert(D->isArrayRangeDesignator() && "Need array-range designator"); 1911 1912 DesignatedStartIndex = 1913 DIE->getArrayRangeStart(*D)->EvaluateKnownConstInt(SemaRef.Context); 1914 DesignatedEndIndex = 1915 DIE->getArrayRangeEnd(*D)->EvaluateKnownConstInt(SemaRef.Context); 1916 IndexExpr = DIE->getArrayRangeEnd(*D); 1917 1918 // Codegen can't handle evaluating array range designators that have side 1919 // effects, because we replicate the AST value for each initialized element. 1920 // As such, set the sawArrayRangeDesignator() bit if we initialize multiple 1921 // elements with something that has a side effect, so codegen can emit an 1922 // "error unsupported" error instead of miscompiling the app. 1923 if (DesignatedStartIndex.getZExtValue()!=DesignatedEndIndex.getZExtValue()&& 1924 DIE->getInit()->HasSideEffects(SemaRef.Context) && !VerifyOnly) 1925 FullyStructuredList->sawArrayRangeDesignator(); 1926 } 1927 1928 if (isa<ConstantArrayType>(AT)) { 1929 llvm::APSInt MaxElements(cast<ConstantArrayType>(AT)->getSize(), false); 1930 DesignatedStartIndex 1931 = DesignatedStartIndex.extOrTrunc(MaxElements.getBitWidth()); 1932 DesignatedStartIndex.setIsUnsigned(MaxElements.isUnsigned()); 1933 DesignatedEndIndex 1934 = DesignatedEndIndex.extOrTrunc(MaxElements.getBitWidth()); 1935 DesignatedEndIndex.setIsUnsigned(MaxElements.isUnsigned()); 1936 if (DesignatedEndIndex >= MaxElements) { 1937 if (!VerifyOnly) 1938 SemaRef.Diag(IndexExpr->getSourceRange().getBegin(), 1939 diag::err_array_designator_too_large) 1940 << DesignatedEndIndex.toString(10) << MaxElements.toString(10) 1941 << IndexExpr->getSourceRange(); 1942 ++Index; 1943 return true; 1944 } 1945 } else { 1946 // Make sure the bit-widths and signedness match. 1947 if (DesignatedStartIndex.getBitWidth() > DesignatedEndIndex.getBitWidth()) 1948 DesignatedEndIndex 1949 = DesignatedEndIndex.extend(DesignatedStartIndex.getBitWidth()); 1950 else if (DesignatedStartIndex.getBitWidth() < 1951 DesignatedEndIndex.getBitWidth()) 1952 DesignatedStartIndex 1953 = DesignatedStartIndex.extend(DesignatedEndIndex.getBitWidth()); 1954 DesignatedStartIndex.setIsUnsigned(true); 1955 DesignatedEndIndex.setIsUnsigned(true); 1956 } 1957 1958 // Make sure that our non-designated initializer list has space 1959 // for a subobject corresponding to this array element. 1960 if (!VerifyOnly && 1961 DesignatedEndIndex.getZExtValue() >= StructuredList->getNumInits()) 1962 StructuredList->resizeInits(SemaRef.Context, 1963 DesignatedEndIndex.getZExtValue() + 1); 1964 1965 // Repeatedly perform subobject initializations in the range 1966 // [DesignatedStartIndex, DesignatedEndIndex]. 1967 1968 // Move to the next designator 1969 unsigned ElementIndex = DesignatedStartIndex.getZExtValue(); 1970 unsigned OldIndex = Index; 1971 1972 InitializedEntity ElementEntity = 1973 InitializedEntity::InitializeElement(SemaRef.Context, 0, Entity); 1974 1975 while (DesignatedStartIndex <= DesignatedEndIndex) { 1976 // Recurse to check later designated subobjects. 1977 QualType ElementType = AT->getElementType(); 1978 Index = OldIndex; 1979 1980 ElementEntity.setElementIndex(ElementIndex); 1981 if (CheckDesignatedInitializer(ElementEntity, IList, DIE, DesigIdx + 1, 1982 ElementType, 0, 0, Index, 1983 StructuredList, ElementIndex, 1984 (DesignatedStartIndex == DesignatedEndIndex), 1985 false)) 1986 return true; 1987 1988 // Move to the next index in the array that we'll be initializing. 1989 ++DesignatedStartIndex; 1990 ElementIndex = DesignatedStartIndex.getZExtValue(); 1991 } 1992 1993 // If this the first designator, our caller will continue checking 1994 // the rest of this array subobject. 1995 if (IsFirstDesignator) { 1996 if (NextElementIndex) 1997 *NextElementIndex = DesignatedStartIndex; 1998 StructuredIndex = ElementIndex; 1999 return false; 2000 } 2001 2002 if (!FinishSubobjectInit) 2003 return false; 2004 2005 // Check the remaining elements within this array subobject. 2006 bool prevHadError = hadError; 2007 CheckArrayType(Entity, IList, CurrentObjectType, DesignatedStartIndex, 2008 /*SubobjectIsDesignatorContext=*/false, Index, 2009 StructuredList, ElementIndex); 2010 return hadError && !prevHadError; 2011 } 2012 2013 // Get the structured initializer list for a subobject of type 2014 // @p CurrentObjectType. 2015 InitListExpr * 2016 InitListChecker::getStructuredSubobjectInit(InitListExpr *IList, unsigned Index, 2017 QualType CurrentObjectType, 2018 InitListExpr *StructuredList, 2019 unsigned StructuredIndex, 2020 SourceRange InitRange) { 2021 if (VerifyOnly) 2022 return 0; // No structured list in verification-only mode. 2023 Expr *ExistingInit = 0; 2024 if (!StructuredList) 2025 ExistingInit = SyntacticToSemantic[IList]; 2026 else if (StructuredIndex < StructuredList->getNumInits()) 2027 ExistingInit = StructuredList->getInit(StructuredIndex); 2028 2029 if (InitListExpr *Result = dyn_cast_or_null<InitListExpr>(ExistingInit)) 2030 return Result; 2031 2032 if (ExistingInit) { 2033 // We are creating an initializer list that initializes the 2034 // subobjects of the current object, but there was already an 2035 // initialization that completely initialized the current 2036 // subobject, e.g., by a compound literal: 2037 // 2038 // struct X { int a, b; }; 2039 // struct X xs[] = { [0] = (struct X) { 1, 2 }, [0].b = 3 }; 2040 // 2041 // Here, xs[0].a == 0 and xs[0].b == 3, since the second, 2042 // designated initializer re-initializes the whole 2043 // subobject [0], overwriting previous initializers. 2044 SemaRef.Diag(InitRange.getBegin(), 2045 diag::warn_subobject_initializer_overrides) 2046 << InitRange; 2047 SemaRef.Diag(ExistingInit->getSourceRange().getBegin(), 2048 diag::note_previous_initializer) 2049 << /*FIXME:has side effects=*/0 2050 << ExistingInit->getSourceRange(); 2051 } 2052 2053 InitListExpr *Result 2054 = new (SemaRef.Context) InitListExpr(SemaRef.Context, 2055 InitRange.getBegin(), 0, 0, 2056 InitRange.getEnd()); 2057 2058 Result->setType(CurrentObjectType.getNonLValueExprType(SemaRef.Context)); 2059 2060 // Pre-allocate storage for the structured initializer list. 2061 unsigned NumElements = 0; 2062 unsigned NumInits = 0; 2063 bool GotNumInits = false; 2064 if (!StructuredList) { 2065 NumInits = IList->getNumInits(); 2066 GotNumInits = true; 2067 } else if (Index < IList->getNumInits()) { 2068 if (InitListExpr *SubList = dyn_cast<InitListExpr>(IList->getInit(Index))) { 2069 NumInits = SubList->getNumInits(); 2070 GotNumInits = true; 2071 } 2072 } 2073 2074 if (const ArrayType *AType 2075 = SemaRef.Context.getAsArrayType(CurrentObjectType)) { 2076 if (const ConstantArrayType *CAType = dyn_cast<ConstantArrayType>(AType)) { 2077 NumElements = CAType->getSize().getZExtValue(); 2078 // Simple heuristic so that we don't allocate a very large 2079 // initializer with many empty entries at the end. 2080 if (GotNumInits && NumElements > NumInits) 2081 NumElements = 0; 2082 } 2083 } else if (const VectorType *VType = CurrentObjectType->getAs<VectorType>()) 2084 NumElements = VType->getNumElements(); 2085 else if (const RecordType *RType = CurrentObjectType->getAs<RecordType>()) { 2086 RecordDecl *RDecl = RType->getDecl(); 2087 if (RDecl->isUnion()) 2088 NumElements = 1; 2089 else 2090 NumElements = std::distance(RDecl->field_begin(), 2091 RDecl->field_end()); 2092 } 2093 2094 Result->reserveInits(SemaRef.Context, NumElements); 2095 2096 // Link this new initializer list into the structured initializer 2097 // lists. 2098 if (StructuredList) 2099 StructuredList->updateInit(SemaRef.Context, StructuredIndex, Result); 2100 else { 2101 Result->setSyntacticForm(IList); 2102 SyntacticToSemantic[IList] = Result; 2103 } 2104 2105 return Result; 2106 } 2107 2108 /// Update the initializer at index @p StructuredIndex within the 2109 /// structured initializer list to the value @p expr. 2110 void InitListChecker::UpdateStructuredListElement(InitListExpr *StructuredList, 2111 unsigned &StructuredIndex, 2112 Expr *expr) { 2113 // No structured initializer list to update 2114 if (!StructuredList) 2115 return; 2116 2117 if (Expr *PrevInit = StructuredList->updateInit(SemaRef.Context, 2118 StructuredIndex, expr)) { 2119 // This initializer overwrites a previous initializer. Warn. 2120 SemaRef.Diag(expr->getSourceRange().getBegin(), 2121 diag::warn_initializer_overrides) 2122 << expr->getSourceRange(); 2123 SemaRef.Diag(PrevInit->getSourceRange().getBegin(), 2124 diag::note_previous_initializer) 2125 << /*FIXME:has side effects=*/0 2126 << PrevInit->getSourceRange(); 2127 } 2128 2129 ++StructuredIndex; 2130 } 2131 2132 /// Check that the given Index expression is a valid array designator 2133 /// value. This is essentailly just a wrapper around 2134 /// VerifyIntegerConstantExpression that also checks for negative values 2135 /// and produces a reasonable diagnostic if there is a 2136 /// failure. Returns true if there was an error, false otherwise. If 2137 /// everything went okay, Value will receive the value of the constant 2138 /// expression. 2139 static bool 2140 CheckArrayDesignatorExpr(Sema &S, Expr *Index, llvm::APSInt &Value) { 2141 SourceLocation Loc = Index->getSourceRange().getBegin(); 2142 2143 // Make sure this is an integer constant expression. 2144 if (S.VerifyIntegerConstantExpression(Index, &Value)) 2145 return true; 2146 2147 if (Value.isSigned() && Value.isNegative()) 2148 return S.Diag(Loc, diag::err_array_designator_negative) 2149 << Value.toString(10) << Index->getSourceRange(); 2150 2151 Value.setIsUnsigned(true); 2152 return false; 2153 } 2154 2155 ExprResult Sema::ActOnDesignatedInitializer(Designation &Desig, 2156 SourceLocation Loc, 2157 bool GNUSyntax, 2158 ExprResult Init) { 2159 typedef DesignatedInitExpr::Designator ASTDesignator; 2160 2161 bool Invalid = false; 2162 SmallVector<ASTDesignator, 32> Designators; 2163 SmallVector<Expr *, 32> InitExpressions; 2164 2165 // Build designators and check array designator expressions. 2166 for (unsigned Idx = 0; Idx < Desig.getNumDesignators(); ++Idx) { 2167 const Designator &D = Desig.getDesignator(Idx); 2168 switch (D.getKind()) { 2169 case Designator::FieldDesignator: 2170 Designators.push_back(ASTDesignator(D.getField(), D.getDotLoc(), 2171 D.getFieldLoc())); 2172 break; 2173 2174 case Designator::ArrayDesignator: { 2175 Expr *Index = static_cast<Expr *>(D.getArrayIndex()); 2176 llvm::APSInt IndexValue; 2177 if (!Index->isTypeDependent() && 2178 !Index->isValueDependent() && 2179 CheckArrayDesignatorExpr(*this, Index, IndexValue)) 2180 Invalid = true; 2181 else { 2182 Designators.push_back(ASTDesignator(InitExpressions.size(), 2183 D.getLBracketLoc(), 2184 D.getRBracketLoc())); 2185 InitExpressions.push_back(Index); 2186 } 2187 break; 2188 } 2189 2190 case Designator::ArrayRangeDesignator: { 2191 Expr *StartIndex = static_cast<Expr *>(D.getArrayRangeStart()); 2192 Expr *EndIndex = static_cast<Expr *>(D.getArrayRangeEnd()); 2193 llvm::APSInt StartValue; 2194 llvm::APSInt EndValue; 2195 bool StartDependent = StartIndex->isTypeDependent() || 2196 StartIndex->isValueDependent(); 2197 bool EndDependent = EndIndex->isTypeDependent() || 2198 EndIndex->isValueDependent(); 2199 if ((!StartDependent && 2200 CheckArrayDesignatorExpr(*this, StartIndex, StartValue)) || 2201 (!EndDependent && 2202 CheckArrayDesignatorExpr(*this, EndIndex, EndValue))) 2203 Invalid = true; 2204 else { 2205 // Make sure we're comparing values with the same bit width. 2206 if (StartDependent || EndDependent) { 2207 // Nothing to compute. 2208 } else if (StartValue.getBitWidth() > EndValue.getBitWidth()) 2209 EndValue = EndValue.extend(StartValue.getBitWidth()); 2210 else if (StartValue.getBitWidth() < EndValue.getBitWidth()) 2211 StartValue = StartValue.extend(EndValue.getBitWidth()); 2212 2213 if (!StartDependent && !EndDependent && EndValue < StartValue) { 2214 Diag(D.getEllipsisLoc(), diag::err_array_designator_empty_range) 2215 << StartValue.toString(10) << EndValue.toString(10) 2216 << StartIndex->getSourceRange() << EndIndex->getSourceRange(); 2217 Invalid = true; 2218 } else { 2219 Designators.push_back(ASTDesignator(InitExpressions.size(), 2220 D.getLBracketLoc(), 2221 D.getEllipsisLoc(), 2222 D.getRBracketLoc())); 2223 InitExpressions.push_back(StartIndex); 2224 InitExpressions.push_back(EndIndex); 2225 } 2226 } 2227 break; 2228 } 2229 } 2230 } 2231 2232 if (Invalid || Init.isInvalid()) 2233 return ExprError(); 2234 2235 // Clear out the expressions within the designation. 2236 Desig.ClearExprs(*this); 2237 2238 DesignatedInitExpr *DIE 2239 = DesignatedInitExpr::Create(Context, 2240 Designators.data(), Designators.size(), 2241 InitExpressions.data(), InitExpressions.size(), 2242 Loc, GNUSyntax, Init.takeAs<Expr>()); 2243 2244 if (getLangOptions().CPlusPlus) 2245 Diag(DIE->getLocStart(), diag::ext_designated_init_cxx) 2246 << DIE->getSourceRange(); 2247 else if (!getLangOptions().C99) 2248 Diag(DIE->getLocStart(), diag::ext_designated_init) 2249 << DIE->getSourceRange(); 2250 2251 return Owned(DIE); 2252 } 2253 2254 //===----------------------------------------------------------------------===// 2255 // Initialization entity 2256 //===----------------------------------------------------------------------===// 2257 2258 InitializedEntity::InitializedEntity(ASTContext &Context, unsigned Index, 2259 const InitializedEntity &Parent) 2260 : Parent(&Parent), Index(Index) 2261 { 2262 if (const ArrayType *AT = Context.getAsArrayType(Parent.getType())) { 2263 Kind = EK_ArrayElement; 2264 Type = AT->getElementType(); 2265 } else if (const VectorType *VT = Parent.getType()->getAs<VectorType>()) { 2266 Kind = EK_VectorElement; 2267 Type = VT->getElementType(); 2268 } else { 2269 const ComplexType *CT = Parent.getType()->getAs<ComplexType>(); 2270 assert(CT && "Unexpected type"); 2271 Kind = EK_ComplexElement; 2272 Type = CT->getElementType(); 2273 } 2274 } 2275 2276 InitializedEntity InitializedEntity::InitializeBase(ASTContext &Context, 2277 CXXBaseSpecifier *Base, 2278 bool IsInheritedVirtualBase) 2279 { 2280 InitializedEntity Result; 2281 Result.Kind = EK_Base; 2282 Result.Base = reinterpret_cast<uintptr_t>(Base); 2283 if (IsInheritedVirtualBase) 2284 Result.Base |= 0x01; 2285 2286 Result.Type = Base->getType(); 2287 return Result; 2288 } 2289 2290 DeclarationName InitializedEntity::getName() const { 2291 switch (getKind()) { 2292 case EK_Parameter: { 2293 ParmVarDecl *D = reinterpret_cast<ParmVarDecl*>(Parameter & ~0x1); 2294 return (D ? D->getDeclName() : DeclarationName()); 2295 } 2296 2297 case EK_Variable: 2298 case EK_Member: 2299 return VariableOrMember->getDeclName(); 2300 2301 case EK_Result: 2302 case EK_Exception: 2303 case EK_New: 2304 case EK_Temporary: 2305 case EK_Base: 2306 case EK_Delegating: 2307 case EK_ArrayElement: 2308 case EK_VectorElement: 2309 case EK_ComplexElement: 2310 case EK_BlockElement: 2311 return DeclarationName(); 2312 } 2313 2314 // Silence GCC warning 2315 return DeclarationName(); 2316 } 2317 2318 DeclaratorDecl *InitializedEntity::getDecl() const { 2319 switch (getKind()) { 2320 case EK_Variable: 2321 case EK_Member: 2322 return VariableOrMember; 2323 2324 case EK_Parameter: 2325 return reinterpret_cast<ParmVarDecl*>(Parameter & ~0x1); 2326 2327 case EK_Result: 2328 case EK_Exception: 2329 case EK_New: 2330 case EK_Temporary: 2331 case EK_Base: 2332 case EK_Delegating: 2333 case EK_ArrayElement: 2334 case EK_VectorElement: 2335 case EK_ComplexElement: 2336 case EK_BlockElement: 2337 return 0; 2338 } 2339 2340 // Silence GCC warning 2341 return 0; 2342 } 2343 2344 bool InitializedEntity::allowsNRVO() const { 2345 switch (getKind()) { 2346 case EK_Result: 2347 case EK_Exception: 2348 return LocAndNRVO.NRVO; 2349 2350 case EK_Variable: 2351 case EK_Parameter: 2352 case EK_Member: 2353 case EK_New: 2354 case EK_Temporary: 2355 case EK_Base: 2356 case EK_Delegating: 2357 case EK_ArrayElement: 2358 case EK_VectorElement: 2359 case EK_ComplexElement: 2360 case EK_BlockElement: 2361 break; 2362 } 2363 2364 return false; 2365 } 2366 2367 //===----------------------------------------------------------------------===// 2368 // Initialization sequence 2369 //===----------------------------------------------------------------------===// 2370 2371 void InitializationSequence::Step::Destroy() { 2372 switch (Kind) { 2373 case SK_ResolveAddressOfOverloadedFunction: 2374 case SK_CastDerivedToBaseRValue: 2375 case SK_CastDerivedToBaseXValue: 2376 case SK_CastDerivedToBaseLValue: 2377 case SK_BindReference: 2378 case SK_BindReferenceToTemporary: 2379 case SK_ExtraneousCopyToTemporary: 2380 case SK_UserConversion: 2381 case SK_QualificationConversionRValue: 2382 case SK_QualificationConversionXValue: 2383 case SK_QualificationConversionLValue: 2384 case SK_ListInitialization: 2385 case SK_ListConstructorCall: 2386 case SK_ConstructorInitialization: 2387 case SK_ZeroInitialization: 2388 case SK_CAssignment: 2389 case SK_StringInit: 2390 case SK_ObjCObjectConversion: 2391 case SK_ArrayInit: 2392 case SK_PassByIndirectCopyRestore: 2393 case SK_PassByIndirectRestore: 2394 case SK_ProduceObjCObject: 2395 break; 2396 2397 case SK_ConversionSequence: 2398 delete ICS; 2399 } 2400 } 2401 2402 bool InitializationSequence::isDirectReferenceBinding() const { 2403 return !Steps.empty() && Steps.back().Kind == SK_BindReference; 2404 } 2405 2406 bool InitializationSequence::isAmbiguous() const { 2407 if (!Failed()) 2408 return false; 2409 2410 switch (getFailureKind()) { 2411 case FK_TooManyInitsForReference: 2412 case FK_ArrayNeedsInitList: 2413 case FK_ArrayNeedsInitListOrStringLiteral: 2414 case FK_AddressOfOverloadFailed: // FIXME: Could do better 2415 case FK_NonConstLValueReferenceBindingToTemporary: 2416 case FK_NonConstLValueReferenceBindingToUnrelated: 2417 case FK_RValueReferenceBindingToLValue: 2418 case FK_ReferenceInitDropsQualifiers: 2419 case FK_ReferenceInitFailed: 2420 case FK_ConversionFailed: 2421 case FK_ConversionFromPropertyFailed: 2422 case FK_TooManyInitsForScalar: 2423 case FK_ReferenceBindingToInitList: 2424 case FK_InitListBadDestinationType: 2425 case FK_DefaultInitOfConst: 2426 case FK_Incomplete: 2427 case FK_ArrayTypeMismatch: 2428 case FK_NonConstantArrayInit: 2429 case FK_ListInitializationFailed: 2430 case FK_PlaceholderType: 2431 return false; 2432 2433 case FK_ReferenceInitOverloadFailed: 2434 case FK_UserConversionOverloadFailed: 2435 case FK_ConstructorOverloadFailed: 2436 return FailedOverloadResult == OR_Ambiguous; 2437 } 2438 2439 return false; 2440 } 2441 2442 bool InitializationSequence::isConstructorInitialization() const { 2443 return !Steps.empty() && Steps.back().Kind == SK_ConstructorInitialization; 2444 } 2445 2446 bool InitializationSequence::endsWithNarrowing(ASTContext &Ctx, 2447 const Expr *Initializer, 2448 bool *isInitializerConstant, 2449 APValue *ConstantValue) const { 2450 if (Steps.empty() || Initializer->isValueDependent()) 2451 return false; 2452 2453 const Step &LastStep = Steps.back(); 2454 if (LastStep.Kind != SK_ConversionSequence) 2455 return false; 2456 2457 const ImplicitConversionSequence &ICS = *LastStep.ICS; 2458 const StandardConversionSequence *SCS = NULL; 2459 switch (ICS.getKind()) { 2460 case ImplicitConversionSequence::StandardConversion: 2461 SCS = &ICS.Standard; 2462 break; 2463 case ImplicitConversionSequence::UserDefinedConversion: 2464 SCS = &ICS.UserDefined.After; 2465 break; 2466 case ImplicitConversionSequence::AmbiguousConversion: 2467 case ImplicitConversionSequence::EllipsisConversion: 2468 case ImplicitConversionSequence::BadConversion: 2469 return false; 2470 } 2471 2472 // Check if SCS represents a narrowing conversion, according to C++0x 2473 // [dcl.init.list]p7: 2474 // 2475 // A narrowing conversion is an implicit conversion ... 2476 ImplicitConversionKind PossibleNarrowing = SCS->Second; 2477 QualType FromType = SCS->getToType(0); 2478 QualType ToType = SCS->getToType(1); 2479 switch (PossibleNarrowing) { 2480 // * from a floating-point type to an integer type, or 2481 // 2482 // * from an integer type or unscoped enumeration type to a floating-point 2483 // type, except where the source is a constant expression and the actual 2484 // value after conversion will fit into the target type and will produce 2485 // the original value when converted back to the original type, or 2486 case ICK_Floating_Integral: 2487 if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) { 2488 *isInitializerConstant = false; 2489 return true; 2490 } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) { 2491 llvm::APSInt IntConstantValue; 2492 if (Initializer && 2493 Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) { 2494 // Convert the integer to the floating type. 2495 llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType)); 2496 Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(), 2497 llvm::APFloat::rmNearestTiesToEven); 2498 // And back. 2499 llvm::APSInt ConvertedValue = IntConstantValue; 2500 bool ignored; 2501 Result.convertToInteger(ConvertedValue, 2502 llvm::APFloat::rmTowardZero, &ignored); 2503 // If the resulting value is different, this was a narrowing conversion. 2504 if (IntConstantValue != ConvertedValue) { 2505 *isInitializerConstant = true; 2506 *ConstantValue = APValue(IntConstantValue); 2507 return true; 2508 } 2509 } else { 2510 // Variables are always narrowings. 2511 *isInitializerConstant = false; 2512 return true; 2513 } 2514 } 2515 return false; 2516 2517 // * from long double to double or float, or from double to float, except 2518 // where the source is a constant expression and the actual value after 2519 // conversion is within the range of values that can be represented (even 2520 // if it cannot be represented exactly), or 2521 case ICK_Floating_Conversion: 2522 if (1 == Ctx.getFloatingTypeOrder(FromType, ToType)) { 2523 // FromType is larger than ToType. 2524 Expr::EvalResult InitializerValue; 2525 // FIXME: Check whether Initializer is a constant expression according 2526 // to C++0x [expr.const], rather than just whether it can be folded. 2527 if (Initializer->Evaluate(InitializerValue, Ctx) && 2528 !InitializerValue.HasSideEffects && InitializerValue.Val.isFloat()) { 2529 // Constant! (Except for FIXME above.) 2530 llvm::APFloat FloatVal = InitializerValue.Val.getFloat(); 2531 // Convert the source value into the target type. 2532 bool ignored; 2533 llvm::APFloat::opStatus ConvertStatus = FloatVal.convert( 2534 Ctx.getFloatTypeSemantics(ToType), 2535 llvm::APFloat::rmNearestTiesToEven, &ignored); 2536 // If there was no overflow, the source value is within the range of 2537 // values that can be represented. 2538 if (ConvertStatus & llvm::APFloat::opOverflow) { 2539 *isInitializerConstant = true; 2540 *ConstantValue = InitializerValue.Val; 2541 return true; 2542 } 2543 } else { 2544 *isInitializerConstant = false; 2545 return true; 2546 } 2547 } 2548 return false; 2549 2550 // * from an integer type or unscoped enumeration type to an integer type 2551 // that cannot represent all the values of the original type, except where 2552 // the source is a constant expression and the actual value after 2553 // conversion will fit into the target type and will produce the original 2554 // value when converted back to the original type. 2555 case ICK_Boolean_Conversion: // Bools are integers too. 2556 if (!FromType->isIntegralOrUnscopedEnumerationType()) { 2557 // Boolean conversions can be from pointers and pointers to members 2558 // [conv.bool], and those aren't considered narrowing conversions. 2559 return false; 2560 } // Otherwise, fall through to the integral case. 2561 case ICK_Integral_Conversion: { 2562 assert(FromType->isIntegralOrUnscopedEnumerationType()); 2563 assert(ToType->isIntegralOrUnscopedEnumerationType()); 2564 const bool FromSigned = FromType->isSignedIntegerOrEnumerationType(); 2565 const unsigned FromWidth = Ctx.getIntWidth(FromType); 2566 const bool ToSigned = ToType->isSignedIntegerOrEnumerationType(); 2567 const unsigned ToWidth = Ctx.getIntWidth(ToType); 2568 2569 if (FromWidth > ToWidth || 2570 (FromWidth == ToWidth && FromSigned != ToSigned)) { 2571 // Not all values of FromType can be represented in ToType. 2572 llvm::APSInt InitializerValue; 2573 if (Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) { 2574 *isInitializerConstant = true; 2575 *ConstantValue = APValue(InitializerValue); 2576 2577 // Add a bit to the InitializerValue so we don't have to worry about 2578 // signed vs. unsigned comparisons. 2579 InitializerValue = InitializerValue.extend( 2580 InitializerValue.getBitWidth() + 1); 2581 // Convert the initializer to and from the target width and signed-ness. 2582 llvm::APSInt ConvertedValue = InitializerValue; 2583 ConvertedValue = ConvertedValue.trunc(ToWidth); 2584 ConvertedValue.setIsSigned(ToSigned); 2585 ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth()); 2586 ConvertedValue.setIsSigned(InitializerValue.isSigned()); 2587 // If the result is different, this was a narrowing conversion. 2588 return ConvertedValue != InitializerValue; 2589 } else { 2590 // Variables are always narrowings. 2591 *isInitializerConstant = false; 2592 return true; 2593 } 2594 } 2595 return false; 2596 } 2597 2598 default: 2599 // Other kinds of conversions are not narrowings. 2600 return false; 2601 } 2602 } 2603 2604 void InitializationSequence::AddAddressOverloadResolutionStep( 2605 FunctionDecl *Function, 2606 DeclAccessPair Found) { 2607 Step S; 2608 S.Kind = SK_ResolveAddressOfOverloadedFunction; 2609 S.Type = Function->getType(); 2610 S.Function.HadMultipleCandidates = false; 2611 S.Function.Function = Function; 2612 S.Function.FoundDecl = Found; 2613 Steps.push_back(S); 2614 } 2615 2616 void InitializationSequence::AddDerivedToBaseCastStep(QualType BaseType, 2617 ExprValueKind VK) { 2618 Step S; 2619 switch (VK) { 2620 case VK_RValue: S.Kind = SK_CastDerivedToBaseRValue; break; 2621 case VK_XValue: S.Kind = SK_CastDerivedToBaseXValue; break; 2622 case VK_LValue: S.Kind = SK_CastDerivedToBaseLValue; break; 2623 default: llvm_unreachable("No such category"); 2624 } 2625 S.Type = BaseType; 2626 Steps.push_back(S); 2627 } 2628 2629 void InitializationSequence::AddReferenceBindingStep(QualType T, 2630 bool BindingTemporary) { 2631 Step S; 2632 S.Kind = BindingTemporary? SK_BindReferenceToTemporary : SK_BindReference; 2633 S.Type = T; 2634 Steps.push_back(S); 2635 } 2636 2637 void InitializationSequence::AddExtraneousCopyToTemporary(QualType T) { 2638 Step S; 2639 S.Kind = SK_ExtraneousCopyToTemporary; 2640 S.Type = T; 2641 Steps.push_back(S); 2642 } 2643 2644 void InitializationSequence::AddUserConversionStep(FunctionDecl *Function, 2645 DeclAccessPair FoundDecl, 2646 QualType T) { 2647 Step S; 2648 S.Kind = SK_UserConversion; 2649 S.Type = T; 2650 S.Function.HadMultipleCandidates = false; 2651 S.Function.Function = Function; 2652 S.Function.FoundDecl = FoundDecl; 2653 Steps.push_back(S); 2654 } 2655 2656 void InitializationSequence::AddQualificationConversionStep(QualType Ty, 2657 ExprValueKind VK) { 2658 Step S; 2659 S.Kind = SK_QualificationConversionRValue; // work around a gcc warning 2660 switch (VK) { 2661 case VK_RValue: 2662 S.Kind = SK_QualificationConversionRValue; 2663 break; 2664 case VK_XValue: 2665 S.Kind = SK_QualificationConversionXValue; 2666 break; 2667 case VK_LValue: 2668 S.Kind = SK_QualificationConversionLValue; 2669 break; 2670 } 2671 S.Type = Ty; 2672 Steps.push_back(S); 2673 } 2674 2675 void InitializationSequence::AddConversionSequenceStep( 2676 const ImplicitConversionSequence &ICS, 2677 QualType T) { 2678 Step S; 2679 S.Kind = SK_ConversionSequence; 2680 S.Type = T; 2681 S.ICS = new ImplicitConversionSequence(ICS); 2682 Steps.push_back(S); 2683 } 2684 2685 void InitializationSequence::AddListInitializationStep(QualType T) { 2686 Step S; 2687 S.Kind = SK_ListInitialization; 2688 S.Type = T; 2689 Steps.push_back(S); 2690 } 2691 2692 void 2693 InitializationSequence::AddConstructorInitializationStep( 2694 CXXConstructorDecl *Constructor, 2695 AccessSpecifier Access, 2696 QualType T) { 2697 Step S; 2698 S.Kind = SK_ConstructorInitialization; 2699 S.Type = T; 2700 S.Function.HadMultipleCandidates = false; 2701 S.Function.Function = Constructor; 2702 S.Function.FoundDecl = DeclAccessPair::make(Constructor, Access); 2703 Steps.push_back(S); 2704 } 2705 2706 void InitializationSequence::AddZeroInitializationStep(QualType T) { 2707 Step S; 2708 S.Kind = SK_ZeroInitialization; 2709 S.Type = T; 2710 Steps.push_back(S); 2711 } 2712 2713 void InitializationSequence::AddCAssignmentStep(QualType T) { 2714 Step S; 2715 S.Kind = SK_CAssignment; 2716 S.Type = T; 2717 Steps.push_back(S); 2718 } 2719 2720 void InitializationSequence::AddStringInitStep(QualType T) { 2721 Step S; 2722 S.Kind = SK_StringInit; 2723 S.Type = T; 2724 Steps.push_back(S); 2725 } 2726 2727 void InitializationSequence::AddObjCObjectConversionStep(QualType T) { 2728 Step S; 2729 S.Kind = SK_ObjCObjectConversion; 2730 S.Type = T; 2731 Steps.push_back(S); 2732 } 2733 2734 void InitializationSequence::AddArrayInitStep(QualType T) { 2735 Step S; 2736 S.Kind = SK_ArrayInit; 2737 S.Type = T; 2738 Steps.push_back(S); 2739 } 2740 2741 void InitializationSequence::AddPassByIndirectCopyRestoreStep(QualType type, 2742 bool shouldCopy) { 2743 Step s; 2744 s.Kind = (shouldCopy ? SK_PassByIndirectCopyRestore 2745 : SK_PassByIndirectRestore); 2746 s.Type = type; 2747 Steps.push_back(s); 2748 } 2749 2750 void InitializationSequence::AddProduceObjCObjectStep(QualType T) { 2751 Step S; 2752 S.Kind = SK_ProduceObjCObject; 2753 S.Type = T; 2754 Steps.push_back(S); 2755 } 2756 2757 void InitializationSequence::SetOverloadFailure(FailureKind Failure, 2758 OverloadingResult Result) { 2759 setSequenceKind(FailedSequence); 2760 this->Failure = Failure; 2761 this->FailedOverloadResult = Result; 2762 } 2763 2764 //===----------------------------------------------------------------------===// 2765 // Attempt initialization 2766 //===----------------------------------------------------------------------===// 2767 2768 static void MaybeProduceObjCObject(Sema &S, 2769 InitializationSequence &Sequence, 2770 const InitializedEntity &Entity) { 2771 if (!S.getLangOptions().ObjCAutoRefCount) return; 2772 2773 /// When initializing a parameter, produce the value if it's marked 2774 /// __attribute__((ns_consumed)). 2775 if (Entity.getKind() == InitializedEntity::EK_Parameter) { 2776 if (!Entity.isParameterConsumed()) 2777 return; 2778 2779 assert(Entity.getType()->isObjCRetainableType() && 2780 "consuming an object of unretainable type?"); 2781 Sequence.AddProduceObjCObjectStep(Entity.getType()); 2782 2783 /// When initializing a return value, if the return type is a 2784 /// retainable type, then returns need to immediately retain the 2785 /// object. If an autorelease is required, it will be done at the 2786 /// last instant. 2787 } else if (Entity.getKind() == InitializedEntity::EK_Result) { 2788 if (!Entity.getType()->isObjCRetainableType()) 2789 return; 2790 2791 Sequence.AddProduceObjCObjectStep(Entity.getType()); 2792 } 2793 } 2794 2795 /// \brief Attempt list initialization (C++0x [dcl.init.list]) 2796 static void TryListInitialization(Sema &S, 2797 const InitializedEntity &Entity, 2798 const InitializationKind &Kind, 2799 InitListExpr *InitList, 2800 InitializationSequence &Sequence) { 2801 QualType DestType = Entity.getType(); 2802 2803 // C++ doesn't allow scalar initialization with more than one argument. 2804 // But C99 complex numbers are scalars and it makes sense there. 2805 if (S.getLangOptions().CPlusPlus && DestType->isScalarType() && 2806 !DestType->isAnyComplexType() && InitList->getNumInits() > 1) { 2807 Sequence.SetFailed(InitializationSequence::FK_TooManyInitsForScalar); 2808 return; 2809 } 2810 // FIXME: C++0x defines behavior for these two cases. 2811 if (DestType->isReferenceType()) { 2812 Sequence.SetFailed(InitializationSequence::FK_ReferenceBindingToInitList); 2813 return; 2814 } 2815 if (DestType->isRecordType() && !DestType->isAggregateType()) { 2816 Sequence.SetFailed(InitializationSequence::FK_InitListBadDestinationType); 2817 return; 2818 } 2819 2820 InitListChecker CheckInitList(S, Entity, InitList, 2821 DestType, /*VerifyOnly=*/true, 2822 Kind.getKind() != InitializationKind::IK_Direct || 2823 !S.getLangOptions().CPlusPlus0x); 2824 if (CheckInitList.HadError()) { 2825 Sequence.SetFailed(InitializationSequence::FK_ListInitializationFailed); 2826 return; 2827 } 2828 2829 // Add the list initialization step with the built init list. 2830 Sequence.AddListInitializationStep(DestType); 2831 } 2832 2833 /// \brief Try a reference initialization that involves calling a conversion 2834 /// function. 2835 static OverloadingResult TryRefInitWithConversionFunction(Sema &S, 2836 const InitializedEntity &Entity, 2837 const InitializationKind &Kind, 2838 Expr *Initializer, 2839 bool AllowRValues, 2840 InitializationSequence &Sequence) { 2841 QualType DestType = Entity.getType(); 2842 QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType(); 2843 QualType T1 = cv1T1.getUnqualifiedType(); 2844 QualType cv2T2 = Initializer->getType(); 2845 QualType T2 = cv2T2.getUnqualifiedType(); 2846 2847 bool DerivedToBase; 2848 bool ObjCConversion; 2849 bool ObjCLifetimeConversion; 2850 assert(!S.CompareReferenceRelationship(Initializer->getLocStart(), 2851 T1, T2, DerivedToBase, 2852 ObjCConversion, 2853 ObjCLifetimeConversion) && 2854 "Must have incompatible references when binding via conversion"); 2855 (void)DerivedToBase; 2856 (void)ObjCConversion; 2857 (void)ObjCLifetimeConversion; 2858 2859 // Build the candidate set directly in the initialization sequence 2860 // structure, so that it will persist if we fail. 2861 OverloadCandidateSet &CandidateSet = Sequence.getFailedCandidateSet(); 2862 CandidateSet.clear(); 2863 2864 // Determine whether we are allowed to call explicit constructors or 2865 // explicit conversion operators. 2866 bool AllowExplicit = Kind.getKind() == InitializationKind::IK_Direct; 2867 2868 const RecordType *T1RecordType = 0; 2869 if (AllowRValues && (T1RecordType = T1->getAs<RecordType>()) && 2870 !S.RequireCompleteType(Kind.getLocation(), T1, 0)) { 2871 // The type we're converting to is a class type. Enumerate its constructors 2872 // to see if there is a suitable conversion. 2873 CXXRecordDecl *T1RecordDecl = cast<CXXRecordDecl>(T1RecordType->getDecl()); 2874 2875 DeclContext::lookup_iterator Con, ConEnd; 2876 for (llvm::tie(Con, ConEnd) = S.LookupConstructors(T1RecordDecl); 2877 Con != ConEnd; ++Con) { 2878 NamedDecl *D = *Con; 2879 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); 2880 2881 // Find the constructor (which may be a template). 2882 CXXConstructorDecl *Constructor = 0; 2883 FunctionTemplateDecl *ConstructorTmpl = dyn_cast<FunctionTemplateDecl>(D); 2884 if (ConstructorTmpl) 2885 Constructor = cast<CXXConstructorDecl>( 2886 ConstructorTmpl->getTemplatedDecl()); 2887 else 2888 Constructor = cast<CXXConstructorDecl>(D); 2889 2890 if (!Constructor->isInvalidDecl() && 2891 Constructor->isConvertingConstructor(AllowExplicit)) { 2892 if (ConstructorTmpl) 2893 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 2894 /*ExplicitArgs*/ 0, 2895 &Initializer, 1, CandidateSet, 2896 /*SuppressUserConversions=*/true); 2897 else 2898 S.AddOverloadCandidate(Constructor, FoundDecl, 2899 &Initializer, 1, CandidateSet, 2900 /*SuppressUserConversions=*/true); 2901 } 2902 } 2903 } 2904 if (T1RecordType && T1RecordType->getDecl()->isInvalidDecl()) 2905 return OR_No_Viable_Function; 2906 2907 const RecordType *T2RecordType = 0; 2908 if ((T2RecordType = T2->getAs<RecordType>()) && 2909 !S.RequireCompleteType(Kind.getLocation(), T2, 0)) { 2910 // The type we're converting from is a class type, enumerate its conversion 2911 // functions. 2912 CXXRecordDecl *T2RecordDecl = cast<CXXRecordDecl>(T2RecordType->getDecl()); 2913 2914 const UnresolvedSetImpl *Conversions 2915 = T2RecordDecl->getVisibleConversionFunctions(); 2916 for (UnresolvedSetImpl::const_iterator I = Conversions->begin(), 2917 E = Conversions->end(); I != E; ++I) { 2918 NamedDecl *D = *I; 2919 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext()); 2920 if (isa<UsingShadowDecl>(D)) 2921 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 2922 2923 FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D); 2924 CXXConversionDecl *Conv; 2925 if (ConvTemplate) 2926 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 2927 else 2928 Conv = cast<CXXConversionDecl>(D); 2929 2930 // If the conversion function doesn't return a reference type, 2931 // it can't be considered for this conversion unless we're allowed to 2932 // consider rvalues. 2933 // FIXME: Do we need to make sure that we only consider conversion 2934 // candidates with reference-compatible results? That might be needed to 2935 // break recursion. 2936 if ((AllowExplicit || !Conv->isExplicit()) && 2937 (AllowRValues || Conv->getConversionType()->isLValueReferenceType())){ 2938 if (ConvTemplate) 2939 S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), 2940 ActingDC, Initializer, 2941 DestType, CandidateSet); 2942 else 2943 S.AddConversionCandidate(Conv, I.getPair(), ActingDC, 2944 Initializer, DestType, CandidateSet); 2945 } 2946 } 2947 } 2948 if (T2RecordType && T2RecordType->getDecl()->isInvalidDecl()) 2949 return OR_No_Viable_Function; 2950 2951 SourceLocation DeclLoc = Initializer->getLocStart(); 2952 2953 // Perform overload resolution. If it fails, return the failed result. 2954 OverloadCandidateSet::iterator Best; 2955 if (OverloadingResult Result 2956 = CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) 2957 return Result; 2958 2959 FunctionDecl *Function = Best->Function; 2960 2961 // This is the overload that will actually be used for the initialization, so 2962 // mark it as used. 2963 S.MarkDeclarationReferenced(DeclLoc, Function); 2964 2965 // Compute the returned type of the conversion. 2966 if (isa<CXXConversionDecl>(Function)) 2967 T2 = Function->getResultType(); 2968 else 2969 T2 = cv1T1; 2970 2971 // Add the user-defined conversion step. 2972 Sequence.AddUserConversionStep(Function, Best->FoundDecl, 2973 T2.getNonLValueExprType(S.Context)); 2974 2975 // Determine whether we need to perform derived-to-base or 2976 // cv-qualification adjustments. 2977 ExprValueKind VK = VK_RValue; 2978 if (T2->isLValueReferenceType()) 2979 VK = VK_LValue; 2980 else if (const RValueReferenceType *RRef = T2->getAs<RValueReferenceType>()) 2981 VK = RRef->getPointeeType()->isFunctionType() ? VK_LValue : VK_XValue; 2982 2983 bool NewDerivedToBase = false; 2984 bool NewObjCConversion = false; 2985 bool NewObjCLifetimeConversion = false; 2986 Sema::ReferenceCompareResult NewRefRelationship 2987 = S.CompareReferenceRelationship(DeclLoc, T1, 2988 T2.getNonLValueExprType(S.Context), 2989 NewDerivedToBase, NewObjCConversion, 2990 NewObjCLifetimeConversion); 2991 if (NewRefRelationship == Sema::Ref_Incompatible) { 2992 // If the type we've converted to is not reference-related to the 2993 // type we're looking for, then there is another conversion step 2994 // we need to perform to produce a temporary of the right type 2995 // that we'll be binding to. 2996 ImplicitConversionSequence ICS; 2997 ICS.setStandard(); 2998 ICS.Standard = Best->FinalConversion; 2999 T2 = ICS.Standard.getToType(2); 3000 Sequence.AddConversionSequenceStep(ICS, T2); 3001 } else if (NewDerivedToBase) 3002 Sequence.AddDerivedToBaseCastStep( 3003 S.Context.getQualifiedType(T1, 3004 T2.getNonReferenceType().getQualifiers()), 3005 VK); 3006 else if (NewObjCConversion) 3007 Sequence.AddObjCObjectConversionStep( 3008 S.Context.getQualifiedType(T1, 3009 T2.getNonReferenceType().getQualifiers())); 3010 3011 if (cv1T1.getQualifiers() != T2.getNonReferenceType().getQualifiers()) 3012 Sequence.AddQualificationConversionStep(cv1T1, VK); 3013 3014 Sequence.AddReferenceBindingStep(cv1T1, !T2->isReferenceType()); 3015 return OR_Success; 3016 } 3017 3018 /// \brief Attempt reference initialization (C++0x [dcl.init.ref]) 3019 static void TryReferenceInitialization(Sema &S, 3020 const InitializedEntity &Entity, 3021 const InitializationKind &Kind, 3022 Expr *Initializer, 3023 InitializationSequence &Sequence) { 3024 QualType DestType = Entity.getType(); 3025 QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType(); 3026 Qualifiers T1Quals; 3027 QualType T1 = S.Context.getUnqualifiedArrayType(cv1T1, T1Quals); 3028 QualType cv2T2 = Initializer->getType(); 3029 Qualifiers T2Quals; 3030 QualType T2 = S.Context.getUnqualifiedArrayType(cv2T2, T2Quals); 3031 SourceLocation DeclLoc = Initializer->getLocStart(); 3032 3033 // If the initializer is the address of an overloaded function, try 3034 // to resolve the overloaded function. If all goes well, T2 is the 3035 // type of the resulting function. 3036 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) { 3037 DeclAccessPair Found; 3038 if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Initializer, 3039 T1, 3040 false, 3041 Found)) { 3042 Sequence.AddAddressOverloadResolutionStep(Fn, Found); 3043 cv2T2 = Fn->getType(); 3044 T2 = cv2T2.getUnqualifiedType(); 3045 } else if (!T1->isRecordType()) { 3046 Sequence.SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 3047 return; 3048 } 3049 } 3050 3051 // Compute some basic properties of the types and the initializer. 3052 bool isLValueRef = DestType->isLValueReferenceType(); 3053 bool isRValueRef = !isLValueRef; 3054 bool DerivedToBase = false; 3055 bool ObjCConversion = false; 3056 bool ObjCLifetimeConversion = false; 3057 Expr::Classification InitCategory = Initializer->Classify(S.Context); 3058 Sema::ReferenceCompareResult RefRelationship 3059 = S.CompareReferenceRelationship(DeclLoc, cv1T1, cv2T2, DerivedToBase, 3060 ObjCConversion, ObjCLifetimeConversion); 3061 3062 // C++0x [dcl.init.ref]p5: 3063 // A reference to type "cv1 T1" is initialized by an expression of type 3064 // "cv2 T2" as follows: 3065 // 3066 // - If the reference is an lvalue reference and the initializer 3067 // expression 3068 // Note the analogous bullet points for rvlaue refs to functions. Because 3069 // there are no function rvalues in C++, rvalue refs to functions are treated 3070 // like lvalue refs. 3071 OverloadingResult ConvOvlResult = OR_Success; 3072 bool T1Function = T1->isFunctionType(); 3073 if (isLValueRef || T1Function) { 3074 if (InitCategory.isLValue() && 3075 (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification || 3076 (Kind.isCStyleOrFunctionalCast() && 3077 RefRelationship == Sema::Ref_Related))) { 3078 // - is an lvalue (but is not a bit-field), and "cv1 T1" is 3079 // reference-compatible with "cv2 T2," or 3080 // 3081 // Per C++ [over.best.ics]p2, we don't diagnose whether the lvalue is a 3082 // bit-field when we're determining whether the reference initialization 3083 // can occur. However, we do pay attention to whether it is a bit-field 3084 // to decide whether we're actually binding to a temporary created from 3085 // the bit-field. 3086 if (DerivedToBase) 3087 Sequence.AddDerivedToBaseCastStep( 3088 S.Context.getQualifiedType(T1, T2Quals), 3089 VK_LValue); 3090 else if (ObjCConversion) 3091 Sequence.AddObjCObjectConversionStep( 3092 S.Context.getQualifiedType(T1, T2Quals)); 3093 3094 if (T1Quals != T2Quals) 3095 Sequence.AddQualificationConversionStep(cv1T1, VK_LValue); 3096 bool BindingTemporary = T1Quals.hasConst() && !T1Quals.hasVolatile() && 3097 (Initializer->getBitField() || Initializer->refersToVectorElement()); 3098 Sequence.AddReferenceBindingStep(cv1T1, BindingTemporary); 3099 return; 3100 } 3101 3102 // - has a class type (i.e., T2 is a class type), where T1 is not 3103 // reference-related to T2, and can be implicitly converted to an 3104 // lvalue of type "cv3 T3," where "cv1 T1" is reference-compatible 3105 // with "cv3 T3" (this conversion is selected by enumerating the 3106 // applicable conversion functions (13.3.1.6) and choosing the best 3107 // one through overload resolution (13.3)), 3108 // If we have an rvalue ref to function type here, the rhs must be 3109 // an rvalue. 3110 if (RefRelationship == Sema::Ref_Incompatible && T2->isRecordType() && 3111 (isLValueRef || InitCategory.isRValue())) { 3112 ConvOvlResult = TryRefInitWithConversionFunction(S, Entity, Kind, 3113 Initializer, 3114 /*AllowRValues=*/isRValueRef, 3115 Sequence); 3116 if (ConvOvlResult == OR_Success) 3117 return; 3118 if (ConvOvlResult != OR_No_Viable_Function) { 3119 Sequence.SetOverloadFailure( 3120 InitializationSequence::FK_ReferenceInitOverloadFailed, 3121 ConvOvlResult); 3122 } 3123 } 3124 } 3125 3126 // - Otherwise, the reference shall be an lvalue reference to a 3127 // non-volatile const type (i.e., cv1 shall be const), or the reference 3128 // shall be an rvalue reference. 3129 if (isLValueRef && !(T1Quals.hasConst() && !T1Quals.hasVolatile())) { 3130 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) 3131 Sequence.SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 3132 else if (ConvOvlResult && !Sequence.getFailedCandidateSet().empty()) 3133 Sequence.SetOverloadFailure( 3134 InitializationSequence::FK_ReferenceInitOverloadFailed, 3135 ConvOvlResult); 3136 else 3137 Sequence.SetFailed(InitCategory.isLValue() 3138 ? (RefRelationship == Sema::Ref_Related 3139 ? InitializationSequence::FK_ReferenceInitDropsQualifiers 3140 : InitializationSequence::FK_NonConstLValueReferenceBindingToUnrelated) 3141 : InitializationSequence::FK_NonConstLValueReferenceBindingToTemporary); 3142 3143 return; 3144 } 3145 3146 // - If the initializer expression 3147 // - is an xvalue, class prvalue, array prvalue, or function lvalue and 3148 // "cv1 T1" is reference-compatible with "cv2 T2" 3149 // Note: functions are handled below. 3150 if (!T1Function && 3151 (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification || 3152 (Kind.isCStyleOrFunctionalCast() && 3153 RefRelationship == Sema::Ref_Related)) && 3154 (InitCategory.isXValue() || 3155 (InitCategory.isPRValue() && T2->isRecordType()) || 3156 (InitCategory.isPRValue() && T2->isArrayType()))) { 3157 ExprValueKind ValueKind = InitCategory.isXValue()? VK_XValue : VK_RValue; 3158 if (InitCategory.isPRValue() && T2->isRecordType()) { 3159 // The corresponding bullet in C++03 [dcl.init.ref]p5 gives the 3160 // compiler the freedom to perform a copy here or bind to the 3161 // object, while C++0x requires that we bind directly to the 3162 // object. Hence, we always bind to the object without making an 3163 // extra copy. However, in C++03 requires that we check for the 3164 // presence of a suitable copy constructor: 3165 // 3166 // The constructor that would be used to make the copy shall 3167 // be callable whether or not the copy is actually done. 3168 if (!S.getLangOptions().CPlusPlus0x && !S.getLangOptions().MicrosoftExt) 3169 Sequence.AddExtraneousCopyToTemporary(cv2T2); 3170 } 3171 3172 if (DerivedToBase) 3173 Sequence.AddDerivedToBaseCastStep(S.Context.getQualifiedType(T1, T2Quals), 3174 ValueKind); 3175 else if (ObjCConversion) 3176 Sequence.AddObjCObjectConversionStep( 3177 S.Context.getQualifiedType(T1, T2Quals)); 3178 3179 if (T1Quals != T2Quals) 3180 Sequence.AddQualificationConversionStep(cv1T1, ValueKind); 3181 Sequence.AddReferenceBindingStep(cv1T1, 3182 /*bindingTemporary=*/(InitCategory.isPRValue() && !T2->isArrayType())); 3183 return; 3184 } 3185 3186 // - has a class type (i.e., T2 is a class type), where T1 is not 3187 // reference-related to T2, and can be implicitly converted to an 3188 // xvalue, class prvalue, or function lvalue of type "cv3 T3", 3189 // where "cv1 T1" is reference-compatible with "cv3 T3", 3190 if (T2->isRecordType()) { 3191 if (RefRelationship == Sema::Ref_Incompatible) { 3192 ConvOvlResult = TryRefInitWithConversionFunction(S, Entity, 3193 Kind, Initializer, 3194 /*AllowRValues=*/true, 3195 Sequence); 3196 if (ConvOvlResult) 3197 Sequence.SetOverloadFailure( 3198 InitializationSequence::FK_ReferenceInitOverloadFailed, 3199 ConvOvlResult); 3200 3201 return; 3202 } 3203 3204 Sequence.SetFailed(InitializationSequence::FK_ReferenceInitDropsQualifiers); 3205 return; 3206 } 3207 3208 // - Otherwise, a temporary of type "cv1 T1" is created and initialized 3209 // from the initializer expression using the rules for a non-reference 3210 // copy initialization (8.5). The reference is then bound to the 3211 // temporary. [...] 3212 3213 // Determine whether we are allowed to call explicit constructors or 3214 // explicit conversion operators. 3215 bool AllowExplicit = (Kind.getKind() == InitializationKind::IK_Direct); 3216 3217 InitializedEntity TempEntity = InitializedEntity::InitializeTemporary(cv1T1); 3218 3219 ImplicitConversionSequence ICS 3220 = S.TryImplicitConversion(Initializer, TempEntity.getType(), 3221 /*SuppressUserConversions*/ false, 3222 AllowExplicit, 3223 /*FIXME:InOverloadResolution=*/false, 3224 /*CStyle=*/Kind.isCStyleOrFunctionalCast(), 3225 /*AllowObjCWritebackConversion=*/false); 3226 3227 if (ICS.isBad()) { 3228 // FIXME: Use the conversion function set stored in ICS to turn 3229 // this into an overloading ambiguity diagnostic. However, we need 3230 // to keep that set as an OverloadCandidateSet rather than as some 3231 // other kind of set. 3232 if (ConvOvlResult && !Sequence.getFailedCandidateSet().empty()) 3233 Sequence.SetOverloadFailure( 3234 InitializationSequence::FK_ReferenceInitOverloadFailed, 3235 ConvOvlResult); 3236 else if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) 3237 Sequence.SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 3238 else 3239 Sequence.SetFailed(InitializationSequence::FK_ReferenceInitFailed); 3240 return; 3241 } else { 3242 Sequence.AddConversionSequenceStep(ICS, TempEntity.getType()); 3243 } 3244 3245 // [...] If T1 is reference-related to T2, cv1 must be the 3246 // same cv-qualification as, or greater cv-qualification 3247 // than, cv2; otherwise, the program is ill-formed. 3248 unsigned T1CVRQuals = T1Quals.getCVRQualifiers(); 3249 unsigned T2CVRQuals = T2Quals.getCVRQualifiers(); 3250 if (RefRelationship == Sema::Ref_Related && 3251 (T1CVRQuals | T2CVRQuals) != T1CVRQuals) { 3252 Sequence.SetFailed(InitializationSequence::FK_ReferenceInitDropsQualifiers); 3253 return; 3254 } 3255 3256 // [...] If T1 is reference-related to T2 and the reference is an rvalue 3257 // reference, the initializer expression shall not be an lvalue. 3258 if (RefRelationship >= Sema::Ref_Related && !isLValueRef && 3259 InitCategory.isLValue()) { 3260 Sequence.SetFailed( 3261 InitializationSequence::FK_RValueReferenceBindingToLValue); 3262 return; 3263 } 3264 3265 Sequence.AddReferenceBindingStep(cv1T1, /*bindingTemporary=*/true); 3266 return; 3267 } 3268 3269 /// \brief Attempt character array initialization from a string literal 3270 /// (C++ [dcl.init.string], C99 6.7.8). 3271 static void TryStringLiteralInitialization(Sema &S, 3272 const InitializedEntity &Entity, 3273 const InitializationKind &Kind, 3274 Expr *Initializer, 3275 InitializationSequence &Sequence) { 3276 Sequence.AddStringInitStep(Entity.getType()); 3277 } 3278 3279 /// \brief Attempt initialization by constructor (C++ [dcl.init]), which 3280 /// enumerates the constructors of the initialized entity and performs overload 3281 /// resolution to select the best. 3282 static void TryConstructorInitialization(Sema &S, 3283 const InitializedEntity &Entity, 3284 const InitializationKind &Kind, 3285 Expr **Args, unsigned NumArgs, 3286 QualType DestType, 3287 InitializationSequence &Sequence) { 3288 // Check constructor arguments for self reference. 3289 if (DeclaratorDecl *DD = Entity.getDecl()) 3290 // Parameters arguments are occassionially constructed with itself, 3291 // for instance, in recursive functions. Skip them. 3292 if (!isa<ParmVarDecl>(DD)) 3293 for (unsigned i = 0; i < NumArgs; ++i) 3294 S.CheckSelfReference(DD, Args[i]); 3295 3296 // Build the candidate set directly in the initialization sequence 3297 // structure, so that it will persist if we fail. 3298 OverloadCandidateSet &CandidateSet = Sequence.getFailedCandidateSet(); 3299 CandidateSet.clear(); 3300 3301 // Determine whether we are allowed to call explicit constructors or 3302 // explicit conversion operators. 3303 bool AllowExplicit = (Kind.getKind() == InitializationKind::IK_Direct || 3304 Kind.getKind() == InitializationKind::IK_Value || 3305 Kind.getKind() == InitializationKind::IK_Default); 3306 3307 // The type we're constructing needs to be complete. 3308 if (S.RequireCompleteType(Kind.getLocation(), DestType, 0)) { 3309 Sequence.SetFailed(InitializationSequence::FK_Incomplete); 3310 return; 3311 } 3312 3313 // The type we're converting to is a class type. Enumerate its constructors 3314 // to see if one is suitable. 3315 const RecordType *DestRecordType = DestType->getAs<RecordType>(); 3316 assert(DestRecordType && "Constructor initialization requires record type"); 3317 CXXRecordDecl *DestRecordDecl 3318 = cast<CXXRecordDecl>(DestRecordType->getDecl()); 3319 3320 DeclContext::lookup_iterator Con, ConEnd; 3321 for (llvm::tie(Con, ConEnd) = S.LookupConstructors(DestRecordDecl); 3322 Con != ConEnd; ++Con) { 3323 NamedDecl *D = *Con; 3324 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); 3325 bool SuppressUserConversions = false; 3326 3327 // Find the constructor (which may be a template). 3328 CXXConstructorDecl *Constructor = 0; 3329 FunctionTemplateDecl *ConstructorTmpl = dyn_cast<FunctionTemplateDecl>(D); 3330 if (ConstructorTmpl) 3331 Constructor = cast<CXXConstructorDecl>( 3332 ConstructorTmpl->getTemplatedDecl()); 3333 else { 3334 Constructor = cast<CXXConstructorDecl>(D); 3335 3336 // If we're performing copy initialization using a copy constructor, we 3337 // suppress user-defined conversions on the arguments. 3338 // FIXME: Move constructors? 3339 if (Kind.getKind() == InitializationKind::IK_Copy && 3340 Constructor->isCopyConstructor()) 3341 SuppressUserConversions = true; 3342 } 3343 3344 if (!Constructor->isInvalidDecl() && 3345 (AllowExplicit || !Constructor->isExplicit())) { 3346 if (ConstructorTmpl) 3347 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 3348 /*ExplicitArgs*/ 0, 3349 Args, NumArgs, CandidateSet, 3350 SuppressUserConversions); 3351 else 3352 S.AddOverloadCandidate(Constructor, FoundDecl, 3353 Args, NumArgs, CandidateSet, 3354 SuppressUserConversions); 3355 } 3356 } 3357 3358 SourceLocation DeclLoc = Kind.getLocation(); 3359 3360 // Perform overload resolution. If it fails, return the failed result. 3361 OverloadCandidateSet::iterator Best; 3362 if (OverloadingResult Result 3363 = CandidateSet.BestViableFunction(S, DeclLoc, Best)) { 3364 Sequence.SetOverloadFailure( 3365 InitializationSequence::FK_ConstructorOverloadFailed, 3366 Result); 3367 return; 3368 } 3369 3370 // C++0x [dcl.init]p6: 3371 // If a program calls for the default initialization of an object 3372 // of a const-qualified type T, T shall be a class type with a 3373 // user-provided default constructor. 3374 if (Kind.getKind() == InitializationKind::IK_Default && 3375 Entity.getType().isConstQualified() && 3376 cast<CXXConstructorDecl>(Best->Function)->isImplicit()) { 3377 Sequence.SetFailed(InitializationSequence::FK_DefaultInitOfConst); 3378 return; 3379 } 3380 3381 // Add the constructor initialization step. Any cv-qualification conversion is 3382 // subsumed by the initialization. 3383 Sequence.AddConstructorInitializationStep( 3384 cast<CXXConstructorDecl>(Best->Function), 3385 Best->FoundDecl.getAccess(), 3386 DestType); 3387 } 3388 3389 /// \brief Attempt value initialization (C++ [dcl.init]p7). 3390 static void TryValueInitialization(Sema &S, 3391 const InitializedEntity &Entity, 3392 const InitializationKind &Kind, 3393 InitializationSequence &Sequence) { 3394 // C++ [dcl.init]p5: 3395 // 3396 // To value-initialize an object of type T means: 3397 QualType T = Entity.getType(); 3398 3399 // -- if T is an array type, then each element is value-initialized; 3400 while (const ArrayType *AT = S.Context.getAsArrayType(T)) 3401 T = AT->getElementType(); 3402 3403 if (const RecordType *RT = T->getAs<RecordType>()) { 3404 if (CXXRecordDecl *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) { 3405 // -- if T is a class type (clause 9) with a user-declared 3406 // constructor (12.1), then the default constructor for T is 3407 // called (and the initialization is ill-formed if T has no 3408 // accessible default constructor); 3409 // 3410 // FIXME: we really want to refer to a single subobject of the array, 3411 // but Entity doesn't have a way to capture that (yet). 3412 if (ClassDecl->hasUserDeclaredConstructor()) 3413 return TryConstructorInitialization(S, Entity, Kind, 0, 0, T, Sequence); 3414 3415 // -- if T is a (possibly cv-qualified) non-union class type 3416 // without a user-provided constructor, then the object is 3417 // zero-initialized and, if T's implicitly-declared default 3418 // constructor is non-trivial, that constructor is called. 3419 if ((ClassDecl->getTagKind() == TTK_Class || 3420 ClassDecl->getTagKind() == TTK_Struct)) { 3421 Sequence.AddZeroInitializationStep(Entity.getType()); 3422 return TryConstructorInitialization(S, Entity, Kind, 0, 0, T, Sequence); 3423 } 3424 } 3425 } 3426 3427 Sequence.AddZeroInitializationStep(Entity.getType()); 3428 } 3429 3430 /// \brief Attempt default initialization (C++ [dcl.init]p6). 3431 static void TryDefaultInitialization(Sema &S, 3432 const InitializedEntity &Entity, 3433 const InitializationKind &Kind, 3434 InitializationSequence &Sequence) { 3435 assert(Kind.getKind() == InitializationKind::IK_Default); 3436 3437 // C++ [dcl.init]p6: 3438 // To default-initialize an object of type T means: 3439 // - if T is an array type, each element is default-initialized; 3440 QualType DestType = S.Context.getBaseElementType(Entity.getType()); 3441 3442 // - if T is a (possibly cv-qualified) class type (Clause 9), the default 3443 // constructor for T is called (and the initialization is ill-formed if 3444 // T has no accessible default constructor); 3445 if (DestType->isRecordType() && S.getLangOptions().CPlusPlus) { 3446 TryConstructorInitialization(S, Entity, Kind, 0, 0, DestType, Sequence); 3447 return; 3448 } 3449 3450 // - otherwise, no initialization is performed. 3451 3452 // If a program calls for the default initialization of an object of 3453 // a const-qualified type T, T shall be a class type with a user-provided 3454 // default constructor. 3455 if (DestType.isConstQualified() && S.getLangOptions().CPlusPlus) { 3456 Sequence.SetFailed(InitializationSequence::FK_DefaultInitOfConst); 3457 return; 3458 } 3459 3460 // If the destination type has a lifetime property, zero-initialize it. 3461 if (DestType.getQualifiers().hasObjCLifetime()) { 3462 Sequence.AddZeroInitializationStep(Entity.getType()); 3463 return; 3464 } 3465 } 3466 3467 /// \brief Attempt a user-defined conversion between two types (C++ [dcl.init]), 3468 /// which enumerates all conversion functions and performs overload resolution 3469 /// to select the best. 3470 static void TryUserDefinedConversion(Sema &S, 3471 const InitializedEntity &Entity, 3472 const InitializationKind &Kind, 3473 Expr *Initializer, 3474 InitializationSequence &Sequence) { 3475 QualType DestType = Entity.getType(); 3476 assert(!DestType->isReferenceType() && "References are handled elsewhere"); 3477 QualType SourceType = Initializer->getType(); 3478 assert((DestType->isRecordType() || SourceType->isRecordType()) && 3479 "Must have a class type to perform a user-defined conversion"); 3480 3481 // Build the candidate set directly in the initialization sequence 3482 // structure, so that it will persist if we fail. 3483 OverloadCandidateSet &CandidateSet = Sequence.getFailedCandidateSet(); 3484 CandidateSet.clear(); 3485 3486 // Determine whether we are allowed to call explicit constructors or 3487 // explicit conversion operators. 3488 bool AllowExplicit = Kind.getKind() == InitializationKind::IK_Direct; 3489 3490 if (const RecordType *DestRecordType = DestType->getAs<RecordType>()) { 3491 // The type we're converting to is a class type. Enumerate its constructors 3492 // to see if there is a suitable conversion. 3493 CXXRecordDecl *DestRecordDecl 3494 = cast<CXXRecordDecl>(DestRecordType->getDecl()); 3495 3496 // Try to complete the type we're converting to. 3497 if (!S.RequireCompleteType(Kind.getLocation(), DestType, 0)) { 3498 DeclContext::lookup_iterator Con, ConEnd; 3499 for (llvm::tie(Con, ConEnd) = S.LookupConstructors(DestRecordDecl); 3500 Con != ConEnd; ++Con) { 3501 NamedDecl *D = *Con; 3502 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); 3503 3504 // Find the constructor (which may be a template). 3505 CXXConstructorDecl *Constructor = 0; 3506 FunctionTemplateDecl *ConstructorTmpl 3507 = dyn_cast<FunctionTemplateDecl>(D); 3508 if (ConstructorTmpl) 3509 Constructor = cast<CXXConstructorDecl>( 3510 ConstructorTmpl->getTemplatedDecl()); 3511 else 3512 Constructor = cast<CXXConstructorDecl>(D); 3513 3514 if (!Constructor->isInvalidDecl() && 3515 Constructor->isConvertingConstructor(AllowExplicit)) { 3516 if (ConstructorTmpl) 3517 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 3518 /*ExplicitArgs*/ 0, 3519 &Initializer, 1, CandidateSet, 3520 /*SuppressUserConversions=*/true); 3521 else 3522 S.AddOverloadCandidate(Constructor, FoundDecl, 3523 &Initializer, 1, CandidateSet, 3524 /*SuppressUserConversions=*/true); 3525 } 3526 } 3527 } 3528 } 3529 3530 SourceLocation DeclLoc = Initializer->getLocStart(); 3531 3532 if (const RecordType *SourceRecordType = SourceType->getAs<RecordType>()) { 3533 // The type we're converting from is a class type, enumerate its conversion 3534 // functions. 3535 3536 // We can only enumerate the conversion functions for a complete type; if 3537 // the type isn't complete, simply skip this step. 3538 if (!S.RequireCompleteType(DeclLoc, SourceType, 0)) { 3539 CXXRecordDecl *SourceRecordDecl 3540 = cast<CXXRecordDecl>(SourceRecordType->getDecl()); 3541 3542 const UnresolvedSetImpl *Conversions 3543 = SourceRecordDecl->getVisibleConversionFunctions(); 3544 for (UnresolvedSetImpl::const_iterator I = Conversions->begin(), 3545 E = Conversions->end(); 3546 I != E; ++I) { 3547 NamedDecl *D = *I; 3548 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext()); 3549 if (isa<UsingShadowDecl>(D)) 3550 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 3551 3552 FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D); 3553 CXXConversionDecl *Conv; 3554 if (ConvTemplate) 3555 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 3556 else 3557 Conv = cast<CXXConversionDecl>(D); 3558 3559 if (AllowExplicit || !Conv->isExplicit()) { 3560 if (ConvTemplate) 3561 S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), 3562 ActingDC, Initializer, DestType, 3563 CandidateSet); 3564 else 3565 S.AddConversionCandidate(Conv, I.getPair(), ActingDC, 3566 Initializer, DestType, CandidateSet); 3567 } 3568 } 3569 } 3570 } 3571 3572 // Perform overload resolution. If it fails, return the failed result. 3573 OverloadCandidateSet::iterator Best; 3574 if (OverloadingResult Result 3575 = CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) { 3576 Sequence.SetOverloadFailure( 3577 InitializationSequence::FK_UserConversionOverloadFailed, 3578 Result); 3579 return; 3580 } 3581 3582 FunctionDecl *Function = Best->Function; 3583 S.MarkDeclarationReferenced(DeclLoc, Function); 3584 3585 if (isa<CXXConstructorDecl>(Function)) { 3586 // Add the user-defined conversion step. Any cv-qualification conversion is 3587 // subsumed by the initialization. 3588 Sequence.AddUserConversionStep(Function, Best->FoundDecl, DestType); 3589 return; 3590 } 3591 3592 // Add the user-defined conversion step that calls the conversion function. 3593 QualType ConvType = Function->getCallResultType(); 3594 if (ConvType->getAs<RecordType>()) { 3595 // If we're converting to a class type, there may be an copy if 3596 // the resulting temporary object (possible to create an object of 3597 // a base class type). That copy is not a separate conversion, so 3598 // we just make a note of the actual destination type (possibly a 3599 // base class of the type returned by the conversion function) and 3600 // let the user-defined conversion step handle the conversion. 3601 Sequence.AddUserConversionStep(Function, Best->FoundDecl, DestType); 3602 return; 3603 } 3604 3605 Sequence.AddUserConversionStep(Function, Best->FoundDecl, ConvType); 3606 3607 // If the conversion following the call to the conversion function 3608 // is interesting, add it as a separate step. 3609 if (Best->FinalConversion.First || Best->FinalConversion.Second || 3610 Best->FinalConversion.Third) { 3611 ImplicitConversionSequence ICS; 3612 ICS.setStandard(); 3613 ICS.Standard = Best->FinalConversion; 3614 Sequence.AddConversionSequenceStep(ICS, DestType); 3615 } 3616 } 3617 3618 /// The non-zero enum values here are indexes into diagnostic alternatives. 3619 enum InvalidICRKind { IIK_okay, IIK_nonlocal, IIK_nonscalar }; 3620 3621 /// Determines whether this expression is an acceptable ICR source. 3622 static InvalidICRKind isInvalidICRSource(ASTContext &C, Expr *e, 3623 bool isAddressOf) { 3624 // Skip parens. 3625 e = e->IgnoreParens(); 3626 3627 // Skip address-of nodes. 3628 if (UnaryOperator *op = dyn_cast<UnaryOperator>(e)) { 3629 if (op->getOpcode() == UO_AddrOf) 3630 return isInvalidICRSource(C, op->getSubExpr(), /*addressof*/ true); 3631 3632 // Skip certain casts. 3633 } else if (CastExpr *ce = dyn_cast<CastExpr>(e)) { 3634 switch (ce->getCastKind()) { 3635 case CK_Dependent: 3636 case CK_BitCast: 3637 case CK_LValueBitCast: 3638 case CK_NoOp: 3639 return isInvalidICRSource(C, ce->getSubExpr(), isAddressOf); 3640 3641 case CK_ArrayToPointerDecay: 3642 return IIK_nonscalar; 3643 3644 case CK_NullToPointer: 3645 return IIK_okay; 3646 3647 default: 3648 break; 3649 } 3650 3651 // If we have a declaration reference, it had better be a local variable. 3652 } else if (isa<DeclRefExpr>(e) || isa<BlockDeclRefExpr>(e)) { 3653 if (!isAddressOf) return IIK_nonlocal; 3654 3655 VarDecl *var; 3656 if (isa<DeclRefExpr>(e)) { 3657 var = dyn_cast<VarDecl>(cast<DeclRefExpr>(e)->getDecl()); 3658 if (!var) return IIK_nonlocal; 3659 } else { 3660 var = cast<BlockDeclRefExpr>(e)->getDecl(); 3661 } 3662 3663 return (var->hasLocalStorage() ? IIK_okay : IIK_nonlocal); 3664 3665 // If we have a conditional operator, check both sides. 3666 } else if (ConditionalOperator *cond = dyn_cast<ConditionalOperator>(e)) { 3667 if (InvalidICRKind iik = isInvalidICRSource(C, cond->getLHS(), isAddressOf)) 3668 return iik; 3669 3670 return isInvalidICRSource(C, cond->getRHS(), isAddressOf); 3671 3672 // These are never scalar. 3673 } else if (isa<ArraySubscriptExpr>(e)) { 3674 return IIK_nonscalar; 3675 3676 // Otherwise, it needs to be a null pointer constant. 3677 } else { 3678 return (e->isNullPointerConstant(C, Expr::NPC_ValueDependentIsNull) 3679 ? IIK_okay : IIK_nonlocal); 3680 } 3681 3682 return IIK_nonlocal; 3683 } 3684 3685 /// Check whether the given expression is a valid operand for an 3686 /// indirect copy/restore. 3687 static void checkIndirectCopyRestoreSource(Sema &S, Expr *src) { 3688 assert(src->isRValue()); 3689 3690 InvalidICRKind iik = isInvalidICRSource(S.Context, src, false); 3691 if (iik == IIK_okay) return; 3692 3693 S.Diag(src->getExprLoc(), diag::err_arc_nonlocal_writeback) 3694 << ((unsigned) iik - 1) // shift index into diagnostic explanations 3695 << src->getSourceRange(); 3696 } 3697 3698 /// \brief Determine whether we have compatible array types for the 3699 /// purposes of GNU by-copy array initialization. 3700 static bool hasCompatibleArrayTypes(ASTContext &Context, 3701 const ArrayType *Dest, 3702 const ArrayType *Source) { 3703 // If the source and destination array types are equivalent, we're 3704 // done. 3705 if (Context.hasSameType(QualType(Dest, 0), QualType(Source, 0))) 3706 return true; 3707 3708 // Make sure that the element types are the same. 3709 if (!Context.hasSameType(Dest->getElementType(), Source->getElementType())) 3710 return false; 3711 3712 // The only mismatch we allow is when the destination is an 3713 // incomplete array type and the source is a constant array type. 3714 return Source->isConstantArrayType() && Dest->isIncompleteArrayType(); 3715 } 3716 3717 static bool tryObjCWritebackConversion(Sema &S, 3718 InitializationSequence &Sequence, 3719 const InitializedEntity &Entity, 3720 Expr *Initializer) { 3721 bool ArrayDecay = false; 3722 QualType ArgType = Initializer->getType(); 3723 QualType ArgPointee; 3724 if (const ArrayType *ArgArrayType = S.Context.getAsArrayType(ArgType)) { 3725 ArrayDecay = true; 3726 ArgPointee = ArgArrayType->getElementType(); 3727 ArgType = S.Context.getPointerType(ArgPointee); 3728 } 3729 3730 // Handle write-back conversion. 3731 QualType ConvertedArgType; 3732 if (!S.isObjCWritebackConversion(ArgType, Entity.getType(), 3733 ConvertedArgType)) 3734 return false; 3735 3736 // We should copy unless we're passing to an argument explicitly 3737 // marked 'out'. 3738 bool ShouldCopy = true; 3739 if (ParmVarDecl *param = cast_or_null<ParmVarDecl>(Entity.getDecl())) 3740 ShouldCopy = (param->getObjCDeclQualifier() != ParmVarDecl::OBJC_TQ_Out); 3741 3742 // Do we need an lvalue conversion? 3743 if (ArrayDecay || Initializer->isGLValue()) { 3744 ImplicitConversionSequence ICS; 3745 ICS.setStandard(); 3746 ICS.Standard.setAsIdentityConversion(); 3747 3748 QualType ResultType; 3749 if (ArrayDecay) { 3750 ICS.Standard.First = ICK_Array_To_Pointer; 3751 ResultType = S.Context.getPointerType(ArgPointee); 3752 } else { 3753 ICS.Standard.First = ICK_Lvalue_To_Rvalue; 3754 ResultType = Initializer->getType().getNonLValueExprType(S.Context); 3755 } 3756 3757 Sequence.AddConversionSequenceStep(ICS, ResultType); 3758 } 3759 3760 Sequence.AddPassByIndirectCopyRestoreStep(Entity.getType(), ShouldCopy); 3761 return true; 3762 } 3763 3764 InitializationSequence::InitializationSequence(Sema &S, 3765 const InitializedEntity &Entity, 3766 const InitializationKind &Kind, 3767 Expr **Args, 3768 unsigned NumArgs) 3769 : FailedCandidateSet(Kind.getLocation()) { 3770 ASTContext &Context = S.Context; 3771 3772 // C++0x [dcl.init]p16: 3773 // The semantics of initializers are as follows. The destination type is 3774 // the type of the object or reference being initialized and the source 3775 // type is the type of the initializer expression. The source type is not 3776 // defined when the initializer is a braced-init-list or when it is a 3777 // parenthesized list of expressions. 3778 QualType DestType = Entity.getType(); 3779 3780 if (DestType->isDependentType() || 3781 Expr::hasAnyTypeDependentArguments(Args, NumArgs)) { 3782 SequenceKind = DependentSequence; 3783 return; 3784 } 3785 3786 // Almost everything is a normal sequence. 3787 setSequenceKind(NormalSequence); 3788 3789 for (unsigned I = 0; I != NumArgs; ++I) 3790 if (Args[I]->getObjectKind() == OK_ObjCProperty) { 3791 ExprResult Result = S.ConvertPropertyForRValue(Args[I]); 3792 if (Result.isInvalid()) { 3793 SetFailed(FK_ConversionFromPropertyFailed); 3794 return; 3795 } 3796 Args[I] = Result.take(); 3797 } else if (const BuiltinType *PlaceholderTy 3798 = Args[I]->getType()->getAsPlaceholderType()) { 3799 // FIXME: should we be doing this here? 3800 if (PlaceholderTy->getKind() != BuiltinType::Overload) { 3801 ExprResult result = S.CheckPlaceholderExpr(Args[I]); 3802 if (result.isInvalid()) { 3803 SetFailed(FK_PlaceholderType); 3804 return; 3805 } 3806 Args[I] = result.take(); 3807 } 3808 } 3809 3810 3811 QualType SourceType; 3812 Expr *Initializer = 0; 3813 if (NumArgs == 1) { 3814 Initializer = Args[0]; 3815 if (!isa<InitListExpr>(Initializer)) 3816 SourceType = Initializer->getType(); 3817 } 3818 3819 // - If the initializer is a braced-init-list, the object is 3820 // list-initialized (8.5.4). 3821 if (InitListExpr *InitList = dyn_cast_or_null<InitListExpr>(Initializer)) { 3822 TryListInitialization(S, Entity, Kind, InitList, *this); 3823 return; 3824 } 3825 3826 // - If the destination type is a reference type, see 8.5.3. 3827 if (DestType->isReferenceType()) { 3828 // C++0x [dcl.init.ref]p1: 3829 // A variable declared to be a T& or T&&, that is, "reference to type T" 3830 // (8.3.2), shall be initialized by an object, or function, of type T or 3831 // by an object that can be converted into a T. 3832 // (Therefore, multiple arguments are not permitted.) 3833 if (NumArgs != 1) 3834 SetFailed(FK_TooManyInitsForReference); 3835 else 3836 TryReferenceInitialization(S, Entity, Kind, Args[0], *this); 3837 return; 3838 } 3839 3840 // - If the initializer is (), the object is value-initialized. 3841 if (Kind.getKind() == InitializationKind::IK_Value || 3842 (Kind.getKind() == InitializationKind::IK_Direct && NumArgs == 0)) { 3843 TryValueInitialization(S, Entity, Kind, *this); 3844 return; 3845 } 3846 3847 // Handle default initialization. 3848 if (Kind.getKind() == InitializationKind::IK_Default) { 3849 TryDefaultInitialization(S, Entity, Kind, *this); 3850 return; 3851 } 3852 3853 // - If the destination type is an array of characters, an array of 3854 // char16_t, an array of char32_t, or an array of wchar_t, and the 3855 // initializer is a string literal, see 8.5.2. 3856 // - Otherwise, if the destination type is an array, the program is 3857 // ill-formed. 3858 if (const ArrayType *DestAT = Context.getAsArrayType(DestType)) { 3859 if (Initializer && IsStringInit(Initializer, DestAT, Context)) { 3860 TryStringLiteralInitialization(S, Entity, Kind, Initializer, *this); 3861 return; 3862 } 3863 3864 // Note: as an GNU C extension, we allow initialization of an 3865 // array from a compound literal that creates an array of the same 3866 // type, so long as the initializer has no side effects. 3867 if (!S.getLangOptions().CPlusPlus && Initializer && 3868 isa<CompoundLiteralExpr>(Initializer->IgnoreParens()) && 3869 Initializer->getType()->isArrayType()) { 3870 const ArrayType *SourceAT 3871 = Context.getAsArrayType(Initializer->getType()); 3872 if (!hasCompatibleArrayTypes(S.Context, DestAT, SourceAT)) 3873 SetFailed(FK_ArrayTypeMismatch); 3874 else if (Initializer->HasSideEffects(S.Context)) 3875 SetFailed(FK_NonConstantArrayInit); 3876 else { 3877 AddArrayInitStep(DestType); 3878 } 3879 } else if (DestAT->getElementType()->isAnyCharacterType()) 3880 SetFailed(FK_ArrayNeedsInitListOrStringLiteral); 3881 else 3882 SetFailed(FK_ArrayNeedsInitList); 3883 3884 return; 3885 } 3886 3887 // Determine whether we should consider writeback conversions for 3888 // Objective-C ARC. 3889 bool allowObjCWritebackConversion = S.getLangOptions().ObjCAutoRefCount && 3890 Entity.getKind() == InitializedEntity::EK_Parameter; 3891 3892 // We're at the end of the line for C: it's either a write-back conversion 3893 // or it's a C assignment. There's no need to check anything else. 3894 if (!S.getLangOptions().CPlusPlus) { 3895 // If allowed, check whether this is an Objective-C writeback conversion. 3896 if (allowObjCWritebackConversion && 3897 tryObjCWritebackConversion(S, *this, Entity, Initializer)) { 3898 return; 3899 } 3900 3901 // Handle initialization in C 3902 AddCAssignmentStep(DestType); 3903 MaybeProduceObjCObject(S, *this, Entity); 3904 return; 3905 } 3906 3907 assert(S.getLangOptions().CPlusPlus); 3908 3909 // - If the destination type is a (possibly cv-qualified) class type: 3910 if (DestType->isRecordType()) { 3911 // - If the initialization is direct-initialization, or if it is 3912 // copy-initialization where the cv-unqualified version of the 3913 // source type is the same class as, or a derived class of, the 3914 // class of the destination, constructors are considered. [...] 3915 if (Kind.getKind() == InitializationKind::IK_Direct || 3916 (Kind.getKind() == InitializationKind::IK_Copy && 3917 (Context.hasSameUnqualifiedType(SourceType, DestType) || 3918 S.IsDerivedFrom(SourceType, DestType)))) 3919 TryConstructorInitialization(S, Entity, Kind, Args, NumArgs, 3920 Entity.getType(), *this); 3921 // - Otherwise (i.e., for the remaining copy-initialization cases), 3922 // user-defined conversion sequences that can convert from the source 3923 // type to the destination type or (when a conversion function is 3924 // used) to a derived class thereof are enumerated as described in 3925 // 13.3.1.4, and the best one is chosen through overload resolution 3926 // (13.3). 3927 else 3928 TryUserDefinedConversion(S, Entity, Kind, Initializer, *this); 3929 return; 3930 } 3931 3932 if (NumArgs > 1) { 3933 SetFailed(FK_TooManyInitsForScalar); 3934 return; 3935 } 3936 assert(NumArgs == 1 && "Zero-argument case handled above"); 3937 3938 // - Otherwise, if the source type is a (possibly cv-qualified) class 3939 // type, conversion functions are considered. 3940 if (!SourceType.isNull() && SourceType->isRecordType()) { 3941 TryUserDefinedConversion(S, Entity, Kind, Initializer, *this); 3942 MaybeProduceObjCObject(S, *this, Entity); 3943 return; 3944 } 3945 3946 // - Otherwise, the initial value of the object being initialized is the 3947 // (possibly converted) value of the initializer expression. Standard 3948 // conversions (Clause 4) will be used, if necessary, to convert the 3949 // initializer expression to the cv-unqualified version of the 3950 // destination type; no user-defined conversions are considered. 3951 3952 ImplicitConversionSequence ICS 3953 = S.TryImplicitConversion(Initializer, Entity.getType(), 3954 /*SuppressUserConversions*/true, 3955 /*AllowExplicitConversions*/ false, 3956 /*InOverloadResolution*/ false, 3957 /*CStyle=*/Kind.isCStyleOrFunctionalCast(), 3958 allowObjCWritebackConversion); 3959 3960 if (ICS.isStandard() && 3961 ICS.Standard.Second == ICK_Writeback_Conversion) { 3962 // Objective-C ARC writeback conversion. 3963 3964 // We should copy unless we're passing to an argument explicitly 3965 // marked 'out'. 3966 bool ShouldCopy = true; 3967 if (ParmVarDecl *Param = cast_or_null<ParmVarDecl>(Entity.getDecl())) 3968 ShouldCopy = (Param->getObjCDeclQualifier() != ParmVarDecl::OBJC_TQ_Out); 3969 3970 // If there was an lvalue adjustment, add it as a separate conversion. 3971 if (ICS.Standard.First == ICK_Array_To_Pointer || 3972 ICS.Standard.First == ICK_Lvalue_To_Rvalue) { 3973 ImplicitConversionSequence LvalueICS; 3974 LvalueICS.setStandard(); 3975 LvalueICS.Standard.setAsIdentityConversion(); 3976 LvalueICS.Standard.setAllToTypes(ICS.Standard.getToType(0)); 3977 LvalueICS.Standard.First = ICS.Standard.First; 3978 AddConversionSequenceStep(LvalueICS, ICS.Standard.getToType(0)); 3979 } 3980 3981 AddPassByIndirectCopyRestoreStep(Entity.getType(), ShouldCopy); 3982 } else if (ICS.isBad()) { 3983 DeclAccessPair dap; 3984 if (Initializer->getType() == Context.OverloadTy && 3985 !S.ResolveAddressOfOverloadedFunction(Initializer 3986 , DestType, false, dap)) 3987 SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); 3988 else 3989 SetFailed(InitializationSequence::FK_ConversionFailed); 3990 } else { 3991 AddConversionSequenceStep(ICS, Entity.getType()); 3992 3993 MaybeProduceObjCObject(S, *this, Entity); 3994 } 3995 } 3996 3997 InitializationSequence::~InitializationSequence() { 3998 for (SmallVectorImpl<Step>::iterator Step = Steps.begin(), 3999 StepEnd = Steps.end(); 4000 Step != StepEnd; ++Step) 4001 Step->Destroy(); 4002 } 4003 4004 //===----------------------------------------------------------------------===// 4005 // Perform initialization 4006 //===----------------------------------------------------------------------===// 4007 static Sema::AssignmentAction 4008 getAssignmentAction(const InitializedEntity &Entity) { 4009 switch(Entity.getKind()) { 4010 case InitializedEntity::EK_Variable: 4011 case InitializedEntity::EK_New: 4012 case InitializedEntity::EK_Exception: 4013 case InitializedEntity::EK_Base: 4014 case InitializedEntity::EK_Delegating: 4015 return Sema::AA_Initializing; 4016 4017 case InitializedEntity::EK_Parameter: 4018 if (Entity.getDecl() && 4019 isa<ObjCMethodDecl>(Entity.getDecl()->getDeclContext())) 4020 return Sema::AA_Sending; 4021 4022 return Sema::AA_Passing; 4023 4024 case InitializedEntity::EK_Result: 4025 return Sema::AA_Returning; 4026 4027 case InitializedEntity::EK_Temporary: 4028 // FIXME: Can we tell apart casting vs. converting? 4029 return Sema::AA_Casting; 4030 4031 case InitializedEntity::EK_Member: 4032 case InitializedEntity::EK_ArrayElement: 4033 case InitializedEntity::EK_VectorElement: 4034 case InitializedEntity::EK_ComplexElement: 4035 case InitializedEntity::EK_BlockElement: 4036 return Sema::AA_Initializing; 4037 } 4038 4039 return Sema::AA_Converting; 4040 } 4041 4042 /// \brief Whether we should binding a created object as a temporary when 4043 /// initializing the given entity. 4044 static bool shouldBindAsTemporary(const InitializedEntity &Entity) { 4045 switch (Entity.getKind()) { 4046 case InitializedEntity::EK_ArrayElement: 4047 case InitializedEntity::EK_Member: 4048 case InitializedEntity::EK_Result: 4049 case InitializedEntity::EK_New: 4050 case InitializedEntity::EK_Variable: 4051 case InitializedEntity::EK_Base: 4052 case InitializedEntity::EK_Delegating: 4053 case InitializedEntity::EK_VectorElement: 4054 case InitializedEntity::EK_ComplexElement: 4055 case InitializedEntity::EK_Exception: 4056 case InitializedEntity::EK_BlockElement: 4057 return false; 4058 4059 case InitializedEntity::EK_Parameter: 4060 case InitializedEntity::EK_Temporary: 4061 return true; 4062 } 4063 4064 llvm_unreachable("missed an InitializedEntity kind?"); 4065 } 4066 4067 /// \brief Whether the given entity, when initialized with an object 4068 /// created for that initialization, requires destruction. 4069 static bool shouldDestroyTemporary(const InitializedEntity &Entity) { 4070 switch (Entity.getKind()) { 4071 case InitializedEntity::EK_Member: 4072 case InitializedEntity::EK_Result: 4073 case InitializedEntity::EK_New: 4074 case InitializedEntity::EK_Base: 4075 case InitializedEntity::EK_Delegating: 4076 case InitializedEntity::EK_VectorElement: 4077 case InitializedEntity::EK_ComplexElement: 4078 case InitializedEntity::EK_BlockElement: 4079 return false; 4080 4081 case InitializedEntity::EK_Variable: 4082 case InitializedEntity::EK_Parameter: 4083 case InitializedEntity::EK_Temporary: 4084 case InitializedEntity::EK_ArrayElement: 4085 case InitializedEntity::EK_Exception: 4086 return true; 4087 } 4088 4089 llvm_unreachable("missed an InitializedEntity kind?"); 4090 } 4091 4092 /// \brief Make a (potentially elidable) temporary copy of the object 4093 /// provided by the given initializer by calling the appropriate copy 4094 /// constructor. 4095 /// 4096 /// \param S The Sema object used for type-checking. 4097 /// 4098 /// \param T The type of the temporary object, which must either be 4099 /// the type of the initializer expression or a superclass thereof. 4100 /// 4101 /// \param Enter The entity being initialized. 4102 /// 4103 /// \param CurInit The initializer expression. 4104 /// 4105 /// \param IsExtraneousCopy Whether this is an "extraneous" copy that 4106 /// is permitted in C++03 (but not C++0x) when binding a reference to 4107 /// an rvalue. 4108 /// 4109 /// \returns An expression that copies the initializer expression into 4110 /// a temporary object, or an error expression if a copy could not be 4111 /// created. 4112 static ExprResult CopyObject(Sema &S, 4113 QualType T, 4114 const InitializedEntity &Entity, 4115 ExprResult CurInit, 4116 bool IsExtraneousCopy) { 4117 // Determine which class type we're copying to. 4118 Expr *CurInitExpr = (Expr *)CurInit.get(); 4119 CXXRecordDecl *Class = 0; 4120 if (const RecordType *Record = T->getAs<RecordType>()) 4121 Class = cast<CXXRecordDecl>(Record->getDecl()); 4122 if (!Class) 4123 return move(CurInit); 4124 4125 // C++0x [class.copy]p32: 4126 // When certain criteria are met, an implementation is allowed to 4127 // omit the copy/move construction of a class object, even if the 4128 // copy/move constructor and/or destructor for the object have 4129 // side effects. [...] 4130 // - when a temporary class object that has not been bound to a 4131 // reference (12.2) would be copied/moved to a class object 4132 // with the same cv-unqualified type, the copy/move operation 4133 // can be omitted by constructing the temporary object 4134 // directly into the target of the omitted copy/move 4135 // 4136 // Note that the other three bullets are handled elsewhere. Copy 4137 // elision for return statements and throw expressions are handled as part 4138 // of constructor initialization, while copy elision for exception handlers 4139 // is handled by the run-time. 4140 bool Elidable = CurInitExpr->isTemporaryObject(S.Context, Class); 4141 SourceLocation Loc; 4142 switch (Entity.getKind()) { 4143 case InitializedEntity::EK_Result: 4144 Loc = Entity.getReturnLoc(); 4145 break; 4146 4147 case InitializedEntity::EK_Exception: 4148 Loc = Entity.getThrowLoc(); 4149 break; 4150 4151 case InitializedEntity::EK_Variable: 4152 Loc = Entity.getDecl()->getLocation(); 4153 break; 4154 4155 case InitializedEntity::EK_ArrayElement: 4156 case InitializedEntity::EK_Member: 4157 case InitializedEntity::EK_Parameter: 4158 case InitializedEntity::EK_Temporary: 4159 case InitializedEntity::EK_New: 4160 case InitializedEntity::EK_Base: 4161 case InitializedEntity::EK_Delegating: 4162 case InitializedEntity::EK_VectorElement: 4163 case InitializedEntity::EK_ComplexElement: 4164 case InitializedEntity::EK_BlockElement: 4165 Loc = CurInitExpr->getLocStart(); 4166 break; 4167 } 4168 4169 // Make sure that the type we are copying is complete. 4170 if (S.RequireCompleteType(Loc, T, S.PDiag(diag::err_temp_copy_incomplete))) 4171 return move(CurInit); 4172 4173 // Perform overload resolution using the class's copy/move constructors. 4174 DeclContext::lookup_iterator Con, ConEnd; 4175 OverloadCandidateSet CandidateSet(Loc); 4176 for (llvm::tie(Con, ConEnd) = S.LookupConstructors(Class); 4177 Con != ConEnd; ++Con) { 4178 // Only consider copy/move constructors and constructor templates. Per 4179 // C++0x [dcl.init]p16, second bullet to class types, this 4180 // initialization is direct-initialization. 4181 CXXConstructorDecl *Constructor = 0; 4182 4183 if ((Constructor = dyn_cast<CXXConstructorDecl>(*Con))) { 4184 // Handle copy/moveconstructors, only. 4185 if (!Constructor || Constructor->isInvalidDecl() || 4186 !Constructor->isCopyOrMoveConstructor() || 4187 !Constructor->isConvertingConstructor(/*AllowExplicit=*/true)) 4188 continue; 4189 4190 DeclAccessPair FoundDecl 4191 = DeclAccessPair::make(Constructor, Constructor->getAccess()); 4192 S.AddOverloadCandidate(Constructor, FoundDecl, 4193 &CurInitExpr, 1, CandidateSet); 4194 continue; 4195 } 4196 4197 // Handle constructor templates. 4198 FunctionTemplateDecl *ConstructorTmpl = cast<FunctionTemplateDecl>(*Con); 4199 if (ConstructorTmpl->isInvalidDecl()) 4200 continue; 4201 4202 Constructor = cast<CXXConstructorDecl>( 4203 ConstructorTmpl->getTemplatedDecl()); 4204 if (!Constructor->isConvertingConstructor(/*AllowExplicit=*/true)) 4205 continue; 4206 4207 // FIXME: Do we need to limit this to copy-constructor-like 4208 // candidates? 4209 DeclAccessPair FoundDecl 4210 = DeclAccessPair::make(ConstructorTmpl, ConstructorTmpl->getAccess()); 4211 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 0, 4212 &CurInitExpr, 1, CandidateSet, true); 4213 } 4214 4215 bool HadMultipleCandidates = (CandidateSet.size() > 1); 4216 4217 OverloadCandidateSet::iterator Best; 4218 switch (CandidateSet.BestViableFunction(S, Loc, Best)) { 4219 case OR_Success: 4220 break; 4221 4222 case OR_No_Viable_Function: 4223 S.Diag(Loc, IsExtraneousCopy && !S.isSFINAEContext() 4224 ? diag::ext_rvalue_to_reference_temp_copy_no_viable 4225 : diag::err_temp_copy_no_viable) 4226 << (int)Entity.getKind() << CurInitExpr->getType() 4227 << CurInitExpr->getSourceRange(); 4228 CandidateSet.NoteCandidates(S, OCD_AllCandidates, &CurInitExpr, 1); 4229 if (!IsExtraneousCopy || S.isSFINAEContext()) 4230 return ExprError(); 4231 return move(CurInit); 4232 4233 case OR_Ambiguous: 4234 S.Diag(Loc, diag::err_temp_copy_ambiguous) 4235 << (int)Entity.getKind() << CurInitExpr->getType() 4236 << CurInitExpr->getSourceRange(); 4237 CandidateSet.NoteCandidates(S, OCD_ViableCandidates, &CurInitExpr, 1); 4238 return ExprError(); 4239 4240 case OR_Deleted: 4241 S.Diag(Loc, diag::err_temp_copy_deleted) 4242 << (int)Entity.getKind() << CurInitExpr->getType() 4243 << CurInitExpr->getSourceRange(); 4244 S.Diag(Best->Function->getLocation(), diag::note_unavailable_here) 4245 << 1 << Best->Function->isDeleted(); 4246 return ExprError(); 4247 } 4248 4249 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function); 4250 ASTOwningVector<Expr*> ConstructorArgs(S); 4251 CurInit.release(); // Ownership transferred into MultiExprArg, below. 4252 4253 S.CheckConstructorAccess(Loc, Constructor, Entity, 4254 Best->FoundDecl.getAccess(), IsExtraneousCopy); 4255 4256 if (IsExtraneousCopy) { 4257 // If this is a totally extraneous copy for C++03 reference 4258 // binding purposes, just return the original initialization 4259 // expression. We don't generate an (elided) copy operation here 4260 // because doing so would require us to pass down a flag to avoid 4261 // infinite recursion, where each step adds another extraneous, 4262 // elidable copy. 4263 4264 // Instantiate the default arguments of any extra parameters in 4265 // the selected copy constructor, as if we were going to create a 4266 // proper call to the copy constructor. 4267 for (unsigned I = 1, N = Constructor->getNumParams(); I != N; ++I) { 4268 ParmVarDecl *Parm = Constructor->getParamDecl(I); 4269 if (S.RequireCompleteType(Loc, Parm->getType(), 4270 S.PDiag(diag::err_call_incomplete_argument))) 4271 break; 4272 4273 // Build the default argument expression; we don't actually care 4274 // if this succeeds or not, because this routine will complain 4275 // if there was a problem. 4276 S.BuildCXXDefaultArgExpr(Loc, Constructor, Parm); 4277 } 4278 4279 return S.Owned(CurInitExpr); 4280 } 4281 4282 S.MarkDeclarationReferenced(Loc, Constructor); 4283 4284 // Determine the arguments required to actually perform the 4285 // constructor call (we might have derived-to-base conversions, or 4286 // the copy constructor may have default arguments). 4287 if (S.CompleteConstructorCall(Constructor, MultiExprArg(&CurInitExpr, 1), 4288 Loc, ConstructorArgs)) 4289 return ExprError(); 4290 4291 // Actually perform the constructor call. 4292 CurInit = S.BuildCXXConstructExpr(Loc, T, Constructor, Elidable, 4293 move_arg(ConstructorArgs), 4294 HadMultipleCandidates, 4295 /*ZeroInit*/ false, 4296 CXXConstructExpr::CK_Complete, 4297 SourceRange()); 4298 4299 // If we're supposed to bind temporaries, do so. 4300 if (!CurInit.isInvalid() && shouldBindAsTemporary(Entity)) 4301 CurInit = S.MaybeBindToTemporary(CurInit.takeAs<Expr>()); 4302 return move(CurInit); 4303 } 4304 4305 void InitializationSequence::PrintInitLocationNote(Sema &S, 4306 const InitializedEntity &Entity) { 4307 if (Entity.getKind() == InitializedEntity::EK_Parameter && Entity.getDecl()) { 4308 if (Entity.getDecl()->getLocation().isInvalid()) 4309 return; 4310 4311 if (Entity.getDecl()->getDeclName()) 4312 S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_named_here) 4313 << Entity.getDecl()->getDeclName(); 4314 else 4315 S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_here); 4316 } 4317 } 4318 4319 static bool isReferenceBinding(const InitializationSequence::Step &s) { 4320 return s.Kind == InitializationSequence::SK_BindReference || 4321 s.Kind == InitializationSequence::SK_BindReferenceToTemporary; 4322 } 4323 4324 ExprResult 4325 InitializationSequence::Perform(Sema &S, 4326 const InitializedEntity &Entity, 4327 const InitializationKind &Kind, 4328 MultiExprArg Args, 4329 QualType *ResultType) { 4330 if (Failed()) { 4331 unsigned NumArgs = Args.size(); 4332 Diagnose(S, Entity, Kind, (Expr **)Args.release(), NumArgs); 4333 return ExprError(); 4334 } 4335 4336 if (getKind() == DependentSequence) { 4337 // If the declaration is a non-dependent, incomplete array type 4338 // that has an initializer, then its type will be completed once 4339 // the initializer is instantiated. 4340 if (ResultType && !Entity.getType()->isDependentType() && 4341 Args.size() == 1) { 4342 QualType DeclType = Entity.getType(); 4343 if (const IncompleteArrayType *ArrayT 4344 = S.Context.getAsIncompleteArrayType(DeclType)) { 4345 // FIXME: We don't currently have the ability to accurately 4346 // compute the length of an initializer list without 4347 // performing full type-checking of the initializer list 4348 // (since we have to determine where braces are implicitly 4349 // introduced and such). So, we fall back to making the array 4350 // type a dependently-sized array type with no specified 4351 // bound. 4352 if (isa<InitListExpr>((Expr *)Args.get()[0])) { 4353 SourceRange Brackets; 4354 4355 // Scavange the location of the brackets from the entity, if we can. 4356 if (DeclaratorDecl *DD = Entity.getDecl()) { 4357 if (TypeSourceInfo *TInfo = DD->getTypeSourceInfo()) { 4358 TypeLoc TL = TInfo->getTypeLoc(); 4359 if (IncompleteArrayTypeLoc *ArrayLoc 4360 = dyn_cast<IncompleteArrayTypeLoc>(&TL)) 4361 Brackets = ArrayLoc->getBracketsRange(); 4362 } 4363 } 4364 4365 *ResultType 4366 = S.Context.getDependentSizedArrayType(ArrayT->getElementType(), 4367 /*NumElts=*/0, 4368 ArrayT->getSizeModifier(), 4369 ArrayT->getIndexTypeCVRQualifiers(), 4370 Brackets); 4371 } 4372 4373 } 4374 } 4375 assert(Kind.getKind() == InitializationKind::IK_Copy || 4376 Kind.isExplicitCast()); 4377 return ExprResult(Args.release()[0]); 4378 } 4379 4380 // No steps means no initialization. 4381 if (Steps.empty()) 4382 return S.Owned((Expr *)0); 4383 4384 QualType DestType = Entity.getType().getNonReferenceType(); 4385 // FIXME: Ugly hack around the fact that Entity.getType() is not 4386 // the same as Entity.getDecl()->getType() in cases involving type merging, 4387 // and we want latter when it makes sense. 4388 if (ResultType) 4389 *ResultType = Entity.getDecl() ? Entity.getDecl()->getType() : 4390 Entity.getType(); 4391 4392 ExprResult CurInit = S.Owned((Expr *)0); 4393 4394 // For initialization steps that start with a single initializer, 4395 // grab the only argument out the Args and place it into the "current" 4396 // initializer. 4397 switch (Steps.front().Kind) { 4398 case SK_ResolveAddressOfOverloadedFunction: 4399 case SK_CastDerivedToBaseRValue: 4400 case SK_CastDerivedToBaseXValue: 4401 case SK_CastDerivedToBaseLValue: 4402 case SK_BindReference: 4403 case SK_BindReferenceToTemporary: 4404 case SK_ExtraneousCopyToTemporary: 4405 case SK_UserConversion: 4406 case SK_QualificationConversionLValue: 4407 case SK_QualificationConversionXValue: 4408 case SK_QualificationConversionRValue: 4409 case SK_ConversionSequence: 4410 case SK_ListConstructorCall: 4411 case SK_ListInitialization: 4412 case SK_CAssignment: 4413 case SK_StringInit: 4414 case SK_ObjCObjectConversion: 4415 case SK_ArrayInit: 4416 case SK_PassByIndirectCopyRestore: 4417 case SK_PassByIndirectRestore: 4418 case SK_ProduceObjCObject: { 4419 assert(Args.size() == 1); 4420 CurInit = Args.get()[0]; 4421 if (!CurInit.get()) return ExprError(); 4422 4423 // Read from a property when initializing something with it. 4424 if (CurInit.get()->getObjectKind() == OK_ObjCProperty) { 4425 CurInit = S.ConvertPropertyForRValue(CurInit.take()); 4426 if (CurInit.isInvalid()) 4427 return ExprError(); 4428 } 4429 break; 4430 } 4431 4432 case SK_ConstructorInitialization: 4433 case SK_ZeroInitialization: 4434 break; 4435 } 4436 4437 // Walk through the computed steps for the initialization sequence, 4438 // performing the specified conversions along the way. 4439 bool ConstructorInitRequiresZeroInit = false; 4440 for (step_iterator Step = step_begin(), StepEnd = step_end(); 4441 Step != StepEnd; ++Step) { 4442 if (CurInit.isInvalid()) 4443 return ExprError(); 4444 4445 QualType SourceType = CurInit.get() ? CurInit.get()->getType() : QualType(); 4446 4447 switch (Step->Kind) { 4448 case SK_ResolveAddressOfOverloadedFunction: 4449 // Overload resolution determined which function invoke; update the 4450 // initializer to reflect that choice. 4451 S.CheckAddressOfMemberAccess(CurInit.get(), Step->Function.FoundDecl); 4452 S.DiagnoseUseOfDecl(Step->Function.FoundDecl, Kind.getLocation()); 4453 CurInit = S.FixOverloadedFunctionReference(move(CurInit), 4454 Step->Function.FoundDecl, 4455 Step->Function.Function); 4456 break; 4457 4458 case SK_CastDerivedToBaseRValue: 4459 case SK_CastDerivedToBaseXValue: 4460 case SK_CastDerivedToBaseLValue: { 4461 // We have a derived-to-base cast that produces either an rvalue or an 4462 // lvalue. Perform that cast. 4463 4464 CXXCastPath BasePath; 4465 4466 // Casts to inaccessible base classes are allowed with C-style casts. 4467 bool IgnoreBaseAccess = Kind.isCStyleOrFunctionalCast(); 4468 if (S.CheckDerivedToBaseConversion(SourceType, Step->Type, 4469 CurInit.get()->getLocStart(), 4470 CurInit.get()->getSourceRange(), 4471 &BasePath, IgnoreBaseAccess)) 4472 return ExprError(); 4473 4474 if (S.BasePathInvolvesVirtualBase(BasePath)) { 4475 QualType T = SourceType; 4476 if (const PointerType *Pointer = T->getAs<PointerType>()) 4477 T = Pointer->getPointeeType(); 4478 if (const RecordType *RecordTy = T->getAs<RecordType>()) 4479 S.MarkVTableUsed(CurInit.get()->getLocStart(), 4480 cast<CXXRecordDecl>(RecordTy->getDecl())); 4481 } 4482 4483 ExprValueKind VK = 4484 Step->Kind == SK_CastDerivedToBaseLValue ? 4485 VK_LValue : 4486 (Step->Kind == SK_CastDerivedToBaseXValue ? 4487 VK_XValue : 4488 VK_RValue); 4489 CurInit = S.Owned(ImplicitCastExpr::Create(S.Context, 4490 Step->Type, 4491 CK_DerivedToBase, 4492 CurInit.get(), 4493 &BasePath, VK)); 4494 break; 4495 } 4496 4497 case SK_BindReference: 4498 if (FieldDecl *BitField = CurInit.get()->getBitField()) { 4499 // References cannot bind to bit fields (C++ [dcl.init.ref]p5). 4500 S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) 4501 << Entity.getType().isVolatileQualified() 4502 << BitField->getDeclName() 4503 << CurInit.get()->getSourceRange(); 4504 S.Diag(BitField->getLocation(), diag::note_bitfield_decl); 4505 return ExprError(); 4506 } 4507 4508 if (CurInit.get()->refersToVectorElement()) { 4509 // References cannot bind to vector elements. 4510 S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) 4511 << Entity.getType().isVolatileQualified() 4512 << CurInit.get()->getSourceRange(); 4513 PrintInitLocationNote(S, Entity); 4514 return ExprError(); 4515 } 4516 4517 // Reference binding does not have any corresponding ASTs. 4518 4519 // Check exception specifications 4520 if (S.CheckExceptionSpecCompatibility(CurInit.get(), DestType)) 4521 return ExprError(); 4522 4523 break; 4524 4525 case SK_BindReferenceToTemporary: 4526 // Check exception specifications 4527 if (S.CheckExceptionSpecCompatibility(CurInit.get(), DestType)) 4528 return ExprError(); 4529 4530 // Materialize the temporary into memory. 4531 CurInit = new (S.Context) MaterializeTemporaryExpr( 4532 Entity.getType().getNonReferenceType(), 4533 CurInit.get(), 4534 Entity.getType()->isLValueReferenceType()); 4535 4536 // If we're binding to an Objective-C object that has lifetime, we 4537 // need cleanups. 4538 if (S.getLangOptions().ObjCAutoRefCount && 4539 CurInit.get()->getType()->isObjCLifetimeType()) 4540 S.ExprNeedsCleanups = true; 4541 4542 break; 4543 4544 case SK_ExtraneousCopyToTemporary: 4545 CurInit = CopyObject(S, Step->Type, Entity, move(CurInit), 4546 /*IsExtraneousCopy=*/true); 4547 break; 4548 4549 case SK_UserConversion: { 4550 // We have a user-defined conversion that invokes either a constructor 4551 // or a conversion function. 4552 CastKind CastKind; 4553 bool IsCopy = false; 4554 FunctionDecl *Fn = Step->Function.Function; 4555 DeclAccessPair FoundFn = Step->Function.FoundDecl; 4556 bool HadMultipleCandidates = Step->Function.HadMultipleCandidates; 4557 bool CreatedObject = false; 4558 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Fn)) { 4559 // Build a call to the selected constructor. 4560 ASTOwningVector<Expr*> ConstructorArgs(S); 4561 SourceLocation Loc = CurInit.get()->getLocStart(); 4562 CurInit.release(); // Ownership transferred into MultiExprArg, below. 4563 4564 // Determine the arguments required to actually perform the constructor 4565 // call. 4566 Expr *Arg = CurInit.get(); 4567 if (S.CompleteConstructorCall(Constructor, 4568 MultiExprArg(&Arg, 1), 4569 Loc, ConstructorArgs)) 4570 return ExprError(); 4571 4572 // Build the an expression that constructs a temporary. 4573 CurInit = S.BuildCXXConstructExpr(Loc, Step->Type, Constructor, 4574 move_arg(ConstructorArgs), 4575 HadMultipleCandidates, 4576 /*ZeroInit*/ false, 4577 CXXConstructExpr::CK_Complete, 4578 SourceRange()); 4579 if (CurInit.isInvalid()) 4580 return ExprError(); 4581 4582 S.CheckConstructorAccess(Kind.getLocation(), Constructor, Entity, 4583 FoundFn.getAccess()); 4584 S.DiagnoseUseOfDecl(FoundFn, Kind.getLocation()); 4585 4586 CastKind = CK_ConstructorConversion; 4587 QualType Class = S.Context.getTypeDeclType(Constructor->getParent()); 4588 if (S.Context.hasSameUnqualifiedType(SourceType, Class) || 4589 S.IsDerivedFrom(SourceType, Class)) 4590 IsCopy = true; 4591 4592 CreatedObject = true; 4593 } else { 4594 // Build a call to the conversion function. 4595 CXXConversionDecl *Conversion = cast<CXXConversionDecl>(Fn); 4596 S.CheckMemberOperatorAccess(Kind.getLocation(), CurInit.get(), 0, 4597 FoundFn); 4598 S.DiagnoseUseOfDecl(FoundFn, Kind.getLocation()); 4599 4600 // FIXME: Should we move this initialization into a separate 4601 // derived-to-base conversion? I believe the answer is "no", because 4602 // we don't want to turn off access control here for c-style casts. 4603 ExprResult CurInitExprRes = 4604 S.PerformObjectArgumentInitialization(CurInit.take(), /*Qualifier=*/0, 4605 FoundFn, Conversion); 4606 if(CurInitExprRes.isInvalid()) 4607 return ExprError(); 4608 CurInit = move(CurInitExprRes); 4609 4610 // Build the actual call to the conversion function. 4611 CurInit = S.BuildCXXMemberCallExpr(CurInit.get(), FoundFn, Conversion, 4612 HadMultipleCandidates); 4613 if (CurInit.isInvalid() || !CurInit.get()) 4614 return ExprError(); 4615 4616 CastKind = CK_UserDefinedConversion; 4617 4618 CreatedObject = Conversion->getResultType()->isRecordType(); 4619 } 4620 4621 bool RequiresCopy = !IsCopy && !isReferenceBinding(Steps.back()); 4622 if (RequiresCopy || shouldBindAsTemporary(Entity)) 4623 CurInit = S.MaybeBindToTemporary(CurInit.takeAs<Expr>()); 4624 else if (CreatedObject && shouldDestroyTemporary(Entity)) { 4625 QualType T = CurInit.get()->getType(); 4626 if (const RecordType *Record = T->getAs<RecordType>()) { 4627 CXXDestructorDecl *Destructor 4628 = S.LookupDestructor(cast<CXXRecordDecl>(Record->getDecl())); 4629 S.CheckDestructorAccess(CurInit.get()->getLocStart(), Destructor, 4630 S.PDiag(diag::err_access_dtor_temp) << T); 4631 S.MarkDeclarationReferenced(CurInit.get()->getLocStart(), Destructor); 4632 S.DiagnoseUseOfDecl(Destructor, CurInit.get()->getLocStart()); 4633 } 4634 } 4635 4636 CurInit = S.Owned(ImplicitCastExpr::Create(S.Context, 4637 CurInit.get()->getType(), 4638 CastKind, CurInit.get(), 0, 4639 CurInit.get()->getValueKind())); 4640 4641 if (RequiresCopy) 4642 CurInit = CopyObject(S, Entity.getType().getNonReferenceType(), Entity, 4643 move(CurInit), /*IsExtraneousCopy=*/false); 4644 4645 break; 4646 } 4647 4648 case SK_QualificationConversionLValue: 4649 case SK_QualificationConversionXValue: 4650 case SK_QualificationConversionRValue: { 4651 // Perform a qualification conversion; these can never go wrong. 4652 ExprValueKind VK = 4653 Step->Kind == SK_QualificationConversionLValue ? 4654 VK_LValue : 4655 (Step->Kind == SK_QualificationConversionXValue ? 4656 VK_XValue : 4657 VK_RValue); 4658 CurInit = S.ImpCastExprToType(CurInit.take(), Step->Type, CK_NoOp, VK); 4659 break; 4660 } 4661 4662 case SK_ConversionSequence: { 4663 Sema::CheckedConversionKind CCK 4664 = Kind.isCStyleCast()? Sema::CCK_CStyleCast 4665 : Kind.isFunctionalCast()? Sema::CCK_FunctionalCast 4666 : Kind.isExplicitCast()? Sema::CCK_OtherCast 4667 : Sema::CCK_ImplicitConversion; 4668 ExprResult CurInitExprRes = 4669 S.PerformImplicitConversion(CurInit.get(), Step->Type, *Step->ICS, 4670 getAssignmentAction(Entity), CCK); 4671 if (CurInitExprRes.isInvalid()) 4672 return ExprError(); 4673 CurInit = move(CurInitExprRes); 4674 break; 4675 } 4676 4677 case SK_ListInitialization: { 4678 InitListExpr *InitList = cast<InitListExpr>(CurInit.get()); 4679 QualType Ty = Step->Type; 4680 InitListChecker PerformInitList(S, Entity, InitList, 4681 ResultType ? *ResultType : Ty, /*VerifyOnly=*/false, 4682 Kind.getKind() != InitializationKind::IK_Direct || 4683 !S.getLangOptions().CPlusPlus0x); 4684 if (PerformInitList.HadError()) 4685 return ExprError(); 4686 4687 CurInit.release(); 4688 CurInit = S.Owned(PerformInitList.getFullyStructuredList()); 4689 break; 4690 } 4691 4692 case SK_ListConstructorCall: 4693 assert(false && "List constructor calls not yet supported."); 4694 4695 case SK_ConstructorInitialization: { 4696 unsigned NumArgs = Args.size(); 4697 CXXConstructorDecl *Constructor 4698 = cast<CXXConstructorDecl>(Step->Function.Function); 4699 bool HadMultipleCandidates = Step->Function.HadMultipleCandidates; 4700 4701 // Build a call to the selected constructor. 4702 ASTOwningVector<Expr*> ConstructorArgs(S); 4703 SourceLocation Loc = (Kind.isCopyInit() && Kind.getEqualLoc().isValid()) 4704 ? Kind.getEqualLoc() 4705 : Kind.getLocation(); 4706 4707 if (Kind.getKind() == InitializationKind::IK_Default) { 4708 // Force even a trivial, implicit default constructor to be 4709 // semantically checked. We do this explicitly because we don't build 4710 // the definition for completely trivial constructors. 4711 CXXRecordDecl *ClassDecl = Constructor->getParent(); 4712 assert(ClassDecl && "No parent class for constructor."); 4713 if (Constructor->isDefaulted() && Constructor->isDefaultConstructor() && 4714 ClassDecl->hasTrivialDefaultConstructor() && 4715 !Constructor->isUsed(false)) 4716 S.DefineImplicitDefaultConstructor(Loc, Constructor); 4717 } 4718 4719 // Determine the arguments required to actually perform the constructor 4720 // call. 4721 if (S.CompleteConstructorCall(Constructor, move(Args), 4722 Loc, ConstructorArgs)) 4723 return ExprError(); 4724 4725 4726 if (Entity.getKind() == InitializedEntity::EK_Temporary && 4727 NumArgs != 1 && // FIXME: Hack to work around cast weirdness 4728 (Kind.getKind() == InitializationKind::IK_Direct || 4729 Kind.getKind() == InitializationKind::IK_Value)) { 4730 // An explicitly-constructed temporary, e.g., X(1, 2). 4731 unsigned NumExprs = ConstructorArgs.size(); 4732 Expr **Exprs = (Expr **)ConstructorArgs.take(); 4733 S.MarkDeclarationReferenced(Loc, Constructor); 4734 S.DiagnoseUseOfDecl(Constructor, Loc); 4735 4736 TypeSourceInfo *TSInfo = Entity.getTypeSourceInfo(); 4737 if (!TSInfo) 4738 TSInfo = S.Context.getTrivialTypeSourceInfo(Entity.getType(), Loc); 4739 4740 CurInit = S.Owned(new (S.Context) CXXTemporaryObjectExpr(S.Context, 4741 Constructor, 4742 TSInfo, 4743 Exprs, 4744 NumExprs, 4745 Kind.getParenRange(), 4746 HadMultipleCandidates, 4747 ConstructorInitRequiresZeroInit)); 4748 } else { 4749 CXXConstructExpr::ConstructionKind ConstructKind = 4750 CXXConstructExpr::CK_Complete; 4751 4752 if (Entity.getKind() == InitializedEntity::EK_Base) { 4753 ConstructKind = Entity.getBaseSpecifier()->isVirtual() ? 4754 CXXConstructExpr::CK_VirtualBase : 4755 CXXConstructExpr::CK_NonVirtualBase; 4756 } else if (Entity.getKind() == InitializedEntity::EK_Delegating) { 4757 ConstructKind = CXXConstructExpr::CK_Delegating; 4758 } 4759 4760 // Only get the parenthesis range if it is a direct construction. 4761 SourceRange parenRange = 4762 Kind.getKind() == InitializationKind::IK_Direct ? 4763 Kind.getParenRange() : SourceRange(); 4764 4765 // If the entity allows NRVO, mark the construction as elidable 4766 // unconditionally. 4767 if (Entity.allowsNRVO()) 4768 CurInit = S.BuildCXXConstructExpr(Loc, Entity.getType(), 4769 Constructor, /*Elidable=*/true, 4770 move_arg(ConstructorArgs), 4771 HadMultipleCandidates, 4772 ConstructorInitRequiresZeroInit, 4773 ConstructKind, 4774 parenRange); 4775 else 4776 CurInit = S.BuildCXXConstructExpr(Loc, Entity.getType(), 4777 Constructor, 4778 move_arg(ConstructorArgs), 4779 HadMultipleCandidates, 4780 ConstructorInitRequiresZeroInit, 4781 ConstructKind, 4782 parenRange); 4783 } 4784 if (CurInit.isInvalid()) 4785 return ExprError(); 4786 4787 // Only check access if all of that succeeded. 4788 S.CheckConstructorAccess(Loc, Constructor, Entity, 4789 Step->Function.FoundDecl.getAccess()); 4790 S.DiagnoseUseOfDecl(Step->Function.FoundDecl, Loc); 4791 4792 if (shouldBindAsTemporary(Entity)) 4793 CurInit = S.MaybeBindToTemporary(CurInit.takeAs<Expr>()); 4794 4795 break; 4796 } 4797 4798 case SK_ZeroInitialization: { 4799 step_iterator NextStep = Step; 4800 ++NextStep; 4801 if (NextStep != StepEnd && 4802 NextStep->Kind == SK_ConstructorInitialization) { 4803 // The need for zero-initialization is recorded directly into 4804 // the call to the object's constructor within the next step. 4805 ConstructorInitRequiresZeroInit = true; 4806 } else if (Kind.getKind() == InitializationKind::IK_Value && 4807 S.getLangOptions().CPlusPlus && 4808 !Kind.isImplicitValueInit()) { 4809 TypeSourceInfo *TSInfo = Entity.getTypeSourceInfo(); 4810 if (!TSInfo) 4811 TSInfo = S.Context.getTrivialTypeSourceInfo(Step->Type, 4812 Kind.getRange().getBegin()); 4813 4814 CurInit = S.Owned(new (S.Context) CXXScalarValueInitExpr( 4815 TSInfo->getType().getNonLValueExprType(S.Context), 4816 TSInfo, 4817 Kind.getRange().getEnd())); 4818 } else { 4819 CurInit = S.Owned(new (S.Context) ImplicitValueInitExpr(Step->Type)); 4820 } 4821 break; 4822 } 4823 4824 case SK_CAssignment: { 4825 QualType SourceType = CurInit.get()->getType(); 4826 ExprResult Result = move(CurInit); 4827 Sema::AssignConvertType ConvTy = 4828 S.CheckSingleAssignmentConstraints(Step->Type, Result); 4829 if (Result.isInvalid()) 4830 return ExprError(); 4831 CurInit = move(Result); 4832 4833 // If this is a call, allow conversion to a transparent union. 4834 ExprResult CurInitExprRes = move(CurInit); 4835 if (ConvTy != Sema::Compatible && 4836 Entity.getKind() == InitializedEntity::EK_Parameter && 4837 S.CheckTransparentUnionArgumentConstraints(Step->Type, CurInitExprRes) 4838 == Sema::Compatible) 4839 ConvTy = Sema::Compatible; 4840 if (CurInitExprRes.isInvalid()) 4841 return ExprError(); 4842 CurInit = move(CurInitExprRes); 4843 4844 bool Complained; 4845 if (S.DiagnoseAssignmentResult(ConvTy, Kind.getLocation(), 4846 Step->Type, SourceType, 4847 CurInit.get(), 4848 getAssignmentAction(Entity), 4849 &Complained)) { 4850 PrintInitLocationNote(S, Entity); 4851 return ExprError(); 4852 } else if (Complained) 4853 PrintInitLocationNote(S, Entity); 4854 break; 4855 } 4856 4857 case SK_StringInit: { 4858 QualType Ty = Step->Type; 4859 CheckStringInit(CurInit.get(), ResultType ? *ResultType : Ty, 4860 S.Context.getAsArrayType(Ty), S); 4861 break; 4862 } 4863 4864 case SK_ObjCObjectConversion: 4865 CurInit = S.ImpCastExprToType(CurInit.take(), Step->Type, 4866 CK_ObjCObjectLValueCast, 4867 CurInit.get()->getValueKind()); 4868 break; 4869 4870 case SK_ArrayInit: 4871 // Okay: we checked everything before creating this step. Note that 4872 // this is a GNU extension. 4873 S.Diag(Kind.getLocation(), diag::ext_array_init_copy) 4874 << Step->Type << CurInit.get()->getType() 4875 << CurInit.get()->getSourceRange(); 4876 4877 // If the destination type is an incomplete array type, update the 4878 // type accordingly. 4879 if (ResultType) { 4880 if (const IncompleteArrayType *IncompleteDest 4881 = S.Context.getAsIncompleteArrayType(Step->Type)) { 4882 if (const ConstantArrayType *ConstantSource 4883 = S.Context.getAsConstantArrayType(CurInit.get()->getType())) { 4884 *ResultType = S.Context.getConstantArrayType( 4885 IncompleteDest->getElementType(), 4886 ConstantSource->getSize(), 4887 ArrayType::Normal, 0); 4888 } 4889 } 4890 } 4891 break; 4892 4893 case SK_PassByIndirectCopyRestore: 4894 case SK_PassByIndirectRestore: 4895 checkIndirectCopyRestoreSource(S, CurInit.get()); 4896 CurInit = S.Owned(new (S.Context) 4897 ObjCIndirectCopyRestoreExpr(CurInit.take(), Step->Type, 4898 Step->Kind == SK_PassByIndirectCopyRestore)); 4899 break; 4900 4901 case SK_ProduceObjCObject: 4902 CurInit = S.Owned(ImplicitCastExpr::Create(S.Context, Step->Type, 4903 CK_ARCProduceObject, 4904 CurInit.take(), 0, VK_RValue)); 4905 break; 4906 } 4907 } 4908 4909 // Diagnose non-fatal problems with the completed initialization. 4910 if (Entity.getKind() == InitializedEntity::EK_Member && 4911 cast<FieldDecl>(Entity.getDecl())->isBitField()) 4912 S.CheckBitFieldInitialization(Kind.getLocation(), 4913 cast<FieldDecl>(Entity.getDecl()), 4914 CurInit.get()); 4915 4916 return move(CurInit); 4917 } 4918 4919 //===----------------------------------------------------------------------===// 4920 // Diagnose initialization failures 4921 //===----------------------------------------------------------------------===// 4922 bool InitializationSequence::Diagnose(Sema &S, 4923 const InitializedEntity &Entity, 4924 const InitializationKind &Kind, 4925 Expr **Args, unsigned NumArgs) { 4926 if (!Failed()) 4927 return false; 4928 4929 QualType DestType = Entity.getType(); 4930 switch (Failure) { 4931 case FK_TooManyInitsForReference: 4932 // FIXME: Customize for the initialized entity? 4933 if (NumArgs == 0) 4934 S.Diag(Kind.getLocation(), diag::err_reference_without_init) 4935 << DestType.getNonReferenceType(); 4936 else // FIXME: diagnostic below could be better! 4937 S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) 4938 << SourceRange(Args[0]->getLocStart(), Args[NumArgs - 1]->getLocEnd()); 4939 break; 4940 4941 case FK_ArrayNeedsInitList: 4942 case FK_ArrayNeedsInitListOrStringLiteral: 4943 S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) 4944 << (Failure == FK_ArrayNeedsInitListOrStringLiteral); 4945 break; 4946 4947 case FK_ArrayTypeMismatch: 4948 case FK_NonConstantArrayInit: 4949 S.Diag(Kind.getLocation(), 4950 (Failure == FK_ArrayTypeMismatch 4951 ? diag::err_array_init_different_type 4952 : diag::err_array_init_non_constant_array)) 4953 << DestType.getNonReferenceType() 4954 << Args[0]->getType() 4955 << Args[0]->getSourceRange(); 4956 break; 4957 4958 case FK_AddressOfOverloadFailed: { 4959 DeclAccessPair Found; 4960 S.ResolveAddressOfOverloadedFunction(Args[0], 4961 DestType.getNonReferenceType(), 4962 true, 4963 Found); 4964 break; 4965 } 4966 4967 case FK_ReferenceInitOverloadFailed: 4968 case FK_UserConversionOverloadFailed: 4969 switch (FailedOverloadResult) { 4970 case OR_Ambiguous: 4971 if (Failure == FK_UserConversionOverloadFailed) 4972 S.Diag(Kind.getLocation(), diag::err_typecheck_ambiguous_condition) 4973 << Args[0]->getType() << DestType 4974 << Args[0]->getSourceRange(); 4975 else 4976 S.Diag(Kind.getLocation(), diag::err_ref_init_ambiguous) 4977 << DestType << Args[0]->getType() 4978 << Args[0]->getSourceRange(); 4979 4980 FailedCandidateSet.NoteCandidates(S, OCD_ViableCandidates, Args, NumArgs); 4981 break; 4982 4983 case OR_No_Viable_Function: 4984 S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) 4985 << Args[0]->getType() << DestType.getNonReferenceType() 4986 << Args[0]->getSourceRange(); 4987 FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, Args, NumArgs); 4988 break; 4989 4990 case OR_Deleted: { 4991 S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) 4992 << Args[0]->getType() << DestType.getNonReferenceType() 4993 << Args[0]->getSourceRange(); 4994 OverloadCandidateSet::iterator Best; 4995 OverloadingResult Ovl 4996 = FailedCandidateSet.BestViableFunction(S, Kind.getLocation(), Best, 4997 true); 4998 if (Ovl == OR_Deleted) { 4999 S.Diag(Best->Function->getLocation(), diag::note_unavailable_here) 5000 << 1 << Best->Function->isDeleted(); 5001 } else { 5002 llvm_unreachable("Inconsistent overload resolution?"); 5003 } 5004 break; 5005 } 5006 5007 case OR_Success: 5008 llvm_unreachable("Conversion did not fail!"); 5009 break; 5010 } 5011 break; 5012 5013 case FK_NonConstLValueReferenceBindingToTemporary: 5014 case FK_NonConstLValueReferenceBindingToUnrelated: 5015 S.Diag(Kind.getLocation(), 5016 Failure == FK_NonConstLValueReferenceBindingToTemporary 5017 ? diag::err_lvalue_reference_bind_to_temporary 5018 : diag::err_lvalue_reference_bind_to_unrelated) 5019 << DestType.getNonReferenceType().isVolatileQualified() 5020 << DestType.getNonReferenceType() 5021 << Args[0]->getType() 5022 << Args[0]->getSourceRange(); 5023 break; 5024 5025 case FK_RValueReferenceBindingToLValue: 5026 S.Diag(Kind.getLocation(), diag::err_lvalue_to_rvalue_ref) 5027 << DestType.getNonReferenceType() << Args[0]->getType() 5028 << Args[0]->getSourceRange(); 5029 break; 5030 5031 case FK_ReferenceInitDropsQualifiers: 5032 S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) 5033 << DestType.getNonReferenceType() 5034 << Args[0]->getType() 5035 << Args[0]->getSourceRange(); 5036 break; 5037 5038 case FK_ReferenceInitFailed: 5039 S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) 5040 << DestType.getNonReferenceType() 5041 << Args[0]->isLValue() 5042 << Args[0]->getType() 5043 << Args[0]->getSourceRange(); 5044 if (DestType.getNonReferenceType()->isObjCObjectPointerType() && 5045 Args[0]->getType()->isObjCObjectPointerType()) 5046 S.EmitRelatedResultTypeNote(Args[0]); 5047 break; 5048 5049 case FK_ConversionFailed: { 5050 QualType FromType = Args[0]->getType(); 5051 S.Diag(Kind.getLocation(), diag::err_init_conversion_failed) 5052 << (int)Entity.getKind() 5053 << DestType 5054 << Args[0]->isLValue() 5055 << FromType 5056 << Args[0]->getSourceRange(); 5057 if (DestType.getNonReferenceType()->isObjCObjectPointerType() && 5058 Args[0]->getType()->isObjCObjectPointerType()) 5059 S.EmitRelatedResultTypeNote(Args[0]); 5060 break; 5061 } 5062 5063 case FK_ConversionFromPropertyFailed: 5064 // No-op. This error has already been reported. 5065 break; 5066 5067 case FK_TooManyInitsForScalar: { 5068 SourceRange R; 5069 5070 if (InitListExpr *InitList = dyn_cast<InitListExpr>(Args[0])) 5071 R = SourceRange(InitList->getInit(0)->getLocEnd(), 5072 InitList->getLocEnd()); 5073 else 5074 R = SourceRange(Args[0]->getLocEnd(), Args[NumArgs - 1]->getLocEnd()); 5075 5076 R.setBegin(S.PP.getLocForEndOfToken(R.getBegin())); 5077 if (Kind.isCStyleOrFunctionalCast()) 5078 S.Diag(Kind.getLocation(), diag::err_builtin_func_cast_more_than_one_arg) 5079 << R; 5080 else 5081 S.Diag(Kind.getLocation(), diag::err_excess_initializers) 5082 << /*scalar=*/2 << R; 5083 break; 5084 } 5085 5086 case FK_ReferenceBindingToInitList: 5087 S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) 5088 << DestType.getNonReferenceType() << Args[0]->getSourceRange(); 5089 break; 5090 5091 case FK_InitListBadDestinationType: 5092 S.Diag(Kind.getLocation(), diag::err_init_list_bad_dest_type) 5093 << (DestType->isRecordType()) << DestType << Args[0]->getSourceRange(); 5094 break; 5095 5096 case FK_ConstructorOverloadFailed: { 5097 SourceRange ArgsRange; 5098 if (NumArgs) 5099 ArgsRange = SourceRange(Args[0]->getLocStart(), 5100 Args[NumArgs - 1]->getLocEnd()); 5101 5102 // FIXME: Using "DestType" for the entity we're printing is probably 5103 // bad. 5104 switch (FailedOverloadResult) { 5105 case OR_Ambiguous: 5106 S.Diag(Kind.getLocation(), diag::err_ovl_ambiguous_init) 5107 << DestType << ArgsRange; 5108 FailedCandidateSet.NoteCandidates(S, OCD_ViableCandidates, 5109 Args, NumArgs); 5110 break; 5111 5112 case OR_No_Viable_Function: 5113 if (Kind.getKind() == InitializationKind::IK_Default && 5114 (Entity.getKind() == InitializedEntity::EK_Base || 5115 Entity.getKind() == InitializedEntity::EK_Member) && 5116 isa<CXXConstructorDecl>(S.CurContext)) { 5117 // This is implicit default initialization of a member or 5118 // base within a constructor. If no viable function was 5119 // found, notify the user that she needs to explicitly 5120 // initialize this base/member. 5121 CXXConstructorDecl *Constructor 5122 = cast<CXXConstructorDecl>(S.CurContext); 5123 if (Entity.getKind() == InitializedEntity::EK_Base) { 5124 S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) 5125 << Constructor->isImplicit() 5126 << S.Context.getTypeDeclType(Constructor->getParent()) 5127 << /*base=*/0 5128 << Entity.getType(); 5129 5130 RecordDecl *BaseDecl 5131 = Entity.getBaseSpecifier()->getType()->getAs<RecordType>() 5132 ->getDecl(); 5133 S.Diag(BaseDecl->getLocation(), diag::note_previous_decl) 5134 << S.Context.getTagDeclType(BaseDecl); 5135 } else { 5136 S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) 5137 << Constructor->isImplicit() 5138 << S.Context.getTypeDeclType(Constructor->getParent()) 5139 << /*member=*/1 5140 << Entity.getName(); 5141 S.Diag(Entity.getDecl()->getLocation(), diag::note_field_decl); 5142 5143 if (const RecordType *Record 5144 = Entity.getType()->getAs<RecordType>()) 5145 S.Diag(Record->getDecl()->getLocation(), 5146 diag::note_previous_decl) 5147 << S.Context.getTagDeclType(Record->getDecl()); 5148 } 5149 break; 5150 } 5151 5152 S.Diag(Kind.getLocation(), diag::err_ovl_no_viable_function_in_init) 5153 << DestType << ArgsRange; 5154 FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, Args, NumArgs); 5155 break; 5156 5157 case OR_Deleted: { 5158 S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) 5159 << true << DestType << ArgsRange; 5160 OverloadCandidateSet::iterator Best; 5161 OverloadingResult Ovl 5162 = FailedCandidateSet.BestViableFunction(S, Kind.getLocation(), Best); 5163 if (Ovl == OR_Deleted) { 5164 S.Diag(Best->Function->getLocation(), diag::note_unavailable_here) 5165 << 1 << Best->Function->isDeleted(); 5166 } else { 5167 llvm_unreachable("Inconsistent overload resolution?"); 5168 } 5169 break; 5170 } 5171 5172 case OR_Success: 5173 llvm_unreachable("Conversion did not fail!"); 5174 break; 5175 } 5176 break; 5177 } 5178 5179 case FK_DefaultInitOfConst: 5180 if (Entity.getKind() == InitializedEntity::EK_Member && 5181 isa<CXXConstructorDecl>(S.CurContext)) { 5182 // This is implicit default-initialization of a const member in 5183 // a constructor. Complain that it needs to be explicitly 5184 // initialized. 5185 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(S.CurContext); 5186 S.Diag(Kind.getLocation(), diag::err_uninitialized_member_in_ctor) 5187 << Constructor->isImplicit() 5188 << S.Context.getTypeDeclType(Constructor->getParent()) 5189 << /*const=*/1 5190 << Entity.getName(); 5191 S.Diag(Entity.getDecl()->getLocation(), diag::note_previous_decl) 5192 << Entity.getName(); 5193 } else { 5194 S.Diag(Kind.getLocation(), diag::err_default_init_const) 5195 << DestType << (bool)DestType->getAs<RecordType>(); 5196 } 5197 break; 5198 5199 case FK_Incomplete: 5200 S.RequireCompleteType(Kind.getLocation(), DestType, 5201 diag::err_init_incomplete_type); 5202 break; 5203 5204 case FK_ListInitializationFailed: { 5205 // Run the init list checker again to emit diagnostics. 5206 InitListExpr* InitList = cast<InitListExpr>(Args[0]); 5207 QualType DestType = Entity.getType(); 5208 InitListChecker DiagnoseInitList(S, Entity, InitList, 5209 DestType, /*VerifyOnly=*/false, 5210 Kind.getKind() != InitializationKind::IK_Direct || 5211 !S.getLangOptions().CPlusPlus0x); 5212 assert(DiagnoseInitList.HadError() && 5213 "Inconsistent init list check result."); 5214 break; 5215 } 5216 5217 case FK_PlaceholderType: { 5218 // FIXME: Already diagnosed! 5219 break; 5220 } 5221 } 5222 5223 PrintInitLocationNote(S, Entity); 5224 return true; 5225 } 5226 5227 void InitializationSequence::dump(raw_ostream &OS) const { 5228 switch (SequenceKind) { 5229 case FailedSequence: { 5230 OS << "Failed sequence: "; 5231 switch (Failure) { 5232 case FK_TooManyInitsForReference: 5233 OS << "too many initializers for reference"; 5234 break; 5235 5236 case FK_ArrayNeedsInitList: 5237 OS << "array requires initializer list"; 5238 break; 5239 5240 case FK_ArrayNeedsInitListOrStringLiteral: 5241 OS << "array requires initializer list or string literal"; 5242 break; 5243 5244 case FK_ArrayTypeMismatch: 5245 OS << "array type mismatch"; 5246 break; 5247 5248 case FK_NonConstantArrayInit: 5249 OS << "non-constant array initializer"; 5250 break; 5251 5252 case FK_AddressOfOverloadFailed: 5253 OS << "address of overloaded function failed"; 5254 break; 5255 5256 case FK_ReferenceInitOverloadFailed: 5257 OS << "overload resolution for reference initialization failed"; 5258 break; 5259 5260 case FK_NonConstLValueReferenceBindingToTemporary: 5261 OS << "non-const lvalue reference bound to temporary"; 5262 break; 5263 5264 case FK_NonConstLValueReferenceBindingToUnrelated: 5265 OS << "non-const lvalue reference bound to unrelated type"; 5266 break; 5267 5268 case FK_RValueReferenceBindingToLValue: 5269 OS << "rvalue reference bound to an lvalue"; 5270 break; 5271 5272 case FK_ReferenceInitDropsQualifiers: 5273 OS << "reference initialization drops qualifiers"; 5274 break; 5275 5276 case FK_ReferenceInitFailed: 5277 OS << "reference initialization failed"; 5278 break; 5279 5280 case FK_ConversionFailed: 5281 OS << "conversion failed"; 5282 break; 5283 5284 case FK_ConversionFromPropertyFailed: 5285 OS << "conversion from property failed"; 5286 break; 5287 5288 case FK_TooManyInitsForScalar: 5289 OS << "too many initializers for scalar"; 5290 break; 5291 5292 case FK_ReferenceBindingToInitList: 5293 OS << "referencing binding to initializer list"; 5294 break; 5295 5296 case FK_InitListBadDestinationType: 5297 OS << "initializer list for non-aggregate, non-scalar type"; 5298 break; 5299 5300 case FK_UserConversionOverloadFailed: 5301 OS << "overloading failed for user-defined conversion"; 5302 break; 5303 5304 case FK_ConstructorOverloadFailed: 5305 OS << "constructor overloading failed"; 5306 break; 5307 5308 case FK_DefaultInitOfConst: 5309 OS << "default initialization of a const variable"; 5310 break; 5311 5312 case FK_Incomplete: 5313 OS << "initialization of incomplete type"; 5314 break; 5315 5316 case FK_ListInitializationFailed: 5317 OS << "list initialization checker failure"; 5318 break; 5319 5320 case FK_PlaceholderType: 5321 OS << "initializer expression isn't contextually valid"; 5322 break; 5323 } 5324 OS << '\n'; 5325 return; 5326 } 5327 5328 case DependentSequence: 5329 OS << "Dependent sequence\n"; 5330 return; 5331 5332 case NormalSequence: 5333 OS << "Normal sequence: "; 5334 break; 5335 } 5336 5337 for (step_iterator S = step_begin(), SEnd = step_end(); S != SEnd; ++S) { 5338 if (S != step_begin()) { 5339 OS << " -> "; 5340 } 5341 5342 switch (S->Kind) { 5343 case SK_ResolveAddressOfOverloadedFunction: 5344 OS << "resolve address of overloaded function"; 5345 break; 5346 5347 case SK_CastDerivedToBaseRValue: 5348 OS << "derived-to-base case (rvalue" << S->Type.getAsString() << ")"; 5349 break; 5350 5351 case SK_CastDerivedToBaseXValue: 5352 OS << "derived-to-base case (xvalue" << S->Type.getAsString() << ")"; 5353 break; 5354 5355 case SK_CastDerivedToBaseLValue: 5356 OS << "derived-to-base case (lvalue" << S->Type.getAsString() << ")"; 5357 break; 5358 5359 case SK_BindReference: 5360 OS << "bind reference to lvalue"; 5361 break; 5362 5363 case SK_BindReferenceToTemporary: 5364 OS << "bind reference to a temporary"; 5365 break; 5366 5367 case SK_ExtraneousCopyToTemporary: 5368 OS << "extraneous C++03 copy to temporary"; 5369 break; 5370 5371 case SK_UserConversion: 5372 OS << "user-defined conversion via " << *S->Function.Function; 5373 break; 5374 5375 case SK_QualificationConversionRValue: 5376 OS << "qualification conversion (rvalue)"; 5377 5378 case SK_QualificationConversionXValue: 5379 OS << "qualification conversion (xvalue)"; 5380 5381 case SK_QualificationConversionLValue: 5382 OS << "qualification conversion (lvalue)"; 5383 break; 5384 5385 case SK_ConversionSequence: 5386 OS << "implicit conversion sequence ("; 5387 S->ICS->DebugPrint(); // FIXME: use OS 5388 OS << ")"; 5389 break; 5390 5391 case SK_ListInitialization: 5392 OS << "list aggregate initialization"; 5393 break; 5394 5395 case SK_ListConstructorCall: 5396 OS << "list initialization via constructor"; 5397 break; 5398 5399 case SK_ConstructorInitialization: 5400 OS << "constructor initialization"; 5401 break; 5402 5403 case SK_ZeroInitialization: 5404 OS << "zero initialization"; 5405 break; 5406 5407 case SK_CAssignment: 5408 OS << "C assignment"; 5409 break; 5410 5411 case SK_StringInit: 5412 OS << "string initialization"; 5413 break; 5414 5415 case SK_ObjCObjectConversion: 5416 OS << "Objective-C object conversion"; 5417 break; 5418 5419 case SK_ArrayInit: 5420 OS << "array initialization"; 5421 break; 5422 5423 case SK_PassByIndirectCopyRestore: 5424 OS << "pass by indirect copy and restore"; 5425 break; 5426 5427 case SK_PassByIndirectRestore: 5428 OS << "pass by indirect restore"; 5429 break; 5430 5431 case SK_ProduceObjCObject: 5432 OS << "Objective-C object retension"; 5433 break; 5434 } 5435 } 5436 } 5437 5438 void InitializationSequence::dump() const { 5439 dump(llvm::errs()); 5440 } 5441 5442 static void DiagnoseNarrowingInInitList( 5443 Sema& S, QualType EntityType, const Expr *InitE, 5444 bool Constant, const APValue &ConstantValue) { 5445 if (Constant) { 5446 S.Diag(InitE->getLocStart(), 5447 S.getLangOptions().CPlusPlus0x && !S.getLangOptions().MicrosoftExt 5448 ? diag::err_init_list_constant_narrowing 5449 : diag::warn_init_list_constant_narrowing) 5450 << InitE->getSourceRange() 5451 << ConstantValue 5452 << EntityType.getLocalUnqualifiedType(); 5453 } else 5454 S.Diag(InitE->getLocStart(), 5455 S.getLangOptions().CPlusPlus0x && !S.getLangOptions().MicrosoftExt 5456 ? diag::err_init_list_variable_narrowing 5457 : diag::warn_init_list_variable_narrowing) 5458 << InitE->getSourceRange() 5459 << InitE->getType().getLocalUnqualifiedType() 5460 << EntityType.getLocalUnqualifiedType(); 5461 5462 llvm::SmallString<128> StaticCast; 5463 llvm::raw_svector_ostream OS(StaticCast); 5464 OS << "static_cast<"; 5465 if (const TypedefType *TT = EntityType->getAs<TypedefType>()) { 5466 // It's important to use the typedef's name if there is one so that the 5467 // fixit doesn't break code using types like int64_t. 5468 // 5469 // FIXME: This will break if the typedef requires qualification. But 5470 // getQualifiedNameAsString() includes non-machine-parsable components. 5471 OS << *TT->getDecl(); 5472 } else if (const BuiltinType *BT = EntityType->getAs<BuiltinType>()) 5473 OS << BT->getName(S.getLangOptions()); 5474 else { 5475 // Oops, we didn't find the actual type of the variable. Don't emit a fixit 5476 // with a broken cast. 5477 return; 5478 } 5479 OS << ">("; 5480 S.Diag(InitE->getLocStart(), diag::note_init_list_narrowing_override) 5481 << InitE->getSourceRange() 5482 << FixItHint::CreateInsertion(InitE->getLocStart(), OS.str()) 5483 << FixItHint::CreateInsertion( 5484 S.getPreprocessor().getLocForEndOfToken(InitE->getLocEnd()), ")"); 5485 } 5486 5487 //===----------------------------------------------------------------------===// 5488 // Initialization helper functions 5489 //===----------------------------------------------------------------------===// 5490 bool 5491 Sema::CanPerformCopyInitialization(const InitializedEntity &Entity, 5492 ExprResult Init) { 5493 if (Init.isInvalid()) 5494 return false; 5495 5496 Expr *InitE = Init.get(); 5497 assert(InitE && "No initialization expression"); 5498 5499 InitializationKind Kind = InitializationKind::CreateCopy(SourceLocation(), 5500 SourceLocation()); 5501 InitializationSequence Seq(*this, Entity, Kind, &InitE, 1); 5502 return !Seq.Failed(); 5503 } 5504 5505 ExprResult 5506 Sema::PerformCopyInitialization(const InitializedEntity &Entity, 5507 SourceLocation EqualLoc, 5508 ExprResult Init, 5509 bool TopLevelOfInitList) { 5510 if (Init.isInvalid()) 5511 return ExprError(); 5512 5513 Expr *InitE = Init.get(); 5514 assert(InitE && "No initialization expression?"); 5515 5516 if (EqualLoc.isInvalid()) 5517 EqualLoc = InitE->getLocStart(); 5518 5519 InitializationKind Kind = InitializationKind::CreateCopy(InitE->getLocStart(), 5520 EqualLoc); 5521 InitializationSequence Seq(*this, Entity, Kind, &InitE, 1); 5522 Init.release(); 5523 5524 bool Constant = false; 5525 APValue Result; 5526 if (TopLevelOfInitList && 5527 Seq.endsWithNarrowing(Context, InitE, &Constant, &Result)) { 5528 DiagnoseNarrowingInInitList(*this, Entity.getType(), InitE, 5529 Constant, Result); 5530 } 5531 return Seq.Perform(*this, Entity, Kind, MultiExprArg(&InitE, 1)); 5532 } 5533