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