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