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