SemaExprCXX.cpp revision 3ea9e33ea25e0c2b12db56418ba3f994eb662c04
1//===--- SemaExprCXX.cpp - Semantic Analysis for Expressions --------------===//
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/// \file
11/// \brief Implements semantic analysis for C++ expressions.
12///
13//===----------------------------------------------------------------------===//
14
15#include "clang/Sema/SemaInternal.h"
16#include "TreeTransform.h"
17#include "TypeLocBuilder.h"
18#include "clang/AST/ASTContext.h"
19#include "clang/AST/ASTLambda.h"
20#include "clang/AST/CXXInheritance.h"
21#include "clang/AST/CharUnits.h"
22#include "clang/AST/DeclObjC.h"
23#include "clang/AST/EvaluatedExprVisitor.h"
24#include "clang/AST/ExprCXX.h"
25#include "clang/AST/ExprObjC.h"
26#include "clang/AST/RecursiveASTVisitor.h"
27#include "clang/AST/TypeLoc.h"
28#include "clang/Basic/PartialDiagnostic.h"
29#include "clang/Basic/TargetInfo.h"
30#include "clang/Lex/Preprocessor.h"
31#include "clang/Sema/DeclSpec.h"
32#include "clang/Sema/Initialization.h"
33#include "clang/Sema/Lookup.h"
34#include "clang/Sema/ParsedTemplate.h"
35#include "clang/Sema/Scope.h"
36#include "clang/Sema/ScopeInfo.h"
37#include "clang/Sema/SemaLambda.h"
38#include "clang/Sema/TemplateDeduction.h"
39#include "llvm/ADT/APInt.h"
40#include "llvm/ADT/STLExtras.h"
41#include "llvm/Support/ErrorHandling.h"
42using namespace clang;
43using namespace sema;
44
45/// \brief Handle the result of the special case name lookup for inheriting
46/// constructor declarations. 'NS::X::X' and 'NS::X<...>::X' are treated as
47/// constructor names in member using declarations, even if 'X' is not the
48/// name of the corresponding type.
49ParsedType Sema::getInheritingConstructorName(CXXScopeSpec &SS,
50                                              SourceLocation NameLoc,
51                                              IdentifierInfo &Name) {
52  NestedNameSpecifier *NNS = SS.getScopeRep();
53
54  // Convert the nested-name-specifier into a type.
55  QualType Type;
56  switch (NNS->getKind()) {
57  case NestedNameSpecifier::TypeSpec:
58  case NestedNameSpecifier::TypeSpecWithTemplate:
59    Type = QualType(NNS->getAsType(), 0);
60    break;
61
62  case NestedNameSpecifier::Identifier:
63    // Strip off the last layer of the nested-name-specifier and build a
64    // typename type for it.
65    assert(NNS->getAsIdentifier() == &Name && "not a constructor name");
66    Type = Context.getDependentNameType(ETK_None, NNS->getPrefix(),
67                                        NNS->getAsIdentifier());
68    break;
69
70  case NestedNameSpecifier::Global:
71  case NestedNameSpecifier::Super:
72  case NestedNameSpecifier::Namespace:
73  case NestedNameSpecifier::NamespaceAlias:
74    llvm_unreachable("Nested name specifier is not a type for inheriting ctor");
75  }
76
77  // This reference to the type is located entirely at the location of the
78  // final identifier in the qualified-id.
79  return CreateParsedType(Type,
80                          Context.getTrivialTypeSourceInfo(Type, NameLoc));
81}
82
83ParsedType Sema::getDestructorName(SourceLocation TildeLoc,
84                                   IdentifierInfo &II,
85                                   SourceLocation NameLoc,
86                                   Scope *S, CXXScopeSpec &SS,
87                                   ParsedType ObjectTypePtr,
88                                   bool EnteringContext) {
89  // Determine where to perform name lookup.
90
91  // FIXME: This area of the standard is very messy, and the current
92  // wording is rather unclear about which scopes we search for the
93  // destructor name; see core issues 399 and 555. Issue 399 in
94  // particular shows where the current description of destructor name
95  // lookup is completely out of line with existing practice, e.g.,
96  // this appears to be ill-formed:
97  //
98  //   namespace N {
99  //     template <typename T> struct S {
100  //       ~S();
101  //     };
102  //   }
103  //
104  //   void f(N::S<int>* s) {
105  //     s->N::S<int>::~S();
106  //   }
107  //
108  // See also PR6358 and PR6359.
109  // For this reason, we're currently only doing the C++03 version of this
110  // code; the C++0x version has to wait until we get a proper spec.
111  QualType SearchType;
112  DeclContext *LookupCtx = nullptr;
113  bool isDependent = false;
114  bool LookInScope = false;
115
116  if (SS.isInvalid())
117    return ParsedType();
118
119  // If we have an object type, it's because we are in a
120  // pseudo-destructor-expression or a member access expression, and
121  // we know what type we're looking for.
122  if (ObjectTypePtr)
123    SearchType = GetTypeFromParser(ObjectTypePtr);
124
125  if (SS.isSet()) {
126    NestedNameSpecifier *NNS = SS.getScopeRep();
127
128    bool AlreadySearched = false;
129    bool LookAtPrefix = true;
130    // C++11 [basic.lookup.qual]p6:
131    //   If a pseudo-destructor-name (5.2.4) contains a nested-name-specifier,
132    //   the type-names are looked up as types in the scope designated by the
133    //   nested-name-specifier. Similarly, in a qualified-id of the form:
134    //
135    //     nested-name-specifier[opt] class-name :: ~ class-name
136    //
137    //   the second class-name is looked up in the same scope as the first.
138    //
139    // Here, we determine whether the code below is permitted to look at the
140    // prefix of the nested-name-specifier.
141    DeclContext *DC = computeDeclContext(SS, EnteringContext);
142    if (DC && DC->isFileContext()) {
143      AlreadySearched = true;
144      LookupCtx = DC;
145      isDependent = false;
146    } else if (DC && isa<CXXRecordDecl>(DC)) {
147      LookAtPrefix = false;
148      LookInScope = true;
149    }
150
151    // The second case from the C++03 rules quoted further above.
152    NestedNameSpecifier *Prefix = nullptr;
153    if (AlreadySearched) {
154      // Nothing left to do.
155    } else if (LookAtPrefix && (Prefix = NNS->getPrefix())) {
156      CXXScopeSpec PrefixSS;
157      PrefixSS.Adopt(NestedNameSpecifierLoc(Prefix, SS.location_data()));
158      LookupCtx = computeDeclContext(PrefixSS, EnteringContext);
159      isDependent = isDependentScopeSpecifier(PrefixSS);
160    } else if (ObjectTypePtr) {
161      LookupCtx = computeDeclContext(SearchType);
162      isDependent = SearchType->isDependentType();
163    } else {
164      LookupCtx = computeDeclContext(SS, EnteringContext);
165      isDependent = LookupCtx && LookupCtx->isDependentContext();
166    }
167  } else if (ObjectTypePtr) {
168    // C++ [basic.lookup.classref]p3:
169    //   If the unqualified-id is ~type-name, the type-name is looked up
170    //   in the context of the entire postfix-expression. If the type T
171    //   of the object expression is of a class type C, the type-name is
172    //   also looked up in the scope of class C. At least one of the
173    //   lookups shall find a name that refers to (possibly
174    //   cv-qualified) T.
175    LookupCtx = computeDeclContext(SearchType);
176    isDependent = SearchType->isDependentType();
177    assert((isDependent || !SearchType->isIncompleteType()) &&
178           "Caller should have completed object type");
179
180    LookInScope = true;
181  } else {
182    // Perform lookup into the current scope (only).
183    LookInScope = true;
184  }
185
186  TypeDecl *NonMatchingTypeDecl = nullptr;
187  LookupResult Found(*this, &II, NameLoc, LookupOrdinaryName);
188  for (unsigned Step = 0; Step != 2; ++Step) {
189    // Look for the name first in the computed lookup context (if we
190    // have one) and, if that fails to find a match, in the scope (if
191    // we're allowed to look there).
192    Found.clear();
193    if (Step == 0 && LookupCtx)
194      LookupQualifiedName(Found, LookupCtx);
195    else if (Step == 1 && LookInScope && S)
196      LookupName(Found, S);
197    else
198      continue;
199
200    // FIXME: Should we be suppressing ambiguities here?
201    if (Found.isAmbiguous())
202      return ParsedType();
203
204    if (TypeDecl *Type = Found.getAsSingle<TypeDecl>()) {
205      QualType T = Context.getTypeDeclType(Type);
206      MarkAnyDeclReferenced(Type->getLocation(), Type, /*OdrUse=*/false);
207
208      if (SearchType.isNull() || SearchType->isDependentType() ||
209          Context.hasSameUnqualifiedType(T, SearchType)) {
210        // We found our type!
211
212        return CreateParsedType(T,
213                                Context.getTrivialTypeSourceInfo(T, NameLoc));
214      }
215
216      if (!SearchType.isNull())
217        NonMatchingTypeDecl = Type;
218    }
219
220    // If the name that we found is a class template name, and it is
221    // the same name as the template name in the last part of the
222    // nested-name-specifier (if present) or the object type, then
223    // this is the destructor for that class.
224    // FIXME: This is a workaround until we get real drafting for core
225    // issue 399, for which there isn't even an obvious direction.
226    if (ClassTemplateDecl *Template = Found.getAsSingle<ClassTemplateDecl>()) {
227      QualType MemberOfType;
228      if (SS.isSet()) {
229        if (DeclContext *Ctx = computeDeclContext(SS, EnteringContext)) {
230          // Figure out the type of the context, if it has one.
231          if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Ctx))
232            MemberOfType = Context.getTypeDeclType(Record);
233        }
234      }
235      if (MemberOfType.isNull())
236        MemberOfType = SearchType;
237
238      if (MemberOfType.isNull())
239        continue;
240
241      // We're referring into a class template specialization. If the
242      // class template we found is the same as the template being
243      // specialized, we found what we are looking for.
244      if (const RecordType *Record = MemberOfType->getAs<RecordType>()) {
245        if (ClassTemplateSpecializationDecl *Spec
246              = dyn_cast<ClassTemplateSpecializationDecl>(Record->getDecl())) {
247          if (Spec->getSpecializedTemplate()->getCanonicalDecl() ==
248                Template->getCanonicalDecl())
249            return CreateParsedType(
250                MemberOfType,
251                Context.getTrivialTypeSourceInfo(MemberOfType, NameLoc));
252        }
253
254        continue;
255      }
256
257      // We're referring to an unresolved class template
258      // specialization. Determine whether we class template we found
259      // is the same as the template being specialized or, if we don't
260      // know which template is being specialized, that it at least
261      // has the same name.
262      if (const TemplateSpecializationType *SpecType
263            = MemberOfType->getAs<TemplateSpecializationType>()) {
264        TemplateName SpecName = SpecType->getTemplateName();
265
266        // The class template we found is the same template being
267        // specialized.
268        if (TemplateDecl *SpecTemplate = SpecName.getAsTemplateDecl()) {
269          if (SpecTemplate->getCanonicalDecl() == Template->getCanonicalDecl())
270            return CreateParsedType(
271                MemberOfType,
272                Context.getTrivialTypeSourceInfo(MemberOfType, NameLoc));
273
274          continue;
275        }
276
277        // The class template we found has the same name as the
278        // (dependent) template name being specialized.
279        if (DependentTemplateName *DepTemplate
280                                    = SpecName.getAsDependentTemplateName()) {
281          if (DepTemplate->isIdentifier() &&
282              DepTemplate->getIdentifier() == Template->getIdentifier())
283            return CreateParsedType(
284                MemberOfType,
285                Context.getTrivialTypeSourceInfo(MemberOfType, NameLoc));
286
287          continue;
288        }
289      }
290    }
291  }
292
293  if (isDependent) {
294    // We didn't find our type, but that's okay: it's dependent
295    // anyway.
296
297    // FIXME: What if we have no nested-name-specifier?
298    QualType T = CheckTypenameType(ETK_None, SourceLocation(),
299                                   SS.getWithLocInContext(Context),
300                                   II, NameLoc);
301    return ParsedType::make(T);
302  }
303
304  if (NonMatchingTypeDecl) {
305    QualType T = Context.getTypeDeclType(NonMatchingTypeDecl);
306    Diag(NameLoc, diag::err_destructor_expr_type_mismatch)
307      << T << SearchType;
308    Diag(NonMatchingTypeDecl->getLocation(), diag::note_destructor_type_here)
309      << T;
310  } else if (ObjectTypePtr)
311    Diag(NameLoc, diag::err_ident_in_dtor_not_a_type)
312      << &II;
313  else {
314    SemaDiagnosticBuilder DtorDiag = Diag(NameLoc,
315                                          diag::err_destructor_class_name);
316    if (S) {
317      const DeclContext *Ctx = S->getEntity();
318      if (const CXXRecordDecl *Class = dyn_cast_or_null<CXXRecordDecl>(Ctx))
319        DtorDiag << FixItHint::CreateReplacement(SourceRange(NameLoc),
320                                                 Class->getNameAsString());
321    }
322  }
323
324  return ParsedType();
325}
326
327ParsedType Sema::getDestructorType(const DeclSpec& DS, ParsedType ObjectType) {
328    if (DS.getTypeSpecType() == DeclSpec::TST_error || !ObjectType)
329      return ParsedType();
330    assert(DS.getTypeSpecType() == DeclSpec::TST_decltype
331           && "only get destructor types from declspecs");
332    QualType T = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc());
333    QualType SearchType = GetTypeFromParser(ObjectType);
334    if (SearchType->isDependentType() || Context.hasSameUnqualifiedType(SearchType, T)) {
335      return ParsedType::make(T);
336    }
337
338    Diag(DS.getTypeSpecTypeLoc(), diag::err_destructor_expr_type_mismatch)
339      << T << SearchType;
340    return ParsedType();
341}
342
343bool Sema::checkLiteralOperatorId(const CXXScopeSpec &SS,
344                                  const UnqualifiedId &Name) {
345  assert(Name.getKind() == UnqualifiedId::IK_LiteralOperatorId);
346
347  if (!SS.isValid())
348    return false;
349
350  switch (SS.getScopeRep()->getKind()) {
351  case NestedNameSpecifier::Identifier:
352  case NestedNameSpecifier::TypeSpec:
353  case NestedNameSpecifier::TypeSpecWithTemplate:
354    // Per C++11 [over.literal]p2, literal operators can only be declared at
355    // namespace scope. Therefore, this unqualified-id cannot name anything.
356    // Reject it early, because we have no AST representation for this in the
357    // case where the scope is dependent.
358    Diag(Name.getLocStart(), diag::err_literal_operator_id_outside_namespace)
359      << SS.getScopeRep();
360    return true;
361
362  case NestedNameSpecifier::Global:
363  case NestedNameSpecifier::Super:
364  case NestedNameSpecifier::Namespace:
365  case NestedNameSpecifier::NamespaceAlias:
366    return false;
367  }
368
369  llvm_unreachable("unknown nested name specifier kind");
370}
371
372/// \brief Build a C++ typeid expression with a type operand.
373ExprResult Sema::BuildCXXTypeId(QualType TypeInfoType,
374                                SourceLocation TypeidLoc,
375                                TypeSourceInfo *Operand,
376                                SourceLocation RParenLoc) {
377  // C++ [expr.typeid]p4:
378  //   The top-level cv-qualifiers of the lvalue expression or the type-id
379  //   that is the operand of typeid are always ignored.
380  //   If the type of the type-id is a class type or a reference to a class
381  //   type, the class shall be completely-defined.
382  Qualifiers Quals;
383  QualType T
384    = Context.getUnqualifiedArrayType(Operand->getType().getNonReferenceType(),
385                                      Quals);
386  if (T->getAs<RecordType>() &&
387      RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid))
388    return ExprError();
389
390  if (T->isVariablyModifiedType())
391    return ExprError(Diag(TypeidLoc, diag::err_variably_modified_typeid) << T);
392
393  return new (Context) CXXTypeidExpr(TypeInfoType.withConst(), Operand,
394                                     SourceRange(TypeidLoc, RParenLoc));
395}
396
397/// \brief Build a C++ typeid expression with an expression operand.
398ExprResult Sema::BuildCXXTypeId(QualType TypeInfoType,
399                                SourceLocation TypeidLoc,
400                                Expr *E,
401                                SourceLocation RParenLoc) {
402  bool WasEvaluated = false;
403  if (E && !E->isTypeDependent()) {
404    if (E->getType()->isPlaceholderType()) {
405      ExprResult result = CheckPlaceholderExpr(E);
406      if (result.isInvalid()) return ExprError();
407      E = result.get();
408    }
409
410    QualType T = E->getType();
411    if (const RecordType *RecordT = T->getAs<RecordType>()) {
412      CXXRecordDecl *RecordD = cast<CXXRecordDecl>(RecordT->getDecl());
413      // C++ [expr.typeid]p3:
414      //   [...] If the type of the expression is a class type, the class
415      //   shall be completely-defined.
416      if (RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid))
417        return ExprError();
418
419      // C++ [expr.typeid]p3:
420      //   When typeid is applied to an expression other than an glvalue of a
421      //   polymorphic class type [...] [the] expression is an unevaluated
422      //   operand. [...]
423      if (RecordD->isPolymorphic() && E->isGLValue()) {
424        // The subexpression is potentially evaluated; switch the context
425        // and recheck the subexpression.
426        ExprResult Result = TransformToPotentiallyEvaluated(E);
427        if (Result.isInvalid()) return ExprError();
428        E = Result.get();
429
430        // We require a vtable to query the type at run time.
431        MarkVTableUsed(TypeidLoc, RecordD);
432        WasEvaluated = true;
433      }
434    }
435
436    // C++ [expr.typeid]p4:
437    //   [...] If the type of the type-id is a reference to a possibly
438    //   cv-qualified type, the result of the typeid expression refers to a
439    //   std::type_info object representing the cv-unqualified referenced
440    //   type.
441    Qualifiers Quals;
442    QualType UnqualT = Context.getUnqualifiedArrayType(T, Quals);
443    if (!Context.hasSameType(T, UnqualT)) {
444      T = UnqualT;
445      E = ImpCastExprToType(E, UnqualT, CK_NoOp, E->getValueKind()).get();
446    }
447  }
448
449  if (E->getType()->isVariablyModifiedType())
450    return ExprError(Diag(TypeidLoc, diag::err_variably_modified_typeid)
451                     << E->getType());
452  else if (ActiveTemplateInstantiations.empty() &&
453           E->HasSideEffects(Context, WasEvaluated)) {
454    // The expression operand for typeid is in an unevaluated expression
455    // context, so side effects could result in unintended consequences.
456    Diag(E->getExprLoc(), WasEvaluated
457                              ? diag::warn_side_effects_typeid
458                              : diag::warn_side_effects_unevaluated_context);
459  }
460
461  return new (Context) CXXTypeidExpr(TypeInfoType.withConst(), E,
462                                     SourceRange(TypeidLoc, RParenLoc));
463}
464
465/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);
466ExprResult
467Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc,
468                     bool isType, void *TyOrExpr, SourceLocation RParenLoc) {
469  // Find the std::type_info type.
470  if (!getStdNamespace())
471    return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));
472
473  if (!CXXTypeInfoDecl) {
474    IdentifierInfo *TypeInfoII = &PP.getIdentifierTable().get("type_info");
475    LookupResult R(*this, TypeInfoII, SourceLocation(), LookupTagName);
476    LookupQualifiedName(R, getStdNamespace());
477    CXXTypeInfoDecl = R.getAsSingle<RecordDecl>();
478    // Microsoft's typeinfo doesn't have type_info in std but in the global
479    // namespace if _HAS_EXCEPTIONS is defined to 0. See PR13153.
480    if (!CXXTypeInfoDecl && LangOpts.MSVCCompat) {
481      LookupQualifiedName(R, Context.getTranslationUnitDecl());
482      CXXTypeInfoDecl = R.getAsSingle<RecordDecl>();
483    }
484    if (!CXXTypeInfoDecl)
485      return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));
486  }
487
488  if (!getLangOpts().RTTI) {
489    return ExprError(Diag(OpLoc, diag::err_no_typeid_with_fno_rtti));
490  }
491
492  QualType TypeInfoType = Context.getTypeDeclType(CXXTypeInfoDecl);
493
494  if (isType) {
495    // The operand is a type; handle it as such.
496    TypeSourceInfo *TInfo = nullptr;
497    QualType T = GetTypeFromParser(ParsedType::getFromOpaquePtr(TyOrExpr),
498                                   &TInfo);
499    if (T.isNull())
500      return ExprError();
501
502    if (!TInfo)
503      TInfo = Context.getTrivialTypeSourceInfo(T, OpLoc);
504
505    return BuildCXXTypeId(TypeInfoType, OpLoc, TInfo, RParenLoc);
506  }
507
508  // The operand is an expression.
509  return BuildCXXTypeId(TypeInfoType, OpLoc, (Expr*)TyOrExpr, RParenLoc);
510}
511
512/// \brief Build a Microsoft __uuidof expression with a type operand.
513ExprResult Sema::BuildCXXUuidof(QualType TypeInfoType,
514                                SourceLocation TypeidLoc,
515                                TypeSourceInfo *Operand,
516                                SourceLocation RParenLoc) {
517  if (!Operand->getType()->isDependentType()) {
518    bool HasMultipleGUIDs = false;
519    if (!CXXUuidofExpr::GetUuidAttrOfType(Operand->getType(),
520                                          &HasMultipleGUIDs)) {
521      if (HasMultipleGUIDs)
522        return ExprError(Diag(TypeidLoc, diag::err_uuidof_with_multiple_guids));
523      else
524        return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid));
525    }
526  }
527
528  return new (Context) CXXUuidofExpr(TypeInfoType.withConst(), Operand,
529                                     SourceRange(TypeidLoc, RParenLoc));
530}
531
532/// \brief Build a Microsoft __uuidof expression with an expression operand.
533ExprResult Sema::BuildCXXUuidof(QualType TypeInfoType,
534                                SourceLocation TypeidLoc,
535                                Expr *E,
536                                SourceLocation RParenLoc) {
537  if (!E->getType()->isDependentType()) {
538    bool HasMultipleGUIDs = false;
539    if (!CXXUuidofExpr::GetUuidAttrOfType(E->getType(), &HasMultipleGUIDs) &&
540        !E->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
541      if (HasMultipleGUIDs)
542        return ExprError(Diag(TypeidLoc, diag::err_uuidof_with_multiple_guids));
543      else
544        return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid));
545    }
546  }
547
548  return new (Context) CXXUuidofExpr(TypeInfoType.withConst(), E,
549                                     SourceRange(TypeidLoc, RParenLoc));
550}
551
552/// ActOnCXXUuidof - Parse __uuidof( type-id ) or __uuidof (expression);
553ExprResult
554Sema::ActOnCXXUuidof(SourceLocation OpLoc, SourceLocation LParenLoc,
555                     bool isType, void *TyOrExpr, SourceLocation RParenLoc) {
556  // If MSVCGuidDecl has not been cached, do the lookup.
557  if (!MSVCGuidDecl) {
558    IdentifierInfo *GuidII = &PP.getIdentifierTable().get("_GUID");
559    LookupResult R(*this, GuidII, SourceLocation(), LookupTagName);
560    LookupQualifiedName(R, Context.getTranslationUnitDecl());
561    MSVCGuidDecl = R.getAsSingle<RecordDecl>();
562    if (!MSVCGuidDecl)
563      return ExprError(Diag(OpLoc, diag::err_need_header_before_ms_uuidof));
564  }
565
566  QualType GuidType = Context.getTypeDeclType(MSVCGuidDecl);
567
568  if (isType) {
569    // The operand is a type; handle it as such.
570    TypeSourceInfo *TInfo = nullptr;
571    QualType T = GetTypeFromParser(ParsedType::getFromOpaquePtr(TyOrExpr),
572                                   &TInfo);
573    if (T.isNull())
574      return ExprError();
575
576    if (!TInfo)
577      TInfo = Context.getTrivialTypeSourceInfo(T, OpLoc);
578
579    return BuildCXXUuidof(GuidType, OpLoc, TInfo, RParenLoc);
580  }
581
582  // The operand is an expression.
583  return BuildCXXUuidof(GuidType, OpLoc, (Expr*)TyOrExpr, RParenLoc);
584}
585
586/// ActOnCXXBoolLiteral - Parse {true,false} literals.
587ExprResult
588Sema::ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind) {
589  assert((Kind == tok::kw_true || Kind == tok::kw_false) &&
590         "Unknown C++ Boolean value!");
591  return new (Context)
592      CXXBoolLiteralExpr(Kind == tok::kw_true, Context.BoolTy, OpLoc);
593}
594
595/// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
596ExprResult
597Sema::ActOnCXXNullPtrLiteral(SourceLocation Loc) {
598  return new (Context) CXXNullPtrLiteralExpr(Context.NullPtrTy, Loc);
599}
600
601/// ActOnCXXThrow - Parse throw expressions.
602ExprResult
603Sema::ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *Ex) {
604  bool IsThrownVarInScope = false;
605  if (Ex) {
606    // C++0x [class.copymove]p31:
607    //   When certain criteria are met, an implementation is allowed to omit the
608    //   copy/move construction of a class object [...]
609    //
610    //     - in a throw-expression, when the operand is the name of a
611    //       non-volatile automatic object (other than a function or catch-
612    //       clause parameter) whose scope does not extend beyond the end of the
613    //       innermost enclosing try-block (if there is one), the copy/move
614    //       operation from the operand to the exception object (15.1) can be
615    //       omitted by constructing the automatic object directly into the
616    //       exception object
617    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Ex->IgnoreParens()))
618      if (VarDecl *Var = dyn_cast<VarDecl>(DRE->getDecl())) {
619        if (Var->hasLocalStorage() && !Var->getType().isVolatileQualified()) {
620          for( ; S; S = S->getParent()) {
621            if (S->isDeclScope(Var)) {
622              IsThrownVarInScope = true;
623              break;
624            }
625
626            if (S->getFlags() &
627                (Scope::FnScope | Scope::ClassScope | Scope::BlockScope |
628                 Scope::FunctionPrototypeScope | Scope::ObjCMethodScope |
629                 Scope::TryScope))
630              break;
631          }
632        }
633      }
634  }
635
636  return BuildCXXThrow(OpLoc, Ex, IsThrownVarInScope);
637}
638
639ExprResult Sema::BuildCXXThrow(SourceLocation OpLoc, Expr *Ex,
640                               bool IsThrownVarInScope) {
641  // Don't report an error if 'throw' is used in system headers.
642  if (!getLangOpts().CXXExceptions &&
643      !getSourceManager().isInSystemHeader(OpLoc))
644    Diag(OpLoc, diag::err_exceptions_disabled) << "throw";
645
646  if (getCurScope() && getCurScope()->isOpenMPSimdDirectiveScope())
647    Diag(OpLoc, diag::err_omp_simd_region_cannot_use_stmt) << "throw";
648
649  if (Ex && !Ex->isTypeDependent()) {
650    QualType ExceptionObjectTy = Context.getExceptionObjectType(Ex->getType());
651    if (CheckCXXThrowOperand(OpLoc, ExceptionObjectTy, Ex))
652      return ExprError();
653
654    // Initialize the exception result.  This implicitly weeds out
655    // abstract types or types with inaccessible copy constructors.
656
657    // C++0x [class.copymove]p31:
658    //   When certain criteria are met, an implementation is allowed to omit the
659    //   copy/move construction of a class object [...]
660    //
661    //     - in a throw-expression, when the operand is the name of a
662    //       non-volatile automatic object (other than a function or
663    //       catch-clause
664    //       parameter) whose scope does not extend beyond the end of the
665    //       innermost enclosing try-block (if there is one), the copy/move
666    //       operation from the operand to the exception object (15.1) can be
667    //       omitted by constructing the automatic object directly into the
668    //       exception object
669    const VarDecl *NRVOVariable = nullptr;
670    if (IsThrownVarInScope)
671      NRVOVariable = getCopyElisionCandidate(QualType(), Ex, false);
672
673    InitializedEntity Entity = InitializedEntity::InitializeException(
674        OpLoc, ExceptionObjectTy,
675        /*NRVO=*/NRVOVariable != nullptr);
676    ExprResult Res = PerformMoveOrCopyInitialization(
677        Entity, NRVOVariable, QualType(), Ex, IsThrownVarInScope);
678    if (Res.isInvalid())
679      return ExprError();
680    Ex = Res.get();
681  }
682
683  return new (Context)
684      CXXThrowExpr(Ex, Context.VoidTy, OpLoc, IsThrownVarInScope);
685}
686
687static void
688collectPublicBases(CXXRecordDecl *RD,
689                   llvm::DenseMap<CXXRecordDecl *, unsigned> &SubobjectsSeen,
690                   llvm::SmallPtrSetImpl<CXXRecordDecl *> &VBases,
691                   llvm::SetVector<CXXRecordDecl *> &PublicSubobjectsSeen,
692                   bool ParentIsPublic) {
693  for (const CXXBaseSpecifier &BS : RD->bases()) {
694    CXXRecordDecl *BaseDecl = BS.getType()->getAsCXXRecordDecl();
695    bool NewSubobject;
696    // Virtual bases constitute the same subobject.  Non-virtual bases are
697    // always distinct subobjects.
698    if (BS.isVirtual())
699      NewSubobject = VBases.insert(BaseDecl).second;
700    else
701      NewSubobject = true;
702
703    if (NewSubobject)
704      ++SubobjectsSeen[BaseDecl];
705
706    // Only add subobjects which have public access throughout the entire chain.
707    bool PublicPath = ParentIsPublic && BS.getAccessSpecifier() == AS_public;
708    if (PublicPath)
709      PublicSubobjectsSeen.insert(BaseDecl);
710
711    // Recurse on to each base subobject.
712    collectPublicBases(BaseDecl, SubobjectsSeen, VBases, PublicSubobjectsSeen,
713                       PublicPath);
714  }
715}
716
717static void getUnambiguousPublicSubobjects(
718    CXXRecordDecl *RD, llvm::SmallVectorImpl<CXXRecordDecl *> &Objects) {
719  llvm::DenseMap<CXXRecordDecl *, unsigned> SubobjectsSeen;
720  llvm::SmallSet<CXXRecordDecl *, 2> VBases;
721  llvm::SetVector<CXXRecordDecl *> PublicSubobjectsSeen;
722  SubobjectsSeen[RD] = 1;
723  PublicSubobjectsSeen.insert(RD);
724  collectPublicBases(RD, SubobjectsSeen, VBases, PublicSubobjectsSeen,
725                     /*ParentIsPublic=*/true);
726
727  for (CXXRecordDecl *PublicSubobject : PublicSubobjectsSeen) {
728    // Skip ambiguous objects.
729    if (SubobjectsSeen[PublicSubobject] > 1)
730      continue;
731
732    Objects.push_back(PublicSubobject);
733  }
734}
735
736/// CheckCXXThrowOperand - Validate the operand of a throw.
737bool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc,
738                                QualType ExceptionObjectTy, Expr *E) {
739  //   If the type of the exception would be an incomplete type or a pointer
740  //   to an incomplete type other than (cv) void the program is ill-formed.
741  QualType Ty = ExceptionObjectTy;
742  bool isPointer = false;
743  if (const PointerType* Ptr = Ty->getAs<PointerType>()) {
744    Ty = Ptr->getPointeeType();
745    isPointer = true;
746  }
747  if (!isPointer || !Ty->isVoidType()) {
748    if (RequireCompleteType(ThrowLoc, Ty,
749                            isPointer ? diag::err_throw_incomplete_ptr
750                                      : diag::err_throw_incomplete,
751                            E->getSourceRange()))
752      return true;
753
754    if (RequireNonAbstractType(ThrowLoc, ExceptionObjectTy,
755                               diag::err_throw_abstract_type, E))
756      return true;
757  }
758
759  // If the exception has class type, we need additional handling.
760  CXXRecordDecl *RD = Ty->getAsCXXRecordDecl();
761  if (!RD)
762    return false;
763
764  // If we are throwing a polymorphic class type or pointer thereof,
765  // exception handling will make use of the vtable.
766  MarkVTableUsed(ThrowLoc, RD);
767
768  // If a pointer is thrown, the referenced object will not be destroyed.
769  if (isPointer)
770    return false;
771
772  // If the class has a destructor, we must be able to call it.
773  if (!RD->hasIrrelevantDestructor()) {
774    if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
775      MarkFunctionReferenced(E->getExprLoc(), Destructor);
776      CheckDestructorAccess(E->getExprLoc(), Destructor,
777                            PDiag(diag::err_access_dtor_exception) << Ty);
778      if (DiagnoseUseOfDecl(Destructor, E->getExprLoc()))
779        return true;
780    }
781  }
782
783  // The MSVC ABI creates a list of all types which can catch the exception
784  // object.  This list also references the appropriate copy constructor to call
785  // if the object is caught by value and has a non-trivial copy constructor.
786  if (Context.getTargetInfo().getCXXABI().isMicrosoft()) {
787    // We are only interested in the public, unambiguous bases contained within
788    // the exception object.  Bases which are ambiguous or otherwise
789    // inaccessible are not catchable types.
790    llvm::SmallVector<CXXRecordDecl *, 2> UnambiguousPublicSubobjects;
791    getUnambiguousPublicSubobjects(RD, UnambiguousPublicSubobjects);
792
793    for (CXXRecordDecl *Subobject : UnambiguousPublicSubobjects) {
794      // Attempt to lookup the copy constructor.  Various pieces of machinery
795      // will spring into action, like template instantiation, which means this
796      // cannot be a simple walk of the class's decls.  Instead, we must perform
797      // lookup and overload resolution.
798      CXXConstructorDecl *CD = LookupCopyingConstructor(Subobject, 0);
799      if (!CD)
800        continue;
801
802      // Mark the constructor referenced as it is used by this throw expression.
803      MarkFunctionReferenced(E->getExprLoc(), CD);
804
805      // Skip this copy constructor if it is trivial, we don't need to record it
806      // in the catchable type data.
807      if (CD->isTrivial())
808        continue;
809
810      // The copy constructor is non-trivial, create a mapping from this class
811      // type to this constructor.
812      // N.B.  The selection of copy constructor is not sensitive to this
813      // particular throw-site.  Lookup will be performed at the catch-site to
814      // ensure that the copy constructor is, in fact, accessible (via
815      // friendship or any other means).
816      Context.addCopyConstructorForExceptionObject(Subobject, CD);
817
818      // We don't keep the instantiated default argument expressions around so
819      // we must rebuild them here.
820      for (unsigned I = 1, E = CD->getNumParams(); I != E; ++I) {
821        // Skip any default arguments that we've already instantiated.
822        if (Context.getDefaultArgExprForConstructor(CD, I))
823          continue;
824
825        Expr *DefaultArg =
826            BuildCXXDefaultArgExpr(ThrowLoc, CD, CD->getParamDecl(I)).get();
827        Context.addDefaultArgExprForConstructor(CD, I, DefaultArg);
828      }
829    }
830  }
831
832  return false;
833}
834
835QualType Sema::getCurrentThisType() {
836  DeclContext *DC = getFunctionLevelDeclContext();
837  QualType ThisTy = CXXThisTypeOverride;
838  if (CXXMethodDecl *method = dyn_cast<CXXMethodDecl>(DC)) {
839    if (method && method->isInstance())
840      ThisTy = method->getThisType(Context);
841  }
842  if (ThisTy.isNull()) {
843    if (isGenericLambdaCallOperatorSpecialization(CurContext) &&
844        CurContext->getParent()->getParent()->isRecord()) {
845      // This is a generic lambda call operator that is being instantiated
846      // within a default initializer - so use the enclosing class as 'this'.
847      // There is no enclosing member function to retrieve the 'this' pointer
848      // from.
849      QualType ClassTy = Context.getTypeDeclType(
850          cast<CXXRecordDecl>(CurContext->getParent()->getParent()));
851      // There are no cv-qualifiers for 'this' within default initializers,
852      // per [expr.prim.general]p4.
853      return Context.getPointerType(ClassTy);
854    }
855  }
856  return ThisTy;
857}
858
859Sema::CXXThisScopeRAII::CXXThisScopeRAII(Sema &S,
860                                         Decl *ContextDecl,
861                                         unsigned CXXThisTypeQuals,
862                                         bool Enabled)
863  : S(S), OldCXXThisTypeOverride(S.CXXThisTypeOverride), Enabled(false)
864{
865  if (!Enabled || !ContextDecl)
866    return;
867
868  CXXRecordDecl *Record = nullptr;
869  if (ClassTemplateDecl *Template = dyn_cast<ClassTemplateDecl>(ContextDecl))
870    Record = Template->getTemplatedDecl();
871  else
872    Record = cast<CXXRecordDecl>(ContextDecl);
873
874  S.CXXThisTypeOverride
875    = S.Context.getPointerType(
876        S.Context.getRecordType(Record).withCVRQualifiers(CXXThisTypeQuals));
877
878  this->Enabled = true;
879}
880
881
882Sema::CXXThisScopeRAII::~CXXThisScopeRAII() {
883  if (Enabled) {
884    S.CXXThisTypeOverride = OldCXXThisTypeOverride;
885  }
886}
887
888static Expr *captureThis(ASTContext &Context, RecordDecl *RD,
889                         QualType ThisTy, SourceLocation Loc) {
890  FieldDecl *Field
891    = FieldDecl::Create(Context, RD, Loc, Loc, nullptr, ThisTy,
892                        Context.getTrivialTypeSourceInfo(ThisTy, Loc),
893                        nullptr, false, ICIS_NoInit);
894  Field->setImplicit(true);
895  Field->setAccess(AS_private);
896  RD->addDecl(Field);
897  return new (Context) CXXThisExpr(Loc, ThisTy, /*isImplicit*/true);
898}
899
900bool Sema::CheckCXXThisCapture(SourceLocation Loc, bool Explicit,
901    bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt) {
902  // We don't need to capture this in an unevaluated context.
903  if (isUnevaluatedContext() && !Explicit)
904    return true;
905
906  const unsigned MaxFunctionScopesIndex = FunctionScopeIndexToStopAt ?
907    *FunctionScopeIndexToStopAt : FunctionScopes.size() - 1;
908 // Otherwise, check that we can capture 'this'.
909  unsigned NumClosures = 0;
910  for (unsigned idx = MaxFunctionScopesIndex; idx != 0; idx--) {
911    if (CapturingScopeInfo *CSI =
912            dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {
913      if (CSI->CXXThisCaptureIndex != 0) {
914        // 'this' is already being captured; there isn't anything more to do.
915        break;
916      }
917      LambdaScopeInfo *LSI = dyn_cast<LambdaScopeInfo>(CSI);
918      if (LSI && isGenericLambdaCallOperatorSpecialization(LSI->CallOperator)) {
919        // This context can't implicitly capture 'this'; fail out.
920        if (BuildAndDiagnose)
921          Diag(Loc, diag::err_this_capture) << Explicit;
922        return true;
923      }
924      if (CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_LambdaByref ||
925          CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_LambdaByval ||
926          CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_Block ||
927          CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_CapturedRegion ||
928          Explicit) {
929        // This closure can capture 'this'; continue looking upwards.
930        NumClosures++;
931        Explicit = false;
932        continue;
933      }
934      // This context can't implicitly capture 'this'; fail out.
935      if (BuildAndDiagnose)
936        Diag(Loc, diag::err_this_capture) << Explicit;
937      return true;
938    }
939    break;
940  }
941  if (!BuildAndDiagnose) return false;
942  // Mark that we're implicitly capturing 'this' in all the scopes we skipped.
943  // FIXME: We need to delay this marking in PotentiallyPotentiallyEvaluated
944  // contexts.
945  for (unsigned idx = MaxFunctionScopesIndex; NumClosures;
946      --idx, --NumClosures) {
947    CapturingScopeInfo *CSI = cast<CapturingScopeInfo>(FunctionScopes[idx]);
948    Expr *ThisExpr = nullptr;
949    QualType ThisTy = getCurrentThisType();
950    if (LambdaScopeInfo *LSI = dyn_cast<LambdaScopeInfo>(CSI))
951      // For lambda expressions, build a field and an initializing expression.
952      ThisExpr = captureThis(Context, LSI->Lambda, ThisTy, Loc);
953    else if (CapturedRegionScopeInfo *RSI
954        = dyn_cast<CapturedRegionScopeInfo>(FunctionScopes[idx]))
955      ThisExpr = captureThis(Context, RSI->TheRecordDecl, ThisTy, Loc);
956
957    bool isNested = NumClosures > 1;
958    CSI->addThisCapture(isNested, Loc, ThisTy, ThisExpr);
959  }
960  return false;
961}
962
963ExprResult Sema::ActOnCXXThis(SourceLocation Loc) {
964  /// C++ 9.3.2: In the body of a non-static member function, the keyword this
965  /// is a non-lvalue expression whose value is the address of the object for
966  /// which the function is called.
967
968  QualType ThisTy = getCurrentThisType();
969  if (ThisTy.isNull()) return Diag(Loc, diag::err_invalid_this_use);
970
971  CheckCXXThisCapture(Loc);
972  return new (Context) CXXThisExpr(Loc, ThisTy, /*isImplicit=*/false);
973}
974
975bool Sema::isThisOutsideMemberFunctionBody(QualType BaseType) {
976  // If we're outside the body of a member function, then we'll have a specified
977  // type for 'this'.
978  if (CXXThisTypeOverride.isNull())
979    return false;
980
981  // Determine whether we're looking into a class that's currently being
982  // defined.
983  CXXRecordDecl *Class = BaseType->getAsCXXRecordDecl();
984  return Class && Class->isBeingDefined();
985}
986
987ExprResult
988Sema::ActOnCXXTypeConstructExpr(ParsedType TypeRep,
989                                SourceLocation LParenLoc,
990                                MultiExprArg exprs,
991                                SourceLocation RParenLoc) {
992  if (!TypeRep)
993    return ExprError();
994
995  TypeSourceInfo *TInfo;
996  QualType Ty = GetTypeFromParser(TypeRep, &TInfo);
997  if (!TInfo)
998    TInfo = Context.getTrivialTypeSourceInfo(Ty, SourceLocation());
999
1000  return BuildCXXTypeConstructExpr(TInfo, LParenLoc, exprs, RParenLoc);
1001}
1002
1003/// ActOnCXXTypeConstructExpr - Parse construction of a specified type.
1004/// Can be interpreted either as function-style casting ("int(x)")
1005/// or class type construction ("ClassType(x,y,z)")
1006/// or creation of a value-initialized type ("int()").
1007ExprResult
1008Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo,
1009                                SourceLocation LParenLoc,
1010                                MultiExprArg Exprs,
1011                                SourceLocation RParenLoc) {
1012  QualType Ty = TInfo->getType();
1013  SourceLocation TyBeginLoc = TInfo->getTypeLoc().getBeginLoc();
1014
1015  if (Ty->isDependentType() || CallExpr::hasAnyTypeDependentArguments(Exprs)) {
1016    return CXXUnresolvedConstructExpr::Create(Context, TInfo, LParenLoc, Exprs,
1017                                              RParenLoc);
1018  }
1019
1020  bool ListInitialization = LParenLoc.isInvalid();
1021  assert((!ListInitialization || (Exprs.size() == 1 && isa<InitListExpr>(Exprs[0])))
1022         && "List initialization must have initializer list as expression.");
1023  SourceRange FullRange = SourceRange(TyBeginLoc,
1024      ListInitialization ? Exprs[0]->getSourceRange().getEnd() : RParenLoc);
1025
1026  // C++ [expr.type.conv]p1:
1027  // If the expression list is a single expression, the type conversion
1028  // expression is equivalent (in definedness, and if defined in meaning) to the
1029  // corresponding cast expression.
1030  if (Exprs.size() == 1 && !ListInitialization) {
1031    Expr *Arg = Exprs[0];
1032    return BuildCXXFunctionalCastExpr(TInfo, LParenLoc, Arg, RParenLoc);
1033  }
1034
1035  QualType ElemTy = Ty;
1036  if (Ty->isArrayType()) {
1037    if (!ListInitialization)
1038      return ExprError(Diag(TyBeginLoc,
1039                            diag::err_value_init_for_array_type) << FullRange);
1040    ElemTy = Context.getBaseElementType(Ty);
1041  }
1042
1043  if (!Ty->isVoidType() &&
1044      RequireCompleteType(TyBeginLoc, ElemTy,
1045                          diag::err_invalid_incomplete_type_use, FullRange))
1046    return ExprError();
1047
1048  if (RequireNonAbstractType(TyBeginLoc, Ty,
1049                             diag::err_allocation_of_abstract_type))
1050    return ExprError();
1051
1052  InitializedEntity Entity = InitializedEntity::InitializeTemporary(TInfo);
1053  InitializationKind Kind =
1054      Exprs.size() ? ListInitialization
1055      ? InitializationKind::CreateDirectList(TyBeginLoc)
1056      : InitializationKind::CreateDirect(TyBeginLoc, LParenLoc, RParenLoc)
1057      : InitializationKind::CreateValue(TyBeginLoc, LParenLoc, RParenLoc);
1058  InitializationSequence InitSeq(*this, Entity, Kind, Exprs);
1059  ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Exprs);
1060
1061  if (Result.isInvalid() || !ListInitialization)
1062    return Result;
1063
1064  Expr *Inner = Result.get();
1065  if (CXXBindTemporaryExpr *BTE = dyn_cast_or_null<CXXBindTemporaryExpr>(Inner))
1066    Inner = BTE->getSubExpr();
1067  if (!isa<CXXTemporaryObjectExpr>(Inner)) {
1068    // If we created a CXXTemporaryObjectExpr, that node also represents the
1069    // functional cast. Otherwise, create an explicit cast to represent
1070    // the syntactic form of a functional-style cast that was used here.
1071    //
1072    // FIXME: Creating a CXXFunctionalCastExpr around a CXXConstructExpr
1073    // would give a more consistent AST representation than using a
1074    // CXXTemporaryObjectExpr. It's also weird that the functional cast
1075    // is sometimes handled by initialization and sometimes not.
1076    QualType ResultType = Result.get()->getType();
1077    Result = CXXFunctionalCastExpr::Create(
1078        Context, ResultType, Expr::getValueKindForType(TInfo->getType()), TInfo,
1079        CK_NoOp, Result.get(), /*Path=*/nullptr, LParenLoc, RParenLoc);
1080  }
1081
1082  return Result;
1083}
1084
1085/// doesUsualArrayDeleteWantSize - Answers whether the usual
1086/// operator delete[] for the given type has a size_t parameter.
1087static bool doesUsualArrayDeleteWantSize(Sema &S, SourceLocation loc,
1088                                         QualType allocType) {
1089  const RecordType *record =
1090    allocType->getBaseElementTypeUnsafe()->getAs<RecordType>();
1091  if (!record) return false;
1092
1093  // Try to find an operator delete[] in class scope.
1094
1095  DeclarationName deleteName =
1096    S.Context.DeclarationNames.getCXXOperatorName(OO_Array_Delete);
1097  LookupResult ops(S, deleteName, loc, Sema::LookupOrdinaryName);
1098  S.LookupQualifiedName(ops, record->getDecl());
1099
1100  // We're just doing this for information.
1101  ops.suppressDiagnostics();
1102
1103  // Very likely: there's no operator delete[].
1104  if (ops.empty()) return false;
1105
1106  // If it's ambiguous, it should be illegal to call operator delete[]
1107  // on this thing, so it doesn't matter if we allocate extra space or not.
1108  if (ops.isAmbiguous()) return false;
1109
1110  LookupResult::Filter filter = ops.makeFilter();
1111  while (filter.hasNext()) {
1112    NamedDecl *del = filter.next()->getUnderlyingDecl();
1113
1114    // C++0x [basic.stc.dynamic.deallocation]p2:
1115    //   A template instance is never a usual deallocation function,
1116    //   regardless of its signature.
1117    if (isa<FunctionTemplateDecl>(del)) {
1118      filter.erase();
1119      continue;
1120    }
1121
1122    // C++0x [basic.stc.dynamic.deallocation]p2:
1123    //   If class T does not declare [an operator delete[] with one
1124    //   parameter] but does declare a member deallocation function
1125    //   named operator delete[] with exactly two parameters, the
1126    //   second of which has type std::size_t, then this function
1127    //   is a usual deallocation function.
1128    if (!cast<CXXMethodDecl>(del)->isUsualDeallocationFunction()) {
1129      filter.erase();
1130      continue;
1131    }
1132  }
1133  filter.done();
1134
1135  if (!ops.isSingleResult()) return false;
1136
1137  const FunctionDecl *del = cast<FunctionDecl>(ops.getFoundDecl());
1138  return (del->getNumParams() == 2);
1139}
1140
1141/// \brief Parsed a C++ 'new' expression (C++ 5.3.4).
1142///
1143/// E.g.:
1144/// @code new (memory) int[size][4] @endcode
1145/// or
1146/// @code ::new Foo(23, "hello") @endcode
1147///
1148/// \param StartLoc The first location of the expression.
1149/// \param UseGlobal True if 'new' was prefixed with '::'.
1150/// \param PlacementLParen Opening paren of the placement arguments.
1151/// \param PlacementArgs Placement new arguments.
1152/// \param PlacementRParen Closing paren of the placement arguments.
1153/// \param TypeIdParens If the type is in parens, the source range.
1154/// \param D The type to be allocated, as well as array dimensions.
1155/// \param Initializer The initializing expression or initializer-list, or null
1156///   if there is none.
1157ExprResult
1158Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
1159                  SourceLocation PlacementLParen, MultiExprArg PlacementArgs,
1160                  SourceLocation PlacementRParen, SourceRange TypeIdParens,
1161                  Declarator &D, Expr *Initializer) {
1162  bool TypeContainsAuto = D.getDeclSpec().containsPlaceholderType();
1163
1164  Expr *ArraySize = nullptr;
1165  // If the specified type is an array, unwrap it and save the expression.
1166  if (D.getNumTypeObjects() > 0 &&
1167      D.getTypeObject(0).Kind == DeclaratorChunk::Array) {
1168     DeclaratorChunk &Chunk = D.getTypeObject(0);
1169    if (TypeContainsAuto)
1170      return ExprError(Diag(Chunk.Loc, diag::err_new_array_of_auto)
1171        << D.getSourceRange());
1172    if (Chunk.Arr.hasStatic)
1173      return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new)
1174        << D.getSourceRange());
1175    if (!Chunk.Arr.NumElts)
1176      return ExprError(Diag(Chunk.Loc, diag::err_array_new_needs_size)
1177        << D.getSourceRange());
1178
1179    ArraySize = static_cast<Expr*>(Chunk.Arr.NumElts);
1180    D.DropFirstTypeObject();
1181  }
1182
1183  // Every dimension shall be of constant size.
1184  if (ArraySize) {
1185    for (unsigned I = 0, N = D.getNumTypeObjects(); I < N; ++I) {
1186      if (D.getTypeObject(I).Kind != DeclaratorChunk::Array)
1187        break;
1188
1189      DeclaratorChunk::ArrayTypeInfo &Array = D.getTypeObject(I).Arr;
1190      if (Expr *NumElts = (Expr *)Array.NumElts) {
1191        if (!NumElts->isTypeDependent() && !NumElts->isValueDependent()) {
1192          if (getLangOpts().CPlusPlus14) {
1193	    // C++1y [expr.new]p6: Every constant-expression in a noptr-new-declarator
1194	    //   shall be a converted constant expression (5.19) of type std::size_t
1195	    //   and shall evaluate to a strictly positive value.
1196            unsigned IntWidth = Context.getTargetInfo().getIntWidth();
1197            assert(IntWidth && "Builtin type of size 0?");
1198            llvm::APSInt Value(IntWidth);
1199            Array.NumElts
1200             = CheckConvertedConstantExpression(NumElts, Context.getSizeType(), Value,
1201                                                CCEK_NewExpr)
1202                 .get();
1203          } else {
1204            Array.NumElts
1205              = VerifyIntegerConstantExpression(NumElts, nullptr,
1206                                                diag::err_new_array_nonconst)
1207                  .get();
1208          }
1209          if (!Array.NumElts)
1210            return ExprError();
1211        }
1212      }
1213    }
1214  }
1215
1216  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, /*Scope=*/nullptr);
1217  QualType AllocType = TInfo->getType();
1218  if (D.isInvalidType())
1219    return ExprError();
1220
1221  SourceRange DirectInitRange;
1222  if (ParenListExpr *List = dyn_cast_or_null<ParenListExpr>(Initializer))
1223    DirectInitRange = List->getSourceRange();
1224
1225  return BuildCXXNew(SourceRange(StartLoc, D.getLocEnd()), UseGlobal,
1226                     PlacementLParen,
1227                     PlacementArgs,
1228                     PlacementRParen,
1229                     TypeIdParens,
1230                     AllocType,
1231                     TInfo,
1232                     ArraySize,
1233                     DirectInitRange,
1234                     Initializer,
1235                     TypeContainsAuto);
1236}
1237
1238static bool isLegalArrayNewInitializer(CXXNewExpr::InitializationStyle Style,
1239                                       Expr *Init) {
1240  if (!Init)
1241    return true;
1242  if (ParenListExpr *PLE = dyn_cast<ParenListExpr>(Init))
1243    return PLE->getNumExprs() == 0;
1244  if (isa<ImplicitValueInitExpr>(Init))
1245    return true;
1246  else if (CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init))
1247    return !CCE->isListInitialization() &&
1248           CCE->getConstructor()->isDefaultConstructor();
1249  else if (Style == CXXNewExpr::ListInit) {
1250    assert(isa<InitListExpr>(Init) &&
1251           "Shouldn't create list CXXConstructExprs for arrays.");
1252    return true;
1253  }
1254  return false;
1255}
1256
1257ExprResult
1258Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
1259                  SourceLocation PlacementLParen,
1260                  MultiExprArg PlacementArgs,
1261                  SourceLocation PlacementRParen,
1262                  SourceRange TypeIdParens,
1263                  QualType AllocType,
1264                  TypeSourceInfo *AllocTypeInfo,
1265                  Expr *ArraySize,
1266                  SourceRange DirectInitRange,
1267                  Expr *Initializer,
1268                  bool TypeMayContainAuto) {
1269  SourceRange TypeRange = AllocTypeInfo->getTypeLoc().getSourceRange();
1270  SourceLocation StartLoc = Range.getBegin();
1271
1272  CXXNewExpr::InitializationStyle initStyle;
1273  if (DirectInitRange.isValid()) {
1274    assert(Initializer && "Have parens but no initializer.");
1275    initStyle = CXXNewExpr::CallInit;
1276  } else if (Initializer && isa<InitListExpr>(Initializer))
1277    initStyle = CXXNewExpr::ListInit;
1278  else {
1279    assert((!Initializer || isa<ImplicitValueInitExpr>(Initializer) ||
1280            isa<CXXConstructExpr>(Initializer)) &&
1281           "Initializer expression that cannot have been implicitly created.");
1282    initStyle = CXXNewExpr::NoInit;
1283  }
1284
1285  Expr **Inits = &Initializer;
1286  unsigned NumInits = Initializer ? 1 : 0;
1287  if (ParenListExpr *List = dyn_cast_or_null<ParenListExpr>(Initializer)) {
1288    assert(initStyle == CXXNewExpr::CallInit && "paren init for non-call init");
1289    Inits = List->getExprs();
1290    NumInits = List->getNumExprs();
1291  }
1292
1293  // C++11 [dcl.spec.auto]p6. Deduce the type which 'auto' stands in for.
1294  if (TypeMayContainAuto && AllocType->isUndeducedType()) {
1295    if (initStyle == CXXNewExpr::NoInit || NumInits == 0)
1296      return ExprError(Diag(StartLoc, diag::err_auto_new_requires_ctor_arg)
1297                       << AllocType << TypeRange);
1298    if (initStyle == CXXNewExpr::ListInit ||
1299        (NumInits == 1 && isa<InitListExpr>(Inits[0])))
1300      return ExprError(Diag(Inits[0]->getLocStart(),
1301                            diag::err_auto_new_list_init)
1302                       << AllocType << TypeRange);
1303    if (NumInits > 1) {
1304      Expr *FirstBad = Inits[1];
1305      return ExprError(Diag(FirstBad->getLocStart(),
1306                            diag::err_auto_new_ctor_multiple_expressions)
1307                       << AllocType << TypeRange);
1308    }
1309    Expr *Deduce = Inits[0];
1310    QualType DeducedType;
1311    if (DeduceAutoType(AllocTypeInfo, Deduce, DeducedType) == DAR_Failed)
1312      return ExprError(Diag(StartLoc, diag::err_auto_new_deduction_failure)
1313                       << AllocType << Deduce->getType()
1314                       << TypeRange << Deduce->getSourceRange());
1315    if (DeducedType.isNull())
1316      return ExprError();
1317    AllocType = DeducedType;
1318  }
1319
1320  // Per C++0x [expr.new]p5, the type being constructed may be a
1321  // typedef of an array type.
1322  if (!ArraySize) {
1323    if (const ConstantArrayType *Array
1324                              = Context.getAsConstantArrayType(AllocType)) {
1325      ArraySize = IntegerLiteral::Create(Context, Array->getSize(),
1326                                         Context.getSizeType(),
1327                                         TypeRange.getEnd());
1328      AllocType = Array->getElementType();
1329    }
1330  }
1331
1332  if (CheckAllocatedType(AllocType, TypeRange.getBegin(), TypeRange))
1333    return ExprError();
1334
1335  if (initStyle == CXXNewExpr::ListInit &&
1336      isStdInitializerList(AllocType, nullptr)) {
1337    Diag(AllocTypeInfo->getTypeLoc().getBeginLoc(),
1338         diag::warn_dangling_std_initializer_list)
1339        << /*at end of FE*/0 << Inits[0]->getSourceRange();
1340  }
1341
1342  // In ARC, infer 'retaining' for the allocated
1343  if (getLangOpts().ObjCAutoRefCount &&
1344      AllocType.getObjCLifetime() == Qualifiers::OCL_None &&
1345      AllocType->isObjCLifetimeType()) {
1346    AllocType = Context.getLifetimeQualifiedType(AllocType,
1347                                    AllocType->getObjCARCImplicitLifetime());
1348  }
1349
1350  QualType ResultType = Context.getPointerType(AllocType);
1351
1352  if (ArraySize && ArraySize->getType()->isNonOverloadPlaceholderType()) {
1353    ExprResult result = CheckPlaceholderExpr(ArraySize);
1354    if (result.isInvalid()) return ExprError();
1355    ArraySize = result.get();
1356  }
1357  // C++98 5.3.4p6: "The expression in a direct-new-declarator shall have
1358  //   integral or enumeration type with a non-negative value."
1359  // C++11 [expr.new]p6: The expression [...] shall be of integral or unscoped
1360  //   enumeration type, or a class type for which a single non-explicit
1361  //   conversion function to integral or unscoped enumeration type exists.
1362  // C++1y [expr.new]p6: The expression [...] is implicitly converted to
1363  //   std::size_t.
1364  if (ArraySize && !ArraySize->isTypeDependent()) {
1365    ExprResult ConvertedSize;
1366    if (getLangOpts().CPlusPlus14) {
1367      assert(Context.getTargetInfo().getIntWidth() && "Builtin type of size 0?");
1368
1369      ConvertedSize = PerformImplicitConversion(ArraySize, Context.getSizeType(),
1370						AA_Converting);
1371
1372      if (!ConvertedSize.isInvalid() &&
1373          ArraySize->getType()->getAs<RecordType>())
1374        // Diagnose the compatibility of this conversion.
1375        Diag(StartLoc, diag::warn_cxx98_compat_array_size_conversion)
1376          << ArraySize->getType() << 0 << "'size_t'";
1377    } else {
1378      class SizeConvertDiagnoser : public ICEConvertDiagnoser {
1379      protected:
1380        Expr *ArraySize;
1381
1382      public:
1383        SizeConvertDiagnoser(Expr *ArraySize)
1384            : ICEConvertDiagnoser(/*AllowScopedEnumerations*/false, false, false),
1385              ArraySize(ArraySize) {}
1386
1387        SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc,
1388                                             QualType T) override {
1389          return S.Diag(Loc, diag::err_array_size_not_integral)
1390                   << S.getLangOpts().CPlusPlus11 << T;
1391        }
1392
1393        SemaDiagnosticBuilder diagnoseIncomplete(
1394            Sema &S, SourceLocation Loc, QualType T) override {
1395          return S.Diag(Loc, diag::err_array_size_incomplete_type)
1396                   << T << ArraySize->getSourceRange();
1397        }
1398
1399        SemaDiagnosticBuilder diagnoseExplicitConv(
1400            Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override {
1401          return S.Diag(Loc, diag::err_array_size_explicit_conversion) << T << ConvTy;
1402        }
1403
1404        SemaDiagnosticBuilder noteExplicitConv(
1405            Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override {
1406          return S.Diag(Conv->getLocation(), diag::note_array_size_conversion)
1407                   << ConvTy->isEnumeralType() << ConvTy;
1408        }
1409
1410        SemaDiagnosticBuilder diagnoseAmbiguous(
1411            Sema &S, SourceLocation Loc, QualType T) override {
1412          return S.Diag(Loc, diag::err_array_size_ambiguous_conversion) << T;
1413        }
1414
1415        SemaDiagnosticBuilder noteAmbiguous(
1416            Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override {
1417          return S.Diag(Conv->getLocation(), diag::note_array_size_conversion)
1418                   << ConvTy->isEnumeralType() << ConvTy;
1419        }
1420
1421        virtual SemaDiagnosticBuilder diagnoseConversion(
1422            Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override {
1423          return S.Diag(Loc,
1424                        S.getLangOpts().CPlusPlus11
1425                          ? diag::warn_cxx98_compat_array_size_conversion
1426                          : diag::ext_array_size_conversion)
1427                   << T << ConvTy->isEnumeralType() << ConvTy;
1428        }
1429      } SizeDiagnoser(ArraySize);
1430
1431      ConvertedSize = PerformContextualImplicitConversion(StartLoc, ArraySize,
1432                                                          SizeDiagnoser);
1433    }
1434    if (ConvertedSize.isInvalid())
1435      return ExprError();
1436
1437    ArraySize = ConvertedSize.get();
1438    QualType SizeType = ArraySize->getType();
1439
1440    if (!SizeType->isIntegralOrUnscopedEnumerationType())
1441      return ExprError();
1442
1443    // C++98 [expr.new]p7:
1444    //   The expression in a direct-new-declarator shall have integral type
1445    //   with a non-negative value.
1446    //
1447    // Let's see if this is a constant < 0. If so, we reject it out of
1448    // hand. Otherwise, if it's not a constant, we must have an unparenthesized
1449    // array type.
1450    //
1451    // Note: such a construct has well-defined semantics in C++11: it throws
1452    // std::bad_array_new_length.
1453    if (!ArraySize->isValueDependent()) {
1454      llvm::APSInt Value;
1455      // We've already performed any required implicit conversion to integer or
1456      // unscoped enumeration type.
1457      if (ArraySize->isIntegerConstantExpr(Value, Context)) {
1458        if (Value < llvm::APSInt(
1459                        llvm::APInt::getNullValue(Value.getBitWidth()),
1460                                 Value.isUnsigned())) {
1461          if (getLangOpts().CPlusPlus11)
1462            Diag(ArraySize->getLocStart(),
1463                 diag::warn_typecheck_negative_array_new_size)
1464              << ArraySize->getSourceRange();
1465          else
1466            return ExprError(Diag(ArraySize->getLocStart(),
1467                                  diag::err_typecheck_negative_array_size)
1468                             << ArraySize->getSourceRange());
1469        } else if (!AllocType->isDependentType()) {
1470          unsigned ActiveSizeBits =
1471            ConstantArrayType::getNumAddressingBits(Context, AllocType, Value);
1472          if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {
1473            if (getLangOpts().CPlusPlus11)
1474              Diag(ArraySize->getLocStart(),
1475                   diag::warn_array_new_too_large)
1476                << Value.toString(10)
1477                << ArraySize->getSourceRange();
1478            else
1479              return ExprError(Diag(ArraySize->getLocStart(),
1480                                    diag::err_array_too_large)
1481                               << Value.toString(10)
1482                               << ArraySize->getSourceRange());
1483          }
1484        }
1485      } else if (TypeIdParens.isValid()) {
1486        // Can't have dynamic array size when the type-id is in parentheses.
1487        Diag(ArraySize->getLocStart(), diag::ext_new_paren_array_nonconst)
1488          << ArraySize->getSourceRange()
1489          << FixItHint::CreateRemoval(TypeIdParens.getBegin())
1490          << FixItHint::CreateRemoval(TypeIdParens.getEnd());
1491
1492        TypeIdParens = SourceRange();
1493      }
1494    }
1495
1496    // Note that we do *not* convert the argument in any way.  It can
1497    // be signed, larger than size_t, whatever.
1498  }
1499
1500  FunctionDecl *OperatorNew = nullptr;
1501  FunctionDecl *OperatorDelete = nullptr;
1502
1503  if (!AllocType->isDependentType() &&
1504      !Expr::hasAnyTypeDependentArguments(PlacementArgs) &&
1505      FindAllocationFunctions(StartLoc,
1506                              SourceRange(PlacementLParen, PlacementRParen),
1507                              UseGlobal, AllocType, ArraySize, PlacementArgs,
1508                              OperatorNew, OperatorDelete))
1509    return ExprError();
1510
1511  // If this is an array allocation, compute whether the usual array
1512  // deallocation function for the type has a size_t parameter.
1513  bool UsualArrayDeleteWantsSize = false;
1514  if (ArraySize && !AllocType->isDependentType())
1515    UsualArrayDeleteWantsSize
1516      = doesUsualArrayDeleteWantSize(*this, StartLoc, AllocType);
1517
1518  SmallVector<Expr *, 8> AllPlaceArgs;
1519  if (OperatorNew) {
1520    const FunctionProtoType *Proto =
1521        OperatorNew->getType()->getAs<FunctionProtoType>();
1522    VariadicCallType CallType = Proto->isVariadic() ? VariadicFunction
1523                                                    : VariadicDoesNotApply;
1524
1525    // We've already converted the placement args, just fill in any default
1526    // arguments. Skip the first parameter because we don't have a corresponding
1527    // argument.
1528    if (GatherArgumentsForCall(PlacementLParen, OperatorNew, Proto, 1,
1529                               PlacementArgs, AllPlaceArgs, CallType))
1530      return ExprError();
1531
1532    if (!AllPlaceArgs.empty())
1533      PlacementArgs = AllPlaceArgs;
1534
1535    // FIXME: This is wrong: PlacementArgs misses out the first (size) argument.
1536    DiagnoseSentinelCalls(OperatorNew, PlacementLParen, PlacementArgs);
1537
1538    // FIXME: Missing call to CheckFunctionCall or equivalent
1539  }
1540
1541  // Warn if the type is over-aligned and is being allocated by global operator
1542  // new.
1543  if (PlacementArgs.empty() && OperatorNew &&
1544      (OperatorNew->isImplicit() ||
1545       getSourceManager().isInSystemHeader(OperatorNew->getLocStart()))) {
1546    if (unsigned Align = Context.getPreferredTypeAlign(AllocType.getTypePtr())){
1547      unsigned SuitableAlign = Context.getTargetInfo().getSuitableAlign();
1548      if (Align > SuitableAlign)
1549        Diag(StartLoc, diag::warn_overaligned_type)
1550            << AllocType
1551            << unsigned(Align / Context.getCharWidth())
1552            << unsigned(SuitableAlign / Context.getCharWidth());
1553    }
1554  }
1555
1556  QualType InitType = AllocType;
1557  // Array 'new' can't have any initializers except empty parentheses.
1558  // Initializer lists are also allowed, in C++11. Rely on the parser for the
1559  // dialect distinction.
1560  if (ResultType->isArrayType() || ArraySize) {
1561    if (!isLegalArrayNewInitializer(initStyle, Initializer)) {
1562      SourceRange InitRange(Inits[0]->getLocStart(),
1563                            Inits[NumInits - 1]->getLocEnd());
1564      Diag(StartLoc, diag::err_new_array_init_args) << InitRange;
1565      return ExprError();
1566    }
1567    if (InitListExpr *ILE = dyn_cast_or_null<InitListExpr>(Initializer)) {
1568      // We do the initialization typechecking against the array type
1569      // corresponding to the number of initializers + 1 (to also check
1570      // default-initialization).
1571      unsigned NumElements = ILE->getNumInits() + 1;
1572      InitType = Context.getConstantArrayType(AllocType,
1573          llvm::APInt(Context.getTypeSize(Context.getSizeType()), NumElements),
1574                                              ArrayType::Normal, 0);
1575    }
1576  }
1577
1578  // If we can perform the initialization, and we've not already done so,
1579  // do it now.
1580  if (!AllocType->isDependentType() &&
1581      !Expr::hasAnyTypeDependentArguments(
1582          llvm::makeArrayRef(Inits, NumInits))) {
1583    // C++11 [expr.new]p15:
1584    //   A new-expression that creates an object of type T initializes that
1585    //   object as follows:
1586    InitializationKind Kind
1587    //     - If the new-initializer is omitted, the object is default-
1588    //       initialized (8.5); if no initialization is performed,
1589    //       the object has indeterminate value
1590      = initStyle == CXXNewExpr::NoInit
1591          ? InitializationKind::CreateDefault(TypeRange.getBegin())
1592    //     - Otherwise, the new-initializer is interpreted according to the
1593    //       initialization rules of 8.5 for direct-initialization.
1594          : initStyle == CXXNewExpr::ListInit
1595              ? InitializationKind::CreateDirectList(TypeRange.getBegin())
1596              : InitializationKind::CreateDirect(TypeRange.getBegin(),
1597                                                 DirectInitRange.getBegin(),
1598                                                 DirectInitRange.getEnd());
1599
1600    InitializedEntity Entity
1601      = InitializedEntity::InitializeNew(StartLoc, InitType);
1602    InitializationSequence InitSeq(*this, Entity, Kind, MultiExprArg(Inits, NumInits));
1603    ExprResult FullInit = InitSeq.Perform(*this, Entity, Kind,
1604                                          MultiExprArg(Inits, NumInits));
1605    if (FullInit.isInvalid())
1606      return ExprError();
1607
1608    // FullInit is our initializer; strip off CXXBindTemporaryExprs, because
1609    // we don't want the initialized object to be destructed.
1610    if (CXXBindTemporaryExpr *Binder =
1611            dyn_cast_or_null<CXXBindTemporaryExpr>(FullInit.get()))
1612      FullInit = Binder->getSubExpr();
1613
1614    Initializer = FullInit.get();
1615  }
1616
1617  // Mark the new and delete operators as referenced.
1618  if (OperatorNew) {
1619    if (DiagnoseUseOfDecl(OperatorNew, StartLoc))
1620      return ExprError();
1621    MarkFunctionReferenced(StartLoc, OperatorNew);
1622  }
1623  if (OperatorDelete) {
1624    if (DiagnoseUseOfDecl(OperatorDelete, StartLoc))
1625      return ExprError();
1626    MarkFunctionReferenced(StartLoc, OperatorDelete);
1627  }
1628
1629  // C++0x [expr.new]p17:
1630  //   If the new expression creates an array of objects of class type,
1631  //   access and ambiguity control are done for the destructor.
1632  QualType BaseAllocType = Context.getBaseElementType(AllocType);
1633  if (ArraySize && !BaseAllocType->isDependentType()) {
1634    if (const RecordType *BaseRecordType = BaseAllocType->getAs<RecordType>()) {
1635      if (CXXDestructorDecl *dtor = LookupDestructor(
1636              cast<CXXRecordDecl>(BaseRecordType->getDecl()))) {
1637        MarkFunctionReferenced(StartLoc, dtor);
1638        CheckDestructorAccess(StartLoc, dtor,
1639                              PDiag(diag::err_access_dtor)
1640                                << BaseAllocType);
1641        if (DiagnoseUseOfDecl(dtor, StartLoc))
1642          return ExprError();
1643      }
1644    }
1645  }
1646
1647  return new (Context)
1648      CXXNewExpr(Context, UseGlobal, OperatorNew, OperatorDelete,
1649                 UsualArrayDeleteWantsSize, PlacementArgs, TypeIdParens,
1650                 ArraySize, initStyle, Initializer, ResultType, AllocTypeInfo,
1651                 Range, DirectInitRange);
1652}
1653
1654/// \brief Checks that a type is suitable as the allocated type
1655/// in a new-expression.
1656bool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc,
1657                              SourceRange R) {
1658  // C++ 5.3.4p1: "[The] type shall be a complete object type, but not an
1659  //   abstract class type or array thereof.
1660  if (AllocType->isFunctionType())
1661    return Diag(Loc, diag::err_bad_new_type)
1662      << AllocType << 0 << R;
1663  else if (AllocType->isReferenceType())
1664    return Diag(Loc, diag::err_bad_new_type)
1665      << AllocType << 1 << R;
1666  else if (!AllocType->isDependentType() &&
1667           RequireCompleteType(Loc, AllocType, diag::err_new_incomplete_type,R))
1668    return true;
1669  else if (RequireNonAbstractType(Loc, AllocType,
1670                                  diag::err_allocation_of_abstract_type))
1671    return true;
1672  else if (AllocType->isVariablyModifiedType())
1673    return Diag(Loc, diag::err_variably_modified_new_type)
1674             << AllocType;
1675  else if (unsigned AddressSpace = AllocType.getAddressSpace())
1676    return Diag(Loc, diag::err_address_space_qualified_new)
1677      << AllocType.getUnqualifiedType() << AddressSpace;
1678  else if (getLangOpts().ObjCAutoRefCount) {
1679    if (const ArrayType *AT = Context.getAsArrayType(AllocType)) {
1680      QualType BaseAllocType = Context.getBaseElementType(AT);
1681      if (BaseAllocType.getObjCLifetime() == Qualifiers::OCL_None &&
1682          BaseAllocType->isObjCLifetimeType())
1683        return Diag(Loc, diag::err_arc_new_array_without_ownership)
1684          << BaseAllocType;
1685    }
1686  }
1687
1688  return false;
1689}
1690
1691/// \brief Determine whether the given function is a non-placement
1692/// deallocation function.
1693static bool isNonPlacementDeallocationFunction(Sema &S, FunctionDecl *FD) {
1694  if (FD->isInvalidDecl())
1695    return false;
1696
1697  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FD))
1698    return Method->isUsualDeallocationFunction();
1699
1700  if (FD->getOverloadedOperator() != OO_Delete &&
1701      FD->getOverloadedOperator() != OO_Array_Delete)
1702    return false;
1703
1704  if (FD->getNumParams() == 1)
1705    return true;
1706
1707  return S.getLangOpts().SizedDeallocation && FD->getNumParams() == 2 &&
1708         S.Context.hasSameUnqualifiedType(FD->getParamDecl(1)->getType(),
1709                                          S.Context.getSizeType());
1710}
1711
1712/// FindAllocationFunctions - Finds the overloads of operator new and delete
1713/// that are appropriate for the allocation.
1714bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
1715                                   bool UseGlobal, QualType AllocType,
1716                                   bool IsArray, MultiExprArg PlaceArgs,
1717                                   FunctionDecl *&OperatorNew,
1718                                   FunctionDecl *&OperatorDelete) {
1719  // --- Choosing an allocation function ---
1720  // C++ 5.3.4p8 - 14 & 18
1721  // 1) If UseGlobal is true, only look in the global scope. Else, also look
1722  //   in the scope of the allocated class.
1723  // 2) If an array size is given, look for operator new[], else look for
1724  //   operator new.
1725  // 3) The first argument is always size_t. Append the arguments from the
1726  //   placement form.
1727
1728  SmallVector<Expr*, 8> AllocArgs(1 + PlaceArgs.size());
1729  // We don't care about the actual value of this argument.
1730  // FIXME: Should the Sema create the expression and embed it in the syntax
1731  // tree? Or should the consumer just recalculate the value?
1732  IntegerLiteral Size(Context, llvm::APInt::getNullValue(
1733                      Context.getTargetInfo().getPointerWidth(0)),
1734                      Context.getSizeType(),
1735                      SourceLocation());
1736  AllocArgs[0] = &Size;
1737  std::copy(PlaceArgs.begin(), PlaceArgs.end(), AllocArgs.begin() + 1);
1738
1739  // C++ [expr.new]p8:
1740  //   If the allocated type is a non-array type, the allocation
1741  //   function's name is operator new and the deallocation function's
1742  //   name is operator delete. If the allocated type is an array
1743  //   type, the allocation function's name is operator new[] and the
1744  //   deallocation function's name is operator delete[].
1745  DeclarationName NewName = Context.DeclarationNames.getCXXOperatorName(
1746                                        IsArray ? OO_Array_New : OO_New);
1747  DeclarationName DeleteName = Context.DeclarationNames.getCXXOperatorName(
1748                                        IsArray ? OO_Array_Delete : OO_Delete);
1749
1750  QualType AllocElemType = Context.getBaseElementType(AllocType);
1751
1752  if (AllocElemType->isRecordType() && !UseGlobal) {
1753    CXXRecordDecl *Record
1754      = cast<CXXRecordDecl>(AllocElemType->getAs<RecordType>()->getDecl());
1755    if (FindAllocationOverload(StartLoc, Range, NewName, AllocArgs, Record,
1756                               /*AllowMissing=*/true, OperatorNew))
1757      return true;
1758  }
1759
1760  if (!OperatorNew) {
1761    // Didn't find a member overload. Look for a global one.
1762    DeclareGlobalNewDelete();
1763    DeclContext *TUDecl = Context.getTranslationUnitDecl();
1764    bool FallbackEnabled = IsArray && Context.getLangOpts().MSVCCompat;
1765    if (FindAllocationOverload(StartLoc, Range, NewName, AllocArgs, TUDecl,
1766                               /*AllowMissing=*/FallbackEnabled, OperatorNew,
1767                               /*Diagnose=*/!FallbackEnabled)) {
1768      if (!FallbackEnabled)
1769        return true;
1770
1771      // MSVC will fall back on trying to find a matching global operator new
1772      // if operator new[] cannot be found.  Also, MSVC will leak by not
1773      // generating a call to operator delete or operator delete[], but we
1774      // will not replicate that bug.
1775      NewName = Context.DeclarationNames.getCXXOperatorName(OO_New);
1776      DeleteName = Context.DeclarationNames.getCXXOperatorName(OO_Delete);
1777      if (FindAllocationOverload(StartLoc, Range, NewName, AllocArgs, TUDecl,
1778                               /*AllowMissing=*/false, OperatorNew))
1779      return true;
1780    }
1781  }
1782
1783  // We don't need an operator delete if we're running under
1784  // -fno-exceptions.
1785  if (!getLangOpts().Exceptions) {
1786    OperatorDelete = nullptr;
1787    return false;
1788  }
1789
1790  // C++ [expr.new]p19:
1791  //
1792  //   If the new-expression begins with a unary :: operator, the
1793  //   deallocation function's name is looked up in the global
1794  //   scope. Otherwise, if the allocated type is a class type T or an
1795  //   array thereof, the deallocation function's name is looked up in
1796  //   the scope of T. If this lookup fails to find the name, or if
1797  //   the allocated type is not a class type or array thereof, the
1798  //   deallocation function's name is looked up in the global scope.
1799  LookupResult FoundDelete(*this, DeleteName, StartLoc, LookupOrdinaryName);
1800  if (AllocElemType->isRecordType() && !UseGlobal) {
1801    CXXRecordDecl *RD
1802      = cast<CXXRecordDecl>(AllocElemType->getAs<RecordType>()->getDecl());
1803    LookupQualifiedName(FoundDelete, RD);
1804  }
1805  if (FoundDelete.isAmbiguous())
1806    return true; // FIXME: clean up expressions?
1807
1808  if (FoundDelete.empty()) {
1809    DeclareGlobalNewDelete();
1810    LookupQualifiedName(FoundDelete, Context.getTranslationUnitDecl());
1811  }
1812
1813  FoundDelete.suppressDiagnostics();
1814
1815  SmallVector<std::pair<DeclAccessPair,FunctionDecl*>, 2> Matches;
1816
1817  // Whether we're looking for a placement operator delete is dictated
1818  // by whether we selected a placement operator new, not by whether
1819  // we had explicit placement arguments.  This matters for things like
1820  //   struct A { void *operator new(size_t, int = 0); ... };
1821  //   A *a = new A()
1822  bool isPlacementNew = (!PlaceArgs.empty() || OperatorNew->param_size() != 1);
1823
1824  if (isPlacementNew) {
1825    // C++ [expr.new]p20:
1826    //   A declaration of a placement deallocation function matches the
1827    //   declaration of a placement allocation function if it has the
1828    //   same number of parameters and, after parameter transformations
1829    //   (8.3.5), all parameter types except the first are
1830    //   identical. [...]
1831    //
1832    // To perform this comparison, we compute the function type that
1833    // the deallocation function should have, and use that type both
1834    // for template argument deduction and for comparison purposes.
1835    //
1836    // FIXME: this comparison should ignore CC and the like.
1837    QualType ExpectedFunctionType;
1838    {
1839      const FunctionProtoType *Proto
1840        = OperatorNew->getType()->getAs<FunctionProtoType>();
1841
1842      SmallVector<QualType, 4> ArgTypes;
1843      ArgTypes.push_back(Context.VoidPtrTy);
1844      for (unsigned I = 1, N = Proto->getNumParams(); I < N; ++I)
1845        ArgTypes.push_back(Proto->getParamType(I));
1846
1847      FunctionProtoType::ExtProtoInfo EPI;
1848      EPI.Variadic = Proto->isVariadic();
1849
1850      ExpectedFunctionType
1851        = Context.getFunctionType(Context.VoidTy, ArgTypes, EPI);
1852    }
1853
1854    for (LookupResult::iterator D = FoundDelete.begin(),
1855                             DEnd = FoundDelete.end();
1856         D != DEnd; ++D) {
1857      FunctionDecl *Fn = nullptr;
1858      if (FunctionTemplateDecl *FnTmpl
1859            = dyn_cast<FunctionTemplateDecl>((*D)->getUnderlyingDecl())) {
1860        // Perform template argument deduction to try to match the
1861        // expected function type.
1862        TemplateDeductionInfo Info(StartLoc);
1863        if (DeduceTemplateArguments(FnTmpl, nullptr, ExpectedFunctionType, Fn,
1864                                    Info))
1865          continue;
1866      } else
1867        Fn = cast<FunctionDecl>((*D)->getUnderlyingDecl());
1868
1869      if (Context.hasSameType(Fn->getType(), ExpectedFunctionType))
1870        Matches.push_back(std::make_pair(D.getPair(), Fn));
1871    }
1872  } else {
1873    // C++ [expr.new]p20:
1874    //   [...] Any non-placement deallocation function matches a
1875    //   non-placement allocation function. [...]
1876    for (LookupResult::iterator D = FoundDelete.begin(),
1877                             DEnd = FoundDelete.end();
1878         D != DEnd; ++D) {
1879      if (FunctionDecl *Fn = dyn_cast<FunctionDecl>((*D)->getUnderlyingDecl()))
1880        if (isNonPlacementDeallocationFunction(*this, Fn))
1881          Matches.push_back(std::make_pair(D.getPair(), Fn));
1882    }
1883
1884    // C++1y [expr.new]p22:
1885    //   For a non-placement allocation function, the normal deallocation
1886    //   function lookup is used
1887    // C++1y [expr.delete]p?:
1888    //   If [...] deallocation function lookup finds both a usual deallocation
1889    //   function with only a pointer parameter and a usual deallocation
1890    //   function with both a pointer parameter and a size parameter, then the
1891    //   selected deallocation function shall be the one with two parameters.
1892    //   Otherwise, the selected deallocation function shall be the function
1893    //   with one parameter.
1894    if (getLangOpts().SizedDeallocation && Matches.size() == 2) {
1895      if (Matches[0].second->getNumParams() == 1)
1896        Matches.erase(Matches.begin());
1897      else
1898        Matches.erase(Matches.begin() + 1);
1899      assert(Matches[0].second->getNumParams() == 2 &&
1900             "found an unexpected usual deallocation function");
1901    }
1902  }
1903
1904  // C++ [expr.new]p20:
1905  //   [...] If the lookup finds a single matching deallocation
1906  //   function, that function will be called; otherwise, no
1907  //   deallocation function will be called.
1908  if (Matches.size() == 1) {
1909    OperatorDelete = Matches[0].second;
1910
1911    // C++0x [expr.new]p20:
1912    //   If the lookup finds the two-parameter form of a usual
1913    //   deallocation function (3.7.4.2) and that function, considered
1914    //   as a placement deallocation function, would have been
1915    //   selected as a match for the allocation function, the program
1916    //   is ill-formed.
1917    if (!PlaceArgs.empty() && getLangOpts().CPlusPlus11 &&
1918        isNonPlacementDeallocationFunction(*this, OperatorDelete)) {
1919      Diag(StartLoc, diag::err_placement_new_non_placement_delete)
1920        << SourceRange(PlaceArgs.front()->getLocStart(),
1921                       PlaceArgs.back()->getLocEnd());
1922      if (!OperatorDelete->isImplicit())
1923        Diag(OperatorDelete->getLocation(), diag::note_previous_decl)
1924          << DeleteName;
1925    } else {
1926      CheckAllocationAccess(StartLoc, Range, FoundDelete.getNamingClass(),
1927                            Matches[0].first);
1928    }
1929  }
1930
1931  return false;
1932}
1933
1934/// \brief Find an fitting overload for the allocation function
1935/// in the specified scope.
1936///
1937/// \param StartLoc The location of the 'new' token.
1938/// \param Range The range of the placement arguments.
1939/// \param Name The name of the function ('operator new' or 'operator new[]').
1940/// \param Args The placement arguments specified.
1941/// \param Ctx The scope in which we should search; either a class scope or the
1942///        translation unit.
1943/// \param AllowMissing If \c true, report an error if we can't find any
1944///        allocation functions. Otherwise, succeed but don't fill in \p
1945///        Operator.
1946/// \param Operator Filled in with the found allocation function. Unchanged if
1947///        no allocation function was found.
1948/// \param Diagnose If \c true, issue errors if the allocation function is not
1949///        usable.
1950bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range,
1951                                  DeclarationName Name, MultiExprArg Args,
1952                                  DeclContext *Ctx,
1953                                  bool AllowMissing, FunctionDecl *&Operator,
1954                                  bool Diagnose) {
1955  LookupResult R(*this, Name, StartLoc, LookupOrdinaryName);
1956  LookupQualifiedName(R, Ctx);
1957  if (R.empty()) {
1958    if (AllowMissing || !Diagnose)
1959      return false;
1960    return Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
1961      << Name << Range;
1962  }
1963
1964  if (R.isAmbiguous())
1965    return true;
1966
1967  R.suppressDiagnostics();
1968
1969  OverloadCandidateSet Candidates(StartLoc, OverloadCandidateSet::CSK_Normal);
1970  for (LookupResult::iterator Alloc = R.begin(), AllocEnd = R.end();
1971       Alloc != AllocEnd; ++Alloc) {
1972    // Even member operator new/delete are implicitly treated as
1973    // static, so don't use AddMemberCandidate.
1974    NamedDecl *D = (*Alloc)->getUnderlyingDecl();
1975
1976    if (FunctionTemplateDecl *FnTemplate = dyn_cast<FunctionTemplateDecl>(D)) {
1977      AddTemplateOverloadCandidate(FnTemplate, Alloc.getPair(),
1978                                   /*ExplicitTemplateArgs=*/nullptr,
1979                                   Args, Candidates,
1980                                   /*SuppressUserConversions=*/false);
1981      continue;
1982    }
1983
1984    FunctionDecl *Fn = cast<FunctionDecl>(D);
1985    AddOverloadCandidate(Fn, Alloc.getPair(), Args, Candidates,
1986                         /*SuppressUserConversions=*/false);
1987  }
1988
1989  // Do the resolution.
1990  OverloadCandidateSet::iterator Best;
1991  switch (Candidates.BestViableFunction(*this, StartLoc, Best)) {
1992  case OR_Success: {
1993    // Got one!
1994    FunctionDecl *FnDecl = Best->Function;
1995    if (CheckAllocationAccess(StartLoc, Range, R.getNamingClass(),
1996                              Best->FoundDecl, Diagnose) == AR_inaccessible)
1997      return true;
1998
1999    Operator = FnDecl;
2000    return false;
2001  }
2002
2003  case OR_No_Viable_Function:
2004    if (Diagnose) {
2005      Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
2006        << Name << Range;
2007      Candidates.NoteCandidates(*this, OCD_AllCandidates, Args);
2008    }
2009    return true;
2010
2011  case OR_Ambiguous:
2012    if (Diagnose) {
2013      Diag(StartLoc, diag::err_ovl_ambiguous_call)
2014        << Name << Range;
2015      Candidates.NoteCandidates(*this, OCD_ViableCandidates, Args);
2016    }
2017    return true;
2018
2019  case OR_Deleted: {
2020    if (Diagnose) {
2021      Diag(StartLoc, diag::err_ovl_deleted_call)
2022        << Best->Function->isDeleted()
2023        << Name
2024        << getDeletedOrUnavailableSuffix(Best->Function)
2025        << Range;
2026      Candidates.NoteCandidates(*this, OCD_AllCandidates, Args);
2027    }
2028    return true;
2029  }
2030  }
2031  llvm_unreachable("Unreachable, bad result from BestViableFunction");
2032}
2033
2034
2035/// DeclareGlobalNewDelete - Declare the global forms of operator new and
2036/// delete. These are:
2037/// @code
2038///   // C++03:
2039///   void* operator new(std::size_t) throw(std::bad_alloc);
2040///   void* operator new[](std::size_t) throw(std::bad_alloc);
2041///   void operator delete(void *) throw();
2042///   void operator delete[](void *) throw();
2043///   // C++11:
2044///   void* operator new(std::size_t);
2045///   void* operator new[](std::size_t);
2046///   void operator delete(void *) noexcept;
2047///   void operator delete[](void *) noexcept;
2048///   // C++1y:
2049///   void* operator new(std::size_t);
2050///   void* operator new[](std::size_t);
2051///   void operator delete(void *) noexcept;
2052///   void operator delete[](void *) noexcept;
2053///   void operator delete(void *, std::size_t) noexcept;
2054///   void operator delete[](void *, std::size_t) noexcept;
2055/// @endcode
2056/// Note that the placement and nothrow forms of new are *not* implicitly
2057/// declared. Their use requires including \<new\>.
2058void Sema::DeclareGlobalNewDelete() {
2059  if (GlobalNewDeleteDeclared)
2060    return;
2061
2062  // C++ [basic.std.dynamic]p2:
2063  //   [...] The following allocation and deallocation functions (18.4) are
2064  //   implicitly declared in global scope in each translation unit of a
2065  //   program
2066  //
2067  //     C++03:
2068  //     void* operator new(std::size_t) throw(std::bad_alloc);
2069  //     void* operator new[](std::size_t) throw(std::bad_alloc);
2070  //     void  operator delete(void*) throw();
2071  //     void  operator delete[](void*) throw();
2072  //     C++11:
2073  //     void* operator new(std::size_t);
2074  //     void* operator new[](std::size_t);
2075  //     void  operator delete(void*) noexcept;
2076  //     void  operator delete[](void*) noexcept;
2077  //     C++1y:
2078  //     void* operator new(std::size_t);
2079  //     void* operator new[](std::size_t);
2080  //     void  operator delete(void*) noexcept;
2081  //     void  operator delete[](void*) noexcept;
2082  //     void  operator delete(void*, std::size_t) noexcept;
2083  //     void  operator delete[](void*, std::size_t) noexcept;
2084  //
2085  //   These implicit declarations introduce only the function names operator
2086  //   new, operator new[], operator delete, operator delete[].
2087  //
2088  // Here, we need to refer to std::bad_alloc, so we will implicitly declare
2089  // "std" or "bad_alloc" as necessary to form the exception specification.
2090  // However, we do not make these implicit declarations visible to name
2091  // lookup.
2092  if (!StdBadAlloc && !getLangOpts().CPlusPlus11) {
2093    // The "std::bad_alloc" class has not yet been declared, so build it
2094    // implicitly.
2095    StdBadAlloc = CXXRecordDecl::Create(Context, TTK_Class,
2096                                        getOrCreateStdNamespace(),
2097                                        SourceLocation(), SourceLocation(),
2098                                      &PP.getIdentifierTable().get("bad_alloc"),
2099                                        nullptr);
2100    getStdBadAlloc()->setImplicit(true);
2101  }
2102
2103  GlobalNewDeleteDeclared = true;
2104
2105  QualType VoidPtr = Context.getPointerType(Context.VoidTy);
2106  QualType SizeT = Context.getSizeType();
2107  bool AssumeSaneOperatorNew = getLangOpts().AssumeSaneOperatorNew;
2108
2109  DeclareGlobalAllocationFunction(
2110      Context.DeclarationNames.getCXXOperatorName(OO_New),
2111      VoidPtr, SizeT, QualType(), AssumeSaneOperatorNew);
2112  DeclareGlobalAllocationFunction(
2113      Context.DeclarationNames.getCXXOperatorName(OO_Array_New),
2114      VoidPtr, SizeT, QualType(), AssumeSaneOperatorNew);
2115  DeclareGlobalAllocationFunction(
2116      Context.DeclarationNames.getCXXOperatorName(OO_Delete),
2117      Context.VoidTy, VoidPtr);
2118  DeclareGlobalAllocationFunction(
2119      Context.DeclarationNames.getCXXOperatorName(OO_Array_Delete),
2120      Context.VoidTy, VoidPtr);
2121  if (getLangOpts().SizedDeallocation) {
2122    DeclareGlobalAllocationFunction(
2123        Context.DeclarationNames.getCXXOperatorName(OO_Delete),
2124        Context.VoidTy, VoidPtr, Context.getSizeType());
2125    DeclareGlobalAllocationFunction(
2126        Context.DeclarationNames.getCXXOperatorName(OO_Array_Delete),
2127        Context.VoidTy, VoidPtr, Context.getSizeType());
2128  }
2129}
2130
2131/// DeclareGlobalAllocationFunction - Declares a single implicit global
2132/// allocation function if it doesn't already exist.
2133void Sema::DeclareGlobalAllocationFunction(DeclarationName Name,
2134                                           QualType Return,
2135                                           QualType Param1, QualType Param2,
2136                                           bool AddRestrictAttr) {
2137  DeclContext *GlobalCtx = Context.getTranslationUnitDecl();
2138  unsigned NumParams = Param2.isNull() ? 1 : 2;
2139
2140  // Check if this function is already declared.
2141  DeclContext::lookup_result R = GlobalCtx->lookup(Name);
2142  for (DeclContext::lookup_iterator Alloc = R.begin(), AllocEnd = R.end();
2143       Alloc != AllocEnd; ++Alloc) {
2144    // Only look at non-template functions, as it is the predefined,
2145    // non-templated allocation function we are trying to declare here.
2146    if (FunctionDecl *Func = dyn_cast<FunctionDecl>(*Alloc)) {
2147      if (Func->getNumParams() == NumParams) {
2148        QualType InitialParam1Type =
2149            Context.getCanonicalType(Func->getParamDecl(0)
2150                                         ->getType().getUnqualifiedType());
2151        QualType InitialParam2Type =
2152            NumParams == 2
2153                ? Context.getCanonicalType(Func->getParamDecl(1)
2154                                               ->getType().getUnqualifiedType())
2155                : QualType();
2156        // FIXME: Do we need to check for default arguments here?
2157        if (InitialParam1Type == Param1 &&
2158            (NumParams == 1 || InitialParam2Type == Param2)) {
2159          if (AddRestrictAttr && !Func->hasAttr<RestrictAttr>())
2160            Func->addAttr(RestrictAttr::CreateImplicit(
2161                Context, RestrictAttr::GNU_malloc));
2162          // Make the function visible to name lookup, even if we found it in
2163          // an unimported module. It either is an implicitly-declared global
2164          // allocation function, or is suppressing that function.
2165          Func->setHidden(false);
2166          return;
2167        }
2168      }
2169    }
2170  }
2171
2172  FunctionProtoType::ExtProtoInfo EPI;
2173
2174  QualType BadAllocType;
2175  bool HasBadAllocExceptionSpec
2176    = (Name.getCXXOverloadedOperator() == OO_New ||
2177       Name.getCXXOverloadedOperator() == OO_Array_New);
2178  if (HasBadAllocExceptionSpec) {
2179    if (!getLangOpts().CPlusPlus11) {
2180      BadAllocType = Context.getTypeDeclType(getStdBadAlloc());
2181      assert(StdBadAlloc && "Must have std::bad_alloc declared");
2182      EPI.ExceptionSpec.Type = EST_Dynamic;
2183      EPI.ExceptionSpec.Exceptions = llvm::makeArrayRef(BadAllocType);
2184    }
2185  } else {
2186    EPI.ExceptionSpec =
2187        getLangOpts().CPlusPlus11 ? EST_BasicNoexcept : EST_DynamicNone;
2188  }
2189
2190  QualType Params[] = { Param1, Param2 };
2191
2192  QualType FnType = Context.getFunctionType(
2193      Return, llvm::makeArrayRef(Params, NumParams), EPI);
2194  FunctionDecl *Alloc =
2195    FunctionDecl::Create(Context, GlobalCtx, SourceLocation(),
2196                         SourceLocation(), Name,
2197                         FnType, /*TInfo=*/nullptr, SC_None, false, true);
2198  Alloc->setImplicit();
2199
2200  // Implicit sized deallocation functions always have default visibility.
2201  Alloc->addAttr(VisibilityAttr::CreateImplicit(Context,
2202                                                VisibilityAttr::Default));
2203
2204  if (AddRestrictAttr)
2205    Alloc->addAttr(
2206        RestrictAttr::CreateImplicit(Context, RestrictAttr::GNU_malloc));
2207
2208  ParmVarDecl *ParamDecls[2];
2209  for (unsigned I = 0; I != NumParams; ++I) {
2210    ParamDecls[I] = ParmVarDecl::Create(Context, Alloc, SourceLocation(),
2211                                        SourceLocation(), nullptr,
2212                                        Params[I], /*TInfo=*/nullptr,
2213                                        SC_None, nullptr);
2214    ParamDecls[I]->setImplicit();
2215  }
2216  Alloc->setParams(llvm::makeArrayRef(ParamDecls, NumParams));
2217
2218  Context.getTranslationUnitDecl()->addDecl(Alloc);
2219  IdResolver.tryAddTopLevelDecl(Alloc, Name);
2220}
2221
2222FunctionDecl *Sema::FindUsualDeallocationFunction(SourceLocation StartLoc,
2223                                                  bool CanProvideSize,
2224                                                  DeclarationName Name) {
2225  DeclareGlobalNewDelete();
2226
2227  LookupResult FoundDelete(*this, Name, StartLoc, LookupOrdinaryName);
2228  LookupQualifiedName(FoundDelete, Context.getTranslationUnitDecl());
2229
2230  // C++ [expr.new]p20:
2231  //   [...] Any non-placement deallocation function matches a
2232  //   non-placement allocation function. [...]
2233  llvm::SmallVector<FunctionDecl*, 2> Matches;
2234  for (LookupResult::iterator D = FoundDelete.begin(),
2235                           DEnd = FoundDelete.end();
2236       D != DEnd; ++D) {
2237    if (FunctionDecl *Fn = dyn_cast<FunctionDecl>(*D))
2238      if (isNonPlacementDeallocationFunction(*this, Fn))
2239        Matches.push_back(Fn);
2240  }
2241
2242  // C++1y [expr.delete]p?:
2243  //   If the type is complete and deallocation function lookup finds both a
2244  //   usual deallocation function with only a pointer parameter and a usual
2245  //   deallocation function with both a pointer parameter and a size
2246  //   parameter, then the selected deallocation function shall be the one
2247  //   with two parameters.  Otherwise, the selected deallocation function
2248  //   shall be the function with one parameter.
2249  if (getLangOpts().SizedDeallocation && Matches.size() == 2) {
2250    unsigned NumArgs = CanProvideSize ? 2 : 1;
2251    if (Matches[0]->getNumParams() != NumArgs)
2252      Matches.erase(Matches.begin());
2253    else
2254      Matches.erase(Matches.begin() + 1);
2255    assert(Matches[0]->getNumParams() == NumArgs &&
2256           "found an unexpected usual deallocation function");
2257  }
2258
2259  assert(Matches.size() == 1 &&
2260         "unexpectedly have multiple usual deallocation functions");
2261  return Matches.front();
2262}
2263
2264bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD,
2265                                    DeclarationName Name,
2266                                    FunctionDecl* &Operator, bool Diagnose) {
2267  LookupResult Found(*this, Name, StartLoc, LookupOrdinaryName);
2268  // Try to find operator delete/operator delete[] in class scope.
2269  LookupQualifiedName(Found, RD);
2270
2271  if (Found.isAmbiguous())
2272    return true;
2273
2274  Found.suppressDiagnostics();
2275
2276  SmallVector<DeclAccessPair,4> Matches;
2277  for (LookupResult::iterator F = Found.begin(), FEnd = Found.end();
2278       F != FEnd; ++F) {
2279    NamedDecl *ND = (*F)->getUnderlyingDecl();
2280
2281    // Ignore template operator delete members from the check for a usual
2282    // deallocation function.
2283    if (isa<FunctionTemplateDecl>(ND))
2284      continue;
2285
2286    if (cast<CXXMethodDecl>(ND)->isUsualDeallocationFunction())
2287      Matches.push_back(F.getPair());
2288  }
2289
2290  // There's exactly one suitable operator;  pick it.
2291  if (Matches.size() == 1) {
2292    Operator = cast<CXXMethodDecl>(Matches[0]->getUnderlyingDecl());
2293
2294    if (Operator->isDeleted()) {
2295      if (Diagnose) {
2296        Diag(StartLoc, diag::err_deleted_function_use);
2297        NoteDeletedFunction(Operator);
2298      }
2299      return true;
2300    }
2301
2302    if (CheckAllocationAccess(StartLoc, SourceRange(), Found.getNamingClass(),
2303                              Matches[0], Diagnose) == AR_inaccessible)
2304      return true;
2305
2306    return false;
2307
2308  // We found multiple suitable operators;  complain about the ambiguity.
2309  } else if (!Matches.empty()) {
2310    if (Diagnose) {
2311      Diag(StartLoc, diag::err_ambiguous_suitable_delete_member_function_found)
2312        << Name << RD;
2313
2314      for (SmallVectorImpl<DeclAccessPair>::iterator
2315             F = Matches.begin(), FEnd = Matches.end(); F != FEnd; ++F)
2316        Diag((*F)->getUnderlyingDecl()->getLocation(),
2317             diag::note_member_declared_here) << Name;
2318    }
2319    return true;
2320  }
2321
2322  // We did find operator delete/operator delete[] declarations, but
2323  // none of them were suitable.
2324  if (!Found.empty()) {
2325    if (Diagnose) {
2326      Diag(StartLoc, diag::err_no_suitable_delete_member_function_found)
2327        << Name << RD;
2328
2329      for (LookupResult::iterator F = Found.begin(), FEnd = Found.end();
2330           F != FEnd; ++F)
2331        Diag((*F)->getUnderlyingDecl()->getLocation(),
2332             diag::note_member_declared_here) << Name;
2333    }
2334    return true;
2335  }
2336
2337  Operator = nullptr;
2338  return false;
2339}
2340
2341/// ActOnCXXDelete - Parsed a C++ 'delete' expression (C++ 5.3.5), as in:
2342/// @code ::delete ptr; @endcode
2343/// or
2344/// @code delete [] ptr; @endcode
2345ExprResult
2346Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal,
2347                     bool ArrayForm, Expr *ExE) {
2348  // C++ [expr.delete]p1:
2349  //   The operand shall have a pointer type, or a class type having a single
2350  //   non-explicit conversion function to a pointer type. The result has type
2351  //   void.
2352  //
2353  // DR599 amends "pointer type" to "pointer to object type" in both cases.
2354
2355  ExprResult Ex = ExE;
2356  FunctionDecl *OperatorDelete = nullptr;
2357  bool ArrayFormAsWritten = ArrayForm;
2358  bool UsualArrayDeleteWantsSize = false;
2359
2360  if (!Ex.get()->isTypeDependent()) {
2361    // Perform lvalue-to-rvalue cast, if needed.
2362    Ex = DefaultLvalueConversion(Ex.get());
2363    if (Ex.isInvalid())
2364      return ExprError();
2365
2366    QualType Type = Ex.get()->getType();
2367
2368    class DeleteConverter : public ContextualImplicitConverter {
2369    public:
2370      DeleteConverter() : ContextualImplicitConverter(false, true) {}
2371
2372      bool match(QualType ConvType) override {
2373        // FIXME: If we have an operator T* and an operator void*, we must pick
2374        // the operator T*.
2375        if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
2376          if (ConvPtrType->getPointeeType()->isIncompleteOrObjectType())
2377            return true;
2378        return false;
2379      }
2380
2381      SemaDiagnosticBuilder diagnoseNoMatch(Sema &S, SourceLocation Loc,
2382                                            QualType T) override {
2383        return S.Diag(Loc, diag::err_delete_operand) << T;
2384      }
2385
2386      SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc,
2387                                               QualType T) override {
2388        return S.Diag(Loc, diag::err_delete_incomplete_class_type) << T;
2389      }
2390
2391      SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc,
2392                                                 QualType T,
2393                                                 QualType ConvTy) override {
2394        return S.Diag(Loc, diag::err_delete_explicit_conversion) << T << ConvTy;
2395      }
2396
2397      SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv,
2398                                             QualType ConvTy) override {
2399        return S.Diag(Conv->getLocation(), diag::note_delete_conversion)
2400          << ConvTy;
2401      }
2402
2403      SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc,
2404                                              QualType T) override {
2405        return S.Diag(Loc, diag::err_ambiguous_delete_operand) << T;
2406      }
2407
2408      SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv,
2409                                          QualType ConvTy) override {
2410        return S.Diag(Conv->getLocation(), diag::note_delete_conversion)
2411          << ConvTy;
2412      }
2413
2414      SemaDiagnosticBuilder diagnoseConversion(Sema &S, SourceLocation Loc,
2415                                               QualType T,
2416                                               QualType ConvTy) override {
2417        llvm_unreachable("conversion functions are permitted");
2418      }
2419    } Converter;
2420
2421    Ex = PerformContextualImplicitConversion(StartLoc, Ex.get(), Converter);
2422    if (Ex.isInvalid())
2423      return ExprError();
2424    Type = Ex.get()->getType();
2425    if (!Converter.match(Type))
2426      // FIXME: PerformContextualImplicitConversion should return ExprError
2427      //        itself in this case.
2428      return ExprError();
2429
2430    QualType Pointee = Type->getAs<PointerType>()->getPointeeType();
2431    QualType PointeeElem = Context.getBaseElementType(Pointee);
2432
2433    if (unsigned AddressSpace = Pointee.getAddressSpace())
2434      return Diag(Ex.get()->getLocStart(),
2435                  diag::err_address_space_qualified_delete)
2436               << Pointee.getUnqualifiedType() << AddressSpace;
2437
2438    CXXRecordDecl *PointeeRD = nullptr;
2439    if (Pointee->isVoidType() && !isSFINAEContext()) {
2440      // The C++ standard bans deleting a pointer to a non-object type, which
2441      // effectively bans deletion of "void*". However, most compilers support
2442      // this, so we treat it as a warning unless we're in a SFINAE context.
2443      Diag(StartLoc, diag::ext_delete_void_ptr_operand)
2444        << Type << Ex.get()->getSourceRange();
2445    } else if (Pointee->isFunctionType() || Pointee->isVoidType()) {
2446      return ExprError(Diag(StartLoc, diag::err_delete_operand)
2447        << Type << Ex.get()->getSourceRange());
2448    } else if (!Pointee->isDependentType()) {
2449      if (!RequireCompleteType(StartLoc, Pointee,
2450                               diag::warn_delete_incomplete, Ex.get())) {
2451        if (const RecordType *RT = PointeeElem->getAs<RecordType>())
2452          PointeeRD = cast<CXXRecordDecl>(RT->getDecl());
2453      }
2454    }
2455
2456    // C++ [expr.delete]p2:
2457    //   [Note: a pointer to a const type can be the operand of a
2458    //   delete-expression; it is not necessary to cast away the constness
2459    //   (5.2.11) of the pointer expression before it is used as the operand
2460    //   of the delete-expression. ]
2461
2462    if (Pointee->isArrayType() && !ArrayForm) {
2463      Diag(StartLoc, diag::warn_delete_array_type)
2464          << Type << Ex.get()->getSourceRange()
2465          << FixItHint::CreateInsertion(PP.getLocForEndOfToken(StartLoc), "[]");
2466      ArrayForm = true;
2467    }
2468
2469    DeclarationName DeleteName = Context.DeclarationNames.getCXXOperatorName(
2470                                      ArrayForm ? OO_Array_Delete : OO_Delete);
2471
2472    if (PointeeRD) {
2473      if (!UseGlobal &&
2474          FindDeallocationFunction(StartLoc, PointeeRD, DeleteName,
2475                                   OperatorDelete))
2476        return ExprError();
2477
2478      // If we're allocating an array of records, check whether the
2479      // usual operator delete[] has a size_t parameter.
2480      if (ArrayForm) {
2481        // If the user specifically asked to use the global allocator,
2482        // we'll need to do the lookup into the class.
2483        if (UseGlobal)
2484          UsualArrayDeleteWantsSize =
2485            doesUsualArrayDeleteWantSize(*this, StartLoc, PointeeElem);
2486
2487        // Otherwise, the usual operator delete[] should be the
2488        // function we just found.
2489        else if (OperatorDelete && isa<CXXMethodDecl>(OperatorDelete))
2490          UsualArrayDeleteWantsSize = (OperatorDelete->getNumParams() == 2);
2491      }
2492
2493      if (!PointeeRD->hasIrrelevantDestructor())
2494        if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) {
2495          MarkFunctionReferenced(StartLoc,
2496                                    const_cast<CXXDestructorDecl*>(Dtor));
2497          if (DiagnoseUseOfDecl(Dtor, StartLoc))
2498            return ExprError();
2499        }
2500
2501      // C++ [expr.delete]p3:
2502      //   In the first alternative (delete object), if the static type of the
2503      //   object to be deleted is different from its dynamic type, the static
2504      //   type shall be a base class of the dynamic type of the object to be
2505      //   deleted and the static type shall have a virtual destructor or the
2506      //   behavior is undefined.
2507      //
2508      // Note: a final class cannot be derived from, no issue there
2509      if (PointeeRD->isPolymorphic() && !PointeeRD->hasAttr<FinalAttr>()) {
2510        CXXDestructorDecl *dtor = PointeeRD->getDestructor();
2511        if (dtor && !dtor->isVirtual()) {
2512          if (PointeeRD->isAbstract()) {
2513            // If the class is abstract, we warn by default, because we're
2514            // sure the code has undefined behavior.
2515            Diag(StartLoc, diag::warn_delete_abstract_non_virtual_dtor)
2516                << PointeeElem;
2517          } else if (!ArrayForm) {
2518            // Otherwise, if this is not an array delete, it's a bit suspect,
2519            // but not necessarily wrong.
2520            Diag(StartLoc, diag::warn_delete_non_virtual_dtor) << PointeeElem;
2521          }
2522        }
2523      }
2524
2525    }
2526
2527    if (!OperatorDelete)
2528      // Look for a global declaration.
2529      OperatorDelete = FindUsualDeallocationFunction(
2530          StartLoc, !RequireCompleteType(StartLoc, Pointee, 0) &&
2531                    (!ArrayForm || UsualArrayDeleteWantsSize ||
2532                     Pointee.isDestructedType()),
2533          DeleteName);
2534
2535    MarkFunctionReferenced(StartLoc, OperatorDelete);
2536
2537    // Check access and ambiguity of operator delete and destructor.
2538    if (PointeeRD) {
2539      if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) {
2540          CheckDestructorAccess(Ex.get()->getExprLoc(), Dtor,
2541                      PDiag(diag::err_access_dtor) << PointeeElem);
2542      }
2543    }
2544  }
2545
2546  return new (Context) CXXDeleteExpr(
2547      Context.VoidTy, UseGlobal, ArrayForm, ArrayFormAsWritten,
2548      UsualArrayDeleteWantsSize, OperatorDelete, Ex.get(), StartLoc);
2549}
2550
2551/// \brief Check the use of the given variable as a C++ condition in an if,
2552/// while, do-while, or switch statement.
2553ExprResult Sema::CheckConditionVariable(VarDecl *ConditionVar,
2554                                        SourceLocation StmtLoc,
2555                                        bool ConvertToBoolean) {
2556  if (ConditionVar->isInvalidDecl())
2557    return ExprError();
2558
2559  QualType T = ConditionVar->getType();
2560
2561  // C++ [stmt.select]p2:
2562  //   The declarator shall not specify a function or an array.
2563  if (T->isFunctionType())
2564    return ExprError(Diag(ConditionVar->getLocation(),
2565                          diag::err_invalid_use_of_function_type)
2566                       << ConditionVar->getSourceRange());
2567  else if (T->isArrayType())
2568    return ExprError(Diag(ConditionVar->getLocation(),
2569                          diag::err_invalid_use_of_array_type)
2570                     << ConditionVar->getSourceRange());
2571
2572  ExprResult Condition = DeclRefExpr::Create(
2573      Context, NestedNameSpecifierLoc(), SourceLocation(), ConditionVar,
2574      /*enclosing*/ false, ConditionVar->getLocation(),
2575      ConditionVar->getType().getNonReferenceType(), VK_LValue);
2576
2577  MarkDeclRefReferenced(cast<DeclRefExpr>(Condition.get()));
2578
2579  if (ConvertToBoolean) {
2580    Condition = CheckBooleanCondition(Condition.get(), StmtLoc);
2581    if (Condition.isInvalid())
2582      return ExprError();
2583  }
2584
2585  return Condition;
2586}
2587
2588/// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid.
2589ExprResult Sema::CheckCXXBooleanCondition(Expr *CondExpr) {
2590  // C++ 6.4p4:
2591  // The value of a condition that is an initialized declaration in a statement
2592  // other than a switch statement is the value of the declared variable
2593  // implicitly converted to type bool. If that conversion is ill-formed, the
2594  // program is ill-formed.
2595  // The value of a condition that is an expression is the value of the
2596  // expression, implicitly converted to bool.
2597  //
2598  return PerformContextuallyConvertToBool(CondExpr);
2599}
2600
2601/// Helper function to determine whether this is the (deprecated) C++
2602/// conversion from a string literal to a pointer to non-const char or
2603/// non-const wchar_t (for narrow and wide string literals,
2604/// respectively).
2605bool
2606Sema::IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType) {
2607  // Look inside the implicit cast, if it exists.
2608  if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(From))
2609    From = Cast->getSubExpr();
2610
2611  // A string literal (2.13.4) that is not a wide string literal can
2612  // be converted to an rvalue of type "pointer to char"; a wide
2613  // string literal can be converted to an rvalue of type "pointer
2614  // to wchar_t" (C++ 4.2p2).
2615  if (StringLiteral *StrLit = dyn_cast<StringLiteral>(From->IgnoreParens()))
2616    if (const PointerType *ToPtrType = ToType->getAs<PointerType>())
2617      if (const BuiltinType *ToPointeeType
2618          = ToPtrType->getPointeeType()->getAs<BuiltinType>()) {
2619        // This conversion is considered only when there is an
2620        // explicit appropriate pointer target type (C++ 4.2p2).
2621        if (!ToPtrType->getPointeeType().hasQualifiers()) {
2622          switch (StrLit->getKind()) {
2623            case StringLiteral::UTF8:
2624            case StringLiteral::UTF16:
2625            case StringLiteral::UTF32:
2626              // We don't allow UTF literals to be implicitly converted
2627              break;
2628            case StringLiteral::Ascii:
2629              return (ToPointeeType->getKind() == BuiltinType::Char_U ||
2630                      ToPointeeType->getKind() == BuiltinType::Char_S);
2631            case StringLiteral::Wide:
2632              return ToPointeeType->isWideCharType();
2633          }
2634        }
2635      }
2636
2637  return false;
2638}
2639
2640static ExprResult BuildCXXCastArgument(Sema &S,
2641                                       SourceLocation CastLoc,
2642                                       QualType Ty,
2643                                       CastKind Kind,
2644                                       CXXMethodDecl *Method,
2645                                       DeclAccessPair FoundDecl,
2646                                       bool HadMultipleCandidates,
2647                                       Expr *From) {
2648  switch (Kind) {
2649  default: llvm_unreachable("Unhandled cast kind!");
2650  case CK_ConstructorConversion: {
2651    CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Method);
2652    SmallVector<Expr*, 8> ConstructorArgs;
2653
2654    if (S.RequireNonAbstractType(CastLoc, Ty,
2655                                 diag::err_allocation_of_abstract_type))
2656      return ExprError();
2657
2658    if (S.CompleteConstructorCall(Constructor, From, CastLoc, ConstructorArgs))
2659      return ExprError();
2660
2661    S.CheckConstructorAccess(CastLoc, Constructor,
2662                             InitializedEntity::InitializeTemporary(Ty),
2663                             Constructor->getAccess());
2664    if (S.DiagnoseUseOfDecl(Method, CastLoc))
2665      return ExprError();
2666
2667    ExprResult Result = S.BuildCXXConstructExpr(
2668        CastLoc, Ty, cast<CXXConstructorDecl>(Method),
2669        ConstructorArgs, HadMultipleCandidates,
2670        /*ListInit*/ false, /*StdInitListInit*/ false, /*ZeroInit*/ false,
2671        CXXConstructExpr::CK_Complete, SourceRange());
2672    if (Result.isInvalid())
2673      return ExprError();
2674
2675    return S.MaybeBindToTemporary(Result.getAs<Expr>());
2676  }
2677
2678  case CK_UserDefinedConversion: {
2679    assert(!From->getType()->isPointerType() && "Arg can't have pointer type!");
2680
2681    S.CheckMemberOperatorAccess(CastLoc, From, /*arg*/ nullptr, FoundDecl);
2682    if (S.DiagnoseUseOfDecl(Method, CastLoc))
2683      return ExprError();
2684
2685    // Create an implicit call expr that calls it.
2686    CXXConversionDecl *Conv = cast<CXXConversionDecl>(Method);
2687    ExprResult Result = S.BuildCXXMemberCallExpr(From, FoundDecl, Conv,
2688                                                 HadMultipleCandidates);
2689    if (Result.isInvalid())
2690      return ExprError();
2691    // Record usage of conversion in an implicit cast.
2692    Result = ImplicitCastExpr::Create(S.Context, Result.get()->getType(),
2693                                      CK_UserDefinedConversion, Result.get(),
2694                                      nullptr, Result.get()->getValueKind());
2695
2696    return S.MaybeBindToTemporary(Result.get());
2697  }
2698  }
2699}
2700
2701/// PerformImplicitConversion - Perform an implicit conversion of the
2702/// expression From to the type ToType using the pre-computed implicit
2703/// conversion sequence ICS. Returns the converted
2704/// expression. Action is the kind of conversion we're performing,
2705/// used in the error message.
2706ExprResult
2707Sema::PerformImplicitConversion(Expr *From, QualType ToType,
2708                                const ImplicitConversionSequence &ICS,
2709                                AssignmentAction Action,
2710                                CheckedConversionKind CCK) {
2711  switch (ICS.getKind()) {
2712  case ImplicitConversionSequence::StandardConversion: {
2713    ExprResult Res = PerformImplicitConversion(From, ToType, ICS.Standard,
2714                                               Action, CCK);
2715    if (Res.isInvalid())
2716      return ExprError();
2717    From = Res.get();
2718    break;
2719  }
2720
2721  case ImplicitConversionSequence::UserDefinedConversion: {
2722
2723      FunctionDecl *FD = ICS.UserDefined.ConversionFunction;
2724      CastKind CastKind;
2725      QualType BeforeToType;
2726      assert(FD && "no conversion function for user-defined conversion seq");
2727      if (const CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(FD)) {
2728        CastKind = CK_UserDefinedConversion;
2729
2730        // If the user-defined conversion is specified by a conversion function,
2731        // the initial standard conversion sequence converts the source type to
2732        // the implicit object parameter of the conversion function.
2733        BeforeToType = Context.getTagDeclType(Conv->getParent());
2734      } else {
2735        const CXXConstructorDecl *Ctor = cast<CXXConstructorDecl>(FD);
2736        CastKind = CK_ConstructorConversion;
2737        // Do no conversion if dealing with ... for the first conversion.
2738        if (!ICS.UserDefined.EllipsisConversion) {
2739          // If the user-defined conversion is specified by a constructor, the
2740          // initial standard conversion sequence converts the source type to
2741          // the type required by the argument of the constructor
2742          BeforeToType = Ctor->getParamDecl(0)->getType().getNonReferenceType();
2743        }
2744      }
2745      // Watch out for ellipsis conversion.
2746      if (!ICS.UserDefined.EllipsisConversion) {
2747        ExprResult Res =
2748          PerformImplicitConversion(From, BeforeToType,
2749                                    ICS.UserDefined.Before, AA_Converting,
2750                                    CCK);
2751        if (Res.isInvalid())
2752          return ExprError();
2753        From = Res.get();
2754      }
2755
2756      ExprResult CastArg
2757        = BuildCXXCastArgument(*this,
2758                               From->getLocStart(),
2759                               ToType.getNonReferenceType(),
2760                               CastKind, cast<CXXMethodDecl>(FD),
2761                               ICS.UserDefined.FoundConversionFunction,
2762                               ICS.UserDefined.HadMultipleCandidates,
2763                               From);
2764
2765      if (CastArg.isInvalid())
2766        return ExprError();
2767
2768      From = CastArg.get();
2769
2770      return PerformImplicitConversion(From, ToType, ICS.UserDefined.After,
2771                                       AA_Converting, CCK);
2772  }
2773
2774  case ImplicitConversionSequence::AmbiguousConversion:
2775    ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(),
2776                          PDiag(diag::err_typecheck_ambiguous_condition)
2777                            << From->getSourceRange());
2778     return ExprError();
2779
2780  case ImplicitConversionSequence::EllipsisConversion:
2781    llvm_unreachable("Cannot perform an ellipsis conversion");
2782
2783  case ImplicitConversionSequence::BadConversion:
2784    return ExprError();
2785  }
2786
2787  // Everything went well.
2788  return From;
2789}
2790
2791/// PerformImplicitConversion - Perform an implicit conversion of the
2792/// expression From to the type ToType by following the standard
2793/// conversion sequence SCS. Returns the converted
2794/// expression. Flavor is the context in which we're performing this
2795/// conversion, for use in error messages.
2796ExprResult
2797Sema::PerformImplicitConversion(Expr *From, QualType ToType,
2798                                const StandardConversionSequence& SCS,
2799                                AssignmentAction Action,
2800                                CheckedConversionKind CCK) {
2801  bool CStyle = (CCK == CCK_CStyleCast || CCK == CCK_FunctionalCast);
2802
2803  // Overall FIXME: we are recomputing too many types here and doing far too
2804  // much extra work. What this means is that we need to keep track of more
2805  // information that is computed when we try the implicit conversion initially,
2806  // so that we don't need to recompute anything here.
2807  QualType FromType = From->getType();
2808
2809  if (SCS.CopyConstructor) {
2810    // FIXME: When can ToType be a reference type?
2811    assert(!ToType->isReferenceType());
2812    if (SCS.Second == ICK_Derived_To_Base) {
2813      SmallVector<Expr*, 8> ConstructorArgs;
2814      if (CompleteConstructorCall(cast<CXXConstructorDecl>(SCS.CopyConstructor),
2815                                  From, /*FIXME:ConstructLoc*/SourceLocation(),
2816                                  ConstructorArgs))
2817        return ExprError();
2818      return BuildCXXConstructExpr(
2819          /*FIXME:ConstructLoc*/ SourceLocation(), ToType, SCS.CopyConstructor,
2820          ConstructorArgs, /*HadMultipleCandidates*/ false,
2821          /*ListInit*/ false, /*StdInitListInit*/ false, /*ZeroInit*/ false,
2822          CXXConstructExpr::CK_Complete, SourceRange());
2823    }
2824    return BuildCXXConstructExpr(
2825        /*FIXME:ConstructLoc*/ SourceLocation(), ToType, SCS.CopyConstructor,
2826        From, /*HadMultipleCandidates*/ false,
2827        /*ListInit*/ false, /*StdInitListInit*/ false, /*ZeroInit*/ false,
2828        CXXConstructExpr::CK_Complete, SourceRange());
2829  }
2830
2831  // Resolve overloaded function references.
2832  if (Context.hasSameType(FromType, Context.OverloadTy)) {
2833    DeclAccessPair Found;
2834    FunctionDecl *Fn = ResolveAddressOfOverloadedFunction(From, ToType,
2835                                                          true, Found);
2836    if (!Fn)
2837      return ExprError();
2838
2839    if (DiagnoseUseOfDecl(Fn, From->getLocStart()))
2840      return ExprError();
2841
2842    From = FixOverloadedFunctionReference(From, Found, Fn);
2843    FromType = From->getType();
2844  }
2845
2846  // If we're converting to an atomic type, first convert to the corresponding
2847  // non-atomic type.
2848  QualType ToAtomicType;
2849  if (const AtomicType *ToAtomic = ToType->getAs<AtomicType>()) {
2850    ToAtomicType = ToType;
2851    ToType = ToAtomic->getValueType();
2852  }
2853
2854  // Perform the first implicit conversion.
2855  switch (SCS.First) {
2856  case ICK_Identity:
2857    if (const AtomicType *FromAtomic = FromType->getAs<AtomicType>()) {
2858      FromType = FromAtomic->getValueType().getUnqualifiedType();
2859      From = ImplicitCastExpr::Create(Context, FromType, CK_AtomicToNonAtomic,
2860                                      From, /*BasePath=*/nullptr, VK_RValue);
2861    }
2862    break;
2863
2864  case ICK_Lvalue_To_Rvalue: {
2865    assert(From->getObjectKind() != OK_ObjCProperty);
2866    ExprResult FromRes = DefaultLvalueConversion(From);
2867    assert(!FromRes.isInvalid() && "Can't perform deduced conversion?!");
2868    From = FromRes.get();
2869    FromType = From->getType();
2870    break;
2871  }
2872
2873  case ICK_Array_To_Pointer:
2874    FromType = Context.getArrayDecayedType(FromType);
2875    From = ImpCastExprToType(From, FromType, CK_ArrayToPointerDecay,
2876                             VK_RValue, /*BasePath=*/nullptr, CCK).get();
2877    break;
2878
2879  case ICK_Function_To_Pointer:
2880    FromType = Context.getPointerType(FromType);
2881    From = ImpCastExprToType(From, FromType, CK_FunctionToPointerDecay,
2882                             VK_RValue, /*BasePath=*/nullptr, CCK).get();
2883    break;
2884
2885  default:
2886    llvm_unreachable("Improper first standard conversion");
2887  }
2888
2889  // Perform the second implicit conversion
2890  switch (SCS.Second) {
2891  case ICK_Identity:
2892    // C++ [except.spec]p5:
2893    //   [For] assignment to and initialization of pointers to functions,
2894    //   pointers to member functions, and references to functions: the
2895    //   target entity shall allow at least the exceptions allowed by the
2896    //   source value in the assignment or initialization.
2897    switch (Action) {
2898    case AA_Assigning:
2899    case AA_Initializing:
2900      // Note, function argument passing and returning are initialization.
2901    case AA_Passing:
2902    case AA_Returning:
2903    case AA_Sending:
2904    case AA_Passing_CFAudited:
2905      if (CheckExceptionSpecCompatibility(From, ToType))
2906        return ExprError();
2907      break;
2908
2909    case AA_Casting:
2910    case AA_Converting:
2911      // Casts and implicit conversions are not initialization, so are not
2912      // checked for exception specification mismatches.
2913      break;
2914    }
2915    // Nothing else to do.
2916    break;
2917
2918  case ICK_NoReturn_Adjustment:
2919    // If both sides are functions (or pointers/references to them), there could
2920    // be incompatible exception declarations.
2921    if (CheckExceptionSpecCompatibility(From, ToType))
2922      return ExprError();
2923
2924    From = ImpCastExprToType(From, ToType, CK_NoOp,
2925                             VK_RValue, /*BasePath=*/nullptr, CCK).get();
2926    break;
2927
2928  case ICK_Integral_Promotion:
2929  case ICK_Integral_Conversion:
2930    if (ToType->isBooleanType()) {
2931      assert(FromType->castAs<EnumType>()->getDecl()->isFixed() &&
2932             SCS.Second == ICK_Integral_Promotion &&
2933             "only enums with fixed underlying type can promote to bool");
2934      From = ImpCastExprToType(From, ToType, CK_IntegralToBoolean,
2935                               VK_RValue, /*BasePath=*/nullptr, CCK).get();
2936    } else {
2937      From = ImpCastExprToType(From, ToType, CK_IntegralCast,
2938                               VK_RValue, /*BasePath=*/nullptr, CCK).get();
2939    }
2940    break;
2941
2942  case ICK_Floating_Promotion:
2943  case ICK_Floating_Conversion:
2944    From = ImpCastExprToType(From, ToType, CK_FloatingCast,
2945                             VK_RValue, /*BasePath=*/nullptr, CCK).get();
2946    break;
2947
2948  case ICK_Complex_Promotion:
2949  case ICK_Complex_Conversion: {
2950    QualType FromEl = From->getType()->getAs<ComplexType>()->getElementType();
2951    QualType ToEl = ToType->getAs<ComplexType>()->getElementType();
2952    CastKind CK;
2953    if (FromEl->isRealFloatingType()) {
2954      if (ToEl->isRealFloatingType())
2955        CK = CK_FloatingComplexCast;
2956      else
2957        CK = CK_FloatingComplexToIntegralComplex;
2958    } else if (ToEl->isRealFloatingType()) {
2959      CK = CK_IntegralComplexToFloatingComplex;
2960    } else {
2961      CK = CK_IntegralComplexCast;
2962    }
2963    From = ImpCastExprToType(From, ToType, CK,
2964                             VK_RValue, /*BasePath=*/nullptr, CCK).get();
2965    break;
2966  }
2967
2968  case ICK_Floating_Integral:
2969    if (ToType->isRealFloatingType())
2970      From = ImpCastExprToType(From, ToType, CK_IntegralToFloating,
2971                               VK_RValue, /*BasePath=*/nullptr, CCK).get();
2972    else
2973      From = ImpCastExprToType(From, ToType, CK_FloatingToIntegral,
2974                               VK_RValue, /*BasePath=*/nullptr, CCK).get();
2975    break;
2976
2977  case ICK_Compatible_Conversion:
2978      From = ImpCastExprToType(From, ToType, CK_NoOp,
2979                               VK_RValue, /*BasePath=*/nullptr, CCK).get();
2980    break;
2981
2982  case ICK_Writeback_Conversion:
2983  case ICK_Pointer_Conversion: {
2984    if (SCS.IncompatibleObjC && Action != AA_Casting) {
2985      // Diagnose incompatible Objective-C conversions
2986      if (Action == AA_Initializing || Action == AA_Assigning)
2987        Diag(From->getLocStart(),
2988             diag::ext_typecheck_convert_incompatible_pointer)
2989          << ToType << From->getType() << Action
2990          << From->getSourceRange() << 0;
2991      else
2992        Diag(From->getLocStart(),
2993             diag::ext_typecheck_convert_incompatible_pointer)
2994          << From->getType() << ToType << Action
2995          << From->getSourceRange() << 0;
2996
2997      if (From->getType()->isObjCObjectPointerType() &&
2998          ToType->isObjCObjectPointerType())
2999        EmitRelatedResultTypeNote(From);
3000    }
3001    else if (getLangOpts().ObjCAutoRefCount &&
3002             !CheckObjCARCUnavailableWeakConversion(ToType,
3003                                                    From->getType())) {
3004      if (Action == AA_Initializing)
3005        Diag(From->getLocStart(),
3006             diag::err_arc_weak_unavailable_assign);
3007      else
3008        Diag(From->getLocStart(),
3009             diag::err_arc_convesion_of_weak_unavailable)
3010          << (Action == AA_Casting) << From->getType() << ToType
3011          << From->getSourceRange();
3012    }
3013
3014    CastKind Kind = CK_Invalid;
3015    CXXCastPath BasePath;
3016    if (CheckPointerConversion(From, ToType, Kind, BasePath, CStyle))
3017      return ExprError();
3018
3019    // Make sure we extend blocks if necessary.
3020    // FIXME: doing this here is really ugly.
3021    if (Kind == CK_BlockPointerToObjCPointerCast) {
3022      ExprResult E = From;
3023      (void) PrepareCastToObjCObjectPointer(E);
3024      From = E.get();
3025    }
3026    if (getLangOpts().ObjCAutoRefCount)
3027      CheckObjCARCConversion(SourceRange(), ToType, From, CCK);
3028    From = ImpCastExprToType(From, ToType, Kind, VK_RValue, &BasePath, CCK)
3029             .get();
3030    break;
3031  }
3032
3033  case ICK_Pointer_Member: {
3034    CastKind Kind = CK_Invalid;
3035    CXXCastPath BasePath;
3036    if (CheckMemberPointerConversion(From, ToType, Kind, BasePath, CStyle))
3037      return ExprError();
3038    if (CheckExceptionSpecCompatibility(From, ToType))
3039      return ExprError();
3040
3041    // We may not have been able to figure out what this member pointer resolved
3042    // to up until this exact point.  Attempt to lock-in it's inheritance model.
3043    QualType FromType = From->getType();
3044    if (FromType->isMemberPointerType())
3045      if (Context.getTargetInfo().getCXXABI().isMicrosoft())
3046        RequireCompleteType(From->getExprLoc(), FromType, 0);
3047
3048    From = ImpCastExprToType(From, ToType, Kind, VK_RValue, &BasePath, CCK)
3049             .get();
3050    break;
3051  }
3052
3053  case ICK_Boolean_Conversion:
3054    // Perform half-to-boolean conversion via float.
3055    if (From->getType()->isHalfType()) {
3056      From = ImpCastExprToType(From, Context.FloatTy, CK_FloatingCast).get();
3057      FromType = Context.FloatTy;
3058    }
3059
3060    From = ImpCastExprToType(From, Context.BoolTy,
3061                             ScalarTypeToBooleanCastKind(FromType),
3062                             VK_RValue, /*BasePath=*/nullptr, CCK).get();
3063    break;
3064
3065  case ICK_Derived_To_Base: {
3066    CXXCastPath BasePath;
3067    if (CheckDerivedToBaseConversion(From->getType(),
3068                                     ToType.getNonReferenceType(),
3069                                     From->getLocStart(),
3070                                     From->getSourceRange(),
3071                                     &BasePath,
3072                                     CStyle))
3073      return ExprError();
3074
3075    From = ImpCastExprToType(From, ToType.getNonReferenceType(),
3076                      CK_DerivedToBase, From->getValueKind(),
3077                      &BasePath, CCK).get();
3078    break;
3079  }
3080
3081  case ICK_Vector_Conversion:
3082    From = ImpCastExprToType(From, ToType, CK_BitCast,
3083                             VK_RValue, /*BasePath=*/nullptr, CCK).get();
3084    break;
3085
3086  case ICK_Vector_Splat:
3087    // Vector splat from any arithmetic type to a vector.
3088    // Cast to the element type.
3089    {
3090      QualType elType = ToType->getAs<ExtVectorType>()->getElementType();
3091      if (elType != From->getType()) {
3092        ExprResult E = From;
3093        From = ImpCastExprToType(From, elType,
3094                                 PrepareScalarCast(E, elType)).get();
3095      }
3096      From = ImpCastExprToType(From, ToType, CK_VectorSplat,
3097                               VK_RValue, /*BasePath=*/nullptr, CCK).get();
3098    }
3099    break;
3100
3101  case ICK_Complex_Real:
3102    // Case 1.  x -> _Complex y
3103    if (const ComplexType *ToComplex = ToType->getAs<ComplexType>()) {
3104      QualType ElType = ToComplex->getElementType();
3105      bool isFloatingComplex = ElType->isRealFloatingType();
3106
3107      // x -> y
3108      if (Context.hasSameUnqualifiedType(ElType, From->getType())) {
3109        // do nothing
3110      } else if (From->getType()->isRealFloatingType()) {
3111        From = ImpCastExprToType(From, ElType,
3112                isFloatingComplex ? CK_FloatingCast : CK_FloatingToIntegral).get();
3113      } else {
3114        assert(From->getType()->isIntegerType());
3115        From = ImpCastExprToType(From, ElType,
3116                isFloatingComplex ? CK_IntegralToFloating : CK_IntegralCast).get();
3117      }
3118      // y -> _Complex y
3119      From = ImpCastExprToType(From, ToType,
3120                   isFloatingComplex ? CK_FloatingRealToComplex
3121                                     : CK_IntegralRealToComplex).get();
3122
3123    // Case 2.  _Complex x -> y
3124    } else {
3125      const ComplexType *FromComplex = From->getType()->getAs<ComplexType>();
3126      assert(FromComplex);
3127
3128      QualType ElType = FromComplex->getElementType();
3129      bool isFloatingComplex = ElType->isRealFloatingType();
3130
3131      // _Complex x -> x
3132      From = ImpCastExprToType(From, ElType,
3133                   isFloatingComplex ? CK_FloatingComplexToReal
3134                                     : CK_IntegralComplexToReal,
3135                               VK_RValue, /*BasePath=*/nullptr, CCK).get();
3136
3137      // x -> y
3138      if (Context.hasSameUnqualifiedType(ElType, ToType)) {
3139        // do nothing
3140      } else if (ToType->isRealFloatingType()) {
3141        From = ImpCastExprToType(From, ToType,
3142                   isFloatingComplex ? CK_FloatingCast : CK_IntegralToFloating,
3143                                 VK_RValue, /*BasePath=*/nullptr, CCK).get();
3144      } else {
3145        assert(ToType->isIntegerType());
3146        From = ImpCastExprToType(From, ToType,
3147                   isFloatingComplex ? CK_FloatingToIntegral : CK_IntegralCast,
3148                                 VK_RValue, /*BasePath=*/nullptr, CCK).get();
3149      }
3150    }
3151    break;
3152
3153  case ICK_Block_Pointer_Conversion: {
3154    From = ImpCastExprToType(From, ToType.getUnqualifiedType(), CK_BitCast,
3155                             VK_RValue, /*BasePath=*/nullptr, CCK).get();
3156    break;
3157  }
3158
3159  case ICK_TransparentUnionConversion: {
3160    ExprResult FromRes = From;
3161    Sema::AssignConvertType ConvTy =
3162      CheckTransparentUnionArgumentConstraints(ToType, FromRes);
3163    if (FromRes.isInvalid())
3164      return ExprError();
3165    From = FromRes.get();
3166    assert ((ConvTy == Sema::Compatible) &&
3167            "Improper transparent union conversion");
3168    (void)ConvTy;
3169    break;
3170  }
3171
3172  case ICK_Zero_Event_Conversion:
3173    From = ImpCastExprToType(From, ToType,
3174                             CK_ZeroToOCLEvent,
3175                             From->getValueKind()).get();
3176    break;
3177
3178  case ICK_Lvalue_To_Rvalue:
3179  case ICK_Array_To_Pointer:
3180  case ICK_Function_To_Pointer:
3181  case ICK_Qualification:
3182  case ICK_Num_Conversion_Kinds:
3183    llvm_unreachable("Improper second standard conversion");
3184  }
3185
3186  switch (SCS.Third) {
3187  case ICK_Identity:
3188    // Nothing to do.
3189    break;
3190
3191  case ICK_Qualification: {
3192    // The qualification keeps the category of the inner expression, unless the
3193    // target type isn't a reference.
3194    ExprValueKind VK = ToType->isReferenceType() ?
3195                                  From->getValueKind() : VK_RValue;
3196    From = ImpCastExprToType(From, ToType.getNonLValueExprType(Context),
3197                             CK_NoOp, VK, /*BasePath=*/nullptr, CCK).get();
3198
3199    if (SCS.DeprecatedStringLiteralToCharPtr &&
3200        !getLangOpts().WritableStrings) {
3201      Diag(From->getLocStart(), getLangOpts().CPlusPlus11
3202           ? diag::ext_deprecated_string_literal_conversion
3203           : diag::warn_deprecated_string_literal_conversion)
3204        << ToType.getNonReferenceType();
3205    }
3206
3207    break;
3208  }
3209
3210  default:
3211    llvm_unreachable("Improper third standard conversion");
3212  }
3213
3214  // If this conversion sequence involved a scalar -> atomic conversion, perform
3215  // that conversion now.
3216  if (!ToAtomicType.isNull()) {
3217    assert(Context.hasSameType(
3218        ToAtomicType->castAs<AtomicType>()->getValueType(), From->getType()));
3219    From = ImpCastExprToType(From, ToAtomicType, CK_NonAtomicToAtomic,
3220                             VK_RValue, nullptr, CCK).get();
3221  }
3222
3223  return From;
3224}
3225
3226/// \brief Check the completeness of a type in a unary type trait.
3227///
3228/// If the particular type trait requires a complete type, tries to complete
3229/// it. If completing the type fails, a diagnostic is emitted and false
3230/// returned. If completing the type succeeds or no completion was required,
3231/// returns true.
3232static bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT,
3233                                                SourceLocation Loc,
3234                                                QualType ArgTy) {
3235  // C++0x [meta.unary.prop]p3:
3236  //   For all of the class templates X declared in this Clause, instantiating
3237  //   that template with a template argument that is a class template
3238  //   specialization may result in the implicit instantiation of the template
3239  //   argument if and only if the semantics of X require that the argument
3240  //   must be a complete type.
3241  // We apply this rule to all the type trait expressions used to implement
3242  // these class templates. We also try to follow any GCC documented behavior
3243  // in these expressions to ensure portability of standard libraries.
3244  switch (UTT) {
3245  default: llvm_unreachable("not a UTT");
3246    // is_complete_type somewhat obviously cannot require a complete type.
3247  case UTT_IsCompleteType:
3248    // Fall-through
3249
3250    // These traits are modeled on the type predicates in C++0x
3251    // [meta.unary.cat] and [meta.unary.comp]. They are not specified as
3252    // requiring a complete type, as whether or not they return true cannot be
3253    // impacted by the completeness of the type.
3254  case UTT_IsVoid:
3255  case UTT_IsIntegral:
3256  case UTT_IsFloatingPoint:
3257  case UTT_IsArray:
3258  case UTT_IsPointer:
3259  case UTT_IsLvalueReference:
3260  case UTT_IsRvalueReference:
3261  case UTT_IsMemberFunctionPointer:
3262  case UTT_IsMemberObjectPointer:
3263  case UTT_IsEnum:
3264  case UTT_IsUnion:
3265  case UTT_IsClass:
3266  case UTT_IsFunction:
3267  case UTT_IsReference:
3268  case UTT_IsArithmetic:
3269  case UTT_IsFundamental:
3270  case UTT_IsObject:
3271  case UTT_IsScalar:
3272  case UTT_IsCompound:
3273  case UTT_IsMemberPointer:
3274    // Fall-through
3275
3276    // These traits are modeled on type predicates in C++0x [meta.unary.prop]
3277    // which requires some of its traits to have the complete type. However,
3278    // the completeness of the type cannot impact these traits' semantics, and
3279    // so they don't require it. This matches the comments on these traits in
3280    // Table 49.
3281  case UTT_IsConst:
3282  case UTT_IsVolatile:
3283  case UTT_IsSigned:
3284  case UTT_IsUnsigned:
3285    return true;
3286
3287    // C++0x [meta.unary.prop] Table 49 requires the following traits to be
3288    // applied to a complete type.
3289  case UTT_IsTrivial:
3290  case UTT_IsTriviallyCopyable:
3291  case UTT_IsStandardLayout:
3292  case UTT_IsPOD:
3293  case UTT_IsLiteral:
3294  case UTT_IsEmpty:
3295  case UTT_IsPolymorphic:
3296  case UTT_IsAbstract:
3297  case UTT_IsInterfaceClass:
3298  case UTT_IsDestructible:
3299  case UTT_IsNothrowDestructible:
3300    // Fall-through
3301
3302  // These traits require a complete type.
3303  case UTT_IsFinal:
3304  case UTT_IsSealed:
3305
3306    // These trait expressions are designed to help implement predicates in
3307    // [meta.unary.prop] despite not being named the same. They are specified
3308    // by both GCC and the Embarcadero C++ compiler, and require the complete
3309    // type due to the overarching C++0x type predicates being implemented
3310    // requiring the complete type.
3311  case UTT_HasNothrowAssign:
3312  case UTT_HasNothrowMoveAssign:
3313  case UTT_HasNothrowConstructor:
3314  case UTT_HasNothrowCopy:
3315  case UTT_HasTrivialAssign:
3316  case UTT_HasTrivialMoveAssign:
3317  case UTT_HasTrivialDefaultConstructor:
3318  case UTT_HasTrivialMoveConstructor:
3319  case UTT_HasTrivialCopy:
3320  case UTT_HasTrivialDestructor:
3321  case UTT_HasVirtualDestructor:
3322    // Arrays of unknown bound are expressly allowed.
3323    QualType ElTy = ArgTy;
3324    if (ArgTy->isIncompleteArrayType())
3325      ElTy = S.Context.getAsArrayType(ArgTy)->getElementType();
3326
3327    // The void type is expressly allowed.
3328    if (ElTy->isVoidType())
3329      return true;
3330
3331    return !S.RequireCompleteType(
3332      Loc, ElTy, diag::err_incomplete_type_used_in_type_trait_expr);
3333  }
3334}
3335
3336static bool HasNoThrowOperator(const RecordType *RT, OverloadedOperatorKind Op,
3337                               Sema &Self, SourceLocation KeyLoc, ASTContext &C,
3338                               bool (CXXRecordDecl::*HasTrivial)() const,
3339                               bool (CXXRecordDecl::*HasNonTrivial)() const,
3340                               bool (CXXMethodDecl::*IsDesiredOp)() const)
3341{
3342  CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
3343  if ((RD->*HasTrivial)() && !(RD->*HasNonTrivial)())
3344    return true;
3345
3346  DeclarationName Name = C.DeclarationNames.getCXXOperatorName(Op);
3347  DeclarationNameInfo NameInfo(Name, KeyLoc);
3348  LookupResult Res(Self, NameInfo, Sema::LookupOrdinaryName);
3349  if (Self.LookupQualifiedName(Res, RD)) {
3350    bool FoundOperator = false;
3351    Res.suppressDiagnostics();
3352    for (LookupResult::iterator Op = Res.begin(), OpEnd = Res.end();
3353         Op != OpEnd; ++Op) {
3354      if (isa<FunctionTemplateDecl>(*Op))
3355        continue;
3356
3357      CXXMethodDecl *Operator = cast<CXXMethodDecl>(*Op);
3358      if((Operator->*IsDesiredOp)()) {
3359        FoundOperator = true;
3360        const FunctionProtoType *CPT =
3361          Operator->getType()->getAs<FunctionProtoType>();
3362        CPT = Self.ResolveExceptionSpec(KeyLoc, CPT);
3363        if (!CPT || !CPT->isNothrow(C))
3364          return false;
3365      }
3366    }
3367    return FoundOperator;
3368  }
3369  return false;
3370}
3371
3372static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT,
3373                                   SourceLocation KeyLoc, QualType T) {
3374  assert(!T->isDependentType() && "Cannot evaluate traits of dependent type");
3375
3376  ASTContext &C = Self.Context;
3377  switch(UTT) {
3378  default: llvm_unreachable("not a UTT");
3379    // Type trait expressions corresponding to the primary type category
3380    // predicates in C++0x [meta.unary.cat].
3381  case UTT_IsVoid:
3382    return T->isVoidType();
3383  case UTT_IsIntegral:
3384    return T->isIntegralType(C);
3385  case UTT_IsFloatingPoint:
3386    return T->isFloatingType();
3387  case UTT_IsArray:
3388    return T->isArrayType();
3389  case UTT_IsPointer:
3390    return T->isPointerType();
3391  case UTT_IsLvalueReference:
3392    return T->isLValueReferenceType();
3393  case UTT_IsRvalueReference:
3394    return T->isRValueReferenceType();
3395  case UTT_IsMemberFunctionPointer:
3396    return T->isMemberFunctionPointerType();
3397  case UTT_IsMemberObjectPointer:
3398    return T->isMemberDataPointerType();
3399  case UTT_IsEnum:
3400    return T->isEnumeralType();
3401  case UTT_IsUnion:
3402    return T->isUnionType();
3403  case UTT_IsClass:
3404    return T->isClassType() || T->isStructureType() || T->isInterfaceType();
3405  case UTT_IsFunction:
3406    return T->isFunctionType();
3407
3408    // Type trait expressions which correspond to the convenient composition
3409    // predicates in C++0x [meta.unary.comp].
3410  case UTT_IsReference:
3411    return T->isReferenceType();
3412  case UTT_IsArithmetic:
3413    return T->isArithmeticType() && !T->isEnumeralType();
3414  case UTT_IsFundamental:
3415    return T->isFundamentalType();
3416  case UTT_IsObject:
3417    return T->isObjectType();
3418  case UTT_IsScalar:
3419    // Note: semantic analysis depends on Objective-C lifetime types to be
3420    // considered scalar types. However, such types do not actually behave
3421    // like scalar types at run time (since they may require retain/release
3422    // operations), so we report them as non-scalar.
3423    if (T->isObjCLifetimeType()) {
3424      switch (T.getObjCLifetime()) {
3425      case Qualifiers::OCL_None:
3426      case Qualifiers::OCL_ExplicitNone:
3427        return true;
3428
3429      case Qualifiers::OCL_Strong:
3430      case Qualifiers::OCL_Weak:
3431      case Qualifiers::OCL_Autoreleasing:
3432        return false;
3433      }
3434    }
3435
3436    return T->isScalarType();
3437  case UTT_IsCompound:
3438    return T->isCompoundType();
3439  case UTT_IsMemberPointer:
3440    return T->isMemberPointerType();
3441
3442    // Type trait expressions which correspond to the type property predicates
3443    // in C++0x [meta.unary.prop].
3444  case UTT_IsConst:
3445    return T.isConstQualified();
3446  case UTT_IsVolatile:
3447    return T.isVolatileQualified();
3448  case UTT_IsTrivial:
3449    return T.isTrivialType(Self.Context);
3450  case UTT_IsTriviallyCopyable:
3451    return T.isTriviallyCopyableType(Self.Context);
3452  case UTT_IsStandardLayout:
3453    return T->isStandardLayoutType();
3454  case UTT_IsPOD:
3455    return T.isPODType(Self.Context);
3456  case UTT_IsLiteral:
3457    return T->isLiteralType(Self.Context);
3458  case UTT_IsEmpty:
3459    if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3460      return !RD->isUnion() && RD->isEmpty();
3461    return false;
3462  case UTT_IsPolymorphic:
3463    if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3464      return RD->isPolymorphic();
3465    return false;
3466  case UTT_IsAbstract:
3467    if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3468      return RD->isAbstract();
3469    return false;
3470  case UTT_IsInterfaceClass:
3471    if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3472      return RD->isInterface();
3473    return false;
3474  case UTT_IsFinal:
3475    if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3476      return RD->hasAttr<FinalAttr>();
3477    return false;
3478  case UTT_IsSealed:
3479    if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3480      if (FinalAttr *FA = RD->getAttr<FinalAttr>())
3481        return FA->isSpelledAsSealed();
3482    return false;
3483  case UTT_IsSigned:
3484    return T->isSignedIntegerType();
3485  case UTT_IsUnsigned:
3486    return T->isUnsignedIntegerType();
3487
3488    // Type trait expressions which query classes regarding their construction,
3489    // destruction, and copying. Rather than being based directly on the
3490    // related type predicates in the standard, they are specified by both
3491    // GCC[1] and the Embarcadero C++ compiler[2], and Clang implements those
3492    // specifications.
3493    //
3494    //   1: http://gcc.gnu/.org/onlinedocs/gcc/Type-Traits.html
3495    //   2: http://docwiki.embarcadero.com/RADStudio/XE/en/Type_Trait_Functions_(C%2B%2B0x)_Index
3496    //
3497    // Note that these builtins do not behave as documented in g++: if a class
3498    // has both a trivial and a non-trivial special member of a particular kind,
3499    // they return false! For now, we emulate this behavior.
3500    // FIXME: This appears to be a g++ bug: more complex cases reveal that it
3501    // does not correctly compute triviality in the presence of multiple special
3502    // members of the same kind. Revisit this once the g++ bug is fixed.
3503  case UTT_HasTrivialDefaultConstructor:
3504    // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
3505    //   If __is_pod (type) is true then the trait is true, else if type is
3506    //   a cv class or union type (or array thereof) with a trivial default
3507    //   constructor ([class.ctor]) then the trait is true, else it is false.
3508    if (T.isPODType(Self.Context))
3509      return true;
3510    if (CXXRecordDecl *RD = C.getBaseElementType(T)->getAsCXXRecordDecl())
3511      return RD->hasTrivialDefaultConstructor() &&
3512             !RD->hasNonTrivialDefaultConstructor();
3513    return false;
3514  case UTT_HasTrivialMoveConstructor:
3515    //  This trait is implemented by MSVC 2012 and needed to parse the
3516    //  standard library headers. Specifically this is used as the logic
3517    //  behind std::is_trivially_move_constructible (20.9.4.3).
3518    if (T.isPODType(Self.Context))
3519      return true;
3520    if (CXXRecordDecl *RD = C.getBaseElementType(T)->getAsCXXRecordDecl())
3521      return RD->hasTrivialMoveConstructor() && !RD->hasNonTrivialMoveConstructor();
3522    return false;
3523  case UTT_HasTrivialCopy:
3524    // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
3525    //   If __is_pod (type) is true or type is a reference type then
3526    //   the trait is true, else if type is a cv class or union type
3527    //   with a trivial copy constructor ([class.copy]) then the trait
3528    //   is true, else it is false.
3529    if (T.isPODType(Self.Context) || T->isReferenceType())
3530      return true;
3531    if (CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3532      return RD->hasTrivialCopyConstructor() &&
3533             !RD->hasNonTrivialCopyConstructor();
3534    return false;
3535  case UTT_HasTrivialMoveAssign:
3536    //  This trait is implemented by MSVC 2012 and needed to parse the
3537    //  standard library headers. Specifically it is used as the logic
3538    //  behind std::is_trivially_move_assignable (20.9.4.3)
3539    if (T.isPODType(Self.Context))
3540      return true;
3541    if (CXXRecordDecl *RD = C.getBaseElementType(T)->getAsCXXRecordDecl())
3542      return RD->hasTrivialMoveAssignment() && !RD->hasNonTrivialMoveAssignment();
3543    return false;
3544  case UTT_HasTrivialAssign:
3545    // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
3546    //   If type is const qualified or is a reference type then the
3547    //   trait is false. Otherwise if __is_pod (type) is true then the
3548    //   trait is true, else if type is a cv class or union type with
3549    //   a trivial copy assignment ([class.copy]) then the trait is
3550    //   true, else it is false.
3551    // Note: the const and reference restrictions are interesting,
3552    // given that const and reference members don't prevent a class
3553    // from having a trivial copy assignment operator (but do cause
3554    // errors if the copy assignment operator is actually used, q.v.
3555    // [class.copy]p12).
3556
3557    if (T.isConstQualified())
3558      return false;
3559    if (T.isPODType(Self.Context))
3560      return true;
3561    if (CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3562      return RD->hasTrivialCopyAssignment() &&
3563             !RD->hasNonTrivialCopyAssignment();
3564    return false;
3565  case UTT_IsDestructible:
3566  case UTT_IsNothrowDestructible:
3567    // FIXME: Implement UTT_IsDestructible and UTT_IsNothrowDestructible.
3568    // For now, let's fall through.
3569  case UTT_HasTrivialDestructor:
3570    // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html
3571    //   If __is_pod (type) is true or type is a reference type
3572    //   then the trait is true, else if type is a cv class or union
3573    //   type (or array thereof) with a trivial destructor
3574    //   ([class.dtor]) then the trait is true, else it is
3575    //   false.
3576    if (T.isPODType(Self.Context) || T->isReferenceType())
3577      return true;
3578
3579    // Objective-C++ ARC: autorelease types don't require destruction.
3580    if (T->isObjCLifetimeType() &&
3581        T.getObjCLifetime() == Qualifiers::OCL_Autoreleasing)
3582      return true;
3583
3584    if (CXXRecordDecl *RD = C.getBaseElementType(T)->getAsCXXRecordDecl())
3585      return RD->hasTrivialDestructor();
3586    return false;
3587  // TODO: Propagate nothrowness for implicitly declared special members.
3588  case UTT_HasNothrowAssign:
3589    // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
3590    //   If type is const qualified or is a reference type then the
3591    //   trait is false. Otherwise if __has_trivial_assign (type)
3592    //   is true then the trait is true, else if type is a cv class
3593    //   or union type with copy assignment operators that are known
3594    //   not to throw an exception then the trait is true, else it is
3595    //   false.
3596    if (C.getBaseElementType(T).isConstQualified())
3597      return false;
3598    if (T->isReferenceType())
3599      return false;
3600    if (T.isPODType(Self.Context) || T->isObjCLifetimeType())
3601      return true;
3602
3603    if (const RecordType *RT = T->getAs<RecordType>())
3604      return HasNoThrowOperator(RT, OO_Equal, Self, KeyLoc, C,
3605                                &CXXRecordDecl::hasTrivialCopyAssignment,
3606                                &CXXRecordDecl::hasNonTrivialCopyAssignment,
3607                                &CXXMethodDecl::isCopyAssignmentOperator);
3608    return false;
3609  case UTT_HasNothrowMoveAssign:
3610    //  This trait is implemented by MSVC 2012 and needed to parse the
3611    //  standard library headers. Specifically this is used as the logic
3612    //  behind std::is_nothrow_move_assignable (20.9.4.3).
3613    if (T.isPODType(Self.Context))
3614      return true;
3615
3616    if (const RecordType *RT = C.getBaseElementType(T)->getAs<RecordType>())
3617      return HasNoThrowOperator(RT, OO_Equal, Self, KeyLoc, C,
3618                                &CXXRecordDecl::hasTrivialMoveAssignment,
3619                                &CXXRecordDecl::hasNonTrivialMoveAssignment,
3620                                &CXXMethodDecl::isMoveAssignmentOperator);
3621    return false;
3622  case UTT_HasNothrowCopy:
3623    // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
3624    //   If __has_trivial_copy (type) is true then the trait is true, else
3625    //   if type is a cv class or union type with copy constructors that are
3626    //   known not to throw an exception then the trait is true, else it is
3627    //   false.
3628    if (T.isPODType(C) || T->isReferenceType() || T->isObjCLifetimeType())
3629      return true;
3630    if (CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {
3631      if (RD->hasTrivialCopyConstructor() &&
3632          !RD->hasNonTrivialCopyConstructor())
3633        return true;
3634
3635      bool FoundConstructor = false;
3636      unsigned FoundTQs;
3637      DeclContext::lookup_result R = Self.LookupConstructors(RD);
3638      for (DeclContext::lookup_iterator Con = R.begin(),
3639           ConEnd = R.end(); Con != ConEnd; ++Con) {
3640        // A template constructor is never a copy constructor.
3641        // FIXME: However, it may actually be selected at the actual overload
3642        // resolution point.
3643        if (isa<FunctionTemplateDecl>(*Con))
3644          continue;
3645        CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
3646        if (Constructor->isCopyConstructor(FoundTQs)) {
3647          FoundConstructor = true;
3648          const FunctionProtoType *CPT
3649              = Constructor->getType()->getAs<FunctionProtoType>();
3650          CPT = Self.ResolveExceptionSpec(KeyLoc, CPT);
3651          if (!CPT)
3652            return false;
3653          // TODO: check whether evaluating default arguments can throw.
3654          // For now, we'll be conservative and assume that they can throw.
3655          if (!CPT->isNothrow(Self.Context) || CPT->getNumParams() > 1)
3656            return false;
3657        }
3658      }
3659
3660      return FoundConstructor;
3661    }
3662    return false;
3663  case UTT_HasNothrowConstructor:
3664    // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html
3665    //   If __has_trivial_constructor (type) is true then the trait is
3666    //   true, else if type is a cv class or union type (or array
3667    //   thereof) with a default constructor that is known not to
3668    //   throw an exception then the trait is true, else it is false.
3669    if (T.isPODType(C) || T->isObjCLifetimeType())
3670      return true;
3671    if (CXXRecordDecl *RD = C.getBaseElementType(T)->getAsCXXRecordDecl()) {
3672      if (RD->hasTrivialDefaultConstructor() &&
3673          !RD->hasNonTrivialDefaultConstructor())
3674        return true;
3675
3676      bool FoundConstructor = false;
3677      DeclContext::lookup_result R = Self.LookupConstructors(RD);
3678      for (DeclContext::lookup_iterator Con = R.begin(),
3679           ConEnd = R.end(); Con != ConEnd; ++Con) {
3680        // FIXME: In C++0x, a constructor template can be a default constructor.
3681        if (isa<FunctionTemplateDecl>(*Con))
3682          continue;
3683        CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
3684        if (Constructor->isDefaultConstructor()) {
3685          FoundConstructor = true;
3686          const FunctionProtoType *CPT
3687              = Constructor->getType()->getAs<FunctionProtoType>();
3688          CPT = Self.ResolveExceptionSpec(KeyLoc, CPT);
3689          if (!CPT)
3690            return false;
3691          // FIXME: check whether evaluating default arguments can throw.
3692          // For now, we'll be conservative and assume that they can throw.
3693          if (!CPT->isNothrow(Self.Context) || CPT->getNumParams() > 0)
3694            return false;
3695        }
3696      }
3697      return FoundConstructor;
3698    }
3699    return false;
3700  case UTT_HasVirtualDestructor:
3701    // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
3702    //   If type is a class type with a virtual destructor ([class.dtor])
3703    //   then the trait is true, else it is false.
3704    if (CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3705      if (CXXDestructorDecl *Destructor = Self.LookupDestructor(RD))
3706        return Destructor->isVirtual();
3707    return false;
3708
3709    // These type trait expressions are modeled on the specifications for the
3710    // Embarcadero C++0x type trait functions:
3711    //   http://docwiki.embarcadero.com/RADStudio/XE/en/Type_Trait_Functions_(C%2B%2B0x)_Index
3712  case UTT_IsCompleteType:
3713    // http://docwiki.embarcadero.com/RADStudio/XE/en/Is_complete_type_(typename_T_):
3714    //   Returns True if and only if T is a complete type at the point of the
3715    //   function call.
3716    return !T->isIncompleteType();
3717  }
3718}
3719
3720/// \brief Determine whether T has a non-trivial Objective-C lifetime in
3721/// ARC mode.
3722static bool hasNontrivialObjCLifetime(QualType T) {
3723  switch (T.getObjCLifetime()) {
3724  case Qualifiers::OCL_ExplicitNone:
3725    return false;
3726
3727  case Qualifiers::OCL_Strong:
3728  case Qualifiers::OCL_Weak:
3729  case Qualifiers::OCL_Autoreleasing:
3730    return true;
3731
3732  case Qualifiers::OCL_None:
3733    return T->isObjCLifetimeType();
3734  }
3735
3736  llvm_unreachable("Unknown ObjC lifetime qualifier");
3737}
3738
3739static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT,
3740                                    QualType RhsT, SourceLocation KeyLoc);
3741
3742static bool evaluateTypeTrait(Sema &S, TypeTrait Kind, SourceLocation KWLoc,
3743                              ArrayRef<TypeSourceInfo *> Args,
3744                              SourceLocation RParenLoc) {
3745  if (Kind <= UTT_Last)
3746    return EvaluateUnaryTypeTrait(S, Kind, KWLoc, Args[0]->getType());
3747
3748  if (Kind <= BTT_Last)
3749    return EvaluateBinaryTypeTrait(S, Kind, Args[0]->getType(),
3750                                   Args[1]->getType(), RParenLoc);
3751
3752  switch (Kind) {
3753  case clang::TT_IsConstructible:
3754  case clang::TT_IsNothrowConstructible:
3755  case clang::TT_IsTriviallyConstructible: {
3756    // C++11 [meta.unary.prop]:
3757    //   is_trivially_constructible is defined as:
3758    //
3759    //     is_constructible<T, Args...>::value is true and the variable
3760    //     definition for is_constructible, as defined below, is known to call
3761    //     no operation that is not trivial.
3762    //
3763    //   The predicate condition for a template specialization
3764    //   is_constructible<T, Args...> shall be satisfied if and only if the
3765    //   following variable definition would be well-formed for some invented
3766    //   variable t:
3767    //
3768    //     T t(create<Args>()...);
3769    assert(!Args.empty());
3770
3771    // Precondition: T and all types in the parameter pack Args shall be
3772    // complete types, (possibly cv-qualified) void, or arrays of
3773    // unknown bound.
3774    for (unsigned I = 0, N = Args.size(); I != N; ++I) {
3775      QualType ArgTy = Args[I]->getType();
3776      if (ArgTy->isVoidType() || ArgTy->isIncompleteArrayType())
3777        continue;
3778
3779      if (S.RequireCompleteType(KWLoc, ArgTy,
3780          diag::err_incomplete_type_used_in_type_trait_expr))
3781        return false;
3782    }
3783
3784    // Make sure the first argument is a complete type.
3785    if (Args[0]->getType()->isIncompleteType())
3786      return false;
3787
3788    // Make sure the first argument is not an abstract type.
3789    CXXRecordDecl *RD = Args[0]->getType()->getAsCXXRecordDecl();
3790    if (RD && RD->isAbstract())
3791      return false;
3792
3793    SmallVector<OpaqueValueExpr, 2> OpaqueArgExprs;
3794    SmallVector<Expr *, 2> ArgExprs;
3795    ArgExprs.reserve(Args.size() - 1);
3796    for (unsigned I = 1, N = Args.size(); I != N; ++I) {
3797      QualType T = Args[I]->getType();
3798      if (T->isObjectType() || T->isFunctionType())
3799        T = S.Context.getRValueReferenceType(T);
3800      OpaqueArgExprs.push_back(
3801        OpaqueValueExpr(Args[I]->getTypeLoc().getLocStart(),
3802                        T.getNonLValueExprType(S.Context),
3803                        Expr::getValueKindForType(T)));
3804    }
3805    for (Expr &E : OpaqueArgExprs)
3806      ArgExprs.push_back(&E);
3807
3808    // Perform the initialization in an unevaluated context within a SFINAE
3809    // trap at translation unit scope.
3810    EnterExpressionEvaluationContext Unevaluated(S, Sema::Unevaluated);
3811    Sema::SFINAETrap SFINAE(S, /*AccessCheckingSFINAE=*/true);
3812    Sema::ContextRAII TUContext(S, S.Context.getTranslationUnitDecl());
3813    InitializedEntity To(InitializedEntity::InitializeTemporary(Args[0]));
3814    InitializationKind InitKind(InitializationKind::CreateDirect(KWLoc, KWLoc,
3815                                                                 RParenLoc));
3816    InitializationSequence Init(S, To, InitKind, ArgExprs);
3817    if (Init.Failed())
3818      return false;
3819
3820    ExprResult Result = Init.Perform(S, To, InitKind, ArgExprs);
3821    if (Result.isInvalid() || SFINAE.hasErrorOccurred())
3822      return false;
3823
3824    if (Kind == clang::TT_IsConstructible)
3825      return true;
3826
3827    if (Kind == clang::TT_IsNothrowConstructible)
3828      return S.canThrow(Result.get()) == CT_Cannot;
3829
3830    if (Kind == clang::TT_IsTriviallyConstructible) {
3831      // Under Objective-C ARC, if the destination has non-trivial Objective-C
3832      // lifetime, this is a non-trivial construction.
3833      if (S.getLangOpts().ObjCAutoRefCount &&
3834          hasNontrivialObjCLifetime(Args[0]->getType().getNonReferenceType()))
3835        return false;
3836
3837      // The initialization succeeded; now make sure there are no non-trivial
3838      // calls.
3839      return !Result.get()->hasNonTrivialCall(S.Context);
3840    }
3841
3842    llvm_unreachable("unhandled type trait");
3843    return false;
3844  }
3845    default: llvm_unreachable("not a TT");
3846  }
3847
3848  return false;
3849}
3850
3851ExprResult Sema::BuildTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
3852                                ArrayRef<TypeSourceInfo *> Args,
3853                                SourceLocation RParenLoc) {
3854  QualType ResultType = Context.getLogicalOperationType();
3855
3856  if (Kind <= UTT_Last && !CheckUnaryTypeTraitTypeCompleteness(
3857                               *this, Kind, KWLoc, Args[0]->getType()))
3858    return ExprError();
3859
3860  bool Dependent = false;
3861  for (unsigned I = 0, N = Args.size(); I != N; ++I) {
3862    if (Args[I]->getType()->isDependentType()) {
3863      Dependent = true;
3864      break;
3865    }
3866  }
3867
3868  bool Result = false;
3869  if (!Dependent)
3870    Result = evaluateTypeTrait(*this, Kind, KWLoc, Args, RParenLoc);
3871
3872  return TypeTraitExpr::Create(Context, ResultType, KWLoc, Kind, Args,
3873                               RParenLoc, Result);
3874}
3875
3876ExprResult Sema::ActOnTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
3877                                ArrayRef<ParsedType> Args,
3878                                SourceLocation RParenLoc) {
3879  SmallVector<TypeSourceInfo *, 4> ConvertedArgs;
3880  ConvertedArgs.reserve(Args.size());
3881
3882  for (unsigned I = 0, N = Args.size(); I != N; ++I) {
3883    TypeSourceInfo *TInfo;
3884    QualType T = GetTypeFromParser(Args[I], &TInfo);
3885    if (!TInfo)
3886      TInfo = Context.getTrivialTypeSourceInfo(T, KWLoc);
3887
3888    ConvertedArgs.push_back(TInfo);
3889  }
3890
3891  return BuildTypeTrait(Kind, KWLoc, ConvertedArgs, RParenLoc);
3892}
3893
3894static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT,
3895                                    QualType RhsT, SourceLocation KeyLoc) {
3896  assert(!LhsT->isDependentType() && !RhsT->isDependentType() &&
3897         "Cannot evaluate traits of dependent types");
3898
3899  switch(BTT) {
3900  case BTT_IsBaseOf: {
3901    // C++0x [meta.rel]p2
3902    // Base is a base class of Derived without regard to cv-qualifiers or
3903    // Base and Derived are not unions and name the same class type without
3904    // regard to cv-qualifiers.
3905
3906    const RecordType *lhsRecord = LhsT->getAs<RecordType>();
3907    if (!lhsRecord) return false;
3908
3909    const RecordType *rhsRecord = RhsT->getAs<RecordType>();
3910    if (!rhsRecord) return false;
3911
3912    assert(Self.Context.hasSameUnqualifiedType(LhsT, RhsT)
3913             == (lhsRecord == rhsRecord));
3914
3915    if (lhsRecord == rhsRecord)
3916      return !lhsRecord->getDecl()->isUnion();
3917
3918    // C++0x [meta.rel]p2:
3919    //   If Base and Derived are class types and are different types
3920    //   (ignoring possible cv-qualifiers) then Derived shall be a
3921    //   complete type.
3922    if (Self.RequireCompleteType(KeyLoc, RhsT,
3923                          diag::err_incomplete_type_used_in_type_trait_expr))
3924      return false;
3925
3926    return cast<CXXRecordDecl>(rhsRecord->getDecl())
3927      ->isDerivedFrom(cast<CXXRecordDecl>(lhsRecord->getDecl()));
3928  }
3929  case BTT_IsSame:
3930    return Self.Context.hasSameType(LhsT, RhsT);
3931  case BTT_TypeCompatible:
3932    return Self.Context.typesAreCompatible(LhsT.getUnqualifiedType(),
3933                                           RhsT.getUnqualifiedType());
3934  case BTT_IsConvertible:
3935  case BTT_IsConvertibleTo: {
3936    // C++0x [meta.rel]p4:
3937    //   Given the following function prototype:
3938    //
3939    //     template <class T>
3940    //       typename add_rvalue_reference<T>::type create();
3941    //
3942    //   the predicate condition for a template specialization
3943    //   is_convertible<From, To> shall be satisfied if and only if
3944    //   the return expression in the following code would be
3945    //   well-formed, including any implicit conversions to the return
3946    //   type of the function:
3947    //
3948    //     To test() {
3949    //       return create<From>();
3950    //     }
3951    //
3952    //   Access checking is performed as if in a context unrelated to To and
3953    //   From. Only the validity of the immediate context of the expression
3954    //   of the return-statement (including conversions to the return type)
3955    //   is considered.
3956    //
3957    // We model the initialization as a copy-initialization of a temporary
3958    // of the appropriate type, which for this expression is identical to the
3959    // return statement (since NRVO doesn't apply).
3960
3961    // Functions aren't allowed to return function or array types.
3962    if (RhsT->isFunctionType() || RhsT->isArrayType())
3963      return false;
3964
3965    // A return statement in a void function must have void type.
3966    if (RhsT->isVoidType())
3967      return LhsT->isVoidType();
3968
3969    // A function definition requires a complete, non-abstract return type.
3970    if (Self.RequireCompleteType(KeyLoc, RhsT, 0) ||
3971        Self.RequireNonAbstractType(KeyLoc, RhsT, 0))
3972      return false;
3973
3974    // Compute the result of add_rvalue_reference.
3975    if (LhsT->isObjectType() || LhsT->isFunctionType())
3976      LhsT = Self.Context.getRValueReferenceType(LhsT);
3977
3978    // Build a fake source and destination for initialization.
3979    InitializedEntity To(InitializedEntity::InitializeTemporary(RhsT));
3980    OpaqueValueExpr From(KeyLoc, LhsT.getNonLValueExprType(Self.Context),
3981                         Expr::getValueKindForType(LhsT));
3982    Expr *FromPtr = &From;
3983    InitializationKind Kind(InitializationKind::CreateCopy(KeyLoc,
3984                                                           SourceLocation()));
3985
3986    // Perform the initialization in an unevaluated context within a SFINAE
3987    // trap at translation unit scope.
3988    EnterExpressionEvaluationContext Unevaluated(Self, Sema::Unevaluated);
3989    Sema::SFINAETrap SFINAE(Self, /*AccessCheckingSFINAE=*/true);
3990    Sema::ContextRAII TUContext(Self, Self.Context.getTranslationUnitDecl());
3991    InitializationSequence Init(Self, To, Kind, FromPtr);
3992    if (Init.Failed())
3993      return false;
3994
3995    ExprResult Result = Init.Perform(Self, To, Kind, FromPtr);
3996    return !Result.isInvalid() && !SFINAE.hasErrorOccurred();
3997  }
3998
3999  case BTT_IsNothrowAssignable:
4000  case BTT_IsTriviallyAssignable: {
4001    // C++11 [meta.unary.prop]p3:
4002    //   is_trivially_assignable is defined as:
4003    //     is_assignable<T, U>::value is true and the assignment, as defined by
4004    //     is_assignable, is known to call no operation that is not trivial
4005    //
4006    //   is_assignable is defined as:
4007    //     The expression declval<T>() = declval<U>() is well-formed when
4008    //     treated as an unevaluated operand (Clause 5).
4009    //
4010    //   For both, T and U shall be complete types, (possibly cv-qualified)
4011    //   void, or arrays of unknown bound.
4012    if (!LhsT->isVoidType() && !LhsT->isIncompleteArrayType() &&
4013        Self.RequireCompleteType(KeyLoc, LhsT,
4014          diag::err_incomplete_type_used_in_type_trait_expr))
4015      return false;
4016    if (!RhsT->isVoidType() && !RhsT->isIncompleteArrayType() &&
4017        Self.RequireCompleteType(KeyLoc, RhsT,
4018          diag::err_incomplete_type_used_in_type_trait_expr))
4019      return false;
4020
4021    // cv void is never assignable.
4022    if (LhsT->isVoidType() || RhsT->isVoidType())
4023      return false;
4024
4025    // Build expressions that emulate the effect of declval<T>() and
4026    // declval<U>().
4027    if (LhsT->isObjectType() || LhsT->isFunctionType())
4028      LhsT = Self.Context.getRValueReferenceType(LhsT);
4029    if (RhsT->isObjectType() || RhsT->isFunctionType())
4030      RhsT = Self.Context.getRValueReferenceType(RhsT);
4031    OpaqueValueExpr Lhs(KeyLoc, LhsT.getNonLValueExprType(Self.Context),
4032                        Expr::getValueKindForType(LhsT));
4033    OpaqueValueExpr Rhs(KeyLoc, RhsT.getNonLValueExprType(Self.Context),
4034                        Expr::getValueKindForType(RhsT));
4035
4036    // Attempt the assignment in an unevaluated context within a SFINAE
4037    // trap at translation unit scope.
4038    EnterExpressionEvaluationContext Unevaluated(Self, Sema::Unevaluated);
4039    Sema::SFINAETrap SFINAE(Self, /*AccessCheckingSFINAE=*/true);
4040    Sema::ContextRAII TUContext(Self, Self.Context.getTranslationUnitDecl());
4041    ExprResult Result = Self.BuildBinOp(/*S=*/nullptr, KeyLoc, BO_Assign, &Lhs,
4042                                        &Rhs);
4043    if (Result.isInvalid() || SFINAE.hasErrorOccurred())
4044      return false;
4045
4046    if (BTT == BTT_IsNothrowAssignable)
4047      return Self.canThrow(Result.get()) == CT_Cannot;
4048
4049    if (BTT == BTT_IsTriviallyAssignable) {
4050      // Under Objective-C ARC, if the destination has non-trivial Objective-C
4051      // lifetime, this is a non-trivial assignment.
4052      if (Self.getLangOpts().ObjCAutoRefCount &&
4053          hasNontrivialObjCLifetime(LhsT.getNonReferenceType()))
4054        return false;
4055
4056      return !Result.get()->hasNonTrivialCall(Self.Context);
4057    }
4058
4059    llvm_unreachable("unhandled type trait");
4060    return false;
4061  }
4062    default: llvm_unreachable("not a BTT");
4063  }
4064  llvm_unreachable("Unknown type trait or not implemented");
4065}
4066
4067ExprResult Sema::ActOnArrayTypeTrait(ArrayTypeTrait ATT,
4068                                     SourceLocation KWLoc,
4069                                     ParsedType Ty,
4070                                     Expr* DimExpr,
4071                                     SourceLocation RParen) {
4072  TypeSourceInfo *TSInfo;
4073  QualType T = GetTypeFromParser(Ty, &TSInfo);
4074  if (!TSInfo)
4075    TSInfo = Context.getTrivialTypeSourceInfo(T);
4076
4077  return BuildArrayTypeTrait(ATT, KWLoc, TSInfo, DimExpr, RParen);
4078}
4079
4080static uint64_t EvaluateArrayTypeTrait(Sema &Self, ArrayTypeTrait ATT,
4081                                           QualType T, Expr *DimExpr,
4082                                           SourceLocation KeyLoc) {
4083  assert(!T->isDependentType() && "Cannot evaluate traits of dependent type");
4084
4085  switch(ATT) {
4086  case ATT_ArrayRank:
4087    if (T->isArrayType()) {
4088      unsigned Dim = 0;
4089      while (const ArrayType *AT = Self.Context.getAsArrayType(T)) {
4090        ++Dim;
4091        T = AT->getElementType();
4092      }
4093      return Dim;
4094    }
4095    return 0;
4096
4097  case ATT_ArrayExtent: {
4098    llvm::APSInt Value;
4099    uint64_t Dim;
4100    if (Self.VerifyIntegerConstantExpression(DimExpr, &Value,
4101          diag::err_dimension_expr_not_constant_integer,
4102          false).isInvalid())
4103      return 0;
4104    if (Value.isSigned() && Value.isNegative()) {
4105      Self.Diag(KeyLoc, diag::err_dimension_expr_not_constant_integer)
4106        << DimExpr->getSourceRange();
4107      return 0;
4108    }
4109    Dim = Value.getLimitedValue();
4110
4111    if (T->isArrayType()) {
4112      unsigned D = 0;
4113      bool Matched = false;
4114      while (const ArrayType *AT = Self.Context.getAsArrayType(T)) {
4115        if (Dim == D) {
4116          Matched = true;
4117          break;
4118        }
4119        ++D;
4120        T = AT->getElementType();
4121      }
4122
4123      if (Matched && T->isArrayType()) {
4124        if (const ConstantArrayType *CAT = Self.Context.getAsConstantArrayType(T))
4125          return CAT->getSize().getLimitedValue();
4126      }
4127    }
4128    return 0;
4129  }
4130  }
4131  llvm_unreachable("Unknown type trait or not implemented");
4132}
4133
4134ExprResult Sema::BuildArrayTypeTrait(ArrayTypeTrait ATT,
4135                                     SourceLocation KWLoc,
4136                                     TypeSourceInfo *TSInfo,
4137                                     Expr* DimExpr,
4138                                     SourceLocation RParen) {
4139  QualType T = TSInfo->getType();
4140
4141  // FIXME: This should likely be tracked as an APInt to remove any host
4142  // assumptions about the width of size_t on the target.
4143  uint64_t Value = 0;
4144  if (!T->isDependentType())
4145    Value = EvaluateArrayTypeTrait(*this, ATT, T, DimExpr, KWLoc);
4146
4147  // While the specification for these traits from the Embarcadero C++
4148  // compiler's documentation says the return type is 'unsigned int', Clang
4149  // returns 'size_t'. On Windows, the primary platform for the Embarcadero
4150  // compiler, there is no difference. On several other platforms this is an
4151  // important distinction.
4152  return new (Context) ArrayTypeTraitExpr(KWLoc, ATT, TSInfo, Value, DimExpr,
4153                                          RParen, Context.getSizeType());
4154}
4155
4156ExprResult Sema::ActOnExpressionTrait(ExpressionTrait ET,
4157                                      SourceLocation KWLoc,
4158                                      Expr *Queried,
4159                                      SourceLocation RParen) {
4160  // If error parsing the expression, ignore.
4161  if (!Queried)
4162    return ExprError();
4163
4164  ExprResult Result = BuildExpressionTrait(ET, KWLoc, Queried, RParen);
4165
4166  return Result;
4167}
4168
4169static bool EvaluateExpressionTrait(ExpressionTrait ET, Expr *E) {
4170  switch (ET) {
4171  case ET_IsLValueExpr: return E->isLValue();
4172  case ET_IsRValueExpr: return E->isRValue();
4173  }
4174  llvm_unreachable("Expression trait not covered by switch");
4175}
4176
4177ExprResult Sema::BuildExpressionTrait(ExpressionTrait ET,
4178                                      SourceLocation KWLoc,
4179                                      Expr *Queried,
4180                                      SourceLocation RParen) {
4181  if (Queried->isTypeDependent()) {
4182    // Delay type-checking for type-dependent expressions.
4183  } else if (Queried->getType()->isPlaceholderType()) {
4184    ExprResult PE = CheckPlaceholderExpr(Queried);
4185    if (PE.isInvalid()) return ExprError();
4186    return BuildExpressionTrait(ET, KWLoc, PE.get(), RParen);
4187  }
4188
4189  bool Value = EvaluateExpressionTrait(ET, Queried);
4190
4191  return new (Context)
4192      ExpressionTraitExpr(KWLoc, ET, Queried, Value, RParen, Context.BoolTy);
4193}
4194
4195QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS,
4196                                            ExprValueKind &VK,
4197                                            SourceLocation Loc,
4198                                            bool isIndirect) {
4199  assert(!LHS.get()->getType()->isPlaceholderType() &&
4200         !RHS.get()->getType()->isPlaceholderType() &&
4201         "placeholders should have been weeded out by now");
4202
4203  // The LHS undergoes lvalue conversions if this is ->*.
4204  if (isIndirect) {
4205    LHS = DefaultLvalueConversion(LHS.get());
4206    if (LHS.isInvalid()) return QualType();
4207  }
4208
4209  // The RHS always undergoes lvalue conversions.
4210  RHS = DefaultLvalueConversion(RHS.get());
4211  if (RHS.isInvalid()) return QualType();
4212
4213  const char *OpSpelling = isIndirect ? "->*" : ".*";
4214  // C++ 5.5p2
4215  //   The binary operator .* [p3: ->*] binds its second operand, which shall
4216  //   be of type "pointer to member of T" (where T is a completely-defined
4217  //   class type) [...]
4218  QualType RHSType = RHS.get()->getType();
4219  const MemberPointerType *MemPtr = RHSType->getAs<MemberPointerType>();
4220  if (!MemPtr) {
4221    Diag(Loc, diag::err_bad_memptr_rhs)
4222      << OpSpelling << RHSType << RHS.get()->getSourceRange();
4223    return QualType();
4224  }
4225
4226  QualType Class(MemPtr->getClass(), 0);
4227
4228  // Note: C++ [expr.mptr.oper]p2-3 says that the class type into which the
4229  // member pointer points must be completely-defined. However, there is no
4230  // reason for this semantic distinction, and the rule is not enforced by
4231  // other compilers. Therefore, we do not check this property, as it is
4232  // likely to be considered a defect.
4233
4234  // C++ 5.5p2
4235  //   [...] to its first operand, which shall be of class T or of a class of
4236  //   which T is an unambiguous and accessible base class. [p3: a pointer to
4237  //   such a class]
4238  QualType LHSType = LHS.get()->getType();
4239  if (isIndirect) {
4240    if (const PointerType *Ptr = LHSType->getAs<PointerType>())
4241      LHSType = Ptr->getPointeeType();
4242    else {
4243      Diag(Loc, diag::err_bad_memptr_lhs)
4244        << OpSpelling << 1 << LHSType
4245        << FixItHint::CreateReplacement(SourceRange(Loc), ".*");
4246      return QualType();
4247    }
4248  }
4249
4250  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {
4251    // If we want to check the hierarchy, we need a complete type.
4252    if (RequireCompleteType(Loc, LHSType, diag::err_bad_memptr_lhs,
4253                            OpSpelling, (int)isIndirect)) {
4254      return QualType();
4255    }
4256
4257    if (!IsDerivedFrom(LHSType, Class)) {
4258      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling
4259        << (int)isIndirect << LHS.get()->getType();
4260      return QualType();
4261    }
4262
4263    CXXCastPath BasePath;
4264    if (CheckDerivedToBaseConversion(LHSType, Class, Loc,
4265                                     SourceRange(LHS.get()->getLocStart(),
4266                                                 RHS.get()->getLocEnd()),
4267                                     &BasePath))
4268      return QualType();
4269
4270    // Cast LHS to type of use.
4271    QualType UseType = isIndirect ? Context.getPointerType(Class) : Class;
4272    ExprValueKind VK = isIndirect ? VK_RValue : LHS.get()->getValueKind();
4273    LHS = ImpCastExprToType(LHS.get(), UseType, CK_DerivedToBase, VK,
4274                            &BasePath);
4275  }
4276
4277  if (isa<CXXScalarValueInitExpr>(RHS.get()->IgnoreParens())) {
4278    // Diagnose use of pointer-to-member type which when used as
4279    // the functional cast in a pointer-to-member expression.
4280    Diag(Loc, diag::err_pointer_to_member_type) << isIndirect;
4281     return QualType();
4282  }
4283
4284  // C++ 5.5p2
4285  //   The result is an object or a function of the type specified by the
4286  //   second operand.
4287  // The cv qualifiers are the union of those in the pointer and the left side,
4288  // in accordance with 5.5p5 and 5.2.5.
4289  QualType Result = MemPtr->getPointeeType();
4290  Result = Context.getCVRQualifiedType(Result, LHSType.getCVRQualifiers());
4291
4292  // C++0x [expr.mptr.oper]p6:
4293  //   In a .* expression whose object expression is an rvalue, the program is
4294  //   ill-formed if the second operand is a pointer to member function with
4295  //   ref-qualifier &. In a ->* expression or in a .* expression whose object
4296  //   expression is an lvalue, the program is ill-formed if the second operand
4297  //   is a pointer to member function with ref-qualifier &&.
4298  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {
4299    switch (Proto->getRefQualifier()) {
4300    case RQ_None:
4301      // Do nothing
4302      break;
4303
4304    case RQ_LValue:
4305      if (!isIndirect && !LHS.get()->Classify(Context).isLValue())
4306        Diag(Loc, diag::err_pointer_to_member_oper_value_classify)
4307          << RHSType << 1 << LHS.get()->getSourceRange();
4308      break;
4309
4310    case RQ_RValue:
4311      if (isIndirect || !LHS.get()->Classify(Context).isRValue())
4312        Diag(Loc, diag::err_pointer_to_member_oper_value_classify)
4313          << RHSType << 0 << LHS.get()->getSourceRange();
4314      break;
4315    }
4316  }
4317
4318  // C++ [expr.mptr.oper]p6:
4319  //   The result of a .* expression whose second operand is a pointer
4320  //   to a data member is of the same value category as its
4321  //   first operand. The result of a .* expression whose second
4322  //   operand is a pointer to a member function is a prvalue. The
4323  //   result of an ->* expression is an lvalue if its second operand
4324  //   is a pointer to data member and a prvalue otherwise.
4325  if (Result->isFunctionType()) {
4326    VK = VK_RValue;
4327    return Context.BoundMemberTy;
4328  } else if (isIndirect) {
4329    VK = VK_LValue;
4330  } else {
4331    VK = LHS.get()->getValueKind();
4332  }
4333
4334  return Result;
4335}
4336
4337/// \brief Try to convert a type to another according to C++0x 5.16p3.
4338///
4339/// This is part of the parameter validation for the ? operator. If either
4340/// value operand is a class type, the two operands are attempted to be
4341/// converted to each other. This function does the conversion in one direction.
4342/// It returns true if the program is ill-formed and has already been diagnosed
4343/// as such.
4344static bool TryClassUnification(Sema &Self, Expr *From, Expr *To,
4345                                SourceLocation QuestionLoc,
4346                                bool &HaveConversion,
4347                                QualType &ToType) {
4348  HaveConversion = false;
4349  ToType = To->getType();
4350
4351  InitializationKind Kind = InitializationKind::CreateCopy(To->getLocStart(),
4352                                                           SourceLocation());
4353  // C++0x 5.16p3
4354  //   The process for determining whether an operand expression E1 of type T1
4355  //   can be converted to match an operand expression E2 of type T2 is defined
4356  //   as follows:
4357  //   -- If E2 is an lvalue:
4358  bool ToIsLvalue = To->isLValue();
4359  if (ToIsLvalue) {
4360    //   E1 can be converted to match E2 if E1 can be implicitly converted to
4361    //   type "lvalue reference to T2", subject to the constraint that in the
4362    //   conversion the reference must bind directly to E1.
4363    QualType T = Self.Context.getLValueReferenceType(ToType);
4364    InitializedEntity Entity = InitializedEntity::InitializeTemporary(T);
4365
4366    InitializationSequence InitSeq(Self, Entity, Kind, From);
4367    if (InitSeq.isDirectReferenceBinding()) {
4368      ToType = T;
4369      HaveConversion = true;
4370      return false;
4371    }
4372
4373    if (InitSeq.isAmbiguous())
4374      return InitSeq.Diagnose(Self, Entity, Kind, From);
4375  }
4376
4377  //   -- If E2 is an rvalue, or if the conversion above cannot be done:
4378  //      -- if E1 and E2 have class type, and the underlying class types are
4379  //         the same or one is a base class of the other:
4380  QualType FTy = From->getType();
4381  QualType TTy = To->getType();
4382  const RecordType *FRec = FTy->getAs<RecordType>();
4383  const RecordType *TRec = TTy->getAs<RecordType>();
4384  bool FDerivedFromT = FRec && TRec && FRec != TRec &&
4385                       Self.IsDerivedFrom(FTy, TTy);
4386  if (FRec && TRec &&
4387      (FRec == TRec || FDerivedFromT || Self.IsDerivedFrom(TTy, FTy))) {
4388    //         E1 can be converted to match E2 if the class of T2 is the
4389    //         same type as, or a base class of, the class of T1, and
4390    //         [cv2 > cv1].
4391    if (FRec == TRec || FDerivedFromT) {
4392      if (TTy.isAtLeastAsQualifiedAs(FTy)) {
4393        InitializedEntity Entity = InitializedEntity::InitializeTemporary(TTy);
4394        InitializationSequence InitSeq(Self, Entity, Kind, From);
4395        if (InitSeq) {
4396          HaveConversion = true;
4397          return false;
4398        }
4399
4400        if (InitSeq.isAmbiguous())
4401          return InitSeq.Diagnose(Self, Entity, Kind, From);
4402      }
4403    }
4404
4405    return false;
4406  }
4407
4408  //     -- Otherwise: E1 can be converted to match E2 if E1 can be
4409  //        implicitly converted to the type that expression E2 would have
4410  //        if E2 were converted to an rvalue (or the type it has, if E2 is
4411  //        an rvalue).
4412  //
4413  // This actually refers very narrowly to the lvalue-to-rvalue conversion, not
4414  // to the array-to-pointer or function-to-pointer conversions.
4415  if (!TTy->getAs<TagType>())
4416    TTy = TTy.getUnqualifiedType();
4417
4418  InitializedEntity Entity = InitializedEntity::InitializeTemporary(TTy);
4419  InitializationSequence InitSeq(Self, Entity, Kind, From);
4420  HaveConversion = !InitSeq.Failed();
4421  ToType = TTy;
4422  if (InitSeq.isAmbiguous())
4423    return InitSeq.Diagnose(Self, Entity, Kind, From);
4424
4425  return false;
4426}
4427
4428/// \brief Try to find a common type for two according to C++0x 5.16p5.
4429///
4430/// This is part of the parameter validation for the ? operator. If either
4431/// value operand is a class type, overload resolution is used to find a
4432/// conversion to a common type.
4433static bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS,
4434                                    SourceLocation QuestionLoc) {
4435  Expr *Args[2] = { LHS.get(), RHS.get() };
4436  OverloadCandidateSet CandidateSet(QuestionLoc,
4437                                    OverloadCandidateSet::CSK_Operator);
4438  Self.AddBuiltinOperatorCandidates(OO_Conditional, QuestionLoc, Args,
4439                                    CandidateSet);
4440
4441  OverloadCandidateSet::iterator Best;
4442  switch (CandidateSet.BestViableFunction(Self, QuestionLoc, Best)) {
4443    case OR_Success: {
4444      // We found a match. Perform the conversions on the arguments and move on.
4445      ExprResult LHSRes =
4446        Self.PerformImplicitConversion(LHS.get(), Best->BuiltinTypes.ParamTypes[0],
4447                                       Best->Conversions[0], Sema::AA_Converting);
4448      if (LHSRes.isInvalid())
4449        break;
4450      LHS = LHSRes;
4451
4452      ExprResult RHSRes =
4453        Self.PerformImplicitConversion(RHS.get(), Best->BuiltinTypes.ParamTypes[1],
4454                                       Best->Conversions[1], Sema::AA_Converting);
4455      if (RHSRes.isInvalid())
4456        break;
4457      RHS = RHSRes;
4458      if (Best->Function)
4459        Self.MarkFunctionReferenced(QuestionLoc, Best->Function);
4460      return false;
4461    }
4462
4463    case OR_No_Viable_Function:
4464
4465      // Emit a better diagnostic if one of the expressions is a null pointer
4466      // constant and the other is a pointer type. In this case, the user most
4467      // likely forgot to take the address of the other expression.
4468      if (Self.DiagnoseConditionalForNull(LHS.get(), RHS.get(), QuestionLoc))
4469        return true;
4470
4471      Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
4472        << LHS.get()->getType() << RHS.get()->getType()
4473        << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
4474      return true;
4475
4476    case OR_Ambiguous:
4477      Self.Diag(QuestionLoc, diag::err_conditional_ambiguous_ovl)
4478        << LHS.get()->getType() << RHS.get()->getType()
4479        << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
4480      // FIXME: Print the possible common types by printing the return types of
4481      // the viable candidates.
4482      break;
4483
4484    case OR_Deleted:
4485      llvm_unreachable("Conditional operator has only built-in overloads");
4486  }
4487  return true;
4488}
4489
4490/// \brief Perform an "extended" implicit conversion as returned by
4491/// TryClassUnification.
4492static bool ConvertForConditional(Sema &Self, ExprResult &E, QualType T) {
4493  InitializedEntity Entity = InitializedEntity::InitializeTemporary(T);
4494  InitializationKind Kind = InitializationKind::CreateCopy(E.get()->getLocStart(),
4495                                                           SourceLocation());
4496  Expr *Arg = E.get();
4497  InitializationSequence InitSeq(Self, Entity, Kind, Arg);
4498  ExprResult Result = InitSeq.Perform(Self, Entity, Kind, Arg);
4499  if (Result.isInvalid())
4500    return true;
4501
4502  E = Result;
4503  return false;
4504}
4505
4506/// \brief Check the operands of ?: under C++ semantics.
4507///
4508/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y
4509/// extension. In this case, LHS == Cond. (But they're not aliases.)
4510QualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS,
4511                                           ExprResult &RHS, ExprValueKind &VK,
4512                                           ExprObjectKind &OK,
4513                                           SourceLocation QuestionLoc) {
4514  // FIXME: Handle C99's complex types, vector types, block pointers and Obj-C++
4515  // interface pointers.
4516
4517  // C++11 [expr.cond]p1
4518  //   The first expression is contextually converted to bool.
4519  if (!Cond.get()->isTypeDependent()) {
4520    ExprResult CondRes = CheckCXXBooleanCondition(Cond.get());
4521    if (CondRes.isInvalid())
4522      return QualType();
4523    Cond = CondRes;
4524  }
4525
4526  // Assume r-value.
4527  VK = VK_RValue;
4528  OK = OK_Ordinary;
4529
4530  // Either of the arguments dependent?
4531  if (LHS.get()->isTypeDependent() || RHS.get()->isTypeDependent())
4532    return Context.DependentTy;
4533
4534  // C++11 [expr.cond]p2
4535  //   If either the second or the third operand has type (cv) void, ...
4536  QualType LTy = LHS.get()->getType();
4537  QualType RTy = RHS.get()->getType();
4538  bool LVoid = LTy->isVoidType();
4539  bool RVoid = RTy->isVoidType();
4540  if (LVoid || RVoid) {
4541    //   ... one of the following shall hold:
4542    //   -- The second or the third operand (but not both) is a (possibly
4543    //      parenthesized) throw-expression; the result is of the type
4544    //      and value category of the other.
4545    bool LThrow = isa<CXXThrowExpr>(LHS.get()->IgnoreParenImpCasts());
4546    bool RThrow = isa<CXXThrowExpr>(RHS.get()->IgnoreParenImpCasts());
4547    if (LThrow != RThrow) {
4548      Expr *NonThrow = LThrow ? RHS.get() : LHS.get();
4549      VK = NonThrow->getValueKind();
4550      // DR (no number yet): the result is a bit-field if the
4551      // non-throw-expression operand is a bit-field.
4552      OK = NonThrow->getObjectKind();
4553      return NonThrow->getType();
4554    }
4555
4556    //   -- Both the second and third operands have type void; the result is of
4557    //      type void and is a prvalue.
4558    if (LVoid && RVoid)
4559      return Context.VoidTy;
4560
4561    // Neither holds, error.
4562    Diag(QuestionLoc, diag::err_conditional_void_nonvoid)
4563      << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1)
4564      << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
4565    return QualType();
4566  }
4567
4568  // Neither is void.
4569
4570  // C++11 [expr.cond]p3
4571  //   Otherwise, if the second and third operand have different types, and
4572  //   either has (cv) class type [...] an attempt is made to convert each of
4573  //   those operands to the type of the other.
4574  if (!Context.hasSameType(LTy, RTy) &&
4575      (LTy->isRecordType() || RTy->isRecordType())) {
4576    // These return true if a single direction is already ambiguous.
4577    QualType L2RType, R2LType;
4578    bool HaveL2R, HaveR2L;
4579    if (TryClassUnification(*this, LHS.get(), RHS.get(), QuestionLoc, HaveL2R, L2RType))
4580      return QualType();
4581    if (TryClassUnification(*this, RHS.get(), LHS.get(), QuestionLoc, HaveR2L, R2LType))
4582      return QualType();
4583
4584    //   If both can be converted, [...] the program is ill-formed.
4585    if (HaveL2R && HaveR2L) {
4586      Diag(QuestionLoc, diag::err_conditional_ambiguous)
4587        << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
4588      return QualType();
4589    }
4590
4591    //   If exactly one conversion is possible, that conversion is applied to
4592    //   the chosen operand and the converted operands are used in place of the
4593    //   original operands for the remainder of this section.
4594    if (HaveL2R) {
4595      if (ConvertForConditional(*this, LHS, L2RType) || LHS.isInvalid())
4596        return QualType();
4597      LTy = LHS.get()->getType();
4598    } else if (HaveR2L) {
4599      if (ConvertForConditional(*this, RHS, R2LType) || RHS.isInvalid())
4600        return QualType();
4601      RTy = RHS.get()->getType();
4602    }
4603  }
4604
4605  // C++11 [expr.cond]p3
4606  //   if both are glvalues of the same value category and the same type except
4607  //   for cv-qualification, an attempt is made to convert each of those
4608  //   operands to the type of the other.
4609  ExprValueKind LVK = LHS.get()->getValueKind();
4610  ExprValueKind RVK = RHS.get()->getValueKind();
4611  if (!Context.hasSameType(LTy, RTy) &&
4612      Context.hasSameUnqualifiedType(LTy, RTy) &&
4613      LVK == RVK && LVK != VK_RValue) {
4614    // Since the unqualified types are reference-related and we require the
4615    // result to be as if a reference bound directly, the only conversion
4616    // we can perform is to add cv-qualifiers.
4617    Qualifiers LCVR = Qualifiers::fromCVRMask(LTy.getCVRQualifiers());
4618    Qualifiers RCVR = Qualifiers::fromCVRMask(RTy.getCVRQualifiers());
4619    if (RCVR.isStrictSupersetOf(LCVR)) {
4620      LHS = ImpCastExprToType(LHS.get(), RTy, CK_NoOp, LVK);
4621      LTy = LHS.get()->getType();
4622    }
4623    else if (LCVR.isStrictSupersetOf(RCVR)) {
4624      RHS = ImpCastExprToType(RHS.get(), LTy, CK_NoOp, RVK);
4625      RTy = RHS.get()->getType();
4626    }
4627  }
4628
4629  // C++11 [expr.cond]p4
4630  //   If the second and third operands are glvalues of the same value
4631  //   category and have the same type, the result is of that type and
4632  //   value category and it is a bit-field if the second or the third
4633  //   operand is a bit-field, or if both are bit-fields.
4634  // We only extend this to bitfields, not to the crazy other kinds of
4635  // l-values.
4636  bool Same = Context.hasSameType(LTy, RTy);
4637  if (Same && LVK == RVK && LVK != VK_RValue &&
4638      LHS.get()->isOrdinaryOrBitFieldObject() &&
4639      RHS.get()->isOrdinaryOrBitFieldObject()) {
4640    VK = LHS.get()->getValueKind();
4641    if (LHS.get()->getObjectKind() == OK_BitField ||
4642        RHS.get()->getObjectKind() == OK_BitField)
4643      OK = OK_BitField;
4644    return LTy;
4645  }
4646
4647  // C++11 [expr.cond]p5
4648  //   Otherwise, the result is a prvalue. If the second and third operands
4649  //   do not have the same type, and either has (cv) class type, ...
4650  if (!Same && (LTy->isRecordType() || RTy->isRecordType())) {
4651    //   ... overload resolution is used to determine the conversions (if any)
4652    //   to be applied to the operands. If the overload resolution fails, the
4653    //   program is ill-formed.
4654    if (FindConditionalOverload(*this, LHS, RHS, QuestionLoc))
4655      return QualType();
4656  }
4657
4658  // C++11 [expr.cond]p6
4659  //   Lvalue-to-rvalue, array-to-pointer, and function-to-pointer standard
4660  //   conversions are performed on the second and third operands.
4661  LHS = DefaultFunctionArrayLvalueConversion(LHS.get());
4662  RHS = DefaultFunctionArrayLvalueConversion(RHS.get());
4663  if (LHS.isInvalid() || RHS.isInvalid())
4664    return QualType();
4665  LTy = LHS.get()->getType();
4666  RTy = RHS.get()->getType();
4667
4668  //   After those conversions, one of the following shall hold:
4669  //   -- The second and third operands have the same type; the result
4670  //      is of that type. If the operands have class type, the result
4671  //      is a prvalue temporary of the result type, which is
4672  //      copy-initialized from either the second operand or the third
4673  //      operand depending on the value of the first operand.
4674  if (Context.getCanonicalType(LTy) == Context.getCanonicalType(RTy)) {
4675    if (LTy->isRecordType()) {
4676      // The operands have class type. Make a temporary copy.
4677      if (RequireNonAbstractType(QuestionLoc, LTy,
4678                                 diag::err_allocation_of_abstract_type))
4679        return QualType();
4680      InitializedEntity Entity = InitializedEntity::InitializeTemporary(LTy);
4681
4682      ExprResult LHSCopy = PerformCopyInitialization(Entity,
4683                                                     SourceLocation(),
4684                                                     LHS);
4685      if (LHSCopy.isInvalid())
4686        return QualType();
4687
4688      ExprResult RHSCopy = PerformCopyInitialization(Entity,
4689                                                     SourceLocation(),
4690                                                     RHS);
4691      if (RHSCopy.isInvalid())
4692        return QualType();
4693
4694      LHS = LHSCopy;
4695      RHS = RHSCopy;
4696    }
4697
4698    return LTy;
4699  }
4700
4701  // Extension: conditional operator involving vector types.
4702  if (LTy->isVectorType() || RTy->isVectorType())
4703    return CheckVectorOperands(LHS, RHS, QuestionLoc, /*isCompAssign*/false);
4704
4705  //   -- The second and third operands have arithmetic or enumeration type;
4706  //      the usual arithmetic conversions are performed to bring them to a
4707  //      common type, and the result is of that type.
4708  if (LTy->isArithmeticType() && RTy->isArithmeticType()) {
4709    QualType ResTy = UsualArithmeticConversions(LHS, RHS);
4710    if (LHS.isInvalid() || RHS.isInvalid())
4711      return QualType();
4712
4713    LHS = ImpCastExprToType(LHS.get(), ResTy, PrepareScalarCast(LHS, ResTy));
4714    RHS = ImpCastExprToType(RHS.get(), ResTy, PrepareScalarCast(RHS, ResTy));
4715
4716    return ResTy;
4717  }
4718
4719  //   -- The second and third operands have pointer type, or one has pointer
4720  //      type and the other is a null pointer constant, or both are null
4721  //      pointer constants, at least one of which is non-integral; pointer
4722  //      conversions and qualification conversions are performed to bring them
4723  //      to their composite pointer type. The result is of the composite
4724  //      pointer type.
4725  //   -- The second and third operands have pointer to member type, or one has
4726  //      pointer to member type and the other is a null pointer constant;
4727  //      pointer to member conversions and qualification conversions are
4728  //      performed to bring them to a common type, whose cv-qualification
4729  //      shall match the cv-qualification of either the second or the third
4730  //      operand. The result is of the common type.
4731  bool NonStandardCompositeType = false;
4732  QualType Composite = FindCompositePointerType(QuestionLoc, LHS, RHS,
4733                                 isSFINAEContext() ? nullptr
4734                                                   : &NonStandardCompositeType);
4735  if (!Composite.isNull()) {
4736    if (NonStandardCompositeType)
4737      Diag(QuestionLoc,
4738           diag::ext_typecheck_cond_incompatible_operands_nonstandard)
4739        << LTy << RTy << Composite
4740        << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
4741
4742    return Composite;
4743  }
4744
4745  // Similarly, attempt to find composite type of two objective-c pointers.
4746  Composite = FindCompositeObjCPointerType(LHS, RHS, QuestionLoc);
4747  if (!Composite.isNull())
4748    return Composite;
4749
4750  // Check if we are using a null with a non-pointer type.
4751  if (DiagnoseConditionalForNull(LHS.get(), RHS.get(), QuestionLoc))
4752    return QualType();
4753
4754  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
4755    << LHS.get()->getType() << RHS.get()->getType()
4756    << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
4757  return QualType();
4758}
4759
4760/// \brief Find a merged pointer type and convert the two expressions to it.
4761///
4762/// This finds the composite pointer type (or member pointer type) for @p E1
4763/// and @p E2 according to C++11 5.9p2. It converts both expressions to this
4764/// type and returns it.
4765/// It does not emit diagnostics.
4766///
4767/// \param Loc The location of the operator requiring these two expressions to
4768/// be converted to the composite pointer type.
4769///
4770/// If \p NonStandardCompositeType is non-NULL, then we are permitted to find
4771/// a non-standard (but still sane) composite type to which both expressions
4772/// can be converted. When such a type is chosen, \c *NonStandardCompositeType
4773/// will be set true.
4774QualType Sema::FindCompositePointerType(SourceLocation Loc,
4775                                        Expr *&E1, Expr *&E2,
4776                                        bool *NonStandardCompositeType) {
4777  if (NonStandardCompositeType)
4778    *NonStandardCompositeType = false;
4779
4780  assert(getLangOpts().CPlusPlus && "This function assumes C++");
4781  QualType T1 = E1->getType(), T2 = E2->getType();
4782
4783  // C++11 5.9p2
4784  //   Pointer conversions and qualification conversions are performed on
4785  //   pointer operands to bring them to their composite pointer type. If
4786  //   one operand is a null pointer constant, the composite pointer type is
4787  //   std::nullptr_t if the other operand is also a null pointer constant or,
4788  //   if the other operand is a pointer, the type of the other operand.
4789  if (!T1->isAnyPointerType() && !T1->isMemberPointerType() &&
4790      !T2->isAnyPointerType() && !T2->isMemberPointerType()) {
4791    if (T1->isNullPtrType() &&
4792        E2->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
4793      E2 = ImpCastExprToType(E2, T1, CK_NullToPointer).get();
4794      return T1;
4795    }
4796    if (T2->isNullPtrType() &&
4797        E1->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
4798      E1 = ImpCastExprToType(E1, T2, CK_NullToPointer).get();
4799      return T2;
4800    }
4801    return QualType();
4802  }
4803
4804  if (E1->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
4805    if (T2->isMemberPointerType())
4806      E1 = ImpCastExprToType(E1, T2, CK_NullToMemberPointer).get();
4807    else
4808      E1 = ImpCastExprToType(E1, T2, CK_NullToPointer).get();
4809    return T2;
4810  }
4811  if (E2->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
4812    if (T1->isMemberPointerType())
4813      E2 = ImpCastExprToType(E2, T1, CK_NullToMemberPointer).get();
4814    else
4815      E2 = ImpCastExprToType(E2, T1, CK_NullToPointer).get();
4816    return T1;
4817  }
4818
4819  // Now both have to be pointers or member pointers.
4820  if ((!T1->isPointerType() && !T1->isMemberPointerType()) ||
4821      (!T2->isPointerType() && !T2->isMemberPointerType()))
4822    return QualType();
4823
4824  //   Otherwise, of one of the operands has type "pointer to cv1 void," then
4825  //   the other has type "pointer to cv2 T" and the composite pointer type is
4826  //   "pointer to cv12 void," where cv12 is the union of cv1 and cv2.
4827  //   Otherwise, the composite pointer type is a pointer type similar to the
4828  //   type of one of the operands, with a cv-qualification signature that is
4829  //   the union of the cv-qualification signatures of the operand types.
4830  // In practice, the first part here is redundant; it's subsumed by the second.
4831  // What we do here is, we build the two possible composite types, and try the
4832  // conversions in both directions. If only one works, or if the two composite
4833  // types are the same, we have succeeded.
4834  // FIXME: extended qualifiers?
4835  typedef SmallVector<unsigned, 4> QualifierVector;
4836  QualifierVector QualifierUnion;
4837  typedef SmallVector<std::pair<const Type *, const Type *>, 4>
4838      ContainingClassVector;
4839  ContainingClassVector MemberOfClass;
4840  QualType Composite1 = Context.getCanonicalType(T1),
4841           Composite2 = Context.getCanonicalType(T2);
4842  unsigned NeedConstBefore = 0;
4843  do {
4844    const PointerType *Ptr1, *Ptr2;
4845    if ((Ptr1 = Composite1->getAs<PointerType>()) &&
4846        (Ptr2 = Composite2->getAs<PointerType>())) {
4847      Composite1 = Ptr1->getPointeeType();
4848      Composite2 = Ptr2->getPointeeType();
4849
4850      // If we're allowed to create a non-standard composite type, keep track
4851      // of where we need to fill in additional 'const' qualifiers.
4852      if (NonStandardCompositeType &&
4853          Composite1.getCVRQualifiers() != Composite2.getCVRQualifiers())
4854        NeedConstBefore = QualifierUnion.size();
4855
4856      QualifierUnion.push_back(
4857                 Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers());
4858      MemberOfClass.push_back(std::make_pair(nullptr, nullptr));
4859      continue;
4860    }
4861
4862    const MemberPointerType *MemPtr1, *MemPtr2;
4863    if ((MemPtr1 = Composite1->getAs<MemberPointerType>()) &&
4864        (MemPtr2 = Composite2->getAs<MemberPointerType>())) {
4865      Composite1 = MemPtr1->getPointeeType();
4866      Composite2 = MemPtr2->getPointeeType();
4867
4868      // If we're allowed to create a non-standard composite type, keep track
4869      // of where we need to fill in additional 'const' qualifiers.
4870      if (NonStandardCompositeType &&
4871          Composite1.getCVRQualifiers() != Composite2.getCVRQualifiers())
4872        NeedConstBefore = QualifierUnion.size();
4873
4874      QualifierUnion.push_back(
4875                 Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers());
4876      MemberOfClass.push_back(std::make_pair(MemPtr1->getClass(),
4877                                             MemPtr2->getClass()));
4878      continue;
4879    }
4880
4881    // FIXME: block pointer types?
4882
4883    // Cannot unwrap any more types.
4884    break;
4885  } while (true);
4886
4887  if (NeedConstBefore && NonStandardCompositeType) {
4888    // Extension: Add 'const' to qualifiers that come before the first qualifier
4889    // mismatch, so that our (non-standard!) composite type meets the
4890    // requirements of C++ [conv.qual]p4 bullet 3.
4891    for (unsigned I = 0; I != NeedConstBefore; ++I) {
4892      if ((QualifierUnion[I] & Qualifiers::Const) == 0) {
4893        QualifierUnion[I] = QualifierUnion[I] | Qualifiers::Const;
4894        *NonStandardCompositeType = true;
4895      }
4896    }
4897  }
4898
4899  // Rewrap the composites as pointers or member pointers with the union CVRs.
4900  ContainingClassVector::reverse_iterator MOC
4901    = MemberOfClass.rbegin();
4902  for (QualifierVector::reverse_iterator
4903         I = QualifierUnion.rbegin(),
4904         E = QualifierUnion.rend();
4905       I != E; (void)++I, ++MOC) {
4906    Qualifiers Quals = Qualifiers::fromCVRMask(*I);
4907    if (MOC->first && MOC->second) {
4908      // Rebuild member pointer type
4909      Composite1 = Context.getMemberPointerType(
4910                                    Context.getQualifiedType(Composite1, Quals),
4911                                    MOC->first);
4912      Composite2 = Context.getMemberPointerType(
4913                                    Context.getQualifiedType(Composite2, Quals),
4914                                    MOC->second);
4915    } else {
4916      // Rebuild pointer type
4917      Composite1
4918        = Context.getPointerType(Context.getQualifiedType(Composite1, Quals));
4919      Composite2
4920        = Context.getPointerType(Context.getQualifiedType(Composite2, Quals));
4921    }
4922  }
4923
4924  // Try to convert to the first composite pointer type.
4925  InitializedEntity Entity1
4926    = InitializedEntity::InitializeTemporary(Composite1);
4927  InitializationKind Kind
4928    = InitializationKind::CreateCopy(Loc, SourceLocation());
4929  InitializationSequence E1ToC1(*this, Entity1, Kind, E1);
4930  InitializationSequence E2ToC1(*this, Entity1, Kind, E2);
4931
4932  if (E1ToC1 && E2ToC1) {
4933    // Conversion to Composite1 is viable.
4934    if (!Context.hasSameType(Composite1, Composite2)) {
4935      // Composite2 is a different type from Composite1. Check whether
4936      // Composite2 is also viable.
4937      InitializedEntity Entity2
4938        = InitializedEntity::InitializeTemporary(Composite2);
4939      InitializationSequence E1ToC2(*this, Entity2, Kind, E1);
4940      InitializationSequence E2ToC2(*this, Entity2, Kind, E2);
4941      if (E1ToC2 && E2ToC2) {
4942        // Both Composite1 and Composite2 are viable and are different;
4943        // this is an ambiguity.
4944        return QualType();
4945      }
4946    }
4947
4948    // Convert E1 to Composite1
4949    ExprResult E1Result
4950      = E1ToC1.Perform(*this, Entity1, Kind, E1);
4951    if (E1Result.isInvalid())
4952      return QualType();
4953    E1 = E1Result.getAs<Expr>();
4954
4955    // Convert E2 to Composite1
4956    ExprResult E2Result
4957      = E2ToC1.Perform(*this, Entity1, Kind, E2);
4958    if (E2Result.isInvalid())
4959      return QualType();
4960    E2 = E2Result.getAs<Expr>();
4961
4962    return Composite1;
4963  }
4964
4965  // Check whether Composite2 is viable.
4966  InitializedEntity Entity2
4967    = InitializedEntity::InitializeTemporary(Composite2);
4968  InitializationSequence E1ToC2(*this, Entity2, Kind, E1);
4969  InitializationSequence E2ToC2(*this, Entity2, Kind, E2);
4970  if (!E1ToC2 || !E2ToC2)
4971    return QualType();
4972
4973  // Convert E1 to Composite2
4974  ExprResult E1Result
4975    = E1ToC2.Perform(*this, Entity2, Kind, E1);
4976  if (E1Result.isInvalid())
4977    return QualType();
4978  E1 = E1Result.getAs<Expr>();
4979
4980  // Convert E2 to Composite2
4981  ExprResult E2Result
4982    = E2ToC2.Perform(*this, Entity2, Kind, E2);
4983  if (E2Result.isInvalid())
4984    return QualType();
4985  E2 = E2Result.getAs<Expr>();
4986
4987  return Composite2;
4988}
4989
4990ExprResult Sema::MaybeBindToTemporary(Expr *E) {
4991  if (!E)
4992    return ExprError();
4993
4994  assert(!isa<CXXBindTemporaryExpr>(E) && "Double-bound temporary?");
4995
4996  // If the result is a glvalue, we shouldn't bind it.
4997  if (!E->isRValue())
4998    return E;
4999
5000  // In ARC, calls that return a retainable type can return retained,
5001  // in which case we have to insert a consuming cast.
5002  if (getLangOpts().ObjCAutoRefCount &&
5003      E->getType()->isObjCRetainableType()) {
5004
5005    bool ReturnsRetained;
5006
5007    // For actual calls, we compute this by examining the type of the
5008    // called value.
5009    if (CallExpr *Call = dyn_cast<CallExpr>(E)) {
5010      Expr *Callee = Call->getCallee()->IgnoreParens();
5011      QualType T = Callee->getType();
5012
5013      if (T == Context.BoundMemberTy) {
5014        // Handle pointer-to-members.
5015        if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(Callee))
5016          T = BinOp->getRHS()->getType();
5017        else if (MemberExpr *Mem = dyn_cast<MemberExpr>(Callee))
5018          T = Mem->getMemberDecl()->getType();
5019      }
5020
5021      if (const PointerType *Ptr = T->getAs<PointerType>())
5022        T = Ptr->getPointeeType();
5023      else if (const BlockPointerType *Ptr = T->getAs<BlockPointerType>())
5024        T = Ptr->getPointeeType();
5025      else if (const MemberPointerType *MemPtr = T->getAs<MemberPointerType>())
5026        T = MemPtr->getPointeeType();
5027
5028      const FunctionType *FTy = T->getAs<FunctionType>();
5029      assert(FTy && "call to value not of function type?");
5030      ReturnsRetained = FTy->getExtInfo().getProducesResult();
5031
5032    // ActOnStmtExpr arranges things so that StmtExprs of retainable
5033    // type always produce a +1 object.
5034    } else if (isa<StmtExpr>(E)) {
5035      ReturnsRetained = true;
5036
5037    // We hit this case with the lambda conversion-to-block optimization;
5038    // we don't want any extra casts here.
5039    } else if (isa<CastExpr>(E) &&
5040               isa<BlockExpr>(cast<CastExpr>(E)->getSubExpr())) {
5041      return E;
5042
5043    // For message sends and property references, we try to find an
5044    // actual method.  FIXME: we should infer retention by selector in
5045    // cases where we don't have an actual method.
5046    } else {
5047      ObjCMethodDecl *D = nullptr;
5048      if (ObjCMessageExpr *Send = dyn_cast<ObjCMessageExpr>(E)) {
5049        D = Send->getMethodDecl();
5050      } else if (ObjCBoxedExpr *BoxedExpr = dyn_cast<ObjCBoxedExpr>(E)) {
5051        D = BoxedExpr->getBoxingMethod();
5052      } else if (ObjCArrayLiteral *ArrayLit = dyn_cast<ObjCArrayLiteral>(E)) {
5053        D = ArrayLit->getArrayWithObjectsMethod();
5054      } else if (ObjCDictionaryLiteral *DictLit
5055                                        = dyn_cast<ObjCDictionaryLiteral>(E)) {
5056        D = DictLit->getDictWithObjectsMethod();
5057      }
5058
5059      ReturnsRetained = (D && D->hasAttr<NSReturnsRetainedAttr>());
5060
5061      // Don't do reclaims on performSelector calls; despite their
5062      // return type, the invoked method doesn't necessarily actually
5063      // return an object.
5064      if (!ReturnsRetained &&
5065          D && D->getMethodFamily() == OMF_performSelector)
5066        return E;
5067    }
5068
5069    // Don't reclaim an object of Class type.
5070    if (!ReturnsRetained && E->getType()->isObjCARCImplicitlyUnretainedType())
5071      return E;
5072
5073    ExprNeedsCleanups = true;
5074
5075    CastKind ck = (ReturnsRetained ? CK_ARCConsumeObject
5076                                   : CK_ARCReclaimReturnedObject);
5077    return ImplicitCastExpr::Create(Context, E->getType(), ck, E, nullptr,
5078                                    VK_RValue);
5079  }
5080
5081  if (!getLangOpts().CPlusPlus)
5082    return E;
5083
5084  // Search for the base element type (cf. ASTContext::getBaseElementType) with
5085  // a fast path for the common case that the type is directly a RecordType.
5086  const Type *T = Context.getCanonicalType(E->getType().getTypePtr());
5087  const RecordType *RT = nullptr;
5088  while (!RT) {
5089    switch (T->getTypeClass()) {
5090    case Type::Record:
5091      RT = cast<RecordType>(T);
5092      break;
5093    case Type::ConstantArray:
5094    case Type::IncompleteArray:
5095    case Type::VariableArray:
5096    case Type::DependentSizedArray:
5097      T = cast<ArrayType>(T)->getElementType().getTypePtr();
5098      break;
5099    default:
5100      return E;
5101    }
5102  }
5103
5104  // That should be enough to guarantee that this type is complete, if we're
5105  // not processing a decltype expression.
5106  CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
5107  if (RD->isInvalidDecl() || RD->isDependentContext())
5108    return E;
5109
5110  bool IsDecltype = ExprEvalContexts.back().IsDecltype;
5111  CXXDestructorDecl *Destructor = IsDecltype ? nullptr : LookupDestructor(RD);
5112
5113  if (Destructor) {
5114    MarkFunctionReferenced(E->getExprLoc(), Destructor);
5115    CheckDestructorAccess(E->getExprLoc(), Destructor,
5116                          PDiag(diag::err_access_dtor_temp)
5117                            << E->getType());
5118    if (DiagnoseUseOfDecl(Destructor, E->getExprLoc()))
5119      return ExprError();
5120
5121    // If destructor is trivial, we can avoid the extra copy.
5122    if (Destructor->isTrivial())
5123      return E;
5124
5125    // We need a cleanup, but we don't need to remember the temporary.
5126    ExprNeedsCleanups = true;
5127  }
5128
5129  CXXTemporary *Temp = CXXTemporary::Create(Context, Destructor);
5130  CXXBindTemporaryExpr *Bind = CXXBindTemporaryExpr::Create(Context, Temp, E);
5131
5132  if (IsDecltype)
5133    ExprEvalContexts.back().DelayedDecltypeBinds.push_back(Bind);
5134
5135  return Bind;
5136}
5137
5138ExprResult
5139Sema::MaybeCreateExprWithCleanups(ExprResult SubExpr) {
5140  if (SubExpr.isInvalid())
5141    return ExprError();
5142
5143  return MaybeCreateExprWithCleanups(SubExpr.get());
5144}
5145
5146Expr *Sema::MaybeCreateExprWithCleanups(Expr *SubExpr) {
5147  assert(SubExpr && "subexpression can't be null!");
5148
5149  CleanupVarDeclMarking();
5150
5151  unsigned FirstCleanup = ExprEvalContexts.back().NumCleanupObjects;
5152  assert(ExprCleanupObjects.size() >= FirstCleanup);
5153  assert(ExprNeedsCleanups || ExprCleanupObjects.size() == FirstCleanup);
5154  if (!ExprNeedsCleanups)
5155    return SubExpr;
5156
5157  auto Cleanups = llvm::makeArrayRef(ExprCleanupObjects.begin() + FirstCleanup,
5158                                     ExprCleanupObjects.size() - FirstCleanup);
5159
5160  Expr *E = ExprWithCleanups::Create(Context, SubExpr, Cleanups);
5161  DiscardCleanupsInEvaluationContext();
5162
5163  return E;
5164}
5165
5166Stmt *Sema::MaybeCreateStmtWithCleanups(Stmt *SubStmt) {
5167  assert(SubStmt && "sub-statement can't be null!");
5168
5169  CleanupVarDeclMarking();
5170
5171  if (!ExprNeedsCleanups)
5172    return SubStmt;
5173
5174  // FIXME: In order to attach the temporaries, wrap the statement into
5175  // a StmtExpr; currently this is only used for asm statements.
5176  // This is hacky, either create a new CXXStmtWithTemporaries statement or
5177  // a new AsmStmtWithTemporaries.
5178  CompoundStmt *CompStmt = new (Context) CompoundStmt(Context, SubStmt,
5179                                                      SourceLocation(),
5180                                                      SourceLocation());
5181  Expr *E = new (Context) StmtExpr(CompStmt, Context.VoidTy, SourceLocation(),
5182                                   SourceLocation());
5183  return MaybeCreateExprWithCleanups(E);
5184}
5185
5186/// Process the expression contained within a decltype. For such expressions,
5187/// certain semantic checks on temporaries are delayed until this point, and
5188/// are omitted for the 'topmost' call in the decltype expression. If the
5189/// topmost call bound a temporary, strip that temporary off the expression.
5190ExprResult Sema::ActOnDecltypeExpression(Expr *E) {
5191  assert(ExprEvalContexts.back().IsDecltype && "not in a decltype expression");
5192
5193  // C++11 [expr.call]p11:
5194  //   If a function call is a prvalue of object type,
5195  // -- if the function call is either
5196  //   -- the operand of a decltype-specifier, or
5197  //   -- the right operand of a comma operator that is the operand of a
5198  //      decltype-specifier,
5199  //   a temporary object is not introduced for the prvalue.
5200
5201  // Recursively rebuild ParenExprs and comma expressions to strip out the
5202  // outermost CXXBindTemporaryExpr, if any.
5203  if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
5204    ExprResult SubExpr = ActOnDecltypeExpression(PE->getSubExpr());
5205    if (SubExpr.isInvalid())
5206      return ExprError();
5207    if (SubExpr.get() == PE->getSubExpr())
5208      return E;
5209    return ActOnParenExpr(PE->getLParen(), PE->getRParen(), SubExpr.get());
5210  }
5211  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
5212    if (BO->getOpcode() == BO_Comma) {
5213      ExprResult RHS = ActOnDecltypeExpression(BO->getRHS());
5214      if (RHS.isInvalid())
5215        return ExprError();
5216      if (RHS.get() == BO->getRHS())
5217        return E;
5218      return new (Context) BinaryOperator(
5219          BO->getLHS(), RHS.get(), BO_Comma, BO->getType(), BO->getValueKind(),
5220          BO->getObjectKind(), BO->getOperatorLoc(), BO->isFPContractable());
5221    }
5222  }
5223
5224  CXXBindTemporaryExpr *TopBind = dyn_cast<CXXBindTemporaryExpr>(E);
5225  CallExpr *TopCall = TopBind ? dyn_cast<CallExpr>(TopBind->getSubExpr())
5226                              : nullptr;
5227  if (TopCall)
5228    E = TopCall;
5229  else
5230    TopBind = nullptr;
5231
5232  // Disable the special decltype handling now.
5233  ExprEvalContexts.back().IsDecltype = false;
5234
5235  // In MS mode, don't perform any extra checking of call return types within a
5236  // decltype expression.
5237  if (getLangOpts().MSVCCompat)
5238    return E;
5239
5240  // Perform the semantic checks we delayed until this point.
5241  for (unsigned I = 0, N = ExprEvalContexts.back().DelayedDecltypeCalls.size();
5242       I != N; ++I) {
5243    CallExpr *Call = ExprEvalContexts.back().DelayedDecltypeCalls[I];
5244    if (Call == TopCall)
5245      continue;
5246
5247    if (CheckCallReturnType(Call->getCallReturnType(Context),
5248                            Call->getLocStart(),
5249                            Call, Call->getDirectCallee()))
5250      return ExprError();
5251  }
5252
5253  // Now all relevant types are complete, check the destructors are accessible
5254  // and non-deleted, and annotate them on the temporaries.
5255  for (unsigned I = 0, N = ExprEvalContexts.back().DelayedDecltypeBinds.size();
5256       I != N; ++I) {
5257    CXXBindTemporaryExpr *Bind =
5258      ExprEvalContexts.back().DelayedDecltypeBinds[I];
5259    if (Bind == TopBind)
5260      continue;
5261
5262    CXXTemporary *Temp = Bind->getTemporary();
5263
5264    CXXRecordDecl *RD =
5265      Bind->getType()->getBaseElementTypeUnsafe()->getAsCXXRecordDecl();
5266    CXXDestructorDecl *Destructor = LookupDestructor(RD);
5267    Temp->setDestructor(Destructor);
5268
5269    MarkFunctionReferenced(Bind->getExprLoc(), Destructor);
5270    CheckDestructorAccess(Bind->getExprLoc(), Destructor,
5271                          PDiag(diag::err_access_dtor_temp)
5272                            << Bind->getType());
5273    if (DiagnoseUseOfDecl(Destructor, Bind->getExprLoc()))
5274      return ExprError();
5275
5276    // We need a cleanup, but we don't need to remember the temporary.
5277    ExprNeedsCleanups = true;
5278  }
5279
5280  // Possibly strip off the top CXXBindTemporaryExpr.
5281  return E;
5282}
5283
5284/// Note a set of 'operator->' functions that were used for a member access.
5285static void noteOperatorArrows(Sema &S,
5286                               ArrayRef<FunctionDecl *> OperatorArrows) {
5287  unsigned SkipStart = OperatorArrows.size(), SkipCount = 0;
5288  // FIXME: Make this configurable?
5289  unsigned Limit = 9;
5290  if (OperatorArrows.size() > Limit) {
5291    // Produce Limit-1 normal notes and one 'skipping' note.
5292    SkipStart = (Limit - 1) / 2 + (Limit - 1) % 2;
5293    SkipCount = OperatorArrows.size() - (Limit - 1);
5294  }
5295
5296  for (unsigned I = 0; I < OperatorArrows.size(); /**/) {
5297    if (I == SkipStart) {
5298      S.Diag(OperatorArrows[I]->getLocation(),
5299             diag::note_operator_arrows_suppressed)
5300          << SkipCount;
5301      I += SkipCount;
5302    } else {
5303      S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrow_here)
5304          << OperatorArrows[I]->getCallResultType();
5305      ++I;
5306    }
5307  }
5308}
5309
5310ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base,
5311                                              SourceLocation OpLoc,
5312                                              tok::TokenKind OpKind,
5313                                              ParsedType &ObjectType,
5314                                              bool &MayBePseudoDestructor) {
5315  // Since this might be a postfix expression, get rid of ParenListExprs.
5316  ExprResult Result = MaybeConvertParenListExprToParenExpr(S, Base);
5317  if (Result.isInvalid()) return ExprError();
5318  Base = Result.get();
5319
5320  Result = CheckPlaceholderExpr(Base);
5321  if (Result.isInvalid()) return ExprError();
5322  Base = Result.get();
5323
5324  QualType BaseType = Base->getType();
5325  MayBePseudoDestructor = false;
5326  if (BaseType->isDependentType()) {
5327    // If we have a pointer to a dependent type and are using the -> operator,
5328    // the object type is the type that the pointer points to. We might still
5329    // have enough information about that type to do something useful.
5330    if (OpKind == tok::arrow)
5331      if (const PointerType *Ptr = BaseType->getAs<PointerType>())
5332        BaseType = Ptr->getPointeeType();
5333
5334    ObjectType = ParsedType::make(BaseType);
5335    MayBePseudoDestructor = true;
5336    return Base;
5337  }
5338
5339  // C++ [over.match.oper]p8:
5340  //   [...] When operator->returns, the operator-> is applied  to the value
5341  //   returned, with the original second operand.
5342  if (OpKind == tok::arrow) {
5343    QualType StartingType = BaseType;
5344    bool NoArrowOperatorFound = false;
5345    bool FirstIteration = true;
5346    FunctionDecl *CurFD = dyn_cast<FunctionDecl>(CurContext);
5347    // The set of types we've considered so far.
5348    llvm::SmallPtrSet<CanQualType,8> CTypes;
5349    SmallVector<FunctionDecl*, 8> OperatorArrows;
5350    CTypes.insert(Context.getCanonicalType(BaseType));
5351
5352    while (BaseType->isRecordType()) {
5353      if (OperatorArrows.size() >= getLangOpts().ArrowDepth) {
5354        Diag(OpLoc, diag::err_operator_arrow_depth_exceeded)
5355          << StartingType << getLangOpts().ArrowDepth << Base->getSourceRange();
5356        noteOperatorArrows(*this, OperatorArrows);
5357        Diag(OpLoc, diag::note_operator_arrow_depth)
5358          << getLangOpts().ArrowDepth;
5359        return ExprError();
5360      }
5361
5362      Result = BuildOverloadedArrowExpr(
5363          S, Base, OpLoc,
5364          // When in a template specialization and on the first loop iteration,
5365          // potentially give the default diagnostic (with the fixit in a
5366          // separate note) instead of having the error reported back to here
5367          // and giving a diagnostic with a fixit attached to the error itself.
5368          (FirstIteration && CurFD && CurFD->isFunctionTemplateSpecialization())
5369              ? nullptr
5370              : &NoArrowOperatorFound);
5371      if (Result.isInvalid()) {
5372        if (NoArrowOperatorFound) {
5373          if (FirstIteration) {
5374            Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
5375              << BaseType << 1 << Base->getSourceRange()
5376              << FixItHint::CreateReplacement(OpLoc, ".");
5377            OpKind = tok::period;
5378            break;
5379          }
5380          Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
5381            << BaseType << Base->getSourceRange();
5382          CallExpr *CE = dyn_cast<CallExpr>(Base);
5383          if (Decl *CD = (CE ? CE->getCalleeDecl() : nullptr)) {
5384            Diag(CD->getLocStart(),
5385                 diag::note_member_reference_arrow_from_operator_arrow);
5386          }
5387        }
5388        return ExprError();
5389      }
5390      Base = Result.get();
5391      if (CXXOperatorCallExpr *OpCall = dyn_cast<CXXOperatorCallExpr>(Base))
5392        OperatorArrows.push_back(OpCall->getDirectCallee());
5393      BaseType = Base->getType();
5394      CanQualType CBaseType = Context.getCanonicalType(BaseType);
5395      if (!CTypes.insert(CBaseType).second) {
5396        Diag(OpLoc, diag::err_operator_arrow_circular) << StartingType;
5397        noteOperatorArrows(*this, OperatorArrows);
5398        return ExprError();
5399      }
5400      FirstIteration = false;
5401    }
5402
5403    if (OpKind == tok::arrow &&
5404        (BaseType->isPointerType() || BaseType->isObjCObjectPointerType()))
5405      BaseType = BaseType->getPointeeType();
5406  }
5407
5408  // Objective-C properties allow "." access on Objective-C pointer types,
5409  // so adjust the base type to the object type itself.
5410  if (BaseType->isObjCObjectPointerType())
5411    BaseType = BaseType->getPointeeType();
5412
5413  // C++ [basic.lookup.classref]p2:
5414  //   [...] If the type of the object expression is of pointer to scalar
5415  //   type, the unqualified-id is looked up in the context of the complete
5416  //   postfix-expression.
5417  //
5418  // This also indicates that we could be parsing a pseudo-destructor-name.
5419  // Note that Objective-C class and object types can be pseudo-destructor
5420  // expressions or normal member (ivar or property) access expressions.
5421  if (BaseType->isObjCObjectOrInterfaceType()) {
5422    MayBePseudoDestructor = true;
5423  } else if (!BaseType->isRecordType()) {
5424    ObjectType = ParsedType();
5425    MayBePseudoDestructor = true;
5426    return Base;
5427  }
5428
5429  // The object type must be complete (or dependent), or
5430  // C++11 [expr.prim.general]p3:
5431  //   Unlike the object expression in other contexts, *this is not required to
5432  //   be of complete type for purposes of class member access (5.2.5) outside
5433  //   the member function body.
5434  if (!BaseType->isDependentType() &&
5435      !isThisOutsideMemberFunctionBody(BaseType) &&
5436      RequireCompleteType(OpLoc, BaseType, diag::err_incomplete_member_access))
5437    return ExprError();
5438
5439  // C++ [basic.lookup.classref]p2:
5440  //   If the id-expression in a class member access (5.2.5) is an
5441  //   unqualified-id, and the type of the object expression is of a class
5442  //   type C (or of pointer to a class type C), the unqualified-id is looked
5443  //   up in the scope of class C. [...]
5444  ObjectType = ParsedType::make(BaseType);
5445  return Base;
5446}
5447
5448static bool CheckArrow(Sema& S, QualType& ObjectType, Expr *&Base,
5449                   tok::TokenKind& OpKind, SourceLocation OpLoc) {
5450  if (Base->hasPlaceholderType()) {
5451    ExprResult result = S.CheckPlaceholderExpr(Base);
5452    if (result.isInvalid()) return true;
5453    Base = result.get();
5454  }
5455  ObjectType = Base->getType();
5456
5457  // C++ [expr.pseudo]p2:
5458  //   The left-hand side of the dot operator shall be of scalar type. The
5459  //   left-hand side of the arrow operator shall be of pointer to scalar type.
5460  //   This scalar type is the object type.
5461  // Note that this is rather different from the normal handling for the
5462  // arrow operator.
5463  if (OpKind == tok::arrow) {
5464    if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {
5465      ObjectType = Ptr->getPointeeType();
5466    } else if (!Base->isTypeDependent()) {
5467      // The user wrote "p->" when she probably meant "p."; fix it.
5468      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
5469        << ObjectType << true
5470        << FixItHint::CreateReplacement(OpLoc, ".");
5471      if (S.isSFINAEContext())
5472        return true;
5473
5474      OpKind = tok::period;
5475    }
5476  }
5477
5478  return false;
5479}
5480
5481ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base,
5482                                           SourceLocation OpLoc,
5483                                           tok::TokenKind OpKind,
5484                                           const CXXScopeSpec &SS,
5485                                           TypeSourceInfo *ScopeTypeInfo,
5486                                           SourceLocation CCLoc,
5487                                           SourceLocation TildeLoc,
5488                                         PseudoDestructorTypeStorage Destructed) {
5489  TypeSourceInfo *DestructedTypeInfo = Destructed.getTypeSourceInfo();
5490
5491  QualType ObjectType;
5492  if (CheckArrow(*this, ObjectType, Base, OpKind, OpLoc))
5493    return ExprError();
5494
5495  if (!ObjectType->isDependentType() && !ObjectType->isScalarType() &&
5496      !ObjectType->isVectorType()) {
5497    if (getLangOpts().MSVCCompat && ObjectType->isVoidType())
5498      Diag(OpLoc, diag::ext_pseudo_dtor_on_void) << Base->getSourceRange();
5499    else {
5500      Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar)
5501        << ObjectType << Base->getSourceRange();
5502      return ExprError();
5503    }
5504  }
5505
5506  // C++ [expr.pseudo]p2:
5507  //   [...] The cv-unqualified versions of the object type and of the type
5508  //   designated by the pseudo-destructor-name shall be the same type.
5509  if (DestructedTypeInfo) {
5510    QualType DestructedType = DestructedTypeInfo->getType();
5511    SourceLocation DestructedTypeStart
5512      = DestructedTypeInfo->getTypeLoc().getLocalSourceRange().getBegin();
5513    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {
5514      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {
5515        Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch)
5516          << ObjectType << DestructedType << Base->getSourceRange()
5517          << DestructedTypeInfo->getTypeLoc().getLocalSourceRange();
5518
5519        // Recover by setting the destructed type to the object type.
5520        DestructedType = ObjectType;
5521        DestructedTypeInfo = Context.getTrivialTypeSourceInfo(ObjectType,
5522                                                           DestructedTypeStart);
5523        Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo);
5524      } else if (DestructedType.getObjCLifetime() !=
5525                                                ObjectType.getObjCLifetime()) {
5526
5527        if (DestructedType.getObjCLifetime() == Qualifiers::OCL_None) {
5528          // Okay: just pretend that the user provided the correctly-qualified
5529          // type.
5530        } else {
5531          Diag(DestructedTypeStart, diag::err_arc_pseudo_dtor_inconstant_quals)
5532            << ObjectType << DestructedType << Base->getSourceRange()
5533            << DestructedTypeInfo->getTypeLoc().getLocalSourceRange();
5534        }
5535
5536        // Recover by setting the destructed type to the object type.
5537        DestructedType = ObjectType;
5538        DestructedTypeInfo = Context.getTrivialTypeSourceInfo(ObjectType,
5539                                                           DestructedTypeStart);
5540        Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo);
5541      }
5542    }
5543  }
5544
5545  // C++ [expr.pseudo]p2:
5546  //   [...] Furthermore, the two type-names in a pseudo-destructor-name of the
5547  //   form
5548  //
5549  //     ::[opt] nested-name-specifier[opt] type-name :: ~ type-name
5550  //
5551  //   shall designate the same scalar type.
5552  if (ScopeTypeInfo) {
5553    QualType ScopeType = ScopeTypeInfo->getType();
5554    if (!ScopeType->isDependentType() && !ObjectType->isDependentType() &&
5555        !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {
5556
5557      Diag(ScopeTypeInfo->getTypeLoc().getLocalSourceRange().getBegin(),
5558           diag::err_pseudo_dtor_type_mismatch)
5559        << ObjectType << ScopeType << Base->getSourceRange()
5560        << ScopeTypeInfo->getTypeLoc().getLocalSourceRange();
5561
5562      ScopeType = QualType();
5563      ScopeTypeInfo = nullptr;
5564    }
5565  }
5566
5567  Expr *Result
5568    = new (Context) CXXPseudoDestructorExpr(Context, Base,
5569                                            OpKind == tok::arrow, OpLoc,
5570                                            SS.getWithLocInContext(Context),
5571                                            ScopeTypeInfo,
5572                                            CCLoc,
5573                                            TildeLoc,
5574                                            Destructed);
5575
5576  return Result;
5577}
5578
5579ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
5580                                           SourceLocation OpLoc,
5581                                           tok::TokenKind OpKind,
5582                                           CXXScopeSpec &SS,
5583                                           UnqualifiedId &FirstTypeName,
5584                                           SourceLocation CCLoc,
5585                                           SourceLocation TildeLoc,
5586                                           UnqualifiedId &SecondTypeName) {
5587  assert((FirstTypeName.getKind() == UnqualifiedId::IK_TemplateId ||
5588          FirstTypeName.getKind() == UnqualifiedId::IK_Identifier) &&
5589         "Invalid first type name in pseudo-destructor");
5590  assert((SecondTypeName.getKind() == UnqualifiedId::IK_TemplateId ||
5591          SecondTypeName.getKind() == UnqualifiedId::IK_Identifier) &&
5592         "Invalid second type name in pseudo-destructor");
5593
5594  QualType ObjectType;
5595  if (CheckArrow(*this, ObjectType, Base, OpKind, OpLoc))
5596    return ExprError();
5597
5598  // Compute the object type that we should use for name lookup purposes. Only
5599  // record types and dependent types matter.
5600  ParsedType ObjectTypePtrForLookup;
5601  if (!SS.isSet()) {
5602    if (ObjectType->isRecordType())
5603      ObjectTypePtrForLookup = ParsedType::make(ObjectType);
5604    else if (ObjectType->isDependentType())
5605      ObjectTypePtrForLookup = ParsedType::make(Context.DependentTy);
5606  }
5607
5608  // Convert the name of the type being destructed (following the ~) into a
5609  // type (with source-location information).
5610  QualType DestructedType;
5611  TypeSourceInfo *DestructedTypeInfo = nullptr;
5612  PseudoDestructorTypeStorage Destructed;
5613  if (SecondTypeName.getKind() == UnqualifiedId::IK_Identifier) {
5614    ParsedType T = getTypeName(*SecondTypeName.Identifier,
5615                               SecondTypeName.StartLocation,
5616                               S, &SS, true, false, ObjectTypePtrForLookup);
5617    if (!T &&
5618        ((SS.isSet() && !computeDeclContext(SS, false)) ||
5619         (!SS.isSet() && ObjectType->isDependentType()))) {
5620      // The name of the type being destroyed is a dependent name, and we
5621      // couldn't find anything useful in scope. Just store the identifier and
5622      // it's location, and we'll perform (qualified) name lookup again at
5623      // template instantiation time.
5624      Destructed = PseudoDestructorTypeStorage(SecondTypeName.Identifier,
5625                                               SecondTypeName.StartLocation);
5626    } else if (!T) {
5627      Diag(SecondTypeName.StartLocation,
5628           diag::err_pseudo_dtor_destructor_non_type)
5629        << SecondTypeName.Identifier << ObjectType;
5630      if (isSFINAEContext())
5631        return ExprError();
5632
5633      // Recover by assuming we had the right type all along.
5634      DestructedType = ObjectType;
5635    } else
5636      DestructedType = GetTypeFromParser(T, &DestructedTypeInfo);
5637  } else {
5638    // Resolve the template-id to a type.
5639    TemplateIdAnnotation *TemplateId = SecondTypeName.TemplateId;
5640    ASTTemplateArgsPtr TemplateArgsPtr(TemplateId->getTemplateArgs(),
5641                                       TemplateId->NumArgs);
5642    TypeResult T = ActOnTemplateIdType(TemplateId->SS,
5643                                       TemplateId->TemplateKWLoc,
5644                                       TemplateId->Template,
5645                                       TemplateId->TemplateNameLoc,
5646                                       TemplateId->LAngleLoc,
5647                                       TemplateArgsPtr,
5648                                       TemplateId->RAngleLoc);
5649    if (T.isInvalid() || !T.get()) {
5650      // Recover by assuming we had the right type all along.
5651      DestructedType = ObjectType;
5652    } else
5653      DestructedType = GetTypeFromParser(T.get(), &DestructedTypeInfo);
5654  }
5655
5656  // If we've performed some kind of recovery, (re-)build the type source
5657  // information.
5658  if (!DestructedType.isNull()) {
5659    if (!DestructedTypeInfo)
5660      DestructedTypeInfo = Context.getTrivialTypeSourceInfo(DestructedType,
5661                                                  SecondTypeName.StartLocation);
5662    Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo);
5663  }
5664
5665  // Convert the name of the scope type (the type prior to '::') into a type.
5666  TypeSourceInfo *ScopeTypeInfo = nullptr;
5667  QualType ScopeType;
5668  if (FirstTypeName.getKind() == UnqualifiedId::IK_TemplateId ||
5669      FirstTypeName.Identifier) {
5670    if (FirstTypeName.getKind() == UnqualifiedId::IK_Identifier) {
5671      ParsedType T = getTypeName(*FirstTypeName.Identifier,
5672                                 FirstTypeName.StartLocation,
5673                                 S, &SS, true, false, ObjectTypePtrForLookup);
5674      if (!T) {
5675        Diag(FirstTypeName.StartLocation,
5676             diag::err_pseudo_dtor_destructor_non_type)
5677          << FirstTypeName.Identifier << ObjectType;
5678
5679        if (isSFINAEContext())
5680          return ExprError();
5681
5682        // Just drop this type. It's unnecessary anyway.
5683        ScopeType = QualType();
5684      } else
5685        ScopeType = GetTypeFromParser(T, &ScopeTypeInfo);
5686    } else {
5687      // Resolve the template-id to a type.
5688      TemplateIdAnnotation *TemplateId = FirstTypeName.TemplateId;
5689      ASTTemplateArgsPtr TemplateArgsPtr(TemplateId->getTemplateArgs(),
5690                                         TemplateId->NumArgs);
5691      TypeResult T = ActOnTemplateIdType(TemplateId->SS,
5692                                         TemplateId->TemplateKWLoc,
5693                                         TemplateId->Template,
5694                                         TemplateId->TemplateNameLoc,
5695                                         TemplateId->LAngleLoc,
5696                                         TemplateArgsPtr,
5697                                         TemplateId->RAngleLoc);
5698      if (T.isInvalid() || !T.get()) {
5699        // Recover by dropping this type.
5700        ScopeType = QualType();
5701      } else
5702        ScopeType = GetTypeFromParser(T.get(), &ScopeTypeInfo);
5703    }
5704  }
5705
5706  if (!ScopeType.isNull() && !ScopeTypeInfo)
5707    ScopeTypeInfo = Context.getTrivialTypeSourceInfo(ScopeType,
5708                                                  FirstTypeName.StartLocation);
5709
5710
5711  return BuildPseudoDestructorExpr(Base, OpLoc, OpKind, SS,
5712                                   ScopeTypeInfo, CCLoc, TildeLoc,
5713                                   Destructed);
5714}
5715
5716ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
5717                                           SourceLocation OpLoc,
5718                                           tok::TokenKind OpKind,
5719                                           SourceLocation TildeLoc,
5720                                           const DeclSpec& DS) {
5721  QualType ObjectType;
5722  if (CheckArrow(*this, ObjectType, Base, OpKind, OpLoc))
5723    return ExprError();
5724
5725  QualType T = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc(),
5726                                 false);
5727
5728  TypeLocBuilder TLB;
5729  DecltypeTypeLoc DecltypeTL = TLB.push<DecltypeTypeLoc>(T);
5730  DecltypeTL.setNameLoc(DS.getTypeSpecTypeLoc());
5731  TypeSourceInfo *DestructedTypeInfo = TLB.getTypeSourceInfo(Context, T);
5732  PseudoDestructorTypeStorage Destructed(DestructedTypeInfo);
5733
5734  return BuildPseudoDestructorExpr(Base, OpLoc, OpKind, CXXScopeSpec(),
5735                                   nullptr, SourceLocation(), TildeLoc,
5736                                   Destructed);
5737}
5738
5739ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl,
5740                                        CXXConversionDecl *Method,
5741                                        bool HadMultipleCandidates) {
5742  if (Method->getParent()->isLambda() &&
5743      Method->getConversionType()->isBlockPointerType()) {
5744    // This is a lambda coversion to block pointer; check if the argument
5745    // is a LambdaExpr.
5746    Expr *SubE = E;
5747    CastExpr *CE = dyn_cast<CastExpr>(SubE);
5748    if (CE && CE->getCastKind() == CK_NoOp)
5749      SubE = CE->getSubExpr();
5750    SubE = SubE->IgnoreParens();
5751    if (CXXBindTemporaryExpr *BE = dyn_cast<CXXBindTemporaryExpr>(SubE))
5752      SubE = BE->getSubExpr();
5753    if (isa<LambdaExpr>(SubE)) {
5754      // For the conversion to block pointer on a lambda expression, we
5755      // construct a special BlockLiteral instead; this doesn't really make
5756      // a difference in ARC, but outside of ARC the resulting block literal
5757      // follows the normal lifetime rules for block literals instead of being
5758      // autoreleased.
5759      DiagnosticErrorTrap Trap(Diags);
5760      ExprResult Exp = BuildBlockForLambdaConversion(E->getExprLoc(),
5761                                                     E->getExprLoc(),
5762                                                     Method, E);
5763      if (Exp.isInvalid())
5764        Diag(E->getExprLoc(), diag::note_lambda_to_block_conv);
5765      return Exp;
5766    }
5767  }
5768
5769  ExprResult Exp = PerformObjectArgumentInitialization(E, /*Qualifier=*/nullptr,
5770                                          FoundDecl, Method);
5771  if (Exp.isInvalid())
5772    return true;
5773
5774  MemberExpr *ME = new (Context) MemberExpr(
5775      Exp.get(), /*IsArrow=*/false, SourceLocation(), Method, SourceLocation(),
5776      Context.BoundMemberTy, VK_RValue, OK_Ordinary);
5777  if (HadMultipleCandidates)
5778    ME->setHadMultipleCandidates(true);
5779  MarkMemberReferenced(ME);
5780
5781  QualType ResultType = Method->getReturnType();
5782  ExprValueKind VK = Expr::getValueKindForType(ResultType);
5783  ResultType = ResultType.getNonLValueExprType(Context);
5784
5785  CXXMemberCallExpr *CE =
5786    new (Context) CXXMemberCallExpr(Context, ME, None, ResultType, VK,
5787                                    Exp.get()->getLocEnd());
5788  return CE;
5789}
5790
5791ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
5792                                      SourceLocation RParen) {
5793  if (ActiveTemplateInstantiations.empty() &&
5794      Operand->HasSideEffects(Context, false)) {
5795    // The expression operand for noexcept is in an unevaluated expression
5796    // context, so side effects could result in unintended consequences.
5797    Diag(Operand->getExprLoc(), diag::warn_side_effects_unevaluated_context);
5798  }
5799
5800  CanThrowResult CanThrow = canThrow(Operand);
5801  return new (Context)
5802      CXXNoexceptExpr(Context.BoolTy, Operand, CanThrow, KeyLoc, RParen);
5803}
5804
5805ExprResult Sema::ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation,
5806                                   Expr *Operand, SourceLocation RParen) {
5807  return BuildCXXNoexceptExpr(KeyLoc, Operand, RParen);
5808}
5809
5810static bool IsSpecialDiscardedValue(Expr *E) {
5811  // In C++11, discarded-value expressions of a certain form are special,
5812  // according to [expr]p10:
5813  //   The lvalue-to-rvalue conversion (4.1) is applied only if the
5814  //   expression is an lvalue of volatile-qualified type and it has
5815  //   one of the following forms:
5816  E = E->IgnoreParens();
5817
5818  //   - id-expression (5.1.1),
5819  if (isa<DeclRefExpr>(E))
5820    return true;
5821
5822  //   - subscripting (5.2.1),
5823  if (isa<ArraySubscriptExpr>(E))
5824    return true;
5825
5826  //   - class member access (5.2.5),
5827  if (isa<MemberExpr>(E))
5828    return true;
5829
5830  //   - indirection (5.3.1),
5831  if (UnaryOperator *UO = dyn_cast<UnaryOperator>(E))
5832    if (UO->getOpcode() == UO_Deref)
5833      return true;
5834
5835  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
5836    //   - pointer-to-member operation (5.5),
5837    if (BO->isPtrMemOp())
5838      return true;
5839
5840    //   - comma expression (5.18) where the right operand is one of the above.
5841    if (BO->getOpcode() == BO_Comma)
5842      return IsSpecialDiscardedValue(BO->getRHS());
5843  }
5844
5845  //   - conditional expression (5.16) where both the second and the third
5846  //     operands are one of the above, or
5847  if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E))
5848    return IsSpecialDiscardedValue(CO->getTrueExpr()) &&
5849           IsSpecialDiscardedValue(CO->getFalseExpr());
5850  // The related edge case of "*x ?: *x".
5851  if (BinaryConditionalOperator *BCO =
5852          dyn_cast<BinaryConditionalOperator>(E)) {
5853    if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(BCO->getTrueExpr()))
5854      return IsSpecialDiscardedValue(OVE->getSourceExpr()) &&
5855             IsSpecialDiscardedValue(BCO->getFalseExpr());
5856  }
5857
5858  // Objective-C++ extensions to the rule.
5859  if (isa<PseudoObjectExpr>(E) || isa<ObjCIvarRefExpr>(E))
5860    return true;
5861
5862  return false;
5863}
5864
5865/// Perform the conversions required for an expression used in a
5866/// context that ignores the result.
5867ExprResult Sema::IgnoredValueConversions(Expr *E) {
5868  if (E->hasPlaceholderType()) {
5869    ExprResult result = CheckPlaceholderExpr(E);
5870    if (result.isInvalid()) return E;
5871    E = result.get();
5872  }
5873
5874  // C99 6.3.2.1:
5875  //   [Except in specific positions,] an lvalue that does not have
5876  //   array type is converted to the value stored in the
5877  //   designated object (and is no longer an lvalue).
5878  if (E->isRValue()) {
5879    // In C, function designators (i.e. expressions of function type)
5880    // are r-values, but we still want to do function-to-pointer decay
5881    // on them.  This is both technically correct and convenient for
5882    // some clients.
5883    if (!getLangOpts().CPlusPlus && E->getType()->isFunctionType())
5884      return DefaultFunctionArrayConversion(E);
5885
5886    return E;
5887  }
5888
5889  if (getLangOpts().CPlusPlus)  {
5890    // The C++11 standard defines the notion of a discarded-value expression;
5891    // normally, we don't need to do anything to handle it, but if it is a
5892    // volatile lvalue with a special form, we perform an lvalue-to-rvalue
5893    // conversion.
5894    if (getLangOpts().CPlusPlus11 && E->isGLValue() &&
5895        E->getType().isVolatileQualified() &&
5896        IsSpecialDiscardedValue(E)) {
5897      ExprResult Res = DefaultLvalueConversion(E);
5898      if (Res.isInvalid())
5899        return E;
5900      E = Res.get();
5901    }
5902    return E;
5903  }
5904
5905  // GCC seems to also exclude expressions of incomplete enum type.
5906  if (const EnumType *T = E->getType()->getAs<EnumType>()) {
5907    if (!T->getDecl()->isComplete()) {
5908      // FIXME: stupid workaround for a codegen bug!
5909      E = ImpCastExprToType(E, Context.VoidTy, CK_ToVoid).get();
5910      return E;
5911    }
5912  }
5913
5914  ExprResult Res = DefaultFunctionArrayLvalueConversion(E);
5915  if (Res.isInvalid())
5916    return E;
5917  E = Res.get();
5918
5919  if (!E->getType()->isVoidType())
5920    RequireCompleteType(E->getExprLoc(), E->getType(),
5921                        diag::err_incomplete_type);
5922  return E;
5923}
5924
5925// If we can unambiguously determine whether Var can never be used
5926// in a constant expression, return true.
5927//  - if the variable and its initializer are non-dependent, then
5928//    we can unambiguously check if the variable is a constant expression.
5929//  - if the initializer is not value dependent - we can determine whether
5930//    it can be used to initialize a constant expression.  If Init can not
5931//    be used to initialize a constant expression we conclude that Var can
5932//    never be a constant expression.
5933//  - FXIME: if the initializer is dependent, we can still do some analysis and
5934//    identify certain cases unambiguously as non-const by using a Visitor:
5935//      - such as those that involve odr-use of a ParmVarDecl, involve a new
5936//        delete, lambda-expr, dynamic-cast, reinterpret-cast etc...
5937static inline bool VariableCanNeverBeAConstantExpression(VarDecl *Var,
5938    ASTContext &Context) {
5939  if (isa<ParmVarDecl>(Var)) return true;
5940  const VarDecl *DefVD = nullptr;
5941
5942  // If there is no initializer - this can not be a constant expression.
5943  if (!Var->getAnyInitializer(DefVD)) return true;
5944  assert(DefVD);
5945  if (DefVD->isWeak()) return false;
5946  EvaluatedStmt *Eval = DefVD->ensureEvaluatedStmt();
5947
5948  Expr *Init = cast<Expr>(Eval->Value);
5949
5950  if (Var->getType()->isDependentType() || Init->isValueDependent()) {
5951    // FIXME: Teach the constant evaluator to deal with the non-dependent parts
5952    // of value-dependent expressions, and use it here to determine whether the
5953    // initializer is a potential constant expression.
5954    return false;
5955  }
5956
5957  return !IsVariableAConstantExpression(Var, Context);
5958}
5959
5960/// \brief Check if the current lambda has any potential captures
5961/// that must be captured by any of its enclosing lambdas that are ready to
5962/// capture. If there is a lambda that can capture a nested
5963/// potential-capture, go ahead and do so.  Also, check to see if any
5964/// variables are uncaptureable or do not involve an odr-use so do not
5965/// need to be captured.
5966
5967static void CheckIfAnyEnclosingLambdasMustCaptureAnyPotentialCaptures(
5968    Expr *const FE, LambdaScopeInfo *const CurrentLSI, Sema &S) {
5969
5970  assert(!S.isUnevaluatedContext());
5971  assert(S.CurContext->isDependentContext());
5972  assert(CurrentLSI->CallOperator == S.CurContext &&
5973      "The current call operator must be synchronized with Sema's CurContext");
5974
5975  const bool IsFullExprInstantiationDependent = FE->isInstantiationDependent();
5976
5977  ArrayRef<const FunctionScopeInfo *> FunctionScopesArrayRef(
5978      S.FunctionScopes.data(), S.FunctionScopes.size());
5979
5980  // All the potentially captureable variables in the current nested
5981  // lambda (within a generic outer lambda), must be captured by an
5982  // outer lambda that is enclosed within a non-dependent context.
5983  const unsigned NumPotentialCaptures =
5984      CurrentLSI->getNumPotentialVariableCaptures();
5985  for (unsigned I = 0; I != NumPotentialCaptures; ++I) {
5986    Expr *VarExpr = nullptr;
5987    VarDecl *Var = nullptr;
5988    CurrentLSI->getPotentialVariableCapture(I, Var, VarExpr);
5989    // If the variable is clearly identified as non-odr-used and the full
5990    // expression is not instantiation dependent, only then do we not
5991    // need to check enclosing lambda's for speculative captures.
5992    // For e.g.:
5993    // Even though 'x' is not odr-used, it should be captured.
5994    // int test() {
5995    //   const int x = 10;
5996    //   auto L = [=](auto a) {
5997    //     (void) +x + a;
5998    //   };
5999    // }
6000    if (CurrentLSI->isVariableExprMarkedAsNonODRUsed(VarExpr) &&
6001        !IsFullExprInstantiationDependent)
6002      continue;
6003
6004    // If we have a capture-capable lambda for the variable, go ahead and
6005    // capture the variable in that lambda (and all its enclosing lambdas).
6006    if (const Optional<unsigned> Index =
6007            getStackIndexOfNearestEnclosingCaptureCapableLambda(
6008                FunctionScopesArrayRef, Var, S)) {
6009      const unsigned FunctionScopeIndexOfCapturableLambda = Index.getValue();
6010      MarkVarDeclODRUsed(Var, VarExpr->getExprLoc(), S,
6011                         &FunctionScopeIndexOfCapturableLambda);
6012    }
6013    const bool IsVarNeverAConstantExpression =
6014        VariableCanNeverBeAConstantExpression(Var, S.Context);
6015    if (!IsFullExprInstantiationDependent || IsVarNeverAConstantExpression) {
6016      // This full expression is not instantiation dependent or the variable
6017      // can not be used in a constant expression - which means
6018      // this variable must be odr-used here, so diagnose a
6019      // capture violation early, if the variable is un-captureable.
6020      // This is purely for diagnosing errors early.  Otherwise, this
6021      // error would get diagnosed when the lambda becomes capture ready.
6022      QualType CaptureType, DeclRefType;
6023      SourceLocation ExprLoc = VarExpr->getExprLoc();
6024      if (S.tryCaptureVariable(Var, ExprLoc, S.TryCapture_Implicit,
6025                          /*EllipsisLoc*/ SourceLocation(),
6026                          /*BuildAndDiagnose*/false, CaptureType,
6027                          DeclRefType, nullptr)) {
6028        // We will never be able to capture this variable, and we need
6029        // to be able to in any and all instantiations, so diagnose it.
6030        S.tryCaptureVariable(Var, ExprLoc, S.TryCapture_Implicit,
6031                          /*EllipsisLoc*/ SourceLocation(),
6032                          /*BuildAndDiagnose*/true, CaptureType,
6033                          DeclRefType, nullptr);
6034      }
6035    }
6036  }
6037
6038  // Check if 'this' needs to be captured.
6039  if (CurrentLSI->hasPotentialThisCapture()) {
6040    // If we have a capture-capable lambda for 'this', go ahead and capture
6041    // 'this' in that lambda (and all its enclosing lambdas).
6042    if (const Optional<unsigned> Index =
6043            getStackIndexOfNearestEnclosingCaptureCapableLambda(
6044                FunctionScopesArrayRef, /*0 is 'this'*/ nullptr, S)) {
6045      const unsigned FunctionScopeIndexOfCapturableLambda = Index.getValue();
6046      S.CheckCXXThisCapture(CurrentLSI->PotentialThisCaptureLocation,
6047                            /*Explicit*/ false, /*BuildAndDiagnose*/ true,
6048                            &FunctionScopeIndexOfCapturableLambda);
6049    }
6050  }
6051
6052  // Reset all the potential captures at the end of each full-expression.
6053  CurrentLSI->clearPotentialCaptures();
6054}
6055
6056static ExprResult attemptRecovery(Sema &SemaRef,
6057                                  const TypoCorrectionConsumer &Consumer,
6058                                  TypoCorrection TC) {
6059  LookupResult R(SemaRef, Consumer.getLookupResult().getLookupNameInfo(),
6060                 Consumer.getLookupResult().getLookupKind());
6061  const CXXScopeSpec *SS = Consumer.getSS();
6062  CXXScopeSpec NewSS;
6063
6064  // Use an approprate CXXScopeSpec for building the expr.
6065  if (auto *NNS = TC.getCorrectionSpecifier())
6066    NewSS.MakeTrivial(SemaRef.Context, NNS, TC.getCorrectionRange());
6067  else if (SS && !TC.WillReplaceSpecifier())
6068    NewSS = *SS;
6069
6070  if (auto *ND = TC.getCorrectionDecl()) {
6071    R.setLookupName(ND->getDeclName());
6072    R.addDecl(ND);
6073    if (ND->isCXXClassMember()) {
6074      // Figure out the correct naming class to add to the LookupResult.
6075      CXXRecordDecl *Record = nullptr;
6076      if (auto *NNS = TC.getCorrectionSpecifier())
6077        Record = NNS->getAsType()->getAsCXXRecordDecl();
6078      if (!Record)
6079        Record =
6080            dyn_cast<CXXRecordDecl>(ND->getDeclContext()->getRedeclContext());
6081      if (Record)
6082        R.setNamingClass(Record);
6083
6084      // Detect and handle the case where the decl might be an implicit
6085      // member.
6086      bool MightBeImplicitMember;
6087      if (!Consumer.isAddressOfOperand())
6088        MightBeImplicitMember = true;
6089      else if (!NewSS.isEmpty())
6090        MightBeImplicitMember = false;
6091      else if (R.isOverloadedResult())
6092        MightBeImplicitMember = false;
6093      else if (R.isUnresolvableResult())
6094        MightBeImplicitMember = true;
6095      else
6096        MightBeImplicitMember = isa<FieldDecl>(ND) ||
6097                                isa<IndirectFieldDecl>(ND) ||
6098                                isa<MSPropertyDecl>(ND);
6099
6100      if (MightBeImplicitMember)
6101        return SemaRef.BuildPossibleImplicitMemberExpr(
6102            NewSS, /*TemplateKWLoc*/ SourceLocation(), R,
6103            /*TemplateArgs*/ nullptr);
6104    } else if (auto *Ivar = dyn_cast<ObjCIvarDecl>(ND)) {
6105      return SemaRef.LookupInObjCMethod(R, Consumer.getScope(),
6106                                        Ivar->getIdentifier());
6107    }
6108  }
6109
6110  return SemaRef.BuildDeclarationNameExpr(NewSS, R, /*NeedsADL*/ false,
6111                                          /*AcceptInvalidDecl*/ true);
6112}
6113
6114namespace {
6115class FindTypoExprs : public RecursiveASTVisitor<FindTypoExprs> {
6116  llvm::SmallSetVector<TypoExpr *, 2> &TypoExprs;
6117
6118public:
6119  explicit FindTypoExprs(llvm::SmallSetVector<TypoExpr *, 2> &TypoExprs)
6120      : TypoExprs(TypoExprs) {}
6121  bool VisitTypoExpr(TypoExpr *TE) {
6122    TypoExprs.insert(TE);
6123    return true;
6124  }
6125};
6126
6127class TransformTypos : public TreeTransform<TransformTypos> {
6128  typedef TreeTransform<TransformTypos> BaseTransform;
6129
6130  llvm::function_ref<ExprResult(Expr *)> ExprFilter;
6131  llvm::SmallSetVector<TypoExpr *, 2> TypoExprs, AmbiguousTypoExprs;
6132  llvm::SmallDenseMap<TypoExpr *, ExprResult, 2> TransformCache;
6133  llvm::SmallDenseMap<OverloadExpr *, Expr *, 4> OverloadResolution;
6134
6135  /// \brief Emit diagnostics for all of the TypoExprs encountered.
6136  /// If the TypoExprs were successfully corrected, then the diagnostics should
6137  /// suggest the corrections. Otherwise the diagnostics will not suggest
6138  /// anything (having been passed an empty TypoCorrection).
6139  void EmitAllDiagnostics() {
6140    for (auto E : TypoExprs) {
6141      TypoExpr *TE = cast<TypoExpr>(E);
6142      auto &State = SemaRef.getTypoExprState(TE);
6143      if (State.DiagHandler) {
6144        TypoCorrection TC = State.Consumer->getCurrentCorrection();
6145        ExprResult Replacement = TransformCache[TE];
6146
6147        // Extract the NamedDecl from the transformed TypoExpr and add it to the
6148        // TypoCorrection, replacing the existing decls. This ensures the right
6149        // NamedDecl is used in diagnostics e.g. in the case where overload
6150        // resolution was used to select one from several possible decls that
6151        // had been stored in the TypoCorrection.
6152        if (auto *ND = getDeclFromExpr(
6153                Replacement.isInvalid() ? nullptr : Replacement.get()))
6154          TC.setCorrectionDecl(ND);
6155
6156        State.DiagHandler(TC);
6157      }
6158      SemaRef.clearDelayedTypo(TE);
6159    }
6160  }
6161
6162  /// \brief If corrections for the first TypoExpr have been exhausted for a
6163  /// given combination of the other TypoExprs, retry those corrections against
6164  /// the next combination of substitutions for the other TypoExprs by advancing
6165  /// to the next potential correction of the second TypoExpr. For the second
6166  /// and subsequent TypoExprs, if its stream of corrections has been exhausted,
6167  /// the stream is reset and the next TypoExpr's stream is advanced by one (a
6168  /// TypoExpr's correction stream is advanced by removing the TypoExpr from the
6169  /// TransformCache). Returns true if there is still any untried combinations
6170  /// of corrections.
6171  bool CheckAndAdvanceTypoExprCorrectionStreams() {
6172    for (auto TE : TypoExprs) {
6173      auto &State = SemaRef.getTypoExprState(TE);
6174      TransformCache.erase(TE);
6175      if (!State.Consumer->finished())
6176        return true;
6177      State.Consumer->resetCorrectionStream();
6178    }
6179    return false;
6180  }
6181
6182  NamedDecl *getDeclFromExpr(Expr *E) {
6183    if (auto *OE = dyn_cast_or_null<OverloadExpr>(E))
6184      E = OverloadResolution[OE];
6185
6186    if (!E)
6187      return nullptr;
6188    if (auto *DRE = dyn_cast<DeclRefExpr>(E))
6189      return DRE->getDecl();
6190    if (auto *ME = dyn_cast<MemberExpr>(E))
6191      return ME->getMemberDecl();
6192    // FIXME: Add any other expr types that could be be seen by the delayed typo
6193    // correction TreeTransform for which the corresponding TypoCorrection could
6194    // contain multiple decls.
6195    return nullptr;
6196  }
6197
6198  ExprResult TryTransform(Expr *E) {
6199    Sema::SFINAETrap Trap(SemaRef);
6200    ExprResult Res = TransformExpr(E);
6201    if (Trap.hasErrorOccurred() || Res.isInvalid())
6202      return ExprError();
6203
6204    return ExprFilter(Res.get());
6205  }
6206
6207public:
6208  TransformTypos(Sema &SemaRef, llvm::function_ref<ExprResult(Expr *)> Filter)
6209      : BaseTransform(SemaRef), ExprFilter(Filter) {}
6210
6211  ExprResult RebuildCallExpr(Expr *Callee, SourceLocation LParenLoc,
6212                                   MultiExprArg Args,
6213                                   SourceLocation RParenLoc,
6214                                   Expr *ExecConfig = nullptr) {
6215    auto Result = BaseTransform::RebuildCallExpr(Callee, LParenLoc, Args,
6216                                                 RParenLoc, ExecConfig);
6217    if (auto *OE = dyn_cast<OverloadExpr>(Callee)) {
6218      if (Result.isUsable()) {
6219        Expr *ResultCall = Result.get();
6220        if (auto *BE = dyn_cast<CXXBindTemporaryExpr>(ResultCall))
6221          ResultCall = BE->getSubExpr();
6222        if (auto *CE = dyn_cast<CallExpr>(ResultCall))
6223          OverloadResolution[OE] = CE->getCallee();
6224      }
6225    }
6226    return Result;
6227  }
6228
6229  ExprResult TransformLambdaExpr(LambdaExpr *E) { return Owned(E); }
6230
6231  ExprResult Transform(Expr *E) {
6232    ExprResult Res;
6233    while (true) {
6234      Res = TryTransform(E);
6235
6236      // Exit if either the transform was valid or if there were no TypoExprs
6237      // to transform that still have any untried correction candidates..
6238      if (!Res.isInvalid() ||
6239          !CheckAndAdvanceTypoExprCorrectionStreams())
6240        break;
6241    }
6242
6243    // Ensure none of the TypoExprs have multiple typo correction candidates
6244    // with the same edit length that pass all the checks and filters.
6245    // TODO: Properly handle various permutations of possible corrections when
6246    // there is more than one potentially ambiguous typo correction.
6247    while (!AmbiguousTypoExprs.empty()) {
6248      auto TE  = AmbiguousTypoExprs.back();
6249      auto Cached = TransformCache[TE];
6250      auto &State = SemaRef.getTypoExprState(TE);
6251      State.Consumer->saveCurrentPosition();
6252      TransformCache.erase(TE);
6253      if (!TryTransform(E).isInvalid()) {
6254        State.Consumer->resetCorrectionStream();
6255        TransformCache.erase(TE);
6256        Res = ExprError();
6257        break;
6258      }
6259      AmbiguousTypoExprs.remove(TE);
6260      State.Consumer->restoreSavedPosition();
6261      TransformCache[TE] = Cached;
6262    }
6263
6264    // Ensure that all of the TypoExprs within the current Expr have been found.
6265    if (!Res.isUsable())
6266      FindTypoExprs(TypoExprs).TraverseStmt(E);
6267
6268    EmitAllDiagnostics();
6269
6270    return Res;
6271  }
6272
6273  ExprResult TransformTypoExpr(TypoExpr *E) {
6274    // If the TypoExpr hasn't been seen before, record it. Otherwise, return the
6275    // cached transformation result if there is one and the TypoExpr isn't the
6276    // first one that was encountered.
6277    auto &CacheEntry = TransformCache[E];
6278    if (!TypoExprs.insert(E) && !CacheEntry.isUnset()) {
6279      return CacheEntry;
6280    }
6281
6282    auto &State = SemaRef.getTypoExprState(E);
6283    assert(State.Consumer && "Cannot transform a cleared TypoExpr");
6284
6285    // For the first TypoExpr and an uncached TypoExpr, find the next likely
6286    // typo correction and return it.
6287    while (TypoCorrection TC = State.Consumer->getNextCorrection()) {
6288      ExprResult NE = State.RecoveryHandler ?
6289          State.RecoveryHandler(SemaRef, E, TC) :
6290          attemptRecovery(SemaRef, *State.Consumer, TC);
6291      if (!NE.isInvalid()) {
6292        // Check whether there may be a second viable correction with the same
6293        // edit distance; if so, remember this TypoExpr may have an ambiguous
6294        // correction so it can be more thoroughly vetted later.
6295        TypoCorrection Next;
6296        if ((Next = State.Consumer->peekNextCorrection()) &&
6297            Next.getEditDistance(false) == TC.getEditDistance(false)) {
6298          AmbiguousTypoExprs.insert(E);
6299        } else {
6300          AmbiguousTypoExprs.remove(E);
6301        }
6302        assert(!NE.isUnset() &&
6303               "Typo was transformed into a valid-but-null ExprResult");
6304        return CacheEntry = NE;
6305      }
6306    }
6307    return CacheEntry = ExprError();
6308  }
6309};
6310}
6311
6312ExprResult Sema::CorrectDelayedTyposInExpr(
6313    Expr *E, llvm::function_ref<ExprResult(Expr *)> Filter) {
6314  // If the current evaluation context indicates there are uncorrected typos
6315  // and the current expression isn't guaranteed to not have typos, try to
6316  // resolve any TypoExpr nodes that might be in the expression.
6317  if (E && !ExprEvalContexts.empty() && ExprEvalContexts.back().NumTypos &&
6318      (E->isTypeDependent() || E->isValueDependent() ||
6319       E->isInstantiationDependent())) {
6320    auto TyposInContext = ExprEvalContexts.back().NumTypos;
6321    assert(TyposInContext < ~0U && "Recursive call of CorrectDelayedTyposInExpr");
6322    ExprEvalContexts.back().NumTypos = ~0U;
6323    auto TyposResolved = DelayedTypos.size();
6324    auto Result = TransformTypos(*this, Filter).Transform(E);
6325    ExprEvalContexts.back().NumTypos = TyposInContext;
6326    TyposResolved -= DelayedTypos.size();
6327    if (Result.isInvalid() || Result.get() != E) {
6328      ExprEvalContexts.back().NumTypos -= TyposResolved;
6329      return Result;
6330    }
6331    assert(TyposResolved == 0 && "Corrected typo but got same Expr back?");
6332  }
6333  return E;
6334}
6335
6336ExprResult Sema::ActOnFinishFullExpr(Expr *FE, SourceLocation CC,
6337                                     bool DiscardedValue,
6338                                     bool IsConstexpr,
6339                                     bool IsLambdaInitCaptureInitializer) {
6340  ExprResult FullExpr = FE;
6341
6342  if (!FullExpr.get())
6343    return ExprError();
6344
6345  // If we are an init-expression in a lambdas init-capture, we should not
6346  // diagnose an unexpanded pack now (will be diagnosed once lambda-expr
6347  // containing full-expression is done).
6348  // template<class ... Ts> void test(Ts ... t) {
6349  //   test([&a(t)]() { <-- (t) is an init-expr that shouldn't be diagnosed now.
6350  //     return a;
6351  //   }() ...);
6352  // }
6353  // FIXME: This is a hack. It would be better if we pushed the lambda scope
6354  // when we parse the lambda introducer, and teach capturing (but not
6355  // unexpanded pack detection) to walk over LambdaScopeInfos which don't have a
6356  // corresponding class yet (that is, have LambdaScopeInfo either represent a
6357  // lambda where we've entered the introducer but not the body, or represent a
6358  // lambda where we've entered the body, depending on where the
6359  // parser/instantiation has got to).
6360  if (!IsLambdaInitCaptureInitializer &&
6361      DiagnoseUnexpandedParameterPack(FullExpr.get()))
6362    return ExprError();
6363
6364  // Top-level expressions default to 'id' when we're in a debugger.
6365  if (DiscardedValue && getLangOpts().DebuggerCastResultToId &&
6366      FullExpr.get()->getType() == Context.UnknownAnyTy) {
6367    FullExpr = forceUnknownAnyToType(FullExpr.get(), Context.getObjCIdType());
6368    if (FullExpr.isInvalid())
6369      return ExprError();
6370  }
6371
6372  if (DiscardedValue) {
6373    FullExpr = CheckPlaceholderExpr(FullExpr.get());
6374    if (FullExpr.isInvalid())
6375      return ExprError();
6376
6377    FullExpr = IgnoredValueConversions(FullExpr.get());
6378    if (FullExpr.isInvalid())
6379      return ExprError();
6380  }
6381
6382  FullExpr = CorrectDelayedTyposInExpr(FullExpr.get());
6383  if (FullExpr.isInvalid())
6384    return ExprError();
6385
6386  CheckCompletedExpr(FullExpr.get(), CC, IsConstexpr);
6387
6388  // At the end of this full expression (which could be a deeply nested
6389  // lambda), if there is a potential capture within the nested lambda,
6390  // have the outer capture-able lambda try and capture it.
6391  // Consider the following code:
6392  // void f(int, int);
6393  // void f(const int&, double);
6394  // void foo() {
6395  //  const int x = 10, y = 20;
6396  //  auto L = [=](auto a) {
6397  //      auto M = [=](auto b) {
6398  //         f(x, b); <-- requires x to be captured by L and M
6399  //         f(y, a); <-- requires y to be captured by L, but not all Ms
6400  //      };
6401  //   };
6402  // }
6403
6404  // FIXME: Also consider what happens for something like this that involves
6405  // the gnu-extension statement-expressions or even lambda-init-captures:
6406  //   void f() {
6407  //     const int n = 0;
6408  //     auto L =  [&](auto a) {
6409  //       +n + ({ 0; a; });
6410  //     };
6411  //   }
6412  //
6413  // Here, we see +n, and then the full-expression 0; ends, so we don't
6414  // capture n (and instead remove it from our list of potential captures),
6415  // and then the full-expression +n + ({ 0; }); ends, but it's too late
6416  // for us to see that we need to capture n after all.
6417
6418  LambdaScopeInfo *const CurrentLSI = getCurLambda();
6419  // FIXME: PR 17877 showed that getCurLambda() can return a valid pointer
6420  // even if CurContext is not a lambda call operator. Refer to that Bug Report
6421  // for an example of the code that might cause this asynchrony.
6422  // By ensuring we are in the context of a lambda's call operator
6423  // we can fix the bug (we only need to check whether we need to capture
6424  // if we are within a lambda's body); but per the comments in that
6425  // PR, a proper fix would entail :
6426  //   "Alternative suggestion:
6427  //   - Add to Sema an integer holding the smallest (outermost) scope
6428  //     index that we are *lexically* within, and save/restore/set to
6429  //     FunctionScopes.size() in InstantiatingTemplate's
6430  //     constructor/destructor.
6431  //  - Teach the handful of places that iterate over FunctionScopes to
6432  //    stop at the outermost enclosing lexical scope."
6433  const bool IsInLambdaDeclContext = isLambdaCallOperator(CurContext);
6434  if (IsInLambdaDeclContext && CurrentLSI &&
6435      CurrentLSI->hasPotentialCaptures() && !FullExpr.isInvalid())
6436    CheckIfAnyEnclosingLambdasMustCaptureAnyPotentialCaptures(FE, CurrentLSI,
6437                                                              *this);
6438  return MaybeCreateExprWithCleanups(FullExpr);
6439}
6440
6441StmtResult Sema::ActOnFinishFullStmt(Stmt *FullStmt) {
6442  if (!FullStmt) return StmtError();
6443
6444  return MaybeCreateStmtWithCleanups(FullStmt);
6445}
6446
6447Sema::IfExistsResult
6448Sema::CheckMicrosoftIfExistsSymbol(Scope *S,
6449                                   CXXScopeSpec &SS,
6450                                   const DeclarationNameInfo &TargetNameInfo) {
6451  DeclarationName TargetName = TargetNameInfo.getName();
6452  if (!TargetName)
6453    return IER_DoesNotExist;
6454
6455  // If the name itself is dependent, then the result is dependent.
6456  if (TargetName.isDependentName())
6457    return IER_Dependent;
6458
6459  // Do the redeclaration lookup in the current scope.
6460  LookupResult R(*this, TargetNameInfo, Sema::LookupAnyName,
6461                 Sema::NotForRedeclaration);
6462  LookupParsedName(R, S, &SS);
6463  R.suppressDiagnostics();
6464
6465  switch (R.getResultKind()) {
6466  case LookupResult::Found:
6467  case LookupResult::FoundOverloaded:
6468  case LookupResult::FoundUnresolvedValue:
6469  case LookupResult::Ambiguous:
6470    return IER_Exists;
6471
6472  case LookupResult::NotFound:
6473    return IER_DoesNotExist;
6474
6475  case LookupResult::NotFoundInCurrentInstantiation:
6476    return IER_Dependent;
6477  }
6478
6479  llvm_unreachable("Invalid LookupResult Kind!");
6480}
6481
6482Sema::IfExistsResult
6483Sema::CheckMicrosoftIfExistsSymbol(Scope *S, SourceLocation KeywordLoc,
6484                                   bool IsIfExists, CXXScopeSpec &SS,
6485                                   UnqualifiedId &Name) {
6486  DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
6487
6488  // Check for unexpanded parameter packs.
6489  SmallVector<UnexpandedParameterPack, 4> Unexpanded;
6490  collectUnexpandedParameterPacks(SS, Unexpanded);
6491  collectUnexpandedParameterPacks(TargetNameInfo, Unexpanded);
6492  if (!Unexpanded.empty()) {
6493    DiagnoseUnexpandedParameterPacks(KeywordLoc,
6494                                     IsIfExists? UPPC_IfExists
6495                                               : UPPC_IfNotExists,
6496                                     Unexpanded);
6497    return IER_Error;
6498  }
6499
6500  return CheckMicrosoftIfExistsSymbol(S, SS, TargetNameInfo);
6501}
6502