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