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