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