Home | History | Annotate | Download | only in Sema
      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 //  This file implements semantic analysis for C++ expressions.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "clang/Sema/SemaInternal.h"
     15 #include "clang/Sema/DeclSpec.h"
     16 #include "clang/Sema/Initialization.h"
     17 #include "clang/Sema/Lookup.h"
     18 #include "clang/Sema/ParsedTemplate.h"
     19 #include "clang/Sema/ScopeInfo.h"
     20 #include "clang/Sema/Scope.h"
     21 #include "clang/Sema/TemplateDeduction.h"
     22 #include "clang/AST/ASTContext.h"
     23 #include "clang/AST/CXXInheritance.h"
     24 #include "clang/AST/DeclObjC.h"
     25 #include "clang/AST/ExprCXX.h"
     26 #include "clang/AST/ExprObjC.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 "llvm/ADT/STLExtras.h"
     32 #include "llvm/Support/ErrorHandling.h"
     33 using namespace clang;
     34 using namespace sema;
     35 
     36 ParsedType Sema::getDestructorName(SourceLocation TildeLoc,
     37                                    IdentifierInfo &II,
     38                                    SourceLocation NameLoc,
     39                                    Scope *S, CXXScopeSpec &SS,
     40                                    ParsedType ObjectTypePtr,
     41                                    bool EnteringContext) {
     42   // Determine where to perform name lookup.
     43 
     44   // FIXME: This area of the standard is very messy, and the current
     45   // wording is rather unclear about which scopes we search for the
     46   // destructor name; see core issues 399 and 555. Issue 399 in
     47   // particular shows where the current description of destructor name
     48   // lookup is completely out of line with existing practice, e.g.,
     49   // this appears to be ill-formed:
     50   //
     51   //   namespace N {
     52   //     template <typename T> struct S {
     53   //       ~S();
     54   //     };
     55   //   }
     56   //
     57   //   void f(N::S<int>* s) {
     58   //     s->N::S<int>::~S();
     59   //   }
     60   //
     61   // See also PR6358 and PR6359.
     62   // For this reason, we're currently only doing the C++03 version of this
     63   // code; the C++0x version has to wait until we get a proper spec.
     64   QualType SearchType;
     65   DeclContext *LookupCtx = 0;
     66   bool isDependent = false;
     67   bool LookInScope = false;
     68 
     69   // If we have an object type, it's because we are in a
     70   // pseudo-destructor-expression or a member access expression, and
     71   // we know what type we're looking for.
     72   if (ObjectTypePtr)
     73     SearchType = GetTypeFromParser(ObjectTypePtr);
     74 
     75   if (SS.isSet()) {
     76     NestedNameSpecifier *NNS = (NestedNameSpecifier *)SS.getScopeRep();
     77 
     78     bool AlreadySearched = false;
     79     bool LookAtPrefix = true;
     80     // C++ [basic.lookup.qual]p6:
     81     //   If a pseudo-destructor-name (5.2.4) contains a nested-name-specifier,
     82     //   the type-names are looked up as types in the scope designated by the
     83     //   nested-name-specifier. In a qualified-id of the form:
     84     //
     85     //     ::[opt] nested-name-specifier  ~ class-name
     86     //
     87     //   where the nested-name-specifier designates a namespace scope, and in
     88     //   a qualified-id of the form:
     89     //
     90     //     ::opt nested-name-specifier class-name ::  ~ class-name
     91     //
     92     //   the class-names are looked up as types in the scope designated by
     93     //   the nested-name-specifier.
     94     //
     95     // Here, we check the first case (completely) and determine whether the
     96     // code below is permitted to look at the prefix of the
     97     // nested-name-specifier.
     98     DeclContext *DC = computeDeclContext(SS, EnteringContext);
     99     if (DC && DC->isFileContext()) {
    100       AlreadySearched = true;
    101       LookupCtx = DC;
    102       isDependent = false;
    103     } else if (DC && isa<CXXRecordDecl>(DC))
    104       LookAtPrefix = false;
    105 
    106     // The second case from the C++03 rules quoted further above.
    107     NestedNameSpecifier *Prefix = 0;
    108     if (AlreadySearched) {
    109       // Nothing left to do.
    110     } else if (LookAtPrefix && (Prefix = NNS->getPrefix())) {
    111       CXXScopeSpec PrefixSS;
    112       PrefixSS.Adopt(NestedNameSpecifierLoc(Prefix, SS.location_data()));
    113       LookupCtx = computeDeclContext(PrefixSS, EnteringContext);
    114       isDependent = isDependentScopeSpecifier(PrefixSS);
    115     } else if (ObjectTypePtr) {
    116       LookupCtx = computeDeclContext(SearchType);
    117       isDependent = SearchType->isDependentType();
    118     } else {
    119       LookupCtx = computeDeclContext(SS, EnteringContext);
    120       isDependent = LookupCtx && LookupCtx->isDependentContext();
    121     }
    122 
    123     LookInScope = false;
    124   } else if (ObjectTypePtr) {
    125     // C++ [basic.lookup.classref]p3:
    126     //   If the unqualified-id is ~type-name, the type-name is looked up
    127     //   in the context of the entire postfix-expression. If the type T
    128     //   of the object expression is of a class type C, the type-name is
    129     //   also looked up in the scope of class C. At least one of the
    130     //   lookups shall find a name that refers to (possibly
    131     //   cv-qualified) T.
    132     LookupCtx = computeDeclContext(SearchType);
    133     isDependent = SearchType->isDependentType();
    134     assert((isDependent || !SearchType->isIncompleteType()) &&
    135            "Caller should have completed object type");
    136 
    137     LookInScope = true;
    138   } else {
    139     // Perform lookup into the current scope (only).
    140     LookInScope = true;
    141   }
    142 
    143   TypeDecl *NonMatchingTypeDecl = 0;
    144   LookupResult Found(*this, &II, NameLoc, LookupOrdinaryName);
    145   for (unsigned Step = 0; Step != 2; ++Step) {
    146     // Look for the name first in the computed lookup context (if we
    147     // have one) and, if that fails to find a match, in the scope (if
    148     // we're allowed to look there).
    149     Found.clear();
    150     if (Step == 0 && LookupCtx)
    151       LookupQualifiedName(Found, LookupCtx);
    152     else if (Step == 1 && LookInScope && S)
    153       LookupName(Found, S);
    154     else
    155       continue;
    156 
    157     // FIXME: Should we be suppressing ambiguities here?
    158     if (Found.isAmbiguous())
    159       return ParsedType();
    160 
    161     if (TypeDecl *Type = Found.getAsSingle<TypeDecl>()) {
    162       QualType T = Context.getTypeDeclType(Type);
    163 
    164       if (SearchType.isNull() || SearchType->isDependentType() ||
    165           Context.hasSameUnqualifiedType(T, SearchType)) {
    166         // We found our type!
    167 
    168         return ParsedType::make(T);
    169       }
    170 
    171       if (!SearchType.isNull())
    172         NonMatchingTypeDecl = Type;
    173     }
    174 
    175     // If the name that we found is a class template name, and it is
    176     // the same name as the template name in the last part of the
    177     // nested-name-specifier (if present) or the object type, then
    178     // this is the destructor for that class.
    179     // FIXME: This is a workaround until we get real drafting for core
    180     // issue 399, for which there isn't even an obvious direction.
    181     if (ClassTemplateDecl *Template = Found.getAsSingle<ClassTemplateDecl>()) {
    182       QualType MemberOfType;
    183       if (SS.isSet()) {
    184         if (DeclContext *Ctx = computeDeclContext(SS, EnteringContext)) {
    185           // Figure out the type of the context, if it has one.
    186           if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Ctx))
    187             MemberOfType = Context.getTypeDeclType(Record);
    188         }
    189       }
    190       if (MemberOfType.isNull())
    191         MemberOfType = SearchType;
    192 
    193       if (MemberOfType.isNull())
    194         continue;
    195 
    196       // We're referring into a class template specialization. If the
    197       // class template we found is the same as the template being
    198       // specialized, we found what we are looking for.
    199       if (const RecordType *Record = MemberOfType->getAs<RecordType>()) {
    200         if (ClassTemplateSpecializationDecl *Spec
    201               = dyn_cast<ClassTemplateSpecializationDecl>(Record->getDecl())) {
    202           if (Spec->getSpecializedTemplate()->getCanonicalDecl() ==
    203                 Template->getCanonicalDecl())
    204             return ParsedType::make(MemberOfType);
    205         }
    206 
    207         continue;
    208       }
    209 
    210       // We're referring to an unresolved class template
    211       // specialization. Determine whether we class template we found
    212       // is the same as the template being specialized or, if we don't
    213       // know which template is being specialized, that it at least
    214       // has the same name.
    215       if (const TemplateSpecializationType *SpecType
    216             = MemberOfType->getAs<TemplateSpecializationType>()) {
    217         TemplateName SpecName = SpecType->getTemplateName();
    218 
    219         // The class template we found is the same template being
    220         // specialized.
    221         if (TemplateDecl *SpecTemplate = SpecName.getAsTemplateDecl()) {
    222           if (SpecTemplate->getCanonicalDecl() == Template->getCanonicalDecl())
    223             return ParsedType::make(MemberOfType);
    224 
    225           continue;
    226         }
    227 
    228         // The class template we found has the same name as the
    229         // (dependent) template name being specialized.
    230         if (DependentTemplateName *DepTemplate
    231                                     = SpecName.getAsDependentTemplateName()) {
    232           if (DepTemplate->isIdentifier() &&
    233               DepTemplate->getIdentifier() == Template->getIdentifier())
    234             return ParsedType::make(MemberOfType);
    235 
    236           continue;
    237         }
    238       }
    239     }
    240   }
    241 
    242   if (isDependent) {
    243     // We didn't find our type, but that's okay: it's dependent
    244     // anyway.
    245 
    246     // FIXME: What if we have no nested-name-specifier?
    247     QualType T = CheckTypenameType(ETK_None, SourceLocation(),
    248                                    SS.getWithLocInContext(Context),
    249                                    II, NameLoc);
    250     return ParsedType::make(T);
    251   }
    252 
    253   if (NonMatchingTypeDecl) {
    254     QualType T = Context.getTypeDeclType(NonMatchingTypeDecl);
    255     Diag(NameLoc, diag::err_destructor_expr_type_mismatch)
    256       << T << SearchType;
    257     Diag(NonMatchingTypeDecl->getLocation(), diag::note_destructor_type_here)
    258       << T;
    259   } else if (ObjectTypePtr)
    260     Diag(NameLoc, diag::err_ident_in_dtor_not_a_type)
    261       << &II;
    262   else
    263     Diag(NameLoc, diag::err_destructor_class_name);
    264 
    265   return ParsedType();
    266 }
    267 
    268 /// \brief Build a C++ typeid expression with a type operand.
    269 ExprResult Sema::BuildCXXTypeId(QualType TypeInfoType,
    270                                 SourceLocation TypeidLoc,
    271                                 TypeSourceInfo *Operand,
    272                                 SourceLocation RParenLoc) {
    273   // C++ [expr.typeid]p4:
    274   //   The top-level cv-qualifiers of the lvalue expression or the type-id
    275   //   that is the operand of typeid are always ignored.
    276   //   If the type of the type-id is a class type or a reference to a class
    277   //   type, the class shall be completely-defined.
    278   Qualifiers Quals;
    279   QualType T
    280     = Context.getUnqualifiedArrayType(Operand->getType().getNonReferenceType(),
    281                                       Quals);
    282   if (T->getAs<RecordType>() &&
    283       RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid))
    284     return ExprError();
    285 
    286   return Owned(new (Context) CXXTypeidExpr(TypeInfoType.withConst(),
    287                                            Operand,
    288                                            SourceRange(TypeidLoc, RParenLoc)));
    289 }
    290 
    291 /// \brief Build a C++ typeid expression with an expression operand.
    292 ExprResult Sema::BuildCXXTypeId(QualType TypeInfoType,
    293                                 SourceLocation TypeidLoc,
    294                                 Expr *E,
    295                                 SourceLocation RParenLoc) {
    296   bool isUnevaluatedOperand = true;
    297   if (E && !E->isTypeDependent()) {
    298     if (E->getType()->isPlaceholderType()) {
    299       ExprResult result = CheckPlaceholderExpr(E);
    300       if (result.isInvalid()) return ExprError();
    301       E = result.take();
    302     }
    303 
    304     QualType T = E->getType();
    305     if (const RecordType *RecordT = T->getAs<RecordType>()) {
    306       CXXRecordDecl *RecordD = cast<CXXRecordDecl>(RecordT->getDecl());
    307       // C++ [expr.typeid]p3:
    308       //   [...] If the type of the expression is a class type, the class
    309       //   shall be completely-defined.
    310       if (RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid))
    311         return ExprError();
    312 
    313       // C++ [expr.typeid]p3:
    314       //   When typeid is applied to an expression other than an glvalue of a
    315       //   polymorphic class type [...] [the] expression is an unevaluated
    316       //   operand. [...]
    317       if (RecordD->isPolymorphic() && E->Classify(Context).isGLValue()) {
    318         isUnevaluatedOperand = false;
    319 
    320         // We require a vtable to query the type at run time.
    321         MarkVTableUsed(TypeidLoc, RecordD);
    322       }
    323     }
    324 
    325     // C++ [expr.typeid]p4:
    326     //   [...] If the type of the type-id is a reference to a possibly
    327     //   cv-qualified type, the result of the typeid expression refers to a
    328     //   std::type_info object representing the cv-unqualified referenced
    329     //   type.
    330     Qualifiers Quals;
    331     QualType UnqualT = Context.getUnqualifiedArrayType(T, Quals);
    332     if (!Context.hasSameType(T, UnqualT)) {
    333       T = UnqualT;
    334       E = ImpCastExprToType(E, UnqualT, CK_NoOp, E->getValueKind()).take();
    335     }
    336   }
    337 
    338   // If this is an unevaluated operand, clear out the set of
    339   // declaration references we have been computing and eliminate any
    340   // temporaries introduced in its computation.
    341   if (isUnevaluatedOperand)
    342     ExprEvalContexts.back().Context = Unevaluated;
    343 
    344   return Owned(new (Context) CXXTypeidExpr(TypeInfoType.withConst(),
    345                                            E,
    346                                            SourceRange(TypeidLoc, RParenLoc)));
    347 }
    348 
    349 /// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);
    350 ExprResult
    351 Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc,
    352                      bool isType, void *TyOrExpr, SourceLocation RParenLoc) {
    353   // Find the std::type_info type.
    354   if (!getStdNamespace())
    355     return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));
    356 
    357   if (!CXXTypeInfoDecl) {
    358     IdentifierInfo *TypeInfoII = &PP.getIdentifierTable().get("type_info");
    359     LookupResult R(*this, TypeInfoII, SourceLocation(), LookupTagName);
    360     LookupQualifiedName(R, getStdNamespace());
    361     CXXTypeInfoDecl = R.getAsSingle<RecordDecl>();
    362     if (!CXXTypeInfoDecl)
    363       return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));
    364   }
    365 
    366   QualType TypeInfoType = Context.getTypeDeclType(CXXTypeInfoDecl);
    367 
    368   if (isType) {
    369     // The operand is a type; handle it as such.
    370     TypeSourceInfo *TInfo = 0;
    371     QualType T = GetTypeFromParser(ParsedType::getFromOpaquePtr(TyOrExpr),
    372                                    &TInfo);
    373     if (T.isNull())
    374       return ExprError();
    375 
    376     if (!TInfo)
    377       TInfo = Context.getTrivialTypeSourceInfo(T, OpLoc);
    378 
    379     return BuildCXXTypeId(TypeInfoType, OpLoc, TInfo, RParenLoc);
    380   }
    381 
    382   // The operand is an expression.
    383   return BuildCXXTypeId(TypeInfoType, OpLoc, (Expr*)TyOrExpr, RParenLoc);
    384 }
    385 
    386 /// Retrieve the UuidAttr associated with QT.
    387 static UuidAttr *GetUuidAttrOfType(QualType QT) {
    388   // Optionally remove one level of pointer, reference or array indirection.
    389   const Type *Ty = QT.getTypePtr();;
    390   if (QT->isPointerType() || QT->isReferenceType())
    391     Ty = QT->getPointeeType().getTypePtr();
    392   else if (QT->isArrayType())
    393     Ty = cast<ArrayType>(QT)->getElementType().getTypePtr();
    394 
    395   // Loop all record redeclaration looking for an uuid attribute.
    396   CXXRecordDecl *RD = Ty->getAsCXXRecordDecl();
    397   for (CXXRecordDecl::redecl_iterator I = RD->redecls_begin(),
    398        E = RD->redecls_end(); I != E; ++I) {
    399     if (UuidAttr *Uuid = I->getAttr<UuidAttr>())
    400       return Uuid;
    401   }
    402 
    403   return 0;
    404 }
    405 
    406 /// \brief Build a Microsoft __uuidof expression with a type operand.
    407 ExprResult Sema::BuildCXXUuidof(QualType TypeInfoType,
    408                                 SourceLocation TypeidLoc,
    409                                 TypeSourceInfo *Operand,
    410                                 SourceLocation RParenLoc) {
    411   if (!Operand->getType()->isDependentType()) {
    412     if (!GetUuidAttrOfType(Operand->getType()))
    413       return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid));
    414   }
    415 
    416   // FIXME: add __uuidof semantic analysis for type operand.
    417   return Owned(new (Context) CXXUuidofExpr(TypeInfoType.withConst(),
    418                                            Operand,
    419                                            SourceRange(TypeidLoc, RParenLoc)));
    420 }
    421 
    422 /// \brief Build a Microsoft __uuidof expression with an expression operand.
    423 ExprResult Sema::BuildCXXUuidof(QualType TypeInfoType,
    424                                 SourceLocation TypeidLoc,
    425                                 Expr *E,
    426                                 SourceLocation RParenLoc) {
    427   if (!E->getType()->isDependentType()) {
    428     if (!GetUuidAttrOfType(E->getType()) &&
    429         !E->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
    430       return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid));
    431   }
    432   // FIXME: add __uuidof semantic analysis for type operand.
    433   return Owned(new (Context) CXXUuidofExpr(TypeInfoType.withConst(),
    434                                            E,
    435                                            SourceRange(TypeidLoc, RParenLoc)));
    436 }
    437 
    438 /// ActOnCXXUuidof - Parse __uuidof( type-id ) or __uuidof (expression);
    439 ExprResult
    440 Sema::ActOnCXXUuidof(SourceLocation OpLoc, SourceLocation LParenLoc,
    441                      bool isType, void *TyOrExpr, SourceLocation RParenLoc) {
    442   // If MSVCGuidDecl has not been cached, do the lookup.
    443   if (!MSVCGuidDecl) {
    444     IdentifierInfo *GuidII = &PP.getIdentifierTable().get("_GUID");
    445     LookupResult R(*this, GuidII, SourceLocation(), LookupTagName);
    446     LookupQualifiedName(R, Context.getTranslationUnitDecl());
    447     MSVCGuidDecl = R.getAsSingle<RecordDecl>();
    448     if (!MSVCGuidDecl)
    449       return ExprError(Diag(OpLoc, diag::err_need_header_before_ms_uuidof));
    450   }
    451 
    452   QualType GuidType = Context.getTypeDeclType(MSVCGuidDecl);
    453 
    454   if (isType) {
    455     // The operand is a type; handle it as such.
    456     TypeSourceInfo *TInfo = 0;
    457     QualType T = GetTypeFromParser(ParsedType::getFromOpaquePtr(TyOrExpr),
    458                                    &TInfo);
    459     if (T.isNull())
    460       return ExprError();
    461 
    462     if (!TInfo)
    463       TInfo = Context.getTrivialTypeSourceInfo(T, OpLoc);
    464 
    465     return BuildCXXUuidof(GuidType, OpLoc, TInfo, RParenLoc);
    466   }
    467 
    468   // The operand is an expression.
    469   return BuildCXXUuidof(GuidType, OpLoc, (Expr*)TyOrExpr, RParenLoc);
    470 }
    471 
    472 /// ActOnCXXBoolLiteral - Parse {true,false} literals.
    473 ExprResult
    474 Sema::ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind) {
    475   assert((Kind == tok::kw_true || Kind == tok::kw_false) &&
    476          "Unknown C++ Boolean value!");
    477   return Owned(new (Context) CXXBoolLiteralExpr(Kind == tok::kw_true,
    478                                                 Context.BoolTy, OpLoc));
    479 }
    480 
    481 /// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
    482 ExprResult
    483 Sema::ActOnCXXNullPtrLiteral(SourceLocation Loc) {
    484   return Owned(new (Context) CXXNullPtrLiteralExpr(Context.NullPtrTy, Loc));
    485 }
    486 
    487 /// ActOnCXXThrow - Parse throw expressions.
    488 ExprResult
    489 Sema::ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *Ex) {
    490   bool IsThrownVarInScope = false;
    491   if (Ex) {
    492     // C++0x [class.copymove]p31:
    493     //   When certain criteria are met, an implementation is allowed to omit the
    494     //   copy/move construction of a class object [...]
    495     //
    496     //     - in a throw-expression, when the operand is the name of a
    497     //       non-volatile automatic object (other than a function or catch-
    498     //       clause parameter) whose scope does not extend beyond the end of the
    499     //       innermost enclosing try-block (if there is one), the copy/move
    500     //       operation from the operand to the exception object (15.1) can be
    501     //       omitted by constructing the automatic object directly into the
    502     //       exception object
    503     if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Ex->IgnoreParens()))
    504       if (VarDecl *Var = dyn_cast<VarDecl>(DRE->getDecl())) {
    505         if (Var->hasLocalStorage() && !Var->getType().isVolatileQualified()) {
    506           for( ; S; S = S->getParent()) {
    507             if (S->isDeclScope(Var)) {
    508               IsThrownVarInScope = true;
    509               break;
    510             }
    511 
    512             if (S->getFlags() &
    513                 (Scope::FnScope | Scope::ClassScope | Scope::BlockScope |
    514                  Scope::FunctionPrototypeScope | Scope::ObjCMethodScope |
    515                  Scope::TryScope))
    516               break;
    517           }
    518         }
    519       }
    520   }
    521 
    522   return BuildCXXThrow(OpLoc, Ex, IsThrownVarInScope);
    523 }
    524 
    525 ExprResult Sema::BuildCXXThrow(SourceLocation OpLoc, Expr *Ex,
    526                                bool IsThrownVarInScope) {
    527   // Don't report an error if 'throw' is used in system headers.
    528   if (!getLangOptions().CXXExceptions &&
    529       !getSourceManager().isInSystemHeader(OpLoc))
    530     Diag(OpLoc, diag::err_exceptions_disabled) << "throw";
    531 
    532   if (Ex && !Ex->isTypeDependent()) {
    533     ExprResult ExRes = CheckCXXThrowOperand(OpLoc, Ex, IsThrownVarInScope);
    534     if (ExRes.isInvalid())
    535       return ExprError();
    536     Ex = ExRes.take();
    537   }
    538 
    539   return Owned(new (Context) CXXThrowExpr(Ex, Context.VoidTy, OpLoc,
    540                                           IsThrownVarInScope));
    541 }
    542 
    543 /// CheckCXXThrowOperand - Validate the operand of a throw.
    544 ExprResult Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, Expr *E,
    545                                       bool IsThrownVarInScope) {
    546   // C++ [except.throw]p3:
    547   //   A throw-expression initializes a temporary object, called the exception
    548   //   object, the type of which is determined by removing any top-level
    549   //   cv-qualifiers from the static type of the operand of throw and adjusting
    550   //   the type from "array of T" or "function returning T" to "pointer to T"
    551   //   or "pointer to function returning T", [...]
    552   if (E->getType().hasQualifiers())
    553     E = ImpCastExprToType(E, E->getType().getUnqualifiedType(), CK_NoOp,
    554                           E->getValueKind()).take();
    555 
    556   ExprResult Res = DefaultFunctionArrayConversion(E);
    557   if (Res.isInvalid())
    558     return ExprError();
    559   E = Res.take();
    560 
    561   //   If the type of the exception would be an incomplete type or a pointer
    562   //   to an incomplete type other than (cv) void the program is ill-formed.
    563   QualType Ty = E->getType();
    564   bool isPointer = false;
    565   if (const PointerType* Ptr = Ty->getAs<PointerType>()) {
    566     Ty = Ptr->getPointeeType();
    567     isPointer = true;
    568   }
    569   if (!isPointer || !Ty->isVoidType()) {
    570     if (RequireCompleteType(ThrowLoc, Ty,
    571                             PDiag(isPointer ? diag::err_throw_incomplete_ptr
    572                                             : diag::err_throw_incomplete)
    573                               << E->getSourceRange()))
    574       return ExprError();
    575 
    576     if (RequireNonAbstractType(ThrowLoc, E->getType(),
    577                                PDiag(diag::err_throw_abstract_type)
    578                                  << E->getSourceRange()))
    579       return ExprError();
    580   }
    581 
    582   // Initialize the exception result.  This implicitly weeds out
    583   // abstract types or types with inaccessible copy constructors.
    584 
    585   // C++0x [class.copymove]p31:
    586   //   When certain criteria are met, an implementation is allowed to omit the
    587   //   copy/move construction of a class object [...]
    588   //
    589   //     - in a throw-expression, when the operand is the name of a
    590   //       non-volatile automatic object (other than a function or catch-clause
    591   //       parameter) whose scope does not extend beyond the end of the
    592   //       innermost enclosing try-block (if there is one), the copy/move
    593   //       operation from the operand to the exception object (15.1) can be
    594   //       omitted by constructing the automatic object directly into the
    595   //       exception object
    596   const VarDecl *NRVOVariable = 0;
    597   if (IsThrownVarInScope)
    598     NRVOVariable = getCopyElisionCandidate(QualType(), E, false);
    599 
    600   InitializedEntity Entity =
    601       InitializedEntity::InitializeException(ThrowLoc, E->getType(),
    602                                              /*NRVO=*/NRVOVariable != 0);
    603   Res = PerformMoveOrCopyInitialization(Entity, NRVOVariable,
    604                                         QualType(), E,
    605                                         IsThrownVarInScope);
    606   if (Res.isInvalid())
    607     return ExprError();
    608   E = Res.take();
    609 
    610   // If the exception has class type, we need additional handling.
    611   const RecordType *RecordTy = Ty->getAs<RecordType>();
    612   if (!RecordTy)
    613     return Owned(E);
    614   CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
    615 
    616   // If we are throwing a polymorphic class type or pointer thereof,
    617   // exception handling will make use of the vtable.
    618   MarkVTableUsed(ThrowLoc, RD);
    619 
    620   // If a pointer is thrown, the referenced object will not be destroyed.
    621   if (isPointer)
    622     return Owned(E);
    623 
    624   // If the class has a non-trivial destructor, we must be able to call it.
    625   if (RD->hasTrivialDestructor())
    626     return Owned(E);
    627 
    628   CXXDestructorDecl *Destructor
    629     = const_cast<CXXDestructorDecl*>(LookupDestructor(RD));
    630   if (!Destructor)
    631     return Owned(E);
    632 
    633   MarkDeclarationReferenced(E->getExprLoc(), Destructor);
    634   CheckDestructorAccess(E->getExprLoc(), Destructor,
    635                         PDiag(diag::err_access_dtor_exception) << Ty);
    636   return Owned(E);
    637 }
    638 
    639 QualType Sema::getCurrentThisType(bool Capture) {
    640   // Ignore block scopes: we can capture through them.
    641   // Ignore nested enum scopes: we'll diagnose non-constant expressions
    642   // where they're invalid, and other uses are legitimate.
    643   // Don't ignore nested class scopes: you can't use 'this' in a local class.
    644   DeclContext *DC = CurContext;
    645   unsigned NumBlocks = 0;
    646   while (true) {
    647     if (isa<BlockDecl>(DC)) {
    648       DC = cast<BlockDecl>(DC)->getDeclContext();
    649       ++NumBlocks;
    650     } else if (isa<EnumDecl>(DC))
    651       DC = cast<EnumDecl>(DC)->getDeclContext();
    652     else break;
    653   }
    654 
    655   QualType ThisTy;
    656   if (CXXMethodDecl *method = dyn_cast<CXXMethodDecl>(DC)) {
    657     if (method && method->isInstance())
    658       ThisTy = method->getThisType(Context);
    659   } else if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {
    660     // C++0x [expr.prim]p4:
    661     //   Otherwise, if a member-declarator declares a non-static data member
    662     // of a class X, the expression this is a prvalue of type "pointer to X"
    663     // within the optional brace-or-equal-initializer.
    664     Scope *S = getScopeForContext(DC);
    665     if (!S || S->getFlags() & Scope::ThisScope)
    666       ThisTy = Context.getPointerType(Context.getRecordType(RD));
    667   }
    668 
    669   if (!Capture || ThisTy.isNull())
    670     return ThisTy;
    671 
    672   // Mark that we're closing on 'this' in all the block scopes we ignored.
    673   for (unsigned idx = FunctionScopes.size() - 1;
    674        NumBlocks; --idx, --NumBlocks)
    675     cast<BlockScopeInfo>(FunctionScopes[idx])->CapturesCXXThis = true;
    676 
    677   return ThisTy;
    678 }
    679 
    680 ExprResult Sema::ActOnCXXThis(SourceLocation Loc) {
    681   /// C++ 9.3.2: In the body of a non-static member function, the keyword this
    682   /// is a non-lvalue expression whose value is the address of the object for
    683   /// which the function is called.
    684 
    685   QualType ThisTy = getCurrentThisType();
    686   if (ThisTy.isNull()) return Diag(Loc, diag::err_invalid_this_use);
    687 
    688   return Owned(new (Context) CXXThisExpr(Loc, ThisTy, /*isImplicit=*/false));
    689 }
    690 
    691 ExprResult
    692 Sema::ActOnCXXTypeConstructExpr(ParsedType TypeRep,
    693                                 SourceLocation LParenLoc,
    694                                 MultiExprArg exprs,
    695                                 SourceLocation RParenLoc) {
    696   if (!TypeRep)
    697     return ExprError();
    698 
    699   TypeSourceInfo *TInfo;
    700   QualType Ty = GetTypeFromParser(TypeRep, &TInfo);
    701   if (!TInfo)
    702     TInfo = Context.getTrivialTypeSourceInfo(Ty, SourceLocation());
    703 
    704   return BuildCXXTypeConstructExpr(TInfo, LParenLoc, exprs, RParenLoc);
    705 }
    706 
    707 /// ActOnCXXTypeConstructExpr - Parse construction of a specified type.
    708 /// Can be interpreted either as function-style casting ("int(x)")
    709 /// or class type construction ("ClassType(x,y,z)")
    710 /// or creation of a value-initialized type ("int()").
    711 ExprResult
    712 Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo,
    713                                 SourceLocation LParenLoc,
    714                                 MultiExprArg exprs,
    715                                 SourceLocation RParenLoc) {
    716   QualType Ty = TInfo->getType();
    717   unsigned NumExprs = exprs.size();
    718   Expr **Exprs = (Expr**)exprs.get();
    719   SourceLocation TyBeginLoc = TInfo->getTypeLoc().getBeginLoc();
    720   SourceRange FullRange = SourceRange(TyBeginLoc, RParenLoc);
    721 
    722   if (Ty->isDependentType() ||
    723       CallExpr::hasAnyTypeDependentArguments(Exprs, NumExprs)) {
    724     exprs.release();
    725 
    726     return Owned(CXXUnresolvedConstructExpr::Create(Context, TInfo,
    727                                                     LParenLoc,
    728                                                     Exprs, NumExprs,
    729                                                     RParenLoc));
    730   }
    731 
    732   if (Ty->isArrayType())
    733     return ExprError(Diag(TyBeginLoc,
    734                           diag::err_value_init_for_array_type) << FullRange);
    735   if (!Ty->isVoidType() &&
    736       RequireCompleteType(TyBeginLoc, Ty,
    737                           PDiag(diag::err_invalid_incomplete_type_use)
    738                             << FullRange))
    739     return ExprError();
    740 
    741   if (RequireNonAbstractType(TyBeginLoc, Ty,
    742                              diag::err_allocation_of_abstract_type))
    743     return ExprError();
    744 
    745 
    746   // C++ [expr.type.conv]p1:
    747   // If the expression list is a single expression, the type conversion
    748   // expression is equivalent (in definedness, and if defined in meaning) to the
    749   // corresponding cast expression.
    750   if (NumExprs == 1) {
    751     Expr *Arg = Exprs[0];
    752     exprs.release();
    753     return BuildCXXFunctionalCastExpr(TInfo, LParenLoc, Arg, RParenLoc);
    754   }
    755 
    756   InitializedEntity Entity = InitializedEntity::InitializeTemporary(TInfo);
    757   InitializationKind Kind
    758     = NumExprs ? InitializationKind::CreateDirect(TyBeginLoc,
    759                                                   LParenLoc, RParenLoc)
    760                : InitializationKind::CreateValue(TyBeginLoc,
    761                                                  LParenLoc, RParenLoc);
    762   InitializationSequence InitSeq(*this, Entity, Kind, Exprs, NumExprs);
    763   ExprResult Result = InitSeq.Perform(*this, Entity, Kind, move(exprs));
    764 
    765   // FIXME: Improve AST representation?
    766   return move(Result);
    767 }
    768 
    769 /// doesUsualArrayDeleteWantSize - Answers whether the usual
    770 /// operator delete[] for the given type has a size_t parameter.
    771 static bool doesUsualArrayDeleteWantSize(Sema &S, SourceLocation loc,
    772                                          QualType allocType) {
    773   const RecordType *record =
    774     allocType->getBaseElementTypeUnsafe()->getAs<RecordType>();
    775   if (!record) return false;
    776 
    777   // Try to find an operator delete[] in class scope.
    778 
    779   DeclarationName deleteName =
    780     S.Context.DeclarationNames.getCXXOperatorName(OO_Array_Delete);
    781   LookupResult ops(S, deleteName, loc, Sema::LookupOrdinaryName);
    782   S.LookupQualifiedName(ops, record->getDecl());
    783 
    784   // We're just doing this for information.
    785   ops.suppressDiagnostics();
    786 
    787   // Very likely: there's no operator delete[].
    788   if (ops.empty()) return false;
    789 
    790   // If it's ambiguous, it should be illegal to call operator delete[]
    791   // on this thing, so it doesn't matter if we allocate extra space or not.
    792   if (ops.isAmbiguous()) return false;
    793 
    794   LookupResult::Filter filter = ops.makeFilter();
    795   while (filter.hasNext()) {
    796     NamedDecl *del = filter.next()->getUnderlyingDecl();
    797 
    798     // C++0x [basic.stc.dynamic.deallocation]p2:
    799     //   A template instance is never a usual deallocation function,
    800     //   regardless of its signature.
    801     if (isa<FunctionTemplateDecl>(del)) {
    802       filter.erase();
    803       continue;
    804     }
    805 
    806     // C++0x [basic.stc.dynamic.deallocation]p2:
    807     //   If class T does not declare [an operator delete[] with one
    808     //   parameter] but does declare a member deallocation function
    809     //   named operator delete[] with exactly two parameters, the
    810     //   second of which has type std::size_t, then this function
    811     //   is a usual deallocation function.
    812     if (!cast<CXXMethodDecl>(del)->isUsualDeallocationFunction()) {
    813       filter.erase();
    814       continue;
    815     }
    816   }
    817   filter.done();
    818 
    819   if (!ops.isSingleResult()) return false;
    820 
    821   const FunctionDecl *del = cast<FunctionDecl>(ops.getFoundDecl());
    822   return (del->getNumParams() == 2);
    823 }
    824 
    825 /// ActOnCXXNew - Parsed a C++ 'new' expression (C++ 5.3.4), as in e.g.:
    826 /// @code new (memory) int[size][4] @endcode
    827 /// or
    828 /// @code ::new Foo(23, "hello") @endcode
    829 /// For the interpretation of this heap of arguments, consult the base version.
    830 ExprResult
    831 Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
    832                   SourceLocation PlacementLParen, MultiExprArg PlacementArgs,
    833                   SourceLocation PlacementRParen, SourceRange TypeIdParens,
    834                   Declarator &D, SourceLocation ConstructorLParen,
    835                   MultiExprArg ConstructorArgs,
    836                   SourceLocation ConstructorRParen) {
    837   bool TypeContainsAuto = D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto;
    838 
    839   Expr *ArraySize = 0;
    840   // If the specified type is an array, unwrap it and save the expression.
    841   if (D.getNumTypeObjects() > 0 &&
    842       D.getTypeObject(0).Kind == DeclaratorChunk::Array) {
    843     DeclaratorChunk &Chunk = D.getTypeObject(0);
    844     if (TypeContainsAuto)
    845       return ExprError(Diag(Chunk.Loc, diag::err_new_array_of_auto)
    846         << D.getSourceRange());
    847     if (Chunk.Arr.hasStatic)
    848       return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new)
    849         << D.getSourceRange());
    850     if (!Chunk.Arr.NumElts)
    851       return ExprError(Diag(Chunk.Loc, diag::err_array_new_needs_size)
    852         << D.getSourceRange());
    853 
    854     ArraySize = static_cast<Expr*>(Chunk.Arr.NumElts);
    855     D.DropFirstTypeObject();
    856   }
    857 
    858   // Every dimension shall be of constant size.
    859   if (ArraySize) {
    860     for (unsigned I = 0, N = D.getNumTypeObjects(); I < N; ++I) {
    861       if (D.getTypeObject(I).Kind != DeclaratorChunk::Array)
    862         break;
    863 
    864       DeclaratorChunk::ArrayTypeInfo &Array = D.getTypeObject(I).Arr;
    865       if (Expr *NumElts = (Expr *)Array.NumElts) {
    866         if (!NumElts->isTypeDependent() && !NumElts->isValueDependent() &&
    867             !NumElts->isIntegerConstantExpr(Context)) {
    868           Diag(D.getTypeObject(I).Loc, diag::err_new_array_nonconst)
    869             << NumElts->getSourceRange();
    870           return ExprError();
    871         }
    872       }
    873     }
    874   }
    875 
    876   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, /*Scope=*/0);
    877   QualType AllocType = TInfo->getType();
    878   if (D.isInvalidType())
    879     return ExprError();
    880 
    881   return BuildCXXNew(StartLoc, UseGlobal,
    882                      PlacementLParen,
    883                      move(PlacementArgs),
    884                      PlacementRParen,
    885                      TypeIdParens,
    886                      AllocType,
    887                      TInfo,
    888                      ArraySize,
    889                      ConstructorLParen,
    890                      move(ConstructorArgs),
    891                      ConstructorRParen,
    892                      TypeContainsAuto);
    893 }
    894 
    895 ExprResult
    896 Sema::BuildCXXNew(SourceLocation StartLoc, bool UseGlobal,
    897                   SourceLocation PlacementLParen,
    898                   MultiExprArg PlacementArgs,
    899                   SourceLocation PlacementRParen,
    900                   SourceRange TypeIdParens,
    901                   QualType AllocType,
    902                   TypeSourceInfo *AllocTypeInfo,
    903                   Expr *ArraySize,
    904                   SourceLocation ConstructorLParen,
    905                   MultiExprArg ConstructorArgs,
    906                   SourceLocation ConstructorRParen,
    907                   bool TypeMayContainAuto) {
    908   SourceRange TypeRange = AllocTypeInfo->getTypeLoc().getSourceRange();
    909 
    910   // C++0x [decl.spec.auto]p6. Deduce the type which 'auto' stands in for.
    911   if (TypeMayContainAuto && AllocType->getContainedAutoType()) {
    912     if (ConstructorArgs.size() == 0)
    913       return ExprError(Diag(StartLoc, diag::err_auto_new_requires_ctor_arg)
    914                        << AllocType << TypeRange);
    915     if (ConstructorArgs.size() != 1) {
    916       Expr *FirstBad = ConstructorArgs.get()[1];
    917       return ExprError(Diag(FirstBad->getSourceRange().getBegin(),
    918                             diag::err_auto_new_ctor_multiple_expressions)
    919                        << AllocType << TypeRange);
    920     }
    921     TypeSourceInfo *DeducedType = 0;
    922     if (!DeduceAutoType(AllocTypeInfo, ConstructorArgs.get()[0], DeducedType))
    923       return ExprError(Diag(StartLoc, diag::err_auto_new_deduction_failure)
    924                        << AllocType
    925                        << ConstructorArgs.get()[0]->getType()
    926                        << TypeRange
    927                        << ConstructorArgs.get()[0]->getSourceRange());
    928     if (!DeducedType)
    929       return ExprError();
    930 
    931     AllocTypeInfo = DeducedType;
    932     AllocType = AllocTypeInfo->getType();
    933   }
    934 
    935   // Per C++0x [expr.new]p5, the type being constructed may be a
    936   // typedef of an array type.
    937   if (!ArraySize) {
    938     if (const ConstantArrayType *Array
    939                               = Context.getAsConstantArrayType(AllocType)) {
    940       ArraySize = IntegerLiteral::Create(Context, Array->getSize(),
    941                                          Context.getSizeType(),
    942                                          TypeRange.getEnd());
    943       AllocType = Array->getElementType();
    944     }
    945   }
    946 
    947   if (CheckAllocatedType(AllocType, TypeRange.getBegin(), TypeRange))
    948     return ExprError();
    949 
    950   // In ARC, infer 'retaining' for the allocated
    951   if (getLangOptions().ObjCAutoRefCount &&
    952       AllocType.getObjCLifetime() == Qualifiers::OCL_None &&
    953       AllocType->isObjCLifetimeType()) {
    954     AllocType = Context.getLifetimeQualifiedType(AllocType,
    955                                     AllocType->getObjCARCImplicitLifetime());
    956   }
    957 
    958   QualType ResultType = Context.getPointerType(AllocType);
    959 
    960   // C++ 5.3.4p6: "The expression in a direct-new-declarator shall have integral
    961   //   or enumeration type with a non-negative value."
    962   if (ArraySize && !ArraySize->isTypeDependent()) {
    963 
    964     QualType SizeType = ArraySize->getType();
    965 
    966     ExprResult ConvertedSize = ConvertToIntegralOrEnumerationType(
    967       StartLoc, ArraySize,
    968       PDiag(diag::err_array_size_not_integral),
    969       PDiag(diag::err_array_size_incomplete_type)
    970         << ArraySize->getSourceRange(),
    971       PDiag(diag::err_array_size_explicit_conversion),
    972       PDiag(diag::note_array_size_conversion),
    973       PDiag(diag::err_array_size_ambiguous_conversion),
    974       PDiag(diag::note_array_size_conversion),
    975       PDiag(getLangOptions().CPlusPlus0x ?
    976               diag::warn_cxx98_compat_array_size_conversion :
    977               diag::ext_array_size_conversion));
    978     if (ConvertedSize.isInvalid())
    979       return ExprError();
    980 
    981     ArraySize = ConvertedSize.take();
    982     SizeType = ArraySize->getType();
    983     if (!SizeType->isIntegralOrUnscopedEnumerationType())
    984       return ExprError();
    985 
    986     // Let's see if this is a constant < 0. If so, we reject it out of hand.
    987     // We don't care about special rules, so we tell the machinery it's not
    988     // evaluated - it gives us a result in more cases.
    989     if (!ArraySize->isValueDependent()) {
    990       llvm::APSInt Value;
    991       if (ArraySize->isIntegerConstantExpr(Value, Context, 0, false)) {
    992         if (Value < llvm::APSInt(
    993                         llvm::APInt::getNullValue(Value.getBitWidth()),
    994                                  Value.isUnsigned()))
    995           return ExprError(Diag(ArraySize->getSourceRange().getBegin(),
    996                                 diag::err_typecheck_negative_array_size)
    997             << ArraySize->getSourceRange());
    998 
    999         if (!AllocType->isDependentType()) {
   1000           unsigned ActiveSizeBits
   1001             = ConstantArrayType::getNumAddressingBits(Context, AllocType, Value);
   1002           if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {
   1003             Diag(ArraySize->getSourceRange().getBegin(),
   1004                  diag::err_array_too_large)
   1005               << Value.toString(10)
   1006               << ArraySize->getSourceRange();
   1007             return ExprError();
   1008           }
   1009         }
   1010       } else if (TypeIdParens.isValid()) {
   1011         // Can't have dynamic array size when the type-id is in parentheses.
   1012         Diag(ArraySize->getLocStart(), diag::ext_new_paren_array_nonconst)
   1013           << ArraySize->getSourceRange()
   1014           << FixItHint::CreateRemoval(TypeIdParens.getBegin())
   1015           << FixItHint::CreateRemoval(TypeIdParens.getEnd());
   1016 
   1017         TypeIdParens = SourceRange();
   1018       }
   1019     }
   1020 
   1021     // ARC: warn about ABI issues.
   1022     if (getLangOptions().ObjCAutoRefCount) {
   1023       QualType BaseAllocType = Context.getBaseElementType(AllocType);
   1024       if (BaseAllocType.hasStrongOrWeakObjCLifetime())
   1025         Diag(StartLoc, diag::warn_err_new_delete_object_array)
   1026           << 0 << BaseAllocType;
   1027     }
   1028 
   1029     // Note that we do *not* convert the argument in any way.  It can
   1030     // be signed, larger than size_t, whatever.
   1031   }
   1032 
   1033   FunctionDecl *OperatorNew = 0;
   1034   FunctionDecl *OperatorDelete = 0;
   1035   Expr **PlaceArgs = (Expr**)PlacementArgs.get();
   1036   unsigned NumPlaceArgs = PlacementArgs.size();
   1037 
   1038   if (!AllocType->isDependentType() &&
   1039       !Expr::hasAnyTypeDependentArguments(PlaceArgs, NumPlaceArgs) &&
   1040       FindAllocationFunctions(StartLoc,
   1041                               SourceRange(PlacementLParen, PlacementRParen),
   1042                               UseGlobal, AllocType, ArraySize, PlaceArgs,
   1043                               NumPlaceArgs, OperatorNew, OperatorDelete))
   1044     return ExprError();
   1045 
   1046   // If this is an array allocation, compute whether the usual array
   1047   // deallocation function for the type has a size_t parameter.
   1048   bool UsualArrayDeleteWantsSize = false;
   1049   if (ArraySize && !AllocType->isDependentType())
   1050     UsualArrayDeleteWantsSize
   1051       = doesUsualArrayDeleteWantSize(*this, StartLoc, AllocType);
   1052 
   1053   SmallVector<Expr *, 8> AllPlaceArgs;
   1054   if (OperatorNew) {
   1055     // Add default arguments, if any.
   1056     const FunctionProtoType *Proto =
   1057       OperatorNew->getType()->getAs<FunctionProtoType>();
   1058     VariadicCallType CallType =
   1059       Proto->isVariadic() ? VariadicFunction : VariadicDoesNotApply;
   1060 
   1061     if (GatherArgumentsForCall(PlacementLParen, OperatorNew,
   1062                                Proto, 1, PlaceArgs, NumPlaceArgs,
   1063                                AllPlaceArgs, CallType))
   1064       return ExprError();
   1065 
   1066     NumPlaceArgs = AllPlaceArgs.size();
   1067     if (NumPlaceArgs > 0)
   1068       PlaceArgs = &AllPlaceArgs[0];
   1069   }
   1070 
   1071   bool Init = ConstructorLParen.isValid();
   1072   // --- Choosing a constructor ---
   1073   CXXConstructorDecl *Constructor = 0;
   1074   bool HadMultipleCandidates = false;
   1075   Expr **ConsArgs = (Expr**)ConstructorArgs.get();
   1076   unsigned NumConsArgs = ConstructorArgs.size();
   1077   ASTOwningVector<Expr*> ConvertedConstructorArgs(*this);
   1078 
   1079   // Array 'new' can't have any initializers.
   1080   if (NumConsArgs && (ResultType->isArrayType() || ArraySize)) {
   1081     SourceRange InitRange(ConsArgs[0]->getLocStart(),
   1082                           ConsArgs[NumConsArgs - 1]->getLocEnd());
   1083 
   1084     Diag(StartLoc, diag::err_new_array_init_args) << InitRange;
   1085     return ExprError();
   1086   }
   1087 
   1088   if (!AllocType->isDependentType() &&
   1089       !Expr::hasAnyTypeDependentArguments(ConsArgs, NumConsArgs)) {
   1090     // C++0x [expr.new]p15:
   1091     //   A new-expression that creates an object of type T initializes that
   1092     //   object as follows:
   1093     InitializationKind Kind
   1094     //     - If the new-initializer is omitted, the object is default-
   1095     //       initialized (8.5); if no initialization is performed,
   1096     //       the object has indeterminate value
   1097       = !Init? InitializationKind::CreateDefault(TypeRange.getBegin())
   1098     //     - Otherwise, the new-initializer is interpreted according to the
   1099     //       initialization rules of 8.5 for direct-initialization.
   1100              : InitializationKind::CreateDirect(TypeRange.getBegin(),
   1101                                                 ConstructorLParen,
   1102                                                 ConstructorRParen);
   1103 
   1104     InitializedEntity Entity
   1105       = InitializedEntity::InitializeNew(StartLoc, AllocType);
   1106     InitializationSequence InitSeq(*this, Entity, Kind, ConsArgs, NumConsArgs);
   1107     ExprResult FullInit = InitSeq.Perform(*this, Entity, Kind,
   1108                                                 move(ConstructorArgs));
   1109     if (FullInit.isInvalid())
   1110       return ExprError();
   1111 
   1112     // FullInit is our initializer; walk through it to determine if it's a
   1113     // constructor call, which CXXNewExpr handles directly.
   1114     if (Expr *FullInitExpr = (Expr *)FullInit.get()) {
   1115       if (CXXBindTemporaryExpr *Binder
   1116             = dyn_cast<CXXBindTemporaryExpr>(FullInitExpr))
   1117         FullInitExpr = Binder->getSubExpr();
   1118       if (CXXConstructExpr *Construct
   1119                     = dyn_cast<CXXConstructExpr>(FullInitExpr)) {
   1120         Constructor = Construct->getConstructor();
   1121         HadMultipleCandidates = Construct->hadMultipleCandidates();
   1122         for (CXXConstructExpr::arg_iterator A = Construct->arg_begin(),
   1123                                          AEnd = Construct->arg_end();
   1124              A != AEnd; ++A)
   1125           ConvertedConstructorArgs.push_back(*A);
   1126       } else {
   1127         // Take the converted initializer.
   1128         ConvertedConstructorArgs.push_back(FullInit.release());
   1129       }
   1130     } else {
   1131       // No initialization required.
   1132     }
   1133 
   1134     // Take the converted arguments and use them for the new expression.
   1135     NumConsArgs = ConvertedConstructorArgs.size();
   1136     ConsArgs = (Expr **)ConvertedConstructorArgs.take();
   1137   }
   1138 
   1139   // Mark the new and delete operators as referenced.
   1140   if (OperatorNew)
   1141     MarkDeclarationReferenced(StartLoc, OperatorNew);
   1142   if (OperatorDelete)
   1143     MarkDeclarationReferenced(StartLoc, OperatorDelete);
   1144 
   1145   // C++0x [expr.new]p17:
   1146   //   If the new expression creates an array of objects of class type,
   1147   //   access and ambiguity control are done for the destructor.
   1148   if (ArraySize && Constructor) {
   1149     if (CXXDestructorDecl *dtor = LookupDestructor(Constructor->getParent())) {
   1150       MarkDeclarationReferenced(StartLoc, dtor);
   1151       CheckDestructorAccess(StartLoc, dtor,
   1152                             PDiag(diag::err_access_dtor)
   1153                               << Context.getBaseElementType(AllocType));
   1154     }
   1155   }
   1156 
   1157   PlacementArgs.release();
   1158   ConstructorArgs.release();
   1159 
   1160   return Owned(new (Context) CXXNewExpr(Context, UseGlobal, OperatorNew,
   1161                                         PlaceArgs, NumPlaceArgs, TypeIdParens,
   1162                                         ArraySize, Constructor, Init,
   1163                                         ConsArgs, NumConsArgs,
   1164                                         HadMultipleCandidates,
   1165                                         OperatorDelete,
   1166                                         UsualArrayDeleteWantsSize,
   1167                                         ResultType, AllocTypeInfo,
   1168                                         StartLoc,
   1169                                         Init ? ConstructorRParen :
   1170                                                TypeRange.getEnd(),
   1171                                         ConstructorLParen, ConstructorRParen));
   1172 }
   1173 
   1174 /// CheckAllocatedType - Checks that a type is suitable as the allocated type
   1175 /// in a new-expression.
   1176 /// dimension off and stores the size expression in ArraySize.
   1177 bool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc,
   1178                               SourceRange R) {
   1179   // C++ 5.3.4p1: "[The] type shall be a complete object type, but not an
   1180   //   abstract class type or array thereof.
   1181   if (AllocType->isFunctionType())
   1182     return Diag(Loc, diag::err_bad_new_type)
   1183       << AllocType << 0 << R;
   1184   else if (AllocType->isReferenceType())
   1185     return Diag(Loc, diag::err_bad_new_type)
   1186       << AllocType << 1 << R;
   1187   else if (!AllocType->isDependentType() &&
   1188            RequireCompleteType(Loc, AllocType,
   1189                                PDiag(diag::err_new_incomplete_type)
   1190                                  << R))
   1191     return true;
   1192   else if (RequireNonAbstractType(Loc, AllocType,
   1193                                   diag::err_allocation_of_abstract_type))
   1194     return true;
   1195   else if (AllocType->isVariablyModifiedType())
   1196     return Diag(Loc, diag::err_variably_modified_new_type)
   1197              << AllocType;
   1198   else if (unsigned AddressSpace = AllocType.getAddressSpace())
   1199     return Diag(Loc, diag::err_address_space_qualified_new)
   1200       << AllocType.getUnqualifiedType() << AddressSpace;
   1201   else if (getLangOptions().ObjCAutoRefCount) {
   1202     if (const ArrayType *AT = Context.getAsArrayType(AllocType)) {
   1203       QualType BaseAllocType = Context.getBaseElementType(AT);
   1204       if (BaseAllocType.getObjCLifetime() == Qualifiers::OCL_None &&
   1205           BaseAllocType->isObjCLifetimeType())
   1206         return Diag(Loc, diag::err_arc_new_array_without_ownership)
   1207           << BaseAllocType;
   1208     }
   1209   }
   1210 
   1211   return false;
   1212 }
   1213 
   1214 /// \brief Determine whether the given function is a non-placement
   1215 /// deallocation function.
   1216 static bool isNonPlacementDeallocationFunction(FunctionDecl *FD) {
   1217   if (FD->isInvalidDecl())
   1218     return false;
   1219 
   1220   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FD))
   1221     return Method->isUsualDeallocationFunction();
   1222 
   1223   return ((FD->getOverloadedOperator() == OO_Delete ||
   1224            FD->getOverloadedOperator() == OO_Array_Delete) &&
   1225           FD->getNumParams() == 1);
   1226 }
   1227 
   1228 /// FindAllocationFunctions - Finds the overloads of operator new and delete
   1229 /// that are appropriate for the allocation.
   1230 bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
   1231                                    bool UseGlobal, QualType AllocType,
   1232                                    bool IsArray, Expr **PlaceArgs,
   1233                                    unsigned NumPlaceArgs,
   1234                                    FunctionDecl *&OperatorNew,
   1235                                    FunctionDecl *&OperatorDelete) {
   1236   // --- Choosing an allocation function ---
   1237   // C++ 5.3.4p8 - 14 & 18
   1238   // 1) If UseGlobal is true, only look in the global scope. Else, also look
   1239   //   in the scope of the allocated class.
   1240   // 2) If an array size is given, look for operator new[], else look for
   1241   //   operator new.
   1242   // 3) The first argument is always size_t. Append the arguments from the
   1243   //   placement form.
   1244 
   1245   SmallVector<Expr*, 8> AllocArgs(1 + NumPlaceArgs);
   1246   // We don't care about the actual value of this argument.
   1247   // FIXME: Should the Sema create the expression and embed it in the syntax
   1248   // tree? Or should the consumer just recalculate the value?
   1249   IntegerLiteral Size(Context, llvm::APInt::getNullValue(
   1250                       Context.getTargetInfo().getPointerWidth(0)),
   1251                       Context.getSizeType(),
   1252                       SourceLocation());
   1253   AllocArgs[0] = &Size;
   1254   std::copy(PlaceArgs, PlaceArgs + NumPlaceArgs, AllocArgs.begin() + 1);
   1255 
   1256   // C++ [expr.new]p8:
   1257   //   If the allocated type is a non-array type, the allocation
   1258   //   function's name is operator new and the deallocation function's
   1259   //   name is operator delete. If the allocated type is an array
   1260   //   type, the allocation function's name is operator new[] and the
   1261   //   deallocation function's name is operator delete[].
   1262   DeclarationName NewName = Context.DeclarationNames.getCXXOperatorName(
   1263                                         IsArray ? OO_Array_New : OO_New);
   1264   DeclarationName DeleteName = Context.DeclarationNames.getCXXOperatorName(
   1265                                         IsArray ? OO_Array_Delete : OO_Delete);
   1266 
   1267   QualType AllocElemType = Context.getBaseElementType(AllocType);
   1268 
   1269   if (AllocElemType->isRecordType() && !UseGlobal) {
   1270     CXXRecordDecl *Record
   1271       = cast<CXXRecordDecl>(AllocElemType->getAs<RecordType>()->getDecl());
   1272     if (FindAllocationOverload(StartLoc, Range, NewName, &AllocArgs[0],
   1273                           AllocArgs.size(), Record, /*AllowMissing=*/true,
   1274                           OperatorNew))
   1275       return true;
   1276   }
   1277   if (!OperatorNew) {
   1278     // Didn't find a member overload. Look for a global one.
   1279     DeclareGlobalNewDelete();
   1280     DeclContext *TUDecl = Context.getTranslationUnitDecl();
   1281     if (FindAllocationOverload(StartLoc, Range, NewName, &AllocArgs[0],
   1282                           AllocArgs.size(), TUDecl, /*AllowMissing=*/false,
   1283                           OperatorNew))
   1284       return true;
   1285   }
   1286 
   1287   // We don't need an operator delete if we're running under
   1288   // -fno-exceptions.
   1289   if (!getLangOptions().Exceptions) {
   1290     OperatorDelete = 0;
   1291     return false;
   1292   }
   1293 
   1294   // FindAllocationOverload can change the passed in arguments, so we need to
   1295   // copy them back.
   1296   if (NumPlaceArgs > 0)
   1297     std::copy(&AllocArgs[1], AllocArgs.end(), PlaceArgs);
   1298 
   1299   // C++ [expr.new]p19:
   1300   //
   1301   //   If the new-expression begins with a unary :: operator, the
   1302   //   deallocation function's name is looked up in the global
   1303   //   scope. Otherwise, if the allocated type is a class type T or an
   1304   //   array thereof, the deallocation function's name is looked up in
   1305   //   the scope of T. If this lookup fails to find the name, or if
   1306   //   the allocated type is not a class type or array thereof, the
   1307   //   deallocation function's name is looked up in the global scope.
   1308   LookupResult FoundDelete(*this, DeleteName, StartLoc, LookupOrdinaryName);
   1309   if (AllocElemType->isRecordType() && !UseGlobal) {
   1310     CXXRecordDecl *RD
   1311       = cast<CXXRecordDecl>(AllocElemType->getAs<RecordType>()->getDecl());
   1312     LookupQualifiedName(FoundDelete, RD);
   1313   }
   1314   if (FoundDelete.isAmbiguous())
   1315     return true; // FIXME: clean up expressions?
   1316 
   1317   if (FoundDelete.empty()) {
   1318     DeclareGlobalNewDelete();
   1319     LookupQualifiedName(FoundDelete, Context.getTranslationUnitDecl());
   1320   }
   1321 
   1322   FoundDelete.suppressDiagnostics();
   1323 
   1324   SmallVector<std::pair<DeclAccessPair,FunctionDecl*>, 2> Matches;
   1325 
   1326   // Whether we're looking for a placement operator delete is dictated
   1327   // by whether we selected a placement operator new, not by whether
   1328   // we had explicit placement arguments.  This matters for things like
   1329   //   struct A { void *operator new(size_t, int = 0); ... };
   1330   //   A *a = new A()
   1331   bool isPlacementNew = (NumPlaceArgs > 0 || OperatorNew->param_size() != 1);
   1332 
   1333   if (isPlacementNew) {
   1334     // C++ [expr.new]p20:
   1335     //   A declaration of a placement deallocation function matches the
   1336     //   declaration of a placement allocation function if it has the
   1337     //   same number of parameters and, after parameter transformations
   1338     //   (8.3.5), all parameter types except the first are
   1339     //   identical. [...]
   1340     //
   1341     // To perform this comparison, we compute the function type that
   1342     // the deallocation function should have, and use that type both
   1343     // for template argument deduction and for comparison purposes.
   1344     //
   1345     // FIXME: this comparison should ignore CC and the like.
   1346     QualType ExpectedFunctionType;
   1347     {
   1348       const FunctionProtoType *Proto
   1349         = OperatorNew->getType()->getAs<FunctionProtoType>();
   1350 
   1351       SmallVector<QualType, 4> ArgTypes;
   1352       ArgTypes.push_back(Context.VoidPtrTy);
   1353       for (unsigned I = 1, N = Proto->getNumArgs(); I < N; ++I)
   1354         ArgTypes.push_back(Proto->getArgType(I));
   1355 
   1356       FunctionProtoType::ExtProtoInfo EPI;
   1357       EPI.Variadic = Proto->isVariadic();
   1358 
   1359       ExpectedFunctionType
   1360         = Context.getFunctionType(Context.VoidTy, ArgTypes.data(),
   1361                                   ArgTypes.size(), EPI);
   1362     }
   1363 
   1364     for (LookupResult::iterator D = FoundDelete.begin(),
   1365                              DEnd = FoundDelete.end();
   1366          D != DEnd; ++D) {
   1367       FunctionDecl *Fn = 0;
   1368       if (FunctionTemplateDecl *FnTmpl
   1369             = dyn_cast<FunctionTemplateDecl>((*D)->getUnderlyingDecl())) {
   1370         // Perform template argument deduction to try to match the
   1371         // expected function type.
   1372         TemplateDeductionInfo Info(Context, StartLoc);
   1373         if (DeduceTemplateArguments(FnTmpl, 0, ExpectedFunctionType, Fn, Info))
   1374           continue;
   1375       } else
   1376         Fn = cast<FunctionDecl>((*D)->getUnderlyingDecl());
   1377 
   1378       if (Context.hasSameType(Fn->getType(), ExpectedFunctionType))
   1379         Matches.push_back(std::make_pair(D.getPair(), Fn));
   1380     }
   1381   } else {
   1382     // C++ [expr.new]p20:
   1383     //   [...] Any non-placement deallocation function matches a
   1384     //   non-placement allocation function. [...]
   1385     for (LookupResult::iterator D = FoundDelete.begin(),
   1386                              DEnd = FoundDelete.end();
   1387          D != DEnd; ++D) {
   1388       if (FunctionDecl *Fn = dyn_cast<FunctionDecl>((*D)->getUnderlyingDecl()))
   1389         if (isNonPlacementDeallocationFunction(Fn))
   1390           Matches.push_back(std::make_pair(D.getPair(), Fn));
   1391     }
   1392   }
   1393 
   1394   // C++ [expr.new]p20:
   1395   //   [...] If the lookup finds a single matching deallocation
   1396   //   function, that function will be called; otherwise, no
   1397   //   deallocation function will be called.
   1398   if (Matches.size() == 1) {
   1399     OperatorDelete = Matches[0].second;
   1400 
   1401     // C++0x [expr.new]p20:
   1402     //   If the lookup finds the two-parameter form of a usual
   1403     //   deallocation function (3.7.4.2) and that function, considered
   1404     //   as a placement deallocation function, would have been
   1405     //   selected as a match for the allocation function, the program
   1406     //   is ill-formed.
   1407     if (NumPlaceArgs && getLangOptions().CPlusPlus0x &&
   1408         isNonPlacementDeallocationFunction(OperatorDelete)) {
   1409       Diag(StartLoc, diag::err_placement_new_non_placement_delete)
   1410         << SourceRange(PlaceArgs[0]->getLocStart(),
   1411                        PlaceArgs[NumPlaceArgs - 1]->getLocEnd());
   1412       Diag(OperatorDelete->getLocation(), diag::note_previous_decl)
   1413         << DeleteName;
   1414     } else {
   1415       CheckAllocationAccess(StartLoc, Range, FoundDelete.getNamingClass(),
   1416                             Matches[0].first);
   1417     }
   1418   }
   1419 
   1420   return false;
   1421 }
   1422 
   1423 /// FindAllocationOverload - Find an fitting overload for the allocation
   1424 /// function in the specified scope.
   1425 bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range,
   1426                                   DeclarationName Name, Expr** Args,
   1427                                   unsigned NumArgs, DeclContext *Ctx,
   1428                                   bool AllowMissing, FunctionDecl *&Operator,
   1429                                   bool Diagnose) {
   1430   LookupResult R(*this, Name, StartLoc, LookupOrdinaryName);
   1431   LookupQualifiedName(R, Ctx);
   1432   if (R.empty()) {
   1433     if (AllowMissing || !Diagnose)
   1434       return false;
   1435     return Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
   1436       << Name << Range;
   1437   }
   1438 
   1439   if (R.isAmbiguous())
   1440     return true;
   1441 
   1442   R.suppressDiagnostics();
   1443 
   1444   OverloadCandidateSet Candidates(StartLoc);
   1445   for (LookupResult::iterator Alloc = R.begin(), AllocEnd = R.end();
   1446        Alloc != AllocEnd; ++Alloc) {
   1447     // Even member operator new/delete are implicitly treated as
   1448     // static, so don't use AddMemberCandidate.
   1449     NamedDecl *D = (*Alloc)->getUnderlyingDecl();
   1450 
   1451     if (FunctionTemplateDecl *FnTemplate = dyn_cast<FunctionTemplateDecl>(D)) {
   1452       AddTemplateOverloadCandidate(FnTemplate, Alloc.getPair(),
   1453                                    /*ExplicitTemplateArgs=*/0, Args, NumArgs,
   1454                                    Candidates,
   1455                                    /*SuppressUserConversions=*/false);
   1456       continue;
   1457     }
   1458 
   1459     FunctionDecl *Fn = cast<FunctionDecl>(D);
   1460     AddOverloadCandidate(Fn, Alloc.getPair(), Args, NumArgs, Candidates,
   1461                          /*SuppressUserConversions=*/false);
   1462   }
   1463 
   1464   // Do the resolution.
   1465   OverloadCandidateSet::iterator Best;
   1466   switch (Candidates.BestViableFunction(*this, StartLoc, Best)) {
   1467   case OR_Success: {
   1468     // Got one!
   1469     FunctionDecl *FnDecl = Best->Function;
   1470     MarkDeclarationReferenced(StartLoc, FnDecl);
   1471     // The first argument is size_t, and the first parameter must be size_t,
   1472     // too. This is checked on declaration and can be assumed. (It can't be
   1473     // asserted on, though, since invalid decls are left in there.)
   1474     // Watch out for variadic allocator function.
   1475     unsigned NumArgsInFnDecl = FnDecl->getNumParams();
   1476     for (unsigned i = 0; (i < NumArgs && i < NumArgsInFnDecl); ++i) {
   1477       InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
   1478                                                        FnDecl->getParamDecl(i));
   1479 
   1480       if (!Diagnose && !CanPerformCopyInitialization(Entity, Owned(Args[i])))
   1481         return true;
   1482 
   1483       ExprResult Result
   1484         = PerformCopyInitialization(Entity, SourceLocation(), Owned(Args[i]));
   1485       if (Result.isInvalid())
   1486         return true;
   1487 
   1488       Args[i] = Result.takeAs<Expr>();
   1489     }
   1490     Operator = FnDecl;
   1491     CheckAllocationAccess(StartLoc, Range, R.getNamingClass(), Best->FoundDecl,
   1492                           Diagnose);
   1493     return false;
   1494   }
   1495 
   1496   case OR_No_Viable_Function:
   1497     if (Diagnose) {
   1498       Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
   1499         << Name << Range;
   1500       Candidates.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
   1501     }
   1502     return true;
   1503 
   1504   case OR_Ambiguous:
   1505     if (Diagnose) {
   1506       Diag(StartLoc, diag::err_ovl_ambiguous_call)
   1507         << Name << Range;
   1508       Candidates.NoteCandidates(*this, OCD_ViableCandidates, Args, NumArgs);
   1509     }
   1510     return true;
   1511 
   1512   case OR_Deleted: {
   1513     if (Diagnose) {
   1514       Diag(StartLoc, diag::err_ovl_deleted_call)
   1515         << Best->Function->isDeleted()
   1516         << Name
   1517         << getDeletedOrUnavailableSuffix(Best->Function)
   1518         << Range;
   1519       Candidates.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
   1520     }
   1521     return true;
   1522   }
   1523   }
   1524   llvm_unreachable("Unreachable, bad result from BestViableFunction");
   1525 }
   1526 
   1527 
   1528 /// DeclareGlobalNewDelete - Declare the global forms of operator new and
   1529 /// delete. These are:
   1530 /// @code
   1531 ///   // C++03:
   1532 ///   void* operator new(std::size_t) throw(std::bad_alloc);
   1533 ///   void* operator new[](std::size_t) throw(std::bad_alloc);
   1534 ///   void operator delete(void *) throw();
   1535 ///   void operator delete[](void *) throw();
   1536 ///   // C++0x:
   1537 ///   void* operator new(std::size_t);
   1538 ///   void* operator new[](std::size_t);
   1539 ///   void operator delete(void *);
   1540 ///   void operator delete[](void *);
   1541 /// @endcode
   1542 /// C++0x operator delete is implicitly noexcept.
   1543 /// Note that the placement and nothrow forms of new are *not* implicitly
   1544 /// declared. Their use requires including \<new\>.
   1545 void Sema::DeclareGlobalNewDelete() {
   1546   if (GlobalNewDeleteDeclared)
   1547     return;
   1548 
   1549   // C++ [basic.std.dynamic]p2:
   1550   //   [...] The following allocation and deallocation functions (18.4) are
   1551   //   implicitly declared in global scope in each translation unit of a
   1552   //   program
   1553   //
   1554   //     C++03:
   1555   //     void* operator new(std::size_t) throw(std::bad_alloc);
   1556   //     void* operator new[](std::size_t) throw(std::bad_alloc);
   1557   //     void  operator delete(void*) throw();
   1558   //     void  operator delete[](void*) throw();
   1559   //     C++0x:
   1560   //     void* operator new(std::size_t);
   1561   //     void* operator new[](std::size_t);
   1562   //     void  operator delete(void*);
   1563   //     void  operator delete[](void*);
   1564   //
   1565   //   These implicit declarations introduce only the function names operator
   1566   //   new, operator new[], operator delete, operator delete[].
   1567   //
   1568   // Here, we need to refer to std::bad_alloc, so we will implicitly declare
   1569   // "std" or "bad_alloc" as necessary to form the exception specification.
   1570   // However, we do not make these implicit declarations visible to name
   1571   // lookup.
   1572   // Note that the C++0x versions of operator delete are deallocation functions,
   1573   // and thus are implicitly noexcept.
   1574   if (!StdBadAlloc && !getLangOptions().CPlusPlus0x) {
   1575     // The "std::bad_alloc" class has not yet been declared, so build it
   1576     // implicitly.
   1577     StdBadAlloc = CXXRecordDecl::Create(Context, TTK_Class,
   1578                                         getOrCreateStdNamespace(),
   1579                                         SourceLocation(), SourceLocation(),
   1580                                       &PP.getIdentifierTable().get("bad_alloc"),
   1581                                         0);
   1582     getStdBadAlloc()->setImplicit(true);
   1583   }
   1584 
   1585   GlobalNewDeleteDeclared = true;
   1586 
   1587   QualType VoidPtr = Context.getPointerType(Context.VoidTy);
   1588   QualType SizeT = Context.getSizeType();
   1589   bool AssumeSaneOperatorNew = getLangOptions().AssumeSaneOperatorNew;
   1590 
   1591   DeclareGlobalAllocationFunction(
   1592       Context.DeclarationNames.getCXXOperatorName(OO_New),
   1593       VoidPtr, SizeT, AssumeSaneOperatorNew);
   1594   DeclareGlobalAllocationFunction(
   1595       Context.DeclarationNames.getCXXOperatorName(OO_Array_New),
   1596       VoidPtr, SizeT, AssumeSaneOperatorNew);
   1597   DeclareGlobalAllocationFunction(
   1598       Context.DeclarationNames.getCXXOperatorName(OO_Delete),
   1599       Context.VoidTy, VoidPtr);
   1600   DeclareGlobalAllocationFunction(
   1601       Context.DeclarationNames.getCXXOperatorName(OO_Array_Delete),
   1602       Context.VoidTy, VoidPtr);
   1603 }
   1604 
   1605 /// DeclareGlobalAllocationFunction - Declares a single implicit global
   1606 /// allocation function if it doesn't already exist.
   1607 void Sema::DeclareGlobalAllocationFunction(DeclarationName Name,
   1608                                            QualType Return, QualType Argument,
   1609                                            bool AddMallocAttr) {
   1610   DeclContext *GlobalCtx = Context.getTranslationUnitDecl();
   1611 
   1612   // Check if this function is already declared.
   1613   {
   1614     DeclContext::lookup_iterator Alloc, AllocEnd;
   1615     for (llvm::tie(Alloc, AllocEnd) = GlobalCtx->lookup(Name);
   1616          Alloc != AllocEnd; ++Alloc) {
   1617       // Only look at non-template functions, as it is the predefined,
   1618       // non-templated allocation function we are trying to declare here.
   1619       if (FunctionDecl *Func = dyn_cast<FunctionDecl>(*Alloc)) {
   1620         QualType InitialParamType =
   1621           Context.getCanonicalType(
   1622             Func->getParamDecl(0)->getType().getUnqualifiedType());
   1623         // FIXME: Do we need to check for default arguments here?
   1624         if (Func->getNumParams() == 1 && InitialParamType == Argument) {
   1625           if(AddMallocAttr && !Func->hasAttr<MallocAttr>())
   1626             Func->addAttr(::new (Context) MallocAttr(SourceLocation(), Context));
   1627           return;
   1628         }
   1629       }
   1630     }
   1631   }
   1632 
   1633   QualType BadAllocType;
   1634   bool HasBadAllocExceptionSpec
   1635     = (Name.getCXXOverloadedOperator() == OO_New ||
   1636        Name.getCXXOverloadedOperator() == OO_Array_New);
   1637   if (HasBadAllocExceptionSpec && !getLangOptions().CPlusPlus0x) {
   1638     assert(StdBadAlloc && "Must have std::bad_alloc declared");
   1639     BadAllocType = Context.getTypeDeclType(getStdBadAlloc());
   1640   }
   1641 
   1642   FunctionProtoType::ExtProtoInfo EPI;
   1643   if (HasBadAllocExceptionSpec) {
   1644     if (!getLangOptions().CPlusPlus0x) {
   1645       EPI.ExceptionSpecType = EST_Dynamic;
   1646       EPI.NumExceptions = 1;
   1647       EPI.Exceptions = &BadAllocType;
   1648     }
   1649   } else {
   1650     EPI.ExceptionSpecType = getLangOptions().CPlusPlus0x ?
   1651                                 EST_BasicNoexcept : EST_DynamicNone;
   1652   }
   1653 
   1654   QualType FnType = Context.getFunctionType(Return, &Argument, 1, EPI);
   1655   FunctionDecl *Alloc =
   1656     FunctionDecl::Create(Context, GlobalCtx, SourceLocation(),
   1657                          SourceLocation(), Name,
   1658                          FnType, /*TInfo=*/0, SC_None,
   1659                          SC_None, false, true);
   1660   Alloc->setImplicit();
   1661 
   1662   if (AddMallocAttr)
   1663     Alloc->addAttr(::new (Context) MallocAttr(SourceLocation(), Context));
   1664 
   1665   ParmVarDecl *Param = ParmVarDecl::Create(Context, Alloc, SourceLocation(),
   1666                                            SourceLocation(), 0,
   1667                                            Argument, /*TInfo=*/0,
   1668                                            SC_None, SC_None, 0);
   1669   Alloc->setParams(Param);
   1670 
   1671   // FIXME: Also add this declaration to the IdentifierResolver, but
   1672   // make sure it is at the end of the chain to coincide with the
   1673   // global scope.
   1674   Context.getTranslationUnitDecl()->addDecl(Alloc);
   1675 }
   1676 
   1677 bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD,
   1678                                     DeclarationName Name,
   1679                                     FunctionDecl* &Operator, bool Diagnose) {
   1680   LookupResult Found(*this, Name, StartLoc, LookupOrdinaryName);
   1681   // Try to find operator delete/operator delete[] in class scope.
   1682   LookupQualifiedName(Found, RD);
   1683 
   1684   if (Found.isAmbiguous())
   1685     return true;
   1686 
   1687   Found.suppressDiagnostics();
   1688 
   1689   SmallVector<DeclAccessPair,4> Matches;
   1690   for (LookupResult::iterator F = Found.begin(), FEnd = Found.end();
   1691        F != FEnd; ++F) {
   1692     NamedDecl *ND = (*F)->getUnderlyingDecl();
   1693 
   1694     // Ignore template operator delete members from the check for a usual
   1695     // deallocation function.
   1696     if (isa<FunctionTemplateDecl>(ND))
   1697       continue;
   1698 
   1699     if (cast<CXXMethodDecl>(ND)->isUsualDeallocationFunction())
   1700       Matches.push_back(F.getPair());
   1701   }
   1702 
   1703   // There's exactly one suitable operator;  pick it.
   1704   if (Matches.size() == 1) {
   1705     Operator = cast<CXXMethodDecl>(Matches[0]->getUnderlyingDecl());
   1706 
   1707     if (Operator->isDeleted()) {
   1708       if (Diagnose) {
   1709         Diag(StartLoc, diag::err_deleted_function_use);
   1710         Diag(Operator->getLocation(), diag::note_unavailable_here) << true;
   1711       }
   1712       return true;
   1713     }
   1714 
   1715     CheckAllocationAccess(StartLoc, SourceRange(), Found.getNamingClass(),
   1716                           Matches[0], Diagnose);
   1717     return false;
   1718 
   1719   // We found multiple suitable operators;  complain about the ambiguity.
   1720   } else if (!Matches.empty()) {
   1721     if (Diagnose) {
   1722       Diag(StartLoc, diag::err_ambiguous_suitable_delete_member_function_found)
   1723         << Name << RD;
   1724 
   1725       for (SmallVectorImpl<DeclAccessPair>::iterator
   1726              F = Matches.begin(), FEnd = Matches.end(); F != FEnd; ++F)
   1727         Diag((*F)->getUnderlyingDecl()->getLocation(),
   1728              diag::note_member_declared_here) << Name;
   1729     }
   1730     return true;
   1731   }
   1732 
   1733   // We did find operator delete/operator delete[] declarations, but
   1734   // none of them were suitable.
   1735   if (!Found.empty()) {
   1736     if (Diagnose) {
   1737       Diag(StartLoc, diag::err_no_suitable_delete_member_function_found)
   1738         << Name << RD;
   1739 
   1740       for (LookupResult::iterator F = Found.begin(), FEnd = Found.end();
   1741            F != FEnd; ++F)
   1742         Diag((*F)->getUnderlyingDecl()->getLocation(),
   1743              diag::note_member_declared_here) << Name;
   1744     }
   1745     return true;
   1746   }
   1747 
   1748   // Look for a global declaration.
   1749   DeclareGlobalNewDelete();
   1750   DeclContext *TUDecl = Context.getTranslationUnitDecl();
   1751 
   1752   CXXNullPtrLiteralExpr Null(Context.VoidPtrTy, SourceLocation());
   1753   Expr* DeallocArgs[1];
   1754   DeallocArgs[0] = &Null;
   1755   if (FindAllocationOverload(StartLoc, SourceRange(), Name,
   1756                              DeallocArgs, 1, TUDecl, !Diagnose,
   1757                              Operator, Diagnose))
   1758     return true;
   1759 
   1760   assert(Operator && "Did not find a deallocation function!");
   1761   return false;
   1762 }
   1763 
   1764 /// ActOnCXXDelete - Parsed a C++ 'delete' expression (C++ 5.3.5), as in:
   1765 /// @code ::delete ptr; @endcode
   1766 /// or
   1767 /// @code delete [] ptr; @endcode
   1768 ExprResult
   1769 Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal,
   1770                      bool ArrayForm, Expr *ExE) {
   1771   // C++ [expr.delete]p1:
   1772   //   The operand shall have a pointer type, or a class type having a single
   1773   //   conversion function to a pointer type. The result has type void.
   1774   //
   1775   // DR599 amends "pointer type" to "pointer to object type" in both cases.
   1776 
   1777   ExprResult Ex = Owned(ExE);
   1778   FunctionDecl *OperatorDelete = 0;
   1779   bool ArrayFormAsWritten = ArrayForm;
   1780   bool UsualArrayDeleteWantsSize = false;
   1781 
   1782   if (!Ex.get()->isTypeDependent()) {
   1783     QualType Type = Ex.get()->getType();
   1784 
   1785     if (const RecordType *Record = Type->getAs<RecordType>()) {
   1786       if (RequireCompleteType(StartLoc, Type,
   1787                               PDiag(diag::err_delete_incomplete_class_type)))
   1788         return ExprError();
   1789 
   1790       SmallVector<CXXConversionDecl*, 4> ObjectPtrConversions;
   1791 
   1792       CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
   1793       const UnresolvedSetImpl *Conversions = RD->getVisibleConversionFunctions();
   1794       for (UnresolvedSetImpl::iterator I = Conversions->begin(),
   1795              E = Conversions->end(); I != E; ++I) {
   1796         NamedDecl *D = I.getDecl();
   1797         if (isa<UsingShadowDecl>(D))
   1798           D = cast<UsingShadowDecl>(D)->getTargetDecl();
   1799 
   1800         // Skip over templated conversion functions; they aren't considered.
   1801         if (isa<FunctionTemplateDecl>(D))
   1802           continue;
   1803 
   1804         CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
   1805 
   1806         QualType ConvType = Conv->getConversionType().getNonReferenceType();
   1807         if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
   1808           if (ConvPtrType->getPointeeType()->isIncompleteOrObjectType())
   1809             ObjectPtrConversions.push_back(Conv);
   1810       }
   1811       if (ObjectPtrConversions.size() == 1) {
   1812         // We have a single conversion to a pointer-to-object type. Perform
   1813         // that conversion.
   1814         // TODO: don't redo the conversion calculation.
   1815         ExprResult Res =
   1816           PerformImplicitConversion(Ex.get(),
   1817                             ObjectPtrConversions.front()->getConversionType(),
   1818                                     AA_Converting);
   1819         if (Res.isUsable()) {
   1820           Ex = move(Res);
   1821           Type = Ex.get()->getType();
   1822         }
   1823       }
   1824       else if (ObjectPtrConversions.size() > 1) {
   1825         Diag(StartLoc, diag::err_ambiguous_delete_operand)
   1826               << Type << Ex.get()->getSourceRange();
   1827         for (unsigned i= 0; i < ObjectPtrConversions.size(); i++)
   1828           NoteOverloadCandidate(ObjectPtrConversions[i]);
   1829         return ExprError();
   1830       }
   1831     }
   1832 
   1833     if (!Type->isPointerType())
   1834       return ExprError(Diag(StartLoc, diag::err_delete_operand)
   1835         << Type << Ex.get()->getSourceRange());
   1836 
   1837     QualType Pointee = Type->getAs<PointerType>()->getPointeeType();
   1838     QualType PointeeElem = Context.getBaseElementType(Pointee);
   1839 
   1840     if (unsigned AddressSpace = Pointee.getAddressSpace())
   1841       return Diag(Ex.get()->getLocStart(),
   1842                   diag::err_address_space_qualified_delete)
   1843                << Pointee.getUnqualifiedType() << AddressSpace;
   1844 
   1845     CXXRecordDecl *PointeeRD = 0;
   1846     if (Pointee->isVoidType() && !isSFINAEContext()) {
   1847       // The C++ standard bans deleting a pointer to a non-object type, which
   1848       // effectively bans deletion of "void*". However, most compilers support
   1849       // this, so we treat it as a warning unless we're in a SFINAE context.
   1850       Diag(StartLoc, diag::ext_delete_void_ptr_operand)
   1851         << Type << Ex.get()->getSourceRange();
   1852     } else if (Pointee->isFunctionType() || Pointee->isVoidType()) {
   1853       return ExprError(Diag(StartLoc, diag::err_delete_operand)
   1854         << Type << Ex.get()->getSourceRange());
   1855     } else if (!Pointee->isDependentType()) {
   1856       if (!RequireCompleteType(StartLoc, Pointee,
   1857                                PDiag(diag::warn_delete_incomplete)
   1858                                  << Ex.get()->getSourceRange())) {
   1859         if (const RecordType *RT = PointeeElem->getAs<RecordType>())
   1860           PointeeRD = cast<CXXRecordDecl>(RT->getDecl());
   1861       }
   1862     }
   1863 
   1864     // C++ [expr.delete]p2:
   1865     //   [Note: a pointer to a const type can be the operand of a
   1866     //   delete-expression; it is not necessary to cast away the constness
   1867     //   (5.2.11) of the pointer expression before it is used as the operand
   1868     //   of the delete-expression. ]
   1869     if (!Context.hasSameType(Ex.get()->getType(), Context.VoidPtrTy))
   1870       Ex = Owned(ImplicitCastExpr::Create(Context, Context.VoidPtrTy, CK_NoOp,
   1871                                           Ex.take(), 0, VK_RValue));
   1872 
   1873     if (Pointee->isArrayType() && !ArrayForm) {
   1874       Diag(StartLoc, diag::warn_delete_array_type)
   1875           << Type << Ex.get()->getSourceRange()
   1876           << FixItHint::CreateInsertion(PP.getLocForEndOfToken(StartLoc), "[]");
   1877       ArrayForm = true;
   1878     }
   1879 
   1880     DeclarationName DeleteName = Context.DeclarationNames.getCXXOperatorName(
   1881                                       ArrayForm ? OO_Array_Delete : OO_Delete);
   1882 
   1883     if (PointeeRD) {
   1884       if (!UseGlobal &&
   1885           FindDeallocationFunction(StartLoc, PointeeRD, DeleteName,
   1886                                    OperatorDelete))
   1887         return ExprError();
   1888 
   1889       // If we're allocating an array of records, check whether the
   1890       // usual operator delete[] has a size_t parameter.
   1891       if (ArrayForm) {
   1892         // If the user specifically asked to use the global allocator,
   1893         // we'll need to do the lookup into the class.
   1894         if (UseGlobal)
   1895           UsualArrayDeleteWantsSize =
   1896             doesUsualArrayDeleteWantSize(*this, StartLoc, PointeeElem);
   1897 
   1898         // Otherwise, the usual operator delete[] should be the
   1899         // function we just found.
   1900         else if (isa<CXXMethodDecl>(OperatorDelete))
   1901           UsualArrayDeleteWantsSize = (OperatorDelete->getNumParams() == 2);
   1902       }
   1903 
   1904       if (!PointeeRD->hasTrivialDestructor())
   1905         if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) {
   1906           MarkDeclarationReferenced(StartLoc,
   1907                                     const_cast<CXXDestructorDecl*>(Dtor));
   1908           DiagnoseUseOfDecl(Dtor, StartLoc);
   1909         }
   1910 
   1911       // C++ [expr.delete]p3:
   1912       //   In the first alternative (delete object), if the static type of the
   1913       //   object to be deleted is different from its dynamic type, the static
   1914       //   type shall be a base class of the dynamic type of the object to be
   1915       //   deleted and the static type shall have a virtual destructor or the
   1916       //   behavior is undefined.
   1917       //
   1918       // Note: a final class cannot be derived from, no issue there
   1919       if (PointeeRD->isPolymorphic() && !PointeeRD->hasAttr<FinalAttr>()) {
   1920         CXXDestructorDecl *dtor = PointeeRD->getDestructor();
   1921         if (dtor && !dtor->isVirtual()) {
   1922           if (PointeeRD->isAbstract()) {
   1923             // If the class is abstract, we warn by default, because we're
   1924             // sure the code has undefined behavior.
   1925             Diag(StartLoc, diag::warn_delete_abstract_non_virtual_dtor)
   1926                 << PointeeElem;
   1927           } else if (!ArrayForm) {
   1928             // Otherwise, if this is not an array delete, it's a bit suspect,
   1929             // but not necessarily wrong.
   1930             Diag(StartLoc, diag::warn_delete_non_virtual_dtor) << PointeeElem;
   1931           }
   1932         }
   1933       }
   1934 
   1935     } else if (getLangOptions().ObjCAutoRefCount &&
   1936                PointeeElem->isObjCLifetimeType() &&
   1937                (PointeeElem.getObjCLifetime() == Qualifiers::OCL_Strong ||
   1938                 PointeeElem.getObjCLifetime() == Qualifiers::OCL_Weak) &&
   1939                ArrayForm) {
   1940       Diag(StartLoc, diag::warn_err_new_delete_object_array)
   1941         << 1 << PointeeElem;
   1942     }
   1943 
   1944     if (!OperatorDelete) {
   1945       // Look for a global declaration.
   1946       DeclareGlobalNewDelete();
   1947       DeclContext *TUDecl = Context.getTranslationUnitDecl();
   1948       Expr *Arg = Ex.get();
   1949       if (FindAllocationOverload(StartLoc, SourceRange(), DeleteName,
   1950                                  &Arg, 1, TUDecl, /*AllowMissing=*/false,
   1951                                  OperatorDelete))
   1952         return ExprError();
   1953     }
   1954 
   1955     MarkDeclarationReferenced(StartLoc, OperatorDelete);
   1956 
   1957     // Check access and ambiguity of operator delete and destructor.
   1958     if (PointeeRD) {
   1959       if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) {
   1960           CheckDestructorAccess(Ex.get()->getExprLoc(), Dtor,
   1961                       PDiag(diag::err_access_dtor) << PointeeElem);
   1962       }
   1963     }
   1964 
   1965   }
   1966 
   1967   return Owned(new (Context) CXXDeleteExpr(Context.VoidTy, UseGlobal, ArrayForm,
   1968                                            ArrayFormAsWritten,
   1969                                            UsualArrayDeleteWantsSize,
   1970                                            OperatorDelete, Ex.take(), StartLoc));
   1971 }
   1972 
   1973 /// \brief Check the use of the given variable as a C++ condition in an if,
   1974 /// while, do-while, or switch statement.
   1975 ExprResult Sema::CheckConditionVariable(VarDecl *ConditionVar,
   1976                                         SourceLocation StmtLoc,
   1977                                         bool ConvertToBoolean) {
   1978   QualType T = ConditionVar->getType();
   1979 
   1980   // C++ [stmt.select]p2:
   1981   //   The declarator shall not specify a function or an array.
   1982   if (T->isFunctionType())
   1983     return ExprError(Diag(ConditionVar->getLocation(),
   1984                           diag::err_invalid_use_of_function_type)
   1985                        << ConditionVar->getSourceRange());
   1986   else if (T->isArrayType())
   1987     return ExprError(Diag(ConditionVar->getLocation(),
   1988                           diag::err_invalid_use_of_array_type)
   1989                      << ConditionVar->getSourceRange());
   1990 
   1991   ExprResult Condition =
   1992     Owned(DeclRefExpr::Create(Context, NestedNameSpecifierLoc(),
   1993                                         ConditionVar,
   1994                                         ConditionVar->getLocation(),
   1995                             ConditionVar->getType().getNonReferenceType(),
   1996                               VK_LValue));
   1997   if (ConvertToBoolean) {
   1998     Condition = CheckBooleanCondition(Condition.take(), StmtLoc);
   1999     if (Condition.isInvalid())
   2000       return ExprError();
   2001   }
   2002 
   2003   return move(Condition);
   2004 }
   2005 
   2006 /// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid.
   2007 ExprResult Sema::CheckCXXBooleanCondition(Expr *CondExpr) {
   2008   // C++ 6.4p4:
   2009   // The value of a condition that is an initialized declaration in a statement
   2010   // other than a switch statement is the value of the declared variable
   2011   // implicitly converted to type bool. If that conversion is ill-formed, the
   2012   // program is ill-formed.
   2013   // The value of a condition that is an expression is the value of the
   2014   // expression, implicitly converted to bool.
   2015   //
   2016   return PerformContextuallyConvertToBool(CondExpr);
   2017 }
   2018 
   2019 /// Helper function to determine whether this is the (deprecated) C++
   2020 /// conversion from a string literal to a pointer to non-const char or
   2021 /// non-const wchar_t (for narrow and wide string literals,
   2022 /// respectively).
   2023 bool
   2024 Sema::IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType) {
   2025   // Look inside the implicit cast, if it exists.
   2026   if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(From))
   2027     From = Cast->getSubExpr();
   2028 
   2029   // A string literal (2.13.4) that is not a wide string literal can
   2030   // be converted to an rvalue of type "pointer to char"; a wide
   2031   // string literal can be converted to an rvalue of type "pointer
   2032   // to wchar_t" (C++ 4.2p2).
   2033   if (StringLiteral *StrLit = dyn_cast<StringLiteral>(From->IgnoreParens()))
   2034     if (const PointerType *ToPtrType = ToType->getAs<PointerType>())
   2035       if (const BuiltinType *ToPointeeType
   2036           = ToPtrType->getPointeeType()->getAs<BuiltinType>()) {
   2037         // This conversion is considered only when there is an
   2038         // explicit appropriate pointer target type (C++ 4.2p2).
   2039         if (!ToPtrType->getPointeeType().hasQualifiers()) {
   2040           switch (StrLit->getKind()) {
   2041             case StringLiteral::UTF8:
   2042             case StringLiteral::UTF16:
   2043             case StringLiteral::UTF32:
   2044               // We don't allow UTF literals to be implicitly converted
   2045               break;
   2046             case StringLiteral::Ascii:
   2047               return (ToPointeeType->getKind() == BuiltinType::Char_U ||
   2048                       ToPointeeType->getKind() == BuiltinType::Char_S);
   2049             case StringLiteral::Wide:
   2050               return ToPointeeType->isWideCharType();
   2051           }
   2052         }
   2053       }
   2054 
   2055   return false;
   2056 }
   2057 
   2058 static ExprResult BuildCXXCastArgument(Sema &S,
   2059                                        SourceLocation CastLoc,
   2060                                        QualType Ty,
   2061                                        CastKind Kind,
   2062                                        CXXMethodDecl *Method,
   2063                                        DeclAccessPair FoundDecl,
   2064                                        bool HadMultipleCandidates,
   2065                                        Expr *From) {
   2066   switch (Kind) {
   2067   default: llvm_unreachable("Unhandled cast kind!");
   2068   case CK_ConstructorConversion: {
   2069     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Method);
   2070     ASTOwningVector<Expr*> ConstructorArgs(S);
   2071 
   2072     if (S.CompleteConstructorCall(Constructor,
   2073                                   MultiExprArg(&From, 1),
   2074                                   CastLoc, ConstructorArgs))
   2075       return ExprError();
   2076 
   2077     S.CheckConstructorAccess(CastLoc, Constructor, Constructor->getAccess(),
   2078                              S.PDiag(diag::err_access_ctor));
   2079 
   2080     ExprResult Result
   2081       = S.BuildCXXConstructExpr(CastLoc, Ty, cast<CXXConstructorDecl>(Method),
   2082                                 move_arg(ConstructorArgs),
   2083                                 HadMultipleCandidates, /*ZeroInit*/ false,
   2084                                 CXXConstructExpr::CK_Complete, SourceRange());
   2085     if (Result.isInvalid())
   2086       return ExprError();
   2087 
   2088     return S.MaybeBindToTemporary(Result.takeAs<Expr>());
   2089   }
   2090 
   2091   case CK_UserDefinedConversion: {
   2092     assert(!From->getType()->isPointerType() && "Arg can't have pointer type!");
   2093 
   2094     // Create an implicit call expr that calls it.
   2095     ExprResult Result = S.BuildCXXMemberCallExpr(From, FoundDecl, Method,
   2096                                                  HadMultipleCandidates);
   2097     if (Result.isInvalid())
   2098       return ExprError();
   2099 
   2100     S.CheckMemberOperatorAccess(CastLoc, From, /*arg*/ 0, FoundDecl);
   2101 
   2102     return S.MaybeBindToTemporary(Result.get());
   2103   }
   2104   }
   2105 }
   2106 
   2107 /// PerformImplicitConversion - Perform an implicit conversion of the
   2108 /// expression From to the type ToType using the pre-computed implicit
   2109 /// conversion sequence ICS. Returns the converted
   2110 /// expression. Action is the kind of conversion we're performing,
   2111 /// used in the error message.
   2112 ExprResult
   2113 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
   2114                                 const ImplicitConversionSequence &ICS,
   2115                                 AssignmentAction Action,
   2116                                 CheckedConversionKind CCK) {
   2117   switch (ICS.getKind()) {
   2118   case ImplicitConversionSequence::StandardConversion: {
   2119     ExprResult Res = PerformImplicitConversion(From, ToType, ICS.Standard,
   2120                                                Action, CCK);
   2121     if (Res.isInvalid())
   2122       return ExprError();
   2123     From = Res.take();
   2124     break;
   2125   }
   2126 
   2127   case ImplicitConversionSequence::UserDefinedConversion: {
   2128 
   2129       FunctionDecl *FD = ICS.UserDefined.ConversionFunction;
   2130       CastKind CastKind;
   2131       QualType BeforeToType;
   2132       if (const CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(FD)) {
   2133         CastKind = CK_UserDefinedConversion;
   2134 
   2135         // If the user-defined conversion is specified by a conversion function,
   2136         // the initial standard conversion sequence converts the source type to
   2137         // the implicit object parameter of the conversion function.
   2138         BeforeToType = Context.getTagDeclType(Conv->getParent());
   2139       } else {
   2140         const CXXConstructorDecl *Ctor = cast<CXXConstructorDecl>(FD);
   2141         CastKind = CK_ConstructorConversion;
   2142         // Do no conversion if dealing with ... for the first conversion.
   2143         if (!ICS.UserDefined.EllipsisConversion) {
   2144           // If the user-defined conversion is specified by a constructor, the
   2145           // initial standard conversion sequence converts the source type to the
   2146           // type required by the argument of the constructor
   2147           BeforeToType = Ctor->getParamDecl(0)->getType().getNonReferenceType();
   2148         }
   2149       }
   2150       // Watch out for elipsis conversion.
   2151       if (!ICS.UserDefined.EllipsisConversion) {
   2152         ExprResult Res =
   2153           PerformImplicitConversion(From, BeforeToType,
   2154                                     ICS.UserDefined.Before, AA_Converting,
   2155                                     CCK);
   2156         if (Res.isInvalid())
   2157           return ExprError();
   2158         From = Res.take();
   2159       }
   2160 
   2161       ExprResult CastArg
   2162         = BuildCXXCastArgument(*this,
   2163                                From->getLocStart(),
   2164                                ToType.getNonReferenceType(),
   2165                                CastKind, cast<CXXMethodDecl>(FD),
   2166                                ICS.UserDefined.FoundConversionFunction,
   2167                                ICS.UserDefined.HadMultipleCandidates,
   2168                                From);
   2169 
   2170       if (CastArg.isInvalid())
   2171         return ExprError();
   2172 
   2173       From = CastArg.take();
   2174 
   2175       return PerformImplicitConversion(From, ToType, ICS.UserDefined.After,
   2176                                        AA_Converting, CCK);
   2177   }
   2178 
   2179   case ImplicitConversionSequence::AmbiguousConversion:
   2180     ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(),
   2181                           PDiag(diag::err_typecheck_ambiguous_condition)
   2182                             << From->getSourceRange());
   2183      return ExprError();
   2184 
   2185   case ImplicitConversionSequence::EllipsisConversion:
   2186     llvm_unreachable("Cannot perform an ellipsis conversion");
   2187 
   2188   case ImplicitConversionSequence::BadConversion:
   2189     return ExprError();
   2190   }
   2191 
   2192   // Everything went well.
   2193   return Owned(From);
   2194 }
   2195 
   2196 /// PerformImplicitConversion - Perform an implicit conversion of the
   2197 /// expression From to the type ToType by following the standard
   2198 /// conversion sequence SCS. Returns the converted
   2199 /// expression. Flavor is the context in which we're performing this
   2200 /// conversion, for use in error messages.
   2201 ExprResult
   2202 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
   2203                                 const StandardConversionSequence& SCS,
   2204                                 AssignmentAction Action,
   2205                                 CheckedConversionKind CCK) {
   2206   bool CStyle = (CCK == CCK_CStyleCast || CCK == CCK_FunctionalCast);
   2207 
   2208   // Overall FIXME: we are recomputing too many types here and doing far too
   2209   // much extra work. What this means is that we need to keep track of more
   2210   // information that is computed when we try the implicit conversion initially,
   2211   // so that we don't need to recompute anything here.
   2212   QualType FromType = From->getType();
   2213 
   2214   if (SCS.CopyConstructor) {
   2215     // FIXME: When can ToType be a reference type?
   2216     assert(!ToType->isReferenceType());
   2217     if (SCS.Second == ICK_Derived_To_Base) {
   2218       ASTOwningVector<Expr*> ConstructorArgs(*this);
   2219       if (CompleteConstructorCall(cast<CXXConstructorDecl>(SCS.CopyConstructor),
   2220                                   MultiExprArg(*this, &From, 1),
   2221                                   /*FIXME:ConstructLoc*/SourceLocation(),
   2222                                   ConstructorArgs))
   2223         return ExprError();
   2224       return BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
   2225                                    ToType, SCS.CopyConstructor,
   2226                                    move_arg(ConstructorArgs),
   2227                                    /*HadMultipleCandidates*/ false,
   2228                                    /*ZeroInit*/ false,
   2229                                    CXXConstructExpr::CK_Complete,
   2230                                    SourceRange());
   2231     }
   2232     return BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
   2233                                  ToType, SCS.CopyConstructor,
   2234                                  MultiExprArg(*this, &From, 1),
   2235                                  /*HadMultipleCandidates*/ false,
   2236                                  /*ZeroInit*/ false,
   2237                                  CXXConstructExpr::CK_Complete,
   2238                                  SourceRange());
   2239   }
   2240 
   2241   // Resolve overloaded function references.
   2242   if (Context.hasSameType(FromType, Context.OverloadTy)) {
   2243     DeclAccessPair Found;
   2244     FunctionDecl *Fn = ResolveAddressOfOverloadedFunction(From, ToType,
   2245                                                           true, Found);
   2246     if (!Fn)
   2247       return ExprError();
   2248 
   2249     if (DiagnoseUseOfDecl(Fn, From->getSourceRange().getBegin()))
   2250       return ExprError();
   2251 
   2252     From = FixOverloadedFunctionReference(From, Found, Fn);
   2253     FromType = From->getType();
   2254   }
   2255 
   2256   // Perform the first implicit conversion.
   2257   switch (SCS.First) {
   2258   case ICK_Identity:
   2259     // Nothing to do.
   2260     break;
   2261 
   2262   case ICK_Lvalue_To_Rvalue:
   2263     // Should this get its own ICK?
   2264     if (From->getObjectKind() == OK_ObjCProperty) {
   2265       ExprResult FromRes = ConvertPropertyForRValue(From);
   2266       if (FromRes.isInvalid())
   2267         return ExprError();
   2268       From = FromRes.take();
   2269       if (!From->isGLValue()) break;
   2270     }
   2271 
   2272     FromType = FromType.getUnqualifiedType();
   2273     From = ImplicitCastExpr::Create(Context, FromType, CK_LValueToRValue,
   2274                                     From, 0, VK_RValue);
   2275     break;
   2276 
   2277   case ICK_Array_To_Pointer:
   2278     FromType = Context.getArrayDecayedType(FromType);
   2279     From = ImpCastExprToType(From, FromType, CK_ArrayToPointerDecay,
   2280                              VK_RValue, /*BasePath=*/0, CCK).take();
   2281     break;
   2282 
   2283   case ICK_Function_To_Pointer:
   2284     FromType = Context.getPointerType(FromType);
   2285     From = ImpCastExprToType(From, FromType, CK_FunctionToPointerDecay,
   2286                              VK_RValue, /*BasePath=*/0, CCK).take();
   2287     break;
   2288 
   2289   default:
   2290     llvm_unreachable("Improper first standard conversion");
   2291   }
   2292 
   2293   // Perform the second implicit conversion
   2294   switch (SCS.Second) {
   2295   case ICK_Identity:
   2296     // If both sides are functions (or pointers/references to them), there could
   2297     // be incompatible exception declarations.
   2298     if (CheckExceptionSpecCompatibility(From, ToType))
   2299       return ExprError();
   2300     // Nothing else to do.
   2301     break;
   2302 
   2303   case ICK_NoReturn_Adjustment:
   2304     // If both sides are functions (or pointers/references to them), there could
   2305     // be incompatible exception declarations.
   2306     if (CheckExceptionSpecCompatibility(From, ToType))
   2307       return ExprError();
   2308 
   2309     From = ImpCastExprToType(From, ToType, CK_NoOp,
   2310                              VK_RValue, /*BasePath=*/0, CCK).take();
   2311     break;
   2312 
   2313   case ICK_Integral_Promotion:
   2314   case ICK_Integral_Conversion:
   2315     From = ImpCastExprToType(From, ToType, CK_IntegralCast,
   2316                              VK_RValue, /*BasePath=*/0, CCK).take();
   2317     break;
   2318 
   2319   case ICK_Floating_Promotion:
   2320   case ICK_Floating_Conversion:
   2321     From = ImpCastExprToType(From, ToType, CK_FloatingCast,
   2322                              VK_RValue, /*BasePath=*/0, CCK).take();
   2323     break;
   2324 
   2325   case ICK_Complex_Promotion:
   2326   case ICK_Complex_Conversion: {
   2327     QualType FromEl = From->getType()->getAs<ComplexType>()->getElementType();
   2328     QualType ToEl = ToType->getAs<ComplexType>()->getElementType();
   2329     CastKind CK;
   2330     if (FromEl->isRealFloatingType()) {
   2331       if (ToEl->isRealFloatingType())
   2332         CK = CK_FloatingComplexCast;
   2333       else
   2334         CK = CK_FloatingComplexToIntegralComplex;
   2335     } else if (ToEl->isRealFloatingType()) {
   2336       CK = CK_IntegralComplexToFloatingComplex;
   2337     } else {
   2338       CK = CK_IntegralComplexCast;
   2339     }
   2340     From = ImpCastExprToType(From, ToType, CK,
   2341                              VK_RValue, /*BasePath=*/0, CCK).take();
   2342     break;
   2343   }
   2344 
   2345   case ICK_Floating_Integral:
   2346     if (ToType->isRealFloatingType())
   2347       From = ImpCastExprToType(From, ToType, CK_IntegralToFloating,
   2348                                VK_RValue, /*BasePath=*/0, CCK).take();
   2349     else
   2350       From = ImpCastExprToType(From, ToType, CK_FloatingToIntegral,
   2351                                VK_RValue, /*BasePath=*/0, CCK).take();
   2352     break;
   2353 
   2354   case ICK_Compatible_Conversion:
   2355       From = ImpCastExprToType(From, ToType, CK_NoOp,
   2356                                VK_RValue, /*BasePath=*/0, CCK).take();
   2357     break;
   2358 
   2359   case ICK_Writeback_Conversion:
   2360   case ICK_Pointer_Conversion: {
   2361     if (SCS.IncompatibleObjC && Action != AA_Casting) {
   2362       // Diagnose incompatible Objective-C conversions
   2363       if (Action == AA_Initializing || Action == AA_Assigning)
   2364         Diag(From->getSourceRange().getBegin(),
   2365              diag::ext_typecheck_convert_incompatible_pointer)
   2366           << ToType << From->getType() << Action
   2367           << From->getSourceRange() << 0;
   2368       else
   2369         Diag(From->getSourceRange().getBegin(),
   2370              diag::ext_typecheck_convert_incompatible_pointer)
   2371           << From->getType() << ToType << Action
   2372           << From->getSourceRange() << 0;
   2373 
   2374       if (From->getType()->isObjCObjectPointerType() &&
   2375           ToType->isObjCObjectPointerType())
   2376         EmitRelatedResultTypeNote(From);
   2377     }
   2378     else if (getLangOptions().ObjCAutoRefCount &&
   2379              !CheckObjCARCUnavailableWeakConversion(ToType,
   2380                                                     From->getType())) {
   2381       if (Action == AA_Initializing)
   2382         Diag(From->getSourceRange().getBegin(),
   2383              diag::err_arc_weak_unavailable_assign);
   2384       else
   2385         Diag(From->getSourceRange().getBegin(),
   2386              diag::err_arc_convesion_of_weak_unavailable)
   2387           << (Action == AA_Casting) << From->getType() << ToType
   2388           << From->getSourceRange();
   2389     }
   2390 
   2391     CastKind Kind = CK_Invalid;
   2392     CXXCastPath BasePath;
   2393     if (CheckPointerConversion(From, ToType, Kind, BasePath, CStyle))
   2394       return ExprError();
   2395 
   2396     // Make sure we extend blocks if necessary.
   2397     // FIXME: doing this here is really ugly.
   2398     if (Kind == CK_BlockPointerToObjCPointerCast) {
   2399       ExprResult E = From;
   2400       (void) PrepareCastToObjCObjectPointer(E);
   2401       From = E.take();
   2402     }
   2403 
   2404     From = ImpCastExprToType(From, ToType, Kind, VK_RValue, &BasePath, CCK)
   2405              .take();
   2406     break;
   2407   }
   2408 
   2409   case ICK_Pointer_Member: {
   2410     CastKind Kind = CK_Invalid;
   2411     CXXCastPath BasePath;
   2412     if (CheckMemberPointerConversion(From, ToType, Kind, BasePath, CStyle))
   2413       return ExprError();
   2414     if (CheckExceptionSpecCompatibility(From, ToType))
   2415       return ExprError();
   2416     From = ImpCastExprToType(From, ToType, Kind, VK_RValue, &BasePath, CCK)
   2417              .take();
   2418     break;
   2419   }
   2420 
   2421   case ICK_Boolean_Conversion:
   2422     // Perform half-to-boolean conversion via float.
   2423     if (From->getType()->isHalfType()) {
   2424       From = ImpCastExprToType(From, Context.FloatTy, CK_FloatingCast).take();
   2425       FromType = Context.FloatTy;
   2426     }
   2427 
   2428     From = ImpCastExprToType(From, Context.BoolTy,
   2429                              ScalarTypeToBooleanCastKind(FromType),
   2430                              VK_RValue, /*BasePath=*/0, CCK).take();
   2431     break;
   2432 
   2433   case ICK_Derived_To_Base: {
   2434     CXXCastPath BasePath;
   2435     if (CheckDerivedToBaseConversion(From->getType(),
   2436                                      ToType.getNonReferenceType(),
   2437                                      From->getLocStart(),
   2438                                      From->getSourceRange(),
   2439                                      &BasePath,
   2440                                      CStyle))
   2441       return ExprError();
   2442 
   2443     From = ImpCastExprToType(From, ToType.getNonReferenceType(),
   2444                       CK_DerivedToBase, From->getValueKind(),
   2445                       &BasePath, CCK).take();
   2446     break;
   2447   }
   2448 
   2449   case ICK_Vector_Conversion:
   2450     From = ImpCastExprToType(From, ToType, CK_BitCast,
   2451                              VK_RValue, /*BasePath=*/0, CCK).take();
   2452     break;
   2453 
   2454   case ICK_Vector_Splat:
   2455     From = ImpCastExprToType(From, ToType, CK_VectorSplat,
   2456                              VK_RValue, /*BasePath=*/0, CCK).take();
   2457     break;
   2458 
   2459   case ICK_Complex_Real:
   2460     // Case 1.  x -> _Complex y
   2461     if (const ComplexType *ToComplex = ToType->getAs<ComplexType>()) {
   2462       QualType ElType = ToComplex->getElementType();
   2463       bool isFloatingComplex = ElType->isRealFloatingType();
   2464 
   2465       // x -> y
   2466       if (Context.hasSameUnqualifiedType(ElType, From->getType())) {
   2467         // do nothing
   2468       } else if (From->getType()->isRealFloatingType()) {
   2469         From = ImpCastExprToType(From, ElType,
   2470                 isFloatingComplex ? CK_FloatingCast : CK_FloatingToIntegral).take();
   2471       } else {
   2472         assert(From->getType()->isIntegerType());
   2473         From = ImpCastExprToType(From, ElType,
   2474                 isFloatingComplex ? CK_IntegralToFloating : CK_IntegralCast).take();
   2475       }
   2476       // y -> _Complex y
   2477       From = ImpCastExprToType(From, ToType,
   2478                    isFloatingComplex ? CK_FloatingRealToComplex
   2479                                      : CK_IntegralRealToComplex).take();
   2480 
   2481     // Case 2.  _Complex x -> y
   2482     } else {
   2483       const ComplexType *FromComplex = From->getType()->getAs<ComplexType>();
   2484       assert(FromComplex);
   2485 
   2486       QualType ElType = FromComplex->getElementType();
   2487       bool isFloatingComplex = ElType->isRealFloatingType();
   2488 
   2489       // _Complex x -> x
   2490       From = ImpCastExprToType(From, ElType,
   2491                    isFloatingComplex ? CK_FloatingComplexToReal
   2492                                      : CK_IntegralComplexToReal,
   2493                                VK_RValue, /*BasePath=*/0, CCK).take();
   2494 
   2495       // x -> y
   2496       if (Context.hasSameUnqualifiedType(ElType, ToType)) {
   2497         // do nothing
   2498       } else if (ToType->isRealFloatingType()) {
   2499         From = ImpCastExprToType(From, ToType,
   2500                    isFloatingComplex ? CK_FloatingCast : CK_IntegralToFloating,
   2501                                  VK_RValue, /*BasePath=*/0, CCK).take();
   2502       } else {
   2503         assert(ToType->isIntegerType());
   2504         From = ImpCastExprToType(From, ToType,
   2505                    isFloatingComplex ? CK_FloatingToIntegral : CK_IntegralCast,
   2506                                  VK_RValue, /*BasePath=*/0, CCK).take();
   2507       }
   2508     }
   2509     break;
   2510 
   2511   case ICK_Block_Pointer_Conversion: {
   2512     From = ImpCastExprToType(From, ToType.getUnqualifiedType(), CK_BitCast,
   2513                              VK_RValue, /*BasePath=*/0, CCK).take();
   2514     break;
   2515   }
   2516 
   2517   case ICK_TransparentUnionConversion: {
   2518     ExprResult FromRes = Owned(From);
   2519     Sema::AssignConvertType ConvTy =
   2520       CheckTransparentUnionArgumentConstraints(ToType, FromRes);
   2521     if (FromRes.isInvalid())
   2522       return ExprError();
   2523     From = FromRes.take();
   2524     assert ((ConvTy == Sema::Compatible) &&
   2525             "Improper transparent union conversion");
   2526     (void)ConvTy;
   2527     break;
   2528   }
   2529 
   2530   case ICK_Lvalue_To_Rvalue:
   2531   case ICK_Array_To_Pointer:
   2532   case ICK_Function_To_Pointer:
   2533   case ICK_Qualification:
   2534   case ICK_Num_Conversion_Kinds:
   2535     llvm_unreachable("Improper second standard conversion");
   2536   }
   2537 
   2538   switch (SCS.Third) {
   2539   case ICK_Identity:
   2540     // Nothing to do.
   2541     break;
   2542 
   2543   case ICK_Qualification: {
   2544     // The qualification keeps the category of the inner expression, unless the
   2545     // target type isn't a reference.
   2546     ExprValueKind VK = ToType->isReferenceType() ?
   2547                                   From->getValueKind() : VK_RValue;
   2548     From = ImpCastExprToType(From, ToType.getNonLValueExprType(Context),
   2549                              CK_NoOp, VK, /*BasePath=*/0, CCK).take();
   2550 
   2551     if (SCS.DeprecatedStringLiteralToCharPtr &&
   2552         !getLangOptions().WritableStrings)
   2553       Diag(From->getLocStart(), diag::warn_deprecated_string_literal_conversion)
   2554         << ToType.getNonReferenceType();
   2555 
   2556     break;
   2557     }
   2558 
   2559   default:
   2560     llvm_unreachable("Improper third standard conversion");
   2561   }
   2562 
   2563   return Owned(From);
   2564 }
   2565 
   2566 ExprResult Sema::ActOnUnaryTypeTrait(UnaryTypeTrait UTT,
   2567                                      SourceLocation KWLoc,
   2568                                      ParsedType Ty,
   2569                                      SourceLocation RParen) {
   2570   TypeSourceInfo *TSInfo;
   2571   QualType T = GetTypeFromParser(Ty, &TSInfo);
   2572 
   2573   if (!TSInfo)
   2574     TSInfo = Context.getTrivialTypeSourceInfo(T);
   2575   return BuildUnaryTypeTrait(UTT, KWLoc, TSInfo, RParen);
   2576 }
   2577 
   2578 /// \brief Check the completeness of a type in a unary type trait.
   2579 ///
   2580 /// If the particular type trait requires a complete type, tries to complete
   2581 /// it. If completing the type fails, a diagnostic is emitted and false
   2582 /// returned. If completing the type succeeds or no completion was required,
   2583 /// returns true.
   2584 static bool CheckUnaryTypeTraitTypeCompleteness(Sema &S,
   2585                                                 UnaryTypeTrait UTT,
   2586                                                 SourceLocation Loc,
   2587                                                 QualType ArgTy) {
   2588   // C++0x [meta.unary.prop]p3:
   2589   //   For all of the class templates X declared in this Clause, instantiating
   2590   //   that template with a template argument that is a class template
   2591   //   specialization may result in the implicit instantiation of the template
   2592   //   argument if and only if the semantics of X require that the argument
   2593   //   must be a complete type.
   2594   // We apply this rule to all the type trait expressions used to implement
   2595   // these class templates. We also try to follow any GCC documented behavior
   2596   // in these expressions to ensure portability of standard libraries.
   2597   switch (UTT) {
   2598     // is_complete_type somewhat obviously cannot require a complete type.
   2599   case UTT_IsCompleteType:
   2600     // Fall-through
   2601 
   2602     // These traits are modeled on the type predicates in C++0x
   2603     // [meta.unary.cat] and [meta.unary.comp]. They are not specified as
   2604     // requiring a complete type, as whether or not they return true cannot be
   2605     // impacted by the completeness of the type.
   2606   case UTT_IsVoid:
   2607   case UTT_IsIntegral:
   2608   case UTT_IsFloatingPoint:
   2609   case UTT_IsArray:
   2610   case UTT_IsPointer:
   2611   case UTT_IsLvalueReference:
   2612   case UTT_IsRvalueReference:
   2613   case UTT_IsMemberFunctionPointer:
   2614   case UTT_IsMemberObjectPointer:
   2615   case UTT_IsEnum:
   2616   case UTT_IsUnion:
   2617   case UTT_IsClass:
   2618   case UTT_IsFunction:
   2619   case UTT_IsReference:
   2620   case UTT_IsArithmetic:
   2621   case UTT_IsFundamental:
   2622   case UTT_IsObject:
   2623   case UTT_IsScalar:
   2624   case UTT_IsCompound:
   2625   case UTT_IsMemberPointer:
   2626     // Fall-through
   2627 
   2628     // These traits are modeled on type predicates in C++0x [meta.unary.prop]
   2629     // which requires some of its traits to have the complete type. However,
   2630     // the completeness of the type cannot impact these traits' semantics, and
   2631     // so they don't require it. This matches the comments on these traits in
   2632     // Table 49.
   2633   case UTT_IsConst:
   2634   case UTT_IsVolatile:
   2635   case UTT_IsSigned:
   2636   case UTT_IsUnsigned:
   2637     return true;
   2638 
   2639     // C++0x [meta.unary.prop] Table 49 requires the following traits to be
   2640     // applied to a complete type.
   2641   case UTT_IsTrivial:
   2642   case UTT_IsTriviallyCopyable:
   2643   case UTT_IsStandardLayout:
   2644   case UTT_IsPOD:
   2645   case UTT_IsLiteral:
   2646   case UTT_IsEmpty:
   2647   case UTT_IsPolymorphic:
   2648   case UTT_IsAbstract:
   2649     // Fall-through
   2650 
   2651     // These trait expressions are designed to help implement predicates in
   2652     // [meta.unary.prop] despite not being named the same. They are specified
   2653     // by both GCC and the Embarcadero C++ compiler, and require the complete
   2654     // type due to the overarching C++0x type predicates being implemented
   2655     // requiring the complete type.
   2656   case UTT_HasNothrowAssign:
   2657   case UTT_HasNothrowConstructor:
   2658   case UTT_HasNothrowCopy:
   2659   case UTT_HasTrivialAssign:
   2660   case UTT_HasTrivialDefaultConstructor:
   2661   case UTT_HasTrivialCopy:
   2662   case UTT_HasTrivialDestructor:
   2663   case UTT_HasVirtualDestructor:
   2664     // Arrays of unknown bound are expressly allowed.
   2665     QualType ElTy = ArgTy;
   2666     if (ArgTy->isIncompleteArrayType())
   2667       ElTy = S.Context.getAsArrayType(ArgTy)->getElementType();
   2668 
   2669     // The void type is expressly allowed.
   2670     if (ElTy->isVoidType())
   2671       return true;
   2672 
   2673     return !S.RequireCompleteType(
   2674       Loc, ElTy, diag::err_incomplete_type_used_in_type_trait_expr);
   2675   }
   2676   llvm_unreachable("Type trait not handled by switch");
   2677 }
   2678 
   2679 static bool EvaluateUnaryTypeTrait(Sema &Self, UnaryTypeTrait UTT,
   2680                                    SourceLocation KeyLoc, QualType T) {
   2681   assert(!T->isDependentType() && "Cannot evaluate traits of dependent type");
   2682 
   2683   ASTContext &C = Self.Context;
   2684   switch(UTT) {
   2685     // Type trait expressions corresponding to the primary type category
   2686     // predicates in C++0x [meta.unary.cat].
   2687   case UTT_IsVoid:
   2688     return T->isVoidType();
   2689   case UTT_IsIntegral:
   2690     return T->isIntegralType(C);
   2691   case UTT_IsFloatingPoint:
   2692     return T->isFloatingType();
   2693   case UTT_IsArray:
   2694     return T->isArrayType();
   2695   case UTT_IsPointer:
   2696     return T->isPointerType();
   2697   case UTT_IsLvalueReference:
   2698     return T->isLValueReferenceType();
   2699   case UTT_IsRvalueReference:
   2700     return T->isRValueReferenceType();
   2701   case UTT_IsMemberFunctionPointer:
   2702     return T->isMemberFunctionPointerType();
   2703   case UTT_IsMemberObjectPointer:
   2704     return T->isMemberDataPointerType();
   2705   case UTT_IsEnum:
   2706     return T->isEnumeralType();
   2707   case UTT_IsUnion:
   2708     return T->isUnionType();
   2709   case UTT_IsClass:
   2710     return T->isClassType() || T->isStructureType();
   2711   case UTT_IsFunction:
   2712     return T->isFunctionType();
   2713 
   2714     // Type trait expressions which correspond to the convenient composition
   2715     // predicates in C++0x [meta.unary.comp].
   2716   case UTT_IsReference:
   2717     return T->isReferenceType();
   2718   case UTT_IsArithmetic:
   2719     return T->isArithmeticType() && !T->isEnumeralType();
   2720   case UTT_IsFundamental:
   2721     return T->isFundamentalType();
   2722   case UTT_IsObject:
   2723     return T->isObjectType();
   2724   case UTT_IsScalar:
   2725     // Note: semantic analysis depends on Objective-C lifetime types to be
   2726     // considered scalar types. However, such types do not actually behave
   2727     // like scalar types at run time (since they may require retain/release
   2728     // operations), so we report them as non-scalar.
   2729     if (T->isObjCLifetimeType()) {
   2730       switch (T.getObjCLifetime()) {
   2731       case Qualifiers::OCL_None:
   2732       case Qualifiers::OCL_ExplicitNone:
   2733         return true;
   2734 
   2735       case Qualifiers::OCL_Strong:
   2736       case Qualifiers::OCL_Weak:
   2737       case Qualifiers::OCL_Autoreleasing:
   2738         return false;
   2739       }
   2740     }
   2741 
   2742     return T->isScalarType();
   2743   case UTT_IsCompound:
   2744     return T->isCompoundType();
   2745   case UTT_IsMemberPointer:
   2746     return T->isMemberPointerType();
   2747 
   2748     // Type trait expressions which correspond to the type property predicates
   2749     // in C++0x [meta.unary.prop].
   2750   case UTT_IsConst:
   2751     return T.isConstQualified();
   2752   case UTT_IsVolatile:
   2753     return T.isVolatileQualified();
   2754   case UTT_IsTrivial:
   2755     return T.isTrivialType(Self.Context);
   2756   case UTT_IsTriviallyCopyable:
   2757     return T.isTriviallyCopyableType(Self.Context);
   2758   case UTT_IsStandardLayout:
   2759     return T->isStandardLayoutType();
   2760   case UTT_IsPOD:
   2761     return T.isPODType(Self.Context);
   2762   case UTT_IsLiteral:
   2763     return T->isLiteralType();
   2764   case UTT_IsEmpty:
   2765     if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
   2766       return !RD->isUnion() && RD->isEmpty();
   2767     return false;
   2768   case UTT_IsPolymorphic:
   2769     if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
   2770       return RD->isPolymorphic();
   2771     return false;
   2772   case UTT_IsAbstract:
   2773     if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
   2774       return RD->isAbstract();
   2775     return false;
   2776   case UTT_IsSigned:
   2777     return T->isSignedIntegerType();
   2778   case UTT_IsUnsigned:
   2779     return T->isUnsignedIntegerType();
   2780 
   2781     // Type trait expressions which query classes regarding their construction,
   2782     // destruction, and copying. Rather than being based directly on the
   2783     // related type predicates in the standard, they are specified by both
   2784     // GCC[1] and the Embarcadero C++ compiler[2], and Clang implements those
   2785     // specifications.
   2786     //
   2787     //   1: http://gcc.gnu/.org/onlinedocs/gcc/Type-Traits.html
   2788     //   2: http://docwiki.embarcadero.com/RADStudio/XE/en/Type_Trait_Functions_(C%2B%2B0x)_Index
   2789   case UTT_HasTrivialDefaultConstructor:
   2790     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
   2791     //   If __is_pod (type) is true then the trait is true, else if type is
   2792     //   a cv class or union type (or array thereof) with a trivial default
   2793     //   constructor ([class.ctor]) then the trait is true, else it is false.
   2794     if (T.isPODType(Self.Context))
   2795       return true;
   2796     if (const RecordType *RT =
   2797           C.getBaseElementType(T)->getAs<RecordType>())
   2798       return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDefaultConstructor();
   2799     return false;
   2800   case UTT_HasTrivialCopy:
   2801     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
   2802     //   If __is_pod (type) is true or type is a reference type then
   2803     //   the trait is true, else if type is a cv class or union type
   2804     //   with a trivial copy constructor ([class.copy]) then the trait
   2805     //   is true, else it is false.
   2806     if (T.isPODType(Self.Context) || T->isReferenceType())
   2807       return true;
   2808     if (const RecordType *RT = T->getAs<RecordType>())
   2809       return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialCopyConstructor();
   2810     return false;
   2811   case UTT_HasTrivialAssign:
   2812     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
   2813     //   If type is const qualified or is a reference type then the
   2814     //   trait is false. Otherwise if __is_pod (type) is true then the
   2815     //   trait is true, else if type is a cv class or union type with
   2816     //   a trivial copy assignment ([class.copy]) then the trait is
   2817     //   true, else it is false.
   2818     // Note: the const and reference restrictions are interesting,
   2819     // given that const and reference members don't prevent a class
   2820     // from having a trivial copy assignment operator (but do cause
   2821     // errors if the copy assignment operator is actually used, q.v.
   2822     // [class.copy]p12).
   2823 
   2824     if (C.getBaseElementType(T).isConstQualified())
   2825       return false;
   2826     if (T.isPODType(Self.Context))
   2827       return true;
   2828     if (const RecordType *RT = T->getAs<RecordType>())
   2829       return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialCopyAssignment();
   2830     return false;
   2831   case UTT_HasTrivialDestructor:
   2832     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
   2833     //   If __is_pod (type) is true or type is a reference type
   2834     //   then the trait is true, else if type is a cv class or union
   2835     //   type (or array thereof) with a trivial destructor
   2836     //   ([class.dtor]) then the trait is true, else it is
   2837     //   false.
   2838     if (T.isPODType(Self.Context) || T->isReferenceType())
   2839       return true;
   2840 
   2841     // Objective-C++ ARC: autorelease types don't require destruction.
   2842     if (T->isObjCLifetimeType() &&
   2843         T.getObjCLifetime() == Qualifiers::OCL_Autoreleasing)
   2844       return true;
   2845 
   2846     if (const RecordType *RT =
   2847           C.getBaseElementType(T)->getAs<RecordType>())
   2848       return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDestructor();
   2849     return false;
   2850   // TODO: Propagate nothrowness for implicitly declared special members.
   2851   case UTT_HasNothrowAssign:
   2852     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
   2853     //   If type is const qualified or is a reference type then the
   2854     //   trait is false. Otherwise if __has_trivial_assign (type)
   2855     //   is true then the trait is true, else if type is a cv class
   2856     //   or union type with copy assignment operators that are known
   2857     //   not to throw an exception then the trait is true, else it is
   2858     //   false.
   2859     if (C.getBaseElementType(T).isConstQualified())
   2860       return false;
   2861     if (T->isReferenceType())
   2862       return false;
   2863     if (T.isPODType(Self.Context) || T->isObjCLifetimeType())
   2864       return true;
   2865     if (const RecordType *RT = T->getAs<RecordType>()) {
   2866       CXXRecordDecl* RD = cast<CXXRecordDecl>(RT->getDecl());
   2867       if (RD->hasTrivialCopyAssignment())
   2868         return true;
   2869 
   2870       bool FoundAssign = false;
   2871       DeclarationName Name = C.DeclarationNames.getCXXOperatorName(OO_Equal);
   2872       LookupResult Res(Self, DeclarationNameInfo(Name, KeyLoc),
   2873                        Sema::LookupOrdinaryName);
   2874       if (Self.LookupQualifiedName(Res, RD)) {
   2875         Res.suppressDiagnostics();
   2876         for (LookupResult::iterator Op = Res.begin(), OpEnd = Res.end();
   2877              Op != OpEnd; ++Op) {
   2878           if (isa<FunctionTemplateDecl>(*Op))
   2879             continue;
   2880 
   2881           CXXMethodDecl *Operator = cast<CXXMethodDecl>(*Op);
   2882           if (Operator->isCopyAssignmentOperator()) {
   2883             FoundAssign = true;
   2884             const FunctionProtoType *CPT
   2885                 = Operator->getType()->getAs<FunctionProtoType>();
   2886             if (CPT->getExceptionSpecType() == EST_Delayed)
   2887               return false;
   2888             if (!CPT->isNothrow(Self.Context))
   2889               return false;
   2890           }
   2891         }
   2892       }
   2893 
   2894       return FoundAssign;
   2895     }
   2896     return false;
   2897   case UTT_HasNothrowCopy:
   2898     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
   2899     //   If __has_trivial_copy (type) is true then the trait is true, else
   2900     //   if type is a cv class or union type with copy constructors that are
   2901     //   known not to throw an exception then the trait is true, else it is
   2902     //   false.
   2903     if (T.isPODType(C) || T->isReferenceType() || T->isObjCLifetimeType())
   2904       return true;
   2905     if (const RecordType *RT = T->getAs<RecordType>()) {
   2906       CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
   2907       if (RD->hasTrivialCopyConstructor())
   2908         return true;
   2909 
   2910       bool FoundConstructor = false;
   2911       unsigned FoundTQs;
   2912       DeclContext::lookup_const_iterator Con, ConEnd;
   2913       for (llvm::tie(Con, ConEnd) = Self.LookupConstructors(RD);
   2914            Con != ConEnd; ++Con) {
   2915         // A template constructor is never a copy constructor.
   2916         // FIXME: However, it may actually be selected at the actual overload
   2917         // resolution point.
   2918         if (isa<FunctionTemplateDecl>(*Con))
   2919           continue;
   2920         CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
   2921         if (Constructor->isCopyConstructor(FoundTQs)) {
   2922           FoundConstructor = true;
   2923           const FunctionProtoType *CPT
   2924               = Constructor->getType()->getAs<FunctionProtoType>();
   2925           if (CPT->getExceptionSpecType() == EST_Delayed)
   2926             return false;
   2927           // FIXME: check whether evaluating default arguments can throw.
   2928           // For now, we'll be conservative and assume that they can throw.
   2929           if (!CPT->isNothrow(Self.Context) || CPT->getNumArgs() > 1)
   2930             return false;
   2931         }
   2932       }
   2933 
   2934       return FoundConstructor;
   2935     }
   2936     return false;
   2937   case UTT_HasNothrowConstructor:
   2938     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
   2939     //   If __has_trivial_constructor (type) is true then the trait is
   2940     //   true, else if type is a cv class or union type (or array
   2941     //   thereof) with a default constructor that is known not to
   2942     //   throw an exception then the trait is true, else it is false.
   2943     if (T.isPODType(C) || T->isObjCLifetimeType())
   2944       return true;
   2945     if (const RecordType *RT = C.getBaseElementType(T)->getAs<RecordType>()) {
   2946       CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
   2947       if (RD->hasTrivialDefaultConstructor())
   2948         return true;
   2949 
   2950       DeclContext::lookup_const_iterator Con, ConEnd;
   2951       for (llvm::tie(Con, ConEnd) = Self.LookupConstructors(RD);
   2952            Con != ConEnd; ++Con) {
   2953         // FIXME: In C++0x, a constructor template can be a default constructor.
   2954         if (isa<FunctionTemplateDecl>(*Con))
   2955           continue;
   2956         CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
   2957         if (Constructor->isDefaultConstructor()) {
   2958           const FunctionProtoType *CPT
   2959               = Constructor->getType()->getAs<FunctionProtoType>();
   2960           if (CPT->getExceptionSpecType() == EST_Delayed)
   2961             return false;
   2962           // TODO: check whether evaluating default arguments can throw.
   2963           // For now, we'll be conservative and assume that they can throw.
   2964           return CPT->isNothrow(Self.Context) && CPT->getNumArgs() == 0;
   2965         }
   2966       }
   2967     }
   2968     return false;
   2969   case UTT_HasVirtualDestructor:
   2970     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
   2971     //   If type is a class type with a virtual destructor ([class.dtor])
   2972     //   then the trait is true, else it is false.
   2973     if (const RecordType *Record = T->getAs<RecordType>()) {
   2974       CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
   2975       if (CXXDestructorDecl *Destructor = Self.LookupDestructor(RD))
   2976         return Destructor->isVirtual();
   2977     }
   2978     return false;
   2979 
   2980     // These type trait expressions are modeled on the specifications for the
   2981     // Embarcadero C++0x type trait functions:
   2982     //   http://docwiki.embarcadero.com/RADStudio/XE/en/Type_Trait_Functions_(C%2B%2B0x)_Index
   2983   case UTT_IsCompleteType:
   2984     // http://docwiki.embarcadero.com/RADStudio/XE/en/Is_complete_type_(typename_T_):
   2985     //   Returns True if and only if T is a complete type at the point of the
   2986     //   function call.
   2987     return !T->isIncompleteType();
   2988   }
   2989   llvm_unreachable("Type trait not covered by switch");
   2990 }
   2991 
   2992 ExprResult Sema::BuildUnaryTypeTrait(UnaryTypeTrait UTT,
   2993                                      SourceLocation KWLoc,
   2994                                      TypeSourceInfo *TSInfo,
   2995                                      SourceLocation RParen) {
   2996   QualType T = TSInfo->getType();
   2997   if (!CheckUnaryTypeTraitTypeCompleteness(*this, UTT, KWLoc, T))
   2998     return ExprError();
   2999 
   3000   bool Value = false;
   3001   if (!T->isDependentType())
   3002     Value = EvaluateUnaryTypeTrait(*this, UTT, KWLoc, T);
   3003 
   3004   return Owned(new (Context) UnaryTypeTraitExpr(KWLoc, UTT, TSInfo, Value,
   3005                                                 RParen, Context.BoolTy));
   3006 }
   3007 
   3008 ExprResult Sema::ActOnBinaryTypeTrait(BinaryTypeTrait BTT,
   3009                                       SourceLocation KWLoc,
   3010                                       ParsedType LhsTy,
   3011                                       ParsedType RhsTy,
   3012                                       SourceLocation RParen) {
   3013   TypeSourceInfo *LhsTSInfo;
   3014   QualType LhsT = GetTypeFromParser(LhsTy, &LhsTSInfo);
   3015   if (!LhsTSInfo)
   3016     LhsTSInfo = Context.getTrivialTypeSourceInfo(LhsT);
   3017 
   3018   TypeSourceInfo *RhsTSInfo;
   3019   QualType RhsT = GetTypeFromParser(RhsTy, &RhsTSInfo);
   3020   if (!RhsTSInfo)
   3021     RhsTSInfo = Context.getTrivialTypeSourceInfo(RhsT);
   3022 
   3023   return BuildBinaryTypeTrait(BTT, KWLoc, LhsTSInfo, RhsTSInfo, RParen);
   3024 }
   3025 
   3026 static bool EvaluateBinaryTypeTrait(Sema &Self, BinaryTypeTrait BTT,
   3027                                     QualType LhsT, QualType RhsT,
   3028                                     SourceLocation KeyLoc) {
   3029   assert(!LhsT->isDependentType() && !RhsT->isDependentType() &&
   3030          "Cannot evaluate traits of dependent types");
   3031 
   3032   switch(BTT) {
   3033   case BTT_IsBaseOf: {
   3034     // C++0x [meta.rel]p2
   3035     // Base is a base class of Derived without regard to cv-qualifiers or
   3036     // Base and Derived are not unions and name the same class type without
   3037     // regard to cv-qualifiers.
   3038 
   3039     const RecordType *lhsRecord = LhsT->getAs<RecordType>();
   3040     if (!lhsRecord) return false;
   3041 
   3042     const RecordType *rhsRecord = RhsT->getAs<RecordType>();
   3043     if (!rhsRecord) return false;
   3044 
   3045     assert(Self.Context.hasSameUnqualifiedType(LhsT, RhsT)
   3046              == (lhsRecord == rhsRecord));
   3047 
   3048     if (lhsRecord == rhsRecord)
   3049       return !lhsRecord->getDecl()->isUnion();
   3050 
   3051     // C++0x [meta.rel]p2:
   3052     //   If Base and Derived are class types and are different types
   3053     //   (ignoring possible cv-qualifiers) then Derived shall be a
   3054     //   complete type.
   3055     if (Self.RequireCompleteType(KeyLoc, RhsT,
   3056                           diag::err_incomplete_type_used_in_type_trait_expr))
   3057       return false;
   3058 
   3059     return cast<CXXRecordDecl>(rhsRecord->getDecl())
   3060       ->isDerivedFrom(cast<CXXRecordDecl>(lhsRecord->getDecl()));
   3061   }
   3062   case BTT_IsSame:
   3063     return Self.Context.hasSameType(LhsT, RhsT);
   3064   case BTT_TypeCompatible:
   3065     return Self.Context.typesAreCompatible(LhsT.getUnqualifiedType(),
   3066                                            RhsT.getUnqualifiedType());
   3067   case BTT_IsConvertible:
   3068   case BTT_IsConvertibleTo: {
   3069     // C++0x [meta.rel]p4:
   3070     //   Given the following function prototype:
   3071     //
   3072     //     template <class T>
   3073     //       typename add_rvalue_reference<T>::type create();
   3074     //
   3075     //   the predicate condition for a template specialization
   3076     //   is_convertible<From, To> shall be satisfied if and only if
   3077     //   the return expression in the following code would be
   3078     //   well-formed, including any implicit conversions to the return
   3079     //   type of the function:
   3080     //
   3081     //     To test() {
   3082     //       return create<From>();
   3083     //     }
   3084     //
   3085     //   Access checking is performed as if in a context unrelated to To and
   3086     //   From. Only the validity of the immediate context of the expression
   3087     //   of the return-statement (including conversions to the return type)
   3088     //   is considered.
   3089     //
   3090     // We model the initialization as a copy-initialization of a temporary
   3091     // of the appropriate type, which for this expression is identical to the
   3092     // return statement (since NRVO doesn't apply).
   3093     if (LhsT->isObjectType() || LhsT->isFunctionType())
   3094       LhsT = Self.Context.getRValueReferenceType(LhsT);
   3095 
   3096     InitializedEntity To(InitializedEntity::InitializeTemporary(RhsT));
   3097     OpaqueValueExpr From(KeyLoc, LhsT.getNonLValueExprType(Self.Context),
   3098                          Expr::getValueKindForType(LhsT));
   3099     Expr *FromPtr = &From;
   3100     InitializationKind Kind(InitializationKind::CreateCopy(KeyLoc,
   3101                                                            SourceLocation()));
   3102 
   3103     // Perform the initialization within a SFINAE trap at translation unit
   3104     // scope.
   3105     Sema::SFINAETrap SFINAE(Self, /*AccessCheckingSFINAE=*/true);
   3106     Sema::ContextRAII TUContext(Self, Self.Context.getTranslationUnitDecl());
   3107     InitializationSequence Init(Self, To, Kind, &FromPtr, 1);
   3108     if (Init.Failed())
   3109       return false;
   3110 
   3111     ExprResult Result = Init.Perform(Self, To, Kind, MultiExprArg(&FromPtr, 1));
   3112     return !Result.isInvalid() && !SFINAE.hasErrorOccurred();
   3113   }
   3114   }
   3115   llvm_unreachable("Unknown type trait or not implemented");
   3116 }
   3117 
   3118 ExprResult Sema::BuildBinaryTypeTrait(BinaryTypeTrait BTT,
   3119                                       SourceLocation KWLoc,
   3120                                       TypeSourceInfo *LhsTSInfo,
   3121                                       TypeSourceInfo *RhsTSInfo,
   3122                                       SourceLocation RParen) {
   3123   QualType LhsT = LhsTSInfo->getType();
   3124   QualType RhsT = RhsTSInfo->getType();
   3125 
   3126   if (BTT == BTT_TypeCompatible) {
   3127     if (getLangOptions().CPlusPlus) {
   3128       Diag(KWLoc, diag::err_types_compatible_p_in_cplusplus)
   3129         << SourceRange(KWLoc, RParen);
   3130       return ExprError();
   3131     }
   3132   }
   3133 
   3134   bool Value = false;
   3135   if (!LhsT->isDependentType() && !RhsT->isDependentType())
   3136     Value = EvaluateBinaryTypeTrait(*this, BTT, LhsT, RhsT, KWLoc);
   3137 
   3138   // Select trait result type.
   3139   QualType ResultType;
   3140   switch (BTT) {
   3141   case BTT_IsBaseOf:       ResultType = Context.BoolTy; break;
   3142   case BTT_IsConvertible:  ResultType = Context.BoolTy; break;
   3143   case BTT_IsSame:         ResultType = Context.BoolTy; break;
   3144   case BTT_TypeCompatible: ResultType = Context.IntTy; break;
   3145   case BTT_IsConvertibleTo: ResultType = Context.BoolTy; break;
   3146   }
   3147 
   3148   return Owned(new (Context) BinaryTypeTraitExpr(KWLoc, BTT, LhsTSInfo,
   3149                                                  RhsTSInfo, Value, RParen,
   3150                                                  ResultType));
   3151 }
   3152 
   3153 ExprResult Sema::ActOnArrayTypeTrait(ArrayTypeTrait ATT,
   3154                                      SourceLocation KWLoc,
   3155                                      ParsedType Ty,
   3156                                      Expr* DimExpr,
   3157                                      SourceLocation RParen) {
   3158   TypeSourceInfo *TSInfo;
   3159   QualType T = GetTypeFromParser(Ty, &TSInfo);
   3160   if (!TSInfo)
   3161     TSInfo = Context.getTrivialTypeSourceInfo(T);
   3162 
   3163   return BuildArrayTypeTrait(ATT, KWLoc, TSInfo, DimExpr, RParen);
   3164 }
   3165 
   3166 static uint64_t EvaluateArrayTypeTrait(Sema &Self, ArrayTypeTrait ATT,
   3167                                            QualType T, Expr *DimExpr,
   3168                                            SourceLocation KeyLoc) {
   3169   assert(!T->isDependentType() && "Cannot evaluate traits of dependent type");
   3170 
   3171   switch(ATT) {
   3172   case ATT_ArrayRank:
   3173     if (T->isArrayType()) {
   3174       unsigned Dim = 0;
   3175       while (const ArrayType *AT = Self.Context.getAsArrayType(T)) {
   3176         ++Dim;
   3177         T = AT->getElementType();
   3178       }
   3179       return Dim;
   3180     }
   3181     return 0;
   3182 
   3183   case ATT_ArrayExtent: {
   3184     llvm::APSInt Value;
   3185     uint64_t Dim;
   3186     if (DimExpr->isIntegerConstantExpr(Value, Self.Context, 0, false)) {
   3187       if (Value < llvm::APSInt(Value.getBitWidth(), Value.isUnsigned())) {
   3188         Self.Diag(KeyLoc, diag::err_dimension_expr_not_constant_integer) <<
   3189           DimExpr->getSourceRange();
   3190         return false;
   3191       }
   3192       Dim = Value.getLimitedValue();
   3193     } else {
   3194       Self.Diag(KeyLoc, diag::err_dimension_expr_not_constant_integer) <<
   3195         DimExpr->getSourceRange();
   3196       return false;
   3197     }
   3198 
   3199     if (T->isArrayType()) {
   3200       unsigned D = 0;
   3201       bool Matched = false;
   3202       while (const ArrayType *AT = Self.Context.getAsArrayType(T)) {
   3203         if (Dim == D) {
   3204           Matched = true;
   3205           break;
   3206         }
   3207         ++D;
   3208         T = AT->getElementType();
   3209       }
   3210 
   3211       if (Matched && T->isArrayType()) {
   3212         if (const ConstantArrayType *CAT = Self.Context.getAsConstantArrayType(T))
   3213           return CAT->getSize().getLimitedValue();
   3214       }
   3215     }
   3216     return 0;
   3217   }
   3218   }
   3219   llvm_unreachable("Unknown type trait or not implemented");
   3220 }
   3221 
   3222 ExprResult Sema::BuildArrayTypeTrait(ArrayTypeTrait ATT,
   3223                                      SourceLocation KWLoc,
   3224                                      TypeSourceInfo *TSInfo,
   3225                                      Expr* DimExpr,
   3226                                      SourceLocation RParen) {
   3227   QualType T = TSInfo->getType();
   3228 
   3229   // FIXME: This should likely be tracked as an APInt to remove any host
   3230   // assumptions about the width of size_t on the target.
   3231   uint64_t Value = 0;
   3232   if (!T->isDependentType())
   3233     Value = EvaluateArrayTypeTrait(*this, ATT, T, DimExpr, KWLoc);
   3234 
   3235   // While the specification for these traits from the Embarcadero C++
   3236   // compiler's documentation says the return type is 'unsigned int', Clang
   3237   // returns 'size_t'. On Windows, the primary platform for the Embarcadero
   3238   // compiler, there is no difference. On several other platforms this is an
   3239   // important distinction.
   3240   return Owned(new (Context) ArrayTypeTraitExpr(KWLoc, ATT, TSInfo, Value,
   3241                                                 DimExpr, RParen,
   3242                                                 Context.getSizeType()));
   3243 }
   3244 
   3245 ExprResult Sema::ActOnExpressionTrait(ExpressionTrait ET,
   3246                                       SourceLocation KWLoc,
   3247                                       Expr *Queried,
   3248                                       SourceLocation RParen) {
   3249   // If error parsing the expression, ignore.
   3250   if (!Queried)
   3251     return ExprError();
   3252 
   3253   ExprResult Result = BuildExpressionTrait(ET, KWLoc, Queried, RParen);
   3254 
   3255   return move(Result);
   3256 }
   3257 
   3258 static bool EvaluateExpressionTrait(ExpressionTrait ET, Expr *E) {
   3259   switch (ET) {
   3260   case ET_IsLValueExpr: return E->isLValue();
   3261   case ET_IsRValueExpr: return E->isRValue();
   3262   }
   3263   llvm_unreachable("Expression trait not covered by switch");
   3264 }
   3265 
   3266 ExprResult Sema::BuildExpressionTrait(ExpressionTrait ET,
   3267                                       SourceLocation KWLoc,
   3268                                       Expr *Queried,
   3269                                       SourceLocation RParen) {
   3270   if (Queried->isTypeDependent()) {
   3271     // Delay type-checking for type-dependent expressions.
   3272   } else if (Queried->getType()->isPlaceholderType()) {
   3273     ExprResult PE = CheckPlaceholderExpr(Queried);
   3274     if (PE.isInvalid()) return ExprError();
   3275     return BuildExpressionTrait(ET, KWLoc, PE.take(), RParen);
   3276   }
   3277 
   3278   bool Value = EvaluateExpressionTrait(ET, Queried);
   3279 
   3280   return Owned(new (Context) ExpressionTraitExpr(KWLoc, ET, Queried, Value,
   3281                                                  RParen, Context.BoolTy));
   3282 }
   3283 
   3284 QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS,
   3285                                             ExprValueKind &VK,
   3286                                             SourceLocation Loc,
   3287                                             bool isIndirect) {
   3288   assert(!LHS.get()->getType()->isPlaceholderType() &&
   3289          !RHS.get()->getType()->isPlaceholderType() &&
   3290          "placeholders should have been weeded out by now");
   3291 
   3292   // The LHS undergoes lvalue conversions if this is ->*.
   3293   if (isIndirect) {
   3294     LHS = DefaultLvalueConversion(LHS.take());
   3295     if (LHS.isInvalid()) return QualType();
   3296   }
   3297 
   3298   // The RHS always undergoes lvalue conversions.
   3299   RHS = DefaultLvalueConversion(RHS.take());
   3300   if (RHS.isInvalid()) return QualType();
   3301 
   3302   const char *OpSpelling = isIndirect ? "->*" : ".*";
   3303   // C++ 5.5p2
   3304   //   The binary operator .* [p3: ->*] binds its second operand, which shall
   3305   //   be of type "pointer to member of T" (where T is a completely-defined
   3306   //   class type) [...]
   3307   QualType RHSType = RHS.get()->getType();
   3308   const MemberPointerType *MemPtr = RHSType->getAs<MemberPointerType>();
   3309   if (!MemPtr) {
   3310     Diag(Loc, diag::err_bad_memptr_rhs)
   3311       << OpSpelling << RHSType << RHS.get()->getSourceRange();
   3312     return QualType();
   3313   }
   3314 
   3315   QualType Class(MemPtr->getClass(), 0);
   3316 
   3317   // Note: C++ [expr.mptr.oper]p2-3 says that the class type into which the
   3318   // member pointer points must be completely-defined. However, there is no
   3319   // reason for this semantic distinction, and the rule is not enforced by
   3320   // other compilers. Therefore, we do not check this property, as it is
   3321   // likely to be considered a defect.
   3322 
   3323   // C++ 5.5p2
   3324   //   [...] to its first operand, which shall be of class T or of a class of
   3325   //   which T is an unambiguous and accessible base class. [p3: a pointer to
   3326   //   such a class]
   3327   QualType LHSType = LHS.get()->getType();
   3328   if (isIndirect) {
   3329     if (const PointerType *Ptr = LHSType->getAs<PointerType>())
   3330       LHSType = Ptr->getPointeeType();
   3331     else {
   3332       Diag(Loc, diag::err_bad_memptr_lhs)
   3333         << OpSpelling << 1 << LHSType
   3334         << FixItHint::CreateReplacement(SourceRange(Loc), ".*");
   3335       return QualType();
   3336     }
   3337   }
   3338 
   3339   if (!Context.hasSameUnqualifiedType(Class, LHSType)) {
   3340     // If we want to check the hierarchy, we need a complete type.
   3341     if (RequireCompleteType(Loc, LHSType, PDiag(diag::err_bad_memptr_lhs)
   3342         << OpSpelling << (int)isIndirect)) {
   3343       return QualType();
   3344     }
   3345     CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
   3346                        /*DetectVirtual=*/false);
   3347     // FIXME: Would it be useful to print full ambiguity paths, or is that
   3348     // overkill?
   3349     if (!IsDerivedFrom(LHSType, Class, Paths) ||
   3350         Paths.isAmbiguous(Context.getCanonicalType(Class))) {
   3351       Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling
   3352         << (int)isIndirect << LHS.get()->getType();
   3353       return QualType();
   3354     }
   3355     // Cast LHS to type of use.
   3356     QualType UseType = isIndirect ? Context.getPointerType(Class) : Class;
   3357     ExprValueKind VK = isIndirect ? VK_RValue : LHS.get()->getValueKind();
   3358 
   3359     CXXCastPath BasePath;
   3360     BuildBasePathArray(Paths, BasePath);
   3361     LHS = ImpCastExprToType(LHS.take(), UseType, CK_DerivedToBase, VK,
   3362                             &BasePath);
   3363   }
   3364 
   3365   if (isa<CXXScalarValueInitExpr>(RHS.get()->IgnoreParens())) {
   3366     // Diagnose use of pointer-to-member type which when used as
   3367     // the functional cast in a pointer-to-member expression.
   3368     Diag(Loc, diag::err_pointer_to_member_type) << isIndirect;
   3369      return QualType();
   3370   }
   3371 
   3372   // C++ 5.5p2
   3373   //   The result is an object or a function of the type specified by the
   3374   //   second operand.
   3375   // The cv qualifiers are the union of those in the pointer and the left side,
   3376   // in accordance with 5.5p5 and 5.2.5.
   3377   QualType Result = MemPtr->getPointeeType();
   3378   Result = Context.getCVRQualifiedType(Result, LHSType.getCVRQualifiers());
   3379 
   3380   // C++0x [expr.mptr.oper]p6:
   3381   //   In a .* expression whose object expression is an rvalue, the program is
   3382   //   ill-formed if the second operand is a pointer to member function with
   3383   //   ref-qualifier &. In a ->* expression or in a .* expression whose object
   3384   //   expression is an lvalue, the program is ill-formed if the second operand
   3385   //   is a pointer to member function with ref-qualifier &&.
   3386   if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {
   3387     switch (Proto->getRefQualifier()) {
   3388     case RQ_None:
   3389       // Do nothing
   3390       break;
   3391 
   3392     case RQ_LValue:
   3393       if (!isIndirect && !LHS.get()->Classify(Context).isLValue())
   3394         Diag(Loc, diag::err_pointer_to_member_oper_value_classify)
   3395           << RHSType << 1 << LHS.get()->getSourceRange();
   3396       break;
   3397 
   3398     case RQ_RValue:
   3399       if (isIndirect || !LHS.get()->Classify(Context).isRValue())
   3400         Diag(Loc, diag::err_pointer_to_member_oper_value_classify)
   3401           << RHSType << 0 << LHS.get()->getSourceRange();
   3402       break;
   3403     }
   3404   }
   3405 
   3406   // C++ [expr.mptr.oper]p6:
   3407   //   The result of a .* expression whose second operand is a pointer
   3408   //   to a data member is of the same value category as its
   3409   //   first operand. The result of a .* expression whose second
   3410   //   operand is a pointer to a member function is a prvalue. The
   3411   //   result of an ->* expression is an lvalue if its second operand
   3412   //   is a pointer to data member and a prvalue otherwise.
   3413   if (Result->isFunctionType()) {
   3414     VK = VK_RValue;
   3415     return Context.BoundMemberTy;
   3416   } else if (isIndirect) {
   3417     VK = VK_LValue;
   3418   } else {
   3419     VK = LHS.get()->getValueKind();
   3420   }
   3421 
   3422   return Result;
   3423 }
   3424 
   3425 /// \brief Try to convert a type to another according to C++0x 5.16p3.
   3426 ///
   3427 /// This is part of the parameter validation for the ? operator. If either
   3428 /// value operand is a class type, the two operands are attempted to be
   3429 /// converted to each other. This function does the conversion in one direction.
   3430 /// It returns true if the program is ill-formed and has already been diagnosed
   3431 /// as such.
   3432 static bool TryClassUnification(Sema &Self, Expr *From, Expr *To,
   3433                                 SourceLocation QuestionLoc,
   3434                                 bool &HaveConversion,
   3435                                 QualType &ToType) {
   3436   HaveConversion = false;
   3437   ToType = To->getType();
   3438 
   3439   InitializationKind Kind = InitializationKind::CreateCopy(To->getLocStart(),
   3440                                                            SourceLocation());
   3441   // C++0x 5.16p3
   3442   //   The process for determining whether an operand expression E1 of type T1
   3443   //   can be converted to match an operand expression E2 of type T2 is defined
   3444   //   as follows:
   3445   //   -- If E2 is an lvalue:
   3446   bool ToIsLvalue = To->isLValue();
   3447   if (ToIsLvalue) {
   3448     //   E1 can be converted to match E2 if E1 can be implicitly converted to
   3449     //   type "lvalue reference to T2", subject to the constraint that in the
   3450     //   conversion the reference must bind directly to E1.
   3451     QualType T = Self.Context.getLValueReferenceType(ToType);
   3452     InitializedEntity Entity = InitializedEntity::InitializeTemporary(T);
   3453 
   3454     InitializationSequence InitSeq(Self, Entity, Kind, &From, 1);
   3455     if (InitSeq.isDirectReferenceBinding()) {
   3456       ToType = T;
   3457       HaveConversion = true;
   3458       return false;
   3459     }
   3460 
   3461     if (InitSeq.isAmbiguous())
   3462       return InitSeq.Diagnose(Self, Entity, Kind, &From, 1);
   3463   }
   3464 
   3465   //   -- If E2 is an rvalue, or if the conversion above cannot be done:
   3466   //      -- if E1 and E2 have class type, and the underlying class types are
   3467   //         the same or one is a base class of the other:
   3468   QualType FTy = From->getType();
   3469   QualType TTy = To->getType();
   3470   const RecordType *FRec = FTy->getAs<RecordType>();
   3471   const RecordType *TRec = TTy->getAs<RecordType>();
   3472   bool FDerivedFromT = FRec && TRec && FRec != TRec &&
   3473                        Self.IsDerivedFrom(FTy, TTy);
   3474   if (FRec && TRec &&
   3475       (FRec == TRec || FDerivedFromT || Self.IsDerivedFrom(TTy, FTy))) {
   3476     //         E1 can be converted to match E2 if the class of T2 is the
   3477     //         same type as, or a base class of, the class of T1, and
   3478     //         [cv2 > cv1].
   3479     if (FRec == TRec || FDerivedFromT) {
   3480       if (TTy.isAtLeastAsQualifiedAs(FTy)) {
   3481         InitializedEntity Entity = InitializedEntity::InitializeTemporary(TTy);
   3482         InitializationSequence InitSeq(Self, Entity, Kind, &From, 1);
   3483         if (InitSeq) {
   3484           HaveConversion = true;
   3485           return false;
   3486         }
   3487 
   3488         if (InitSeq.isAmbiguous())
   3489           return InitSeq.Diagnose(Self, Entity, Kind, &From, 1);
   3490       }
   3491     }
   3492 
   3493     return false;
   3494   }
   3495 
   3496   //     -- Otherwise: E1 can be converted to match E2 if E1 can be
   3497   //        implicitly converted to the type that expression E2 would have
   3498   //        if E2 were converted to an rvalue (or the type it has, if E2 is
   3499   //        an rvalue).
   3500   //
   3501   // This actually refers very narrowly to the lvalue-to-rvalue conversion, not
   3502   // to the array-to-pointer or function-to-pointer conversions.
   3503   if (!TTy->getAs<TagType>())
   3504     TTy = TTy.getUnqualifiedType();
   3505 
   3506   InitializedEntity Entity = InitializedEntity::InitializeTemporary(TTy);
   3507   InitializationSequence InitSeq(Self, Entity, Kind, &From, 1);
   3508   HaveConversion = !InitSeq.Failed();
   3509   ToType = TTy;
   3510   if (InitSeq.isAmbiguous())
   3511     return InitSeq.Diagnose(Self, Entity, Kind, &From, 1);
   3512 
   3513   return false;
   3514 }
   3515 
   3516 /// \brief Try to find a common type for two according to C++0x 5.16p5.
   3517 ///
   3518 /// This is part of the parameter validation for the ? operator. If either
   3519 /// value operand is a class type, overload resolution is used to find a
   3520 /// conversion to a common type.
   3521 static bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS,
   3522                                     SourceLocation QuestionLoc) {
   3523   Expr *Args[2] = { LHS.get(), RHS.get() };
   3524   OverloadCandidateSet CandidateSet(QuestionLoc);
   3525   Self.AddBuiltinOperatorCandidates(OO_Conditional, QuestionLoc, Args, 2,
   3526                                     CandidateSet);
   3527 
   3528   OverloadCandidateSet::iterator Best;
   3529   switch (CandidateSet.BestViableFunction(Self, QuestionLoc, Best)) {
   3530     case OR_Success: {
   3531       // We found a match. Perform the conversions on the arguments and move on.
   3532       ExprResult LHSRes =
   3533         Self.PerformImplicitConversion(LHS.get(), Best->BuiltinTypes.ParamTypes[0],
   3534                                        Best->Conversions[0], Sema::AA_Converting);
   3535       if (LHSRes.isInvalid())
   3536         break;
   3537       LHS = move(LHSRes);
   3538 
   3539       ExprResult RHSRes =
   3540         Self.PerformImplicitConversion(RHS.get(), Best->BuiltinTypes.ParamTypes[1],
   3541                                        Best->Conversions[1], Sema::AA_Converting);
   3542       if (RHSRes.isInvalid())
   3543         break;
   3544       RHS = move(RHSRes);
   3545       if (Best->Function)
   3546         Self.MarkDeclarationReferenced(QuestionLoc, Best->Function);
   3547       return false;
   3548     }
   3549 
   3550     case OR_No_Viable_Function:
   3551 
   3552       // Emit a better diagnostic if one of the expressions is a null pointer
   3553       // constant and the other is a pointer type. In this case, the user most
   3554       // likely forgot to take the address of the other expression.
   3555       if (Self.DiagnoseConditionalForNull(LHS.get(), RHS.get(), QuestionLoc))
   3556         return true;
   3557 
   3558       Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
   3559         << LHS.get()->getType() << RHS.get()->getType()
   3560         << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
   3561       return true;
   3562 
   3563     case OR_Ambiguous:
   3564       Self.Diag(QuestionLoc, diag::err_conditional_ambiguous_ovl)
   3565         << LHS.get()->getType() << RHS.get()->getType()
   3566         << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
   3567       // FIXME: Print the possible common types by printing the return types of
   3568       // the viable candidates.
   3569       break;
   3570 
   3571     case OR_Deleted:
   3572       llvm_unreachable("Conditional operator has only built-in overloads");
   3573   }
   3574   return true;
   3575 }
   3576 
   3577 /// \brief Perform an "extended" implicit conversion as returned by
   3578 /// TryClassUnification.
   3579 static bool ConvertForConditional(Sema &Self, ExprResult &E, QualType T) {
   3580   InitializedEntity Entity = InitializedEntity::InitializeTemporary(T);
   3581   InitializationKind Kind = InitializationKind::CreateCopy(E.get()->getLocStart(),
   3582                                                            SourceLocation());
   3583   Expr *Arg = E.take();
   3584   InitializationSequence InitSeq(Self, Entity, Kind, &Arg, 1);
   3585   ExprResult Result = InitSeq.Perform(Self, Entity, Kind, MultiExprArg(&Arg, 1));
   3586   if (Result.isInvalid())
   3587     return true;
   3588 
   3589   E = Result;
   3590   return false;
   3591 }
   3592 
   3593 /// \brief Check the operands of ?: under C++ semantics.
   3594 ///
   3595 /// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y
   3596 /// extension. In this case, LHS == Cond. (But they're not aliases.)
   3597 QualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS,
   3598                                            ExprValueKind &VK, ExprObjectKind &OK,
   3599                                            SourceLocation QuestionLoc) {
   3600   // FIXME: Handle C99's complex types, vector types, block pointers and Obj-C++
   3601   // interface pointers.
   3602 
   3603   // C++0x 5.16p1
   3604   //   The first expression is contextually converted to bool.
   3605   if (!Cond.get()->isTypeDependent()) {
   3606     ExprResult CondRes = CheckCXXBooleanCondition(Cond.take());
   3607     if (CondRes.isInvalid())
   3608       return QualType();
   3609     Cond = move(CondRes);
   3610   }
   3611 
   3612   // Assume r-value.
   3613   VK = VK_RValue;
   3614   OK = OK_Ordinary;
   3615 
   3616   // Either of the arguments dependent?
   3617   if (LHS.get()->isTypeDependent() || RHS.get()->isTypeDependent())
   3618     return Context.DependentTy;
   3619 
   3620   // C++0x 5.16p2
   3621   //   If either the second or the third operand has type (cv) void, ...
   3622   QualType LTy = LHS.get()->getType();
   3623   QualType RTy = RHS.get()->getType();
   3624   bool LVoid = LTy->isVoidType();
   3625   bool RVoid = RTy->isVoidType();
   3626   if (LVoid || RVoid) {
   3627     //   ... then the [l2r] conversions are performed on the second and third
   3628     //   operands ...
   3629     LHS = DefaultFunctionArrayLvalueConversion(LHS.take());
   3630     RHS = DefaultFunctionArrayLvalueConversion(RHS.take());
   3631     if (LHS.isInvalid() || RHS.isInvalid())
   3632       return QualType();
   3633     LTy = LHS.get()->getType();
   3634     RTy = RHS.get()->getType();
   3635 
   3636     //   ... and one of the following shall hold:
   3637     //   -- The second or the third operand (but not both) is a throw-
   3638     //      expression; the result is of the type of the other and is an rvalue.
   3639     bool LThrow = isa<CXXThrowExpr>(LHS.get());
   3640     bool RThrow = isa<CXXThrowExpr>(RHS.get());
   3641     if (LThrow && !RThrow)
   3642       return RTy;
   3643     if (RThrow && !LThrow)
   3644       return LTy;
   3645 
   3646     //   -- Both the second and third operands have type void; the result is of
   3647     //      type void and is an rvalue.
   3648     if (LVoid && RVoid)
   3649       return Context.VoidTy;
   3650 
   3651     // Neither holds, error.
   3652     Diag(QuestionLoc, diag::err_conditional_void_nonvoid)
   3653       << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1)
   3654       << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
   3655     return QualType();
   3656   }
   3657 
   3658   // Neither is void.
   3659 
   3660   // C++0x 5.16p3
   3661   //   Otherwise, if the second and third operand have different types, and
   3662   //   either has (cv) class type, and attempt is made to convert each of those
   3663   //   operands to the other.
   3664   if (!Context.hasSameType(LTy, RTy) &&
   3665       (LTy->isRecordType() || RTy->isRecordType())) {
   3666     ImplicitConversionSequence ICSLeftToRight, ICSRightToLeft;
   3667     // These return true if a single direction is already ambiguous.
   3668     QualType L2RType, R2LType;
   3669     bool HaveL2R, HaveR2L;
   3670     if (TryClassUnification(*this, LHS.get(), RHS.get(), QuestionLoc, HaveL2R, L2RType))
   3671       return QualType();
   3672     if (TryClassUnification(*this, RHS.get(), LHS.get(), QuestionLoc, HaveR2L, R2LType))
   3673       return QualType();
   3674 
   3675     //   If both can be converted, [...] the program is ill-formed.
   3676     if (HaveL2R && HaveR2L) {
   3677       Diag(QuestionLoc, diag::err_conditional_ambiguous)
   3678         << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
   3679       return QualType();
   3680     }
   3681 
   3682     //   If exactly one conversion is possible, that conversion is applied to
   3683     //   the chosen operand and the converted operands are used in place of the
   3684     //   original operands for the remainder of this section.
   3685     if (HaveL2R) {
   3686       if (ConvertForConditional(*this, LHS, L2RType) || LHS.isInvalid())
   3687         return QualType();
   3688       LTy = LHS.get()->getType();
   3689     } else if (HaveR2L) {
   3690       if (ConvertForConditional(*this, RHS, R2LType) || RHS.isInvalid())
   3691         return QualType();
   3692       RTy = RHS.get()->getType();
   3693     }
   3694   }
   3695 
   3696   // C++0x 5.16p4
   3697   //   If the second and third operands are glvalues of the same value
   3698   //   category and have the same type, the result is of that type and
   3699   //   value category and it is a bit-field if the second or the third
   3700   //   operand is a bit-field, or if both are bit-fields.
   3701   // We only extend this to bitfields, not to the crazy other kinds of
   3702   // l-values.
   3703   bool Same = Context.hasSameType(LTy, RTy);
   3704   if (Same &&
   3705       LHS.get()->isGLValue() &&
   3706       LHS.get()->getValueKind() == RHS.get()->getValueKind() &&
   3707       LHS.get()->isOrdinaryOrBitFieldObject() &&
   3708       RHS.get()->isOrdinaryOrBitFieldObject()) {
   3709     VK = LHS.get()->getValueKind();
   3710     if (LHS.get()->getObjectKind() == OK_BitField ||
   3711         RHS.get()->getObjectKind() == OK_BitField)
   3712       OK = OK_BitField;
   3713     return LTy;
   3714   }
   3715 
   3716   // C++0x 5.16p5
   3717   //   Otherwise, the result is an rvalue. If the second and third operands
   3718   //   do not have the same type, and either has (cv) class type, ...
   3719   if (!Same && (LTy->isRecordType() || RTy->isRecordType())) {
   3720     //   ... overload resolution is used to determine the conversions (if any)
   3721     //   to be applied to the operands. If the overload resolution fails, the
   3722     //   program is ill-formed.
   3723     if (FindConditionalOverload(*this, LHS, RHS, QuestionLoc))
   3724       return QualType();
   3725   }
   3726 
   3727   // C++0x 5.16p6
   3728   //   LValue-to-rvalue, array-to-pointer, and function-to-pointer standard
   3729   //   conversions are performed on the second and third operands.
   3730   LHS = DefaultFunctionArrayLvalueConversion(LHS.take());
   3731   RHS = DefaultFunctionArrayLvalueConversion(RHS.take());
   3732   if (LHS.isInvalid() || RHS.isInvalid())
   3733     return QualType();
   3734   LTy = LHS.get()->getType();
   3735   RTy = RHS.get()->getType();
   3736 
   3737   //   After those conversions, one of the following shall hold:
   3738   //   -- The second and third operands have the same type; the result
   3739   //      is of that type. If the operands have class type, the result
   3740   //      is a prvalue temporary of the result type, which is
   3741   //      copy-initialized from either the second operand or the third
   3742   //      operand depending on the value of the first operand.
   3743   if (Context.getCanonicalType(LTy) == Context.getCanonicalType(RTy)) {
   3744     if (LTy->isRecordType()) {
   3745       // The operands have class type. Make a temporary copy.
   3746       InitializedEntity Entity = InitializedEntity::InitializeTemporary(LTy);
   3747       ExprResult LHSCopy = PerformCopyInitialization(Entity,
   3748                                                      SourceLocation(),
   3749                                                      LHS);
   3750       if (LHSCopy.isInvalid())
   3751         return QualType();
   3752 
   3753       ExprResult RHSCopy = PerformCopyInitialization(Entity,
   3754                                                      SourceLocation(),
   3755                                                      RHS);
   3756       if (RHSCopy.isInvalid())
   3757         return QualType();
   3758 
   3759       LHS = LHSCopy;
   3760       RHS = RHSCopy;
   3761     }
   3762 
   3763     return LTy;
   3764   }
   3765 
   3766   // Extension: conditional operator involving vector types.
   3767   if (LTy->isVectorType() || RTy->isVectorType())
   3768     return CheckVectorOperands(LHS, RHS, QuestionLoc, /*isCompAssign*/false);
   3769 
   3770   //   -- The second and third operands have arithmetic or enumeration type;
   3771   //      the usual arithmetic conversions are performed to bring them to a
   3772   //      common type, and the result is of that type.
   3773   if (LTy->isArithmeticType() && RTy->isArithmeticType()) {
   3774     UsualArithmeticConversions(LHS, RHS);
   3775     if (LHS.isInvalid() || RHS.isInvalid())
   3776       return QualType();
   3777     return LHS.get()->getType();
   3778   }
   3779 
   3780   //   -- The second and third operands have pointer type, or one has pointer
   3781   //      type and the other is a null pointer constant; pointer conversions
   3782   //      and qualification conversions are performed to bring them to their
   3783   //      composite pointer type. The result is of the composite pointer type.
   3784   //   -- The second and third operands have pointer to member type, or one has
   3785   //      pointer to member type and the other is a null pointer constant;
   3786   //      pointer to member conversions and qualification conversions are
   3787   //      performed to bring them to a common type, whose cv-qualification
   3788   //      shall match the cv-qualification of either the second or the third
   3789   //      operand. The result is of the common type.
   3790   bool NonStandardCompositeType = false;
   3791   QualType Composite = FindCompositePointerType(QuestionLoc, LHS, RHS,
   3792                               isSFINAEContext()? 0 : &NonStandardCompositeType);
   3793   if (!Composite.isNull()) {
   3794     if (NonStandardCompositeType)
   3795       Diag(QuestionLoc,
   3796            diag::ext_typecheck_cond_incompatible_operands_nonstandard)
   3797         << LTy << RTy << Composite
   3798         << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
   3799 
   3800     return Composite;
   3801   }
   3802 
   3803   // Similarly, attempt to find composite type of two objective-c pointers.
   3804   Composite = FindCompositeObjCPointerType(LHS, RHS, QuestionLoc);
   3805   if (!Composite.isNull())
   3806     return Composite;
   3807 
   3808   // Check if we are using a null with a non-pointer type.
   3809   if (DiagnoseConditionalForNull(LHS.get(), RHS.get(), QuestionLoc))
   3810     return QualType();
   3811 
   3812   Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
   3813     << LHS.get()->getType() << RHS.get()->getType()
   3814     << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
   3815   return QualType();
   3816 }
   3817 
   3818 /// \brief Find a merged pointer type and convert the two expressions to it.
   3819 ///
   3820 /// This finds the composite pointer type (or member pointer type) for @p E1
   3821 /// and @p E2 according to C++0x 5.9p2. It converts both expressions to this
   3822 /// type and returns it.
   3823 /// It does not emit diagnostics.
   3824 ///
   3825 /// \param Loc The location of the operator requiring these two expressions to
   3826 /// be converted to the composite pointer type.
   3827 ///
   3828 /// If \p NonStandardCompositeType is non-NULL, then we are permitted to find
   3829 /// a non-standard (but still sane) composite type to which both expressions
   3830 /// can be converted. When such a type is chosen, \c *NonStandardCompositeType
   3831 /// will be set true.
   3832 QualType Sema::FindCompositePointerType(SourceLocation Loc,
   3833                                         Expr *&E1, Expr *&E2,
   3834                                         bool *NonStandardCompositeType) {
   3835   if (NonStandardCompositeType)
   3836     *NonStandardCompositeType = false;
   3837 
   3838   assert(getLangOptions().CPlusPlus && "This function assumes C++");
   3839   QualType T1 = E1->getType(), T2 = E2->getType();
   3840 
   3841   if (!T1->isAnyPointerType() && !T1->isMemberPointerType() &&
   3842       !T2->isAnyPointerType() && !T2->isMemberPointerType())
   3843    return QualType();
   3844 
   3845   // C++0x 5.9p2
   3846   //   Pointer conversions and qualification conversions are performed on
   3847   //   pointer operands to bring them to their composite pointer type. If
   3848   //   one operand is a null pointer constant, the composite pointer type is
   3849   //   the type of the other operand.
   3850   if (E1->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
   3851     if (T2->isMemberPointerType())
   3852       E1 = ImpCastExprToType(E1, T2, CK_NullToMemberPointer).take();
   3853     else
   3854       E1 = ImpCastExprToType(E1, T2, CK_NullToPointer).take();
   3855     return T2;
   3856   }
   3857   if (E2->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
   3858     if (T1->isMemberPointerType())
   3859       E2 = ImpCastExprToType(E2, T1, CK_NullToMemberPointer).take();
   3860     else
   3861       E2 = ImpCastExprToType(E2, T1, CK_NullToPointer).take();
   3862     return T1;
   3863   }
   3864 
   3865   // Now both have to be pointers or member pointers.
   3866   if ((!T1->isPointerType() && !T1->isMemberPointerType()) ||
   3867       (!T2->isPointerType() && !T2->isMemberPointerType()))
   3868     return QualType();
   3869 
   3870   //   Otherwise, of one of the operands has type "pointer to cv1 void," then
   3871   //   the other has type "pointer to cv2 T" and the composite pointer type is
   3872   //   "pointer to cv12 void," where cv12 is the union of cv1 and cv2.
   3873   //   Otherwise, the composite pointer type is a pointer type similar to the
   3874   //   type of one of the operands, with a cv-qualification signature that is
   3875   //   the union of the cv-qualification signatures of the operand types.
   3876   // In practice, the first part here is redundant; it's subsumed by the second.
   3877   // What we do here is, we build the two possible composite types, and try the
   3878   // conversions in both directions. If only one works, or if the two composite
   3879   // types are the same, we have succeeded.
   3880   // FIXME: extended qualifiers?
   3881   typedef SmallVector<unsigned, 4> QualifierVector;
   3882   QualifierVector QualifierUnion;
   3883   typedef SmallVector<std::pair<const Type *, const Type *>, 4>
   3884       ContainingClassVector;
   3885   ContainingClassVector MemberOfClass;
   3886   QualType Composite1 = Context.getCanonicalType(T1),
   3887            Composite2 = Context.getCanonicalType(T2);
   3888   unsigned NeedConstBefore = 0;
   3889   do {
   3890     const PointerType *Ptr1, *Ptr2;
   3891     if ((Ptr1 = Composite1->getAs<PointerType>()) &&
   3892         (Ptr2 = Composite2->getAs<PointerType>())) {
   3893       Composite1 = Ptr1->getPointeeType();
   3894       Composite2 = Ptr2->getPointeeType();
   3895 
   3896       // If we're allowed to create a non-standard composite type, keep track
   3897       // of where we need to fill in additional 'const' qualifiers.
   3898       if (NonStandardCompositeType &&
   3899           Composite1.getCVRQualifiers() != Composite2.getCVRQualifiers())
   3900         NeedConstBefore = QualifierUnion.size();
   3901 
   3902       QualifierUnion.push_back(
   3903                  Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers());
   3904       MemberOfClass.push_back(std::make_pair((const Type *)0, (const Type *)0));
   3905       continue;
   3906     }
   3907 
   3908     const MemberPointerType *MemPtr1, *MemPtr2;
   3909     if ((MemPtr1 = Composite1->getAs<MemberPointerType>()) &&
   3910         (MemPtr2 = Composite2->getAs<MemberPointerType>())) {
   3911       Composite1 = MemPtr1->getPointeeType();
   3912       Composite2 = MemPtr2->getPointeeType();
   3913 
   3914       // If we're allowed to create a non-standard composite type, keep track
   3915       // of where we need to fill in additional 'const' qualifiers.
   3916       if (NonStandardCompositeType &&
   3917           Composite1.getCVRQualifiers() != Composite2.getCVRQualifiers())
   3918         NeedConstBefore = QualifierUnion.size();
   3919 
   3920       QualifierUnion.push_back(
   3921                  Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers());
   3922       MemberOfClass.push_back(std::make_pair(MemPtr1->getClass(),
   3923                                              MemPtr2->getClass()));
   3924       continue;
   3925     }
   3926 
   3927     // FIXME: block pointer types?
   3928 
   3929     // Cannot unwrap any more types.
   3930     break;
   3931   } while (true);
   3932 
   3933   if (NeedConstBefore && NonStandardCompositeType) {
   3934     // Extension: Add 'const' to qualifiers that come before the first qualifier
   3935     // mismatch, so that our (non-standard!) composite type meets the
   3936     // requirements of C++ [conv.qual]p4 bullet 3.
   3937     for (unsigned I = 0; I != NeedConstBefore; ++I) {
   3938       if ((QualifierUnion[I] & Qualifiers::Const) == 0) {
   3939         QualifierUnion[I] = QualifierUnion[I] | Qualifiers::Const;
   3940         *NonStandardCompositeType = true;
   3941       }
   3942     }
   3943   }
   3944 
   3945   // Rewrap the composites as pointers or member pointers with the union CVRs.
   3946   ContainingClassVector::reverse_iterator MOC
   3947     = MemberOfClass.rbegin();
   3948   for (QualifierVector::reverse_iterator
   3949          I = QualifierUnion.rbegin(),
   3950          E = QualifierUnion.rend();
   3951        I != E; (void)++I, ++MOC) {
   3952     Qualifiers Quals = Qualifiers::fromCVRMask(*I);
   3953     if (MOC->first && MOC->second) {
   3954       // Rebuild member pointer type
   3955       Composite1 = Context.getMemberPointerType(
   3956                                     Context.getQualifiedType(Composite1, Quals),
   3957                                     MOC->first);
   3958       Composite2 = Context.getMemberPointerType(
   3959                                     Context.getQualifiedType(Composite2, Quals),
   3960                                     MOC->second);
   3961     } else {
   3962       // Rebuild pointer type
   3963       Composite1
   3964         = Context.getPointerType(Context.getQualifiedType(Composite1, Quals));
   3965       Composite2
   3966         = Context.getPointerType(Context.getQualifiedType(Composite2, Quals));
   3967     }
   3968   }
   3969 
   3970   // Try to convert to the first composite pointer type.
   3971   InitializedEntity Entity1
   3972     = InitializedEntity::InitializeTemporary(Composite1);
   3973   InitializationKind Kind
   3974     = InitializationKind::CreateCopy(Loc, SourceLocation());
   3975   InitializationSequence E1ToC1(*this, Entity1, Kind, &E1, 1);
   3976   InitializationSequence E2ToC1(*this, Entity1, Kind, &E2, 1);
   3977 
   3978   if (E1ToC1 && E2ToC1) {
   3979     // Conversion to Composite1 is viable.
   3980     if (!Context.hasSameType(Composite1, Composite2)) {
   3981       // Composite2 is a different type from Composite1. Check whether
   3982       // Composite2 is also viable.
   3983       InitializedEntity Entity2
   3984         = InitializedEntity::InitializeTemporary(Composite2);
   3985       InitializationSequence E1ToC2(*this, Entity2, Kind, &E1, 1);
   3986       InitializationSequence E2ToC2(*this, Entity2, Kind, &E2, 1);
   3987       if (E1ToC2 && E2ToC2) {
   3988         // Both Composite1 and Composite2 are viable and are different;
   3989         // this is an ambiguity.
   3990         return QualType();
   3991       }
   3992     }
   3993 
   3994     // Convert E1 to Composite1
   3995     ExprResult E1Result
   3996       = E1ToC1.Perform(*this, Entity1, Kind, MultiExprArg(*this,&E1,1));
   3997     if (E1Result.isInvalid())
   3998       return QualType();
   3999     E1 = E1Result.takeAs<Expr>();
   4000 
   4001     // Convert E2 to Composite1
   4002     ExprResult E2Result
   4003       = E2ToC1.Perform(*this, Entity1, Kind, MultiExprArg(*this,&E2,1));
   4004     if (E2Result.isInvalid())
   4005       return QualType();
   4006     E2 = E2Result.takeAs<Expr>();
   4007 
   4008     return Composite1;
   4009   }
   4010 
   4011   // Check whether Composite2 is viable.
   4012   InitializedEntity Entity2
   4013     = InitializedEntity::InitializeTemporary(Composite2);
   4014   InitializationSequence E1ToC2(*this, Entity2, Kind, &E1, 1);
   4015   InitializationSequence E2ToC2(*this, Entity2, Kind, &E2, 1);
   4016   if (!E1ToC2 || !E2ToC2)
   4017     return QualType();
   4018 
   4019   // Convert E1 to Composite2
   4020   ExprResult E1Result
   4021     = E1ToC2.Perform(*this, Entity2, Kind, MultiExprArg(*this, &E1, 1));
   4022   if (E1Result.isInvalid())
   4023     return QualType();
   4024   E1 = E1Result.takeAs<Expr>();
   4025 
   4026   // Convert E2 to Composite2
   4027   ExprResult E2Result
   4028     = E2ToC2.Perform(*this, Entity2, Kind, MultiExprArg(*this, &E2, 1));
   4029   if (E2Result.isInvalid())
   4030     return QualType();
   4031   E2 = E2Result.takeAs<Expr>();
   4032 
   4033   return Composite2;
   4034 }
   4035 
   4036 ExprResult Sema::MaybeBindToTemporary(Expr *E) {
   4037   if (!E)
   4038     return ExprError();
   4039 
   4040   assert(!isa<CXXBindTemporaryExpr>(E) && "Double-bound temporary?");
   4041 
   4042   // If the result is a glvalue, we shouldn't bind it.
   4043   if (!E->isRValue())
   4044     return Owned(E);
   4045 
   4046   // In ARC, calls that return a retainable type can return retained,
   4047   // in which case we have to insert a consuming cast.
   4048   if (getLangOptions().ObjCAutoRefCount &&
   4049       E->getType()->isObjCRetainableType()) {
   4050 
   4051     bool ReturnsRetained;
   4052 
   4053     // For actual calls, we compute this by examining the type of the
   4054     // called value.
   4055     if (CallExpr *Call = dyn_cast<CallExpr>(E)) {
   4056       Expr *Callee = Call->getCallee()->IgnoreParens();
   4057       QualType T = Callee->getType();
   4058 
   4059       if (T == Context.BoundMemberTy) {
   4060         // Handle pointer-to-members.
   4061         if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(Callee))
   4062           T = BinOp->getRHS()->getType();
   4063         else if (MemberExpr *Mem = dyn_cast<MemberExpr>(Callee))
   4064           T = Mem->getMemberDecl()->getType();
   4065       }
   4066 
   4067       if (const PointerType *Ptr = T->getAs<PointerType>())
   4068         T = Ptr->getPointeeType();
   4069       else if (const BlockPointerType *Ptr = T->getAs<BlockPointerType>())
   4070         T = Ptr->getPointeeType();
   4071       else if (const MemberPointerType *MemPtr = T->getAs<MemberPointerType>())
   4072         T = MemPtr->getPointeeType();
   4073 
   4074       const FunctionType *FTy = T->getAs<FunctionType>();
   4075       assert(FTy && "call to value not of function type?");
   4076       ReturnsRetained = FTy->getExtInfo().getProducesResult();
   4077 
   4078     // ActOnStmtExpr arranges things so that StmtExprs of retainable
   4079     // type always produce a +1 object.
   4080     } else if (isa<StmtExpr>(E)) {
   4081       ReturnsRetained = true;
   4082 
   4083     // For message sends and property references, we try to find an
   4084     // actual method.  FIXME: we should infer retention by selector in
   4085     // cases where we don't have an actual method.
   4086     } else {
   4087       ObjCMethodDecl *D = 0;
   4088       if (ObjCMessageExpr *Send = dyn_cast<ObjCMessageExpr>(E)) {
   4089         D = Send->getMethodDecl();
   4090       } else {
   4091         CastExpr *CE = cast<CastExpr>(E);
   4092         assert(CE->getCastKind() == CK_GetObjCProperty);
   4093         const ObjCPropertyRefExpr *PRE = CE->getSubExpr()->getObjCProperty();
   4094         D = (PRE->isImplicitProperty() ? PRE->getImplicitPropertyGetter() : 0);
   4095       }
   4096 
   4097       ReturnsRetained = (D && D->hasAttr<NSReturnsRetainedAttr>());
   4098 
   4099       // Don't do reclaims on performSelector calls; despite their
   4100       // return type, the invoked method doesn't necessarily actually
   4101       // return an object.
   4102       if (!ReturnsRetained &&
   4103           D && D->getMethodFamily() == OMF_performSelector)
   4104         return Owned(E);
   4105     }
   4106 
   4107     ExprNeedsCleanups = true;
   4108 
   4109     CastKind ck = (ReturnsRetained ? CK_ARCConsumeObject
   4110                                    : CK_ARCReclaimReturnedObject);
   4111     return Owned(ImplicitCastExpr::Create(Context, E->getType(), ck, E, 0,
   4112                                           VK_RValue));
   4113   }
   4114 
   4115   if (!getLangOptions().CPlusPlus)
   4116     return Owned(E);
   4117 
   4118   const RecordType *RT = E->getType()->getAs<RecordType>();
   4119   if (!RT)
   4120     return Owned(E);
   4121 
   4122   // That should be enough to guarantee that this type is complete.
   4123   // If it has a trivial destructor, we can avoid the extra copy.
   4124   CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
   4125   if (RD->isInvalidDecl() || RD->hasTrivialDestructor())
   4126     return Owned(E);
   4127 
   4128   CXXDestructorDecl *Destructor = LookupDestructor(RD);
   4129 
   4130   CXXTemporary *Temp = CXXTemporary::Create(Context, Destructor);
   4131   if (Destructor) {
   4132     MarkDeclarationReferenced(E->getExprLoc(), Destructor);
   4133     CheckDestructorAccess(E->getExprLoc(), Destructor,
   4134                           PDiag(diag::err_access_dtor_temp)
   4135                             << E->getType());
   4136 
   4137     ExprTemporaries.push_back(Temp);
   4138     ExprNeedsCleanups = true;
   4139   }
   4140   return Owned(CXXBindTemporaryExpr::Create(Context, Temp, E));
   4141 }
   4142 
   4143 Expr *Sema::MaybeCreateExprWithCleanups(Expr *SubExpr) {
   4144   assert(SubExpr && "sub expression can't be null!");
   4145 
   4146   unsigned FirstTemporary = ExprEvalContexts.back().NumTemporaries;
   4147   assert(ExprTemporaries.size() >= FirstTemporary);
   4148   assert(ExprNeedsCleanups || ExprTemporaries.size() == FirstTemporary);
   4149   if (!ExprNeedsCleanups)
   4150     return SubExpr;
   4151 
   4152   Expr *E = ExprWithCleanups::Create(Context, SubExpr,
   4153                                      ExprTemporaries.begin() + FirstTemporary,
   4154                                      ExprTemporaries.size() - FirstTemporary);
   4155   ExprTemporaries.erase(ExprTemporaries.begin() + FirstTemporary,
   4156                         ExprTemporaries.end());
   4157   ExprNeedsCleanups = false;
   4158 
   4159   return E;
   4160 }
   4161 
   4162 ExprResult
   4163 Sema::MaybeCreateExprWithCleanups(ExprResult SubExpr) {
   4164   if (SubExpr.isInvalid())
   4165     return ExprError();
   4166 
   4167   return Owned(MaybeCreateExprWithCleanups(SubExpr.take()));
   4168 }
   4169 
   4170 Stmt *Sema::MaybeCreateStmtWithCleanups(Stmt *SubStmt) {
   4171   assert(SubStmt && "sub statement can't be null!");
   4172 
   4173   if (!ExprNeedsCleanups)
   4174     return SubStmt;
   4175 
   4176   // FIXME: In order to attach the temporaries, wrap the statement into
   4177   // a StmtExpr; currently this is only used for asm statements.
   4178   // This is hacky, either create a new CXXStmtWithTemporaries statement or
   4179   // a new AsmStmtWithTemporaries.
   4180   CompoundStmt *CompStmt = new (Context) CompoundStmt(Context, &SubStmt, 1,
   4181                                                       SourceLocation(),
   4182                                                       SourceLocation());
   4183   Expr *E = new (Context) StmtExpr(CompStmt, Context.VoidTy, SourceLocation(),
   4184                                    SourceLocation());
   4185   return MaybeCreateExprWithCleanups(E);
   4186 }
   4187 
   4188 ExprResult
   4189 Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc,
   4190                                    tok::TokenKind OpKind, ParsedType &ObjectType,
   4191                                    bool &MayBePseudoDestructor) {
   4192   // Since this might be a postfix expression, get rid of ParenListExprs.
   4193   ExprResult Result = MaybeConvertParenListExprToParenExpr(S, Base);
   4194   if (Result.isInvalid()) return ExprError();
   4195   Base = Result.get();
   4196 
   4197   QualType BaseType = Base->getType();
   4198   MayBePseudoDestructor = false;
   4199   if (BaseType->isDependentType()) {
   4200     // If we have a pointer to a dependent type and are using the -> operator,
   4201     // the object type is the type that the pointer points to. We might still
   4202     // have enough information about that type to do something useful.
   4203     if (OpKind == tok::arrow)
   4204       if (const PointerType *Ptr = BaseType->getAs<PointerType>())
   4205         BaseType = Ptr->getPointeeType();
   4206 
   4207     ObjectType = ParsedType::make(BaseType);
   4208     MayBePseudoDestructor = true;
   4209     return Owned(Base);
   4210   }
   4211 
   4212   // C++ [over.match.oper]p8:
   4213   //   [...] When operator->returns, the operator-> is applied  to the value
   4214   //   returned, with the original second operand.
   4215   if (OpKind == tok::arrow) {
   4216     // The set of types we've considered so far.
   4217     llvm::SmallPtrSet<CanQualType,8> CTypes;
   4218     SmallVector<SourceLocation, 8> Locations;
   4219     CTypes.insert(Context.getCanonicalType(BaseType));
   4220 
   4221     while (BaseType->isRecordType()) {
   4222       Result = BuildOverloadedArrowExpr(S, Base, OpLoc);
   4223       if (Result.isInvalid())
   4224         return ExprError();
   4225       Base = Result.get();
   4226       if (CXXOperatorCallExpr *OpCall = dyn_cast<CXXOperatorCallExpr>(Base))
   4227         Locations.push_back(OpCall->getDirectCallee()->getLocation());
   4228       BaseType = Base->getType();
   4229       CanQualType CBaseType = Context.getCanonicalType(BaseType);
   4230       if (!CTypes.insert(CBaseType)) {
   4231         Diag(OpLoc, diag::err_operator_arrow_circular);
   4232         for (unsigned i = 0; i < Locations.size(); i++)
   4233           Diag(Locations[i], diag::note_declared_at);
   4234         return ExprError();
   4235       }
   4236     }
   4237 
   4238     if (BaseType->isPointerType())
   4239       BaseType = BaseType->getPointeeType();
   4240   }
   4241 
   4242   // We could end up with various non-record types here, such as extended
   4243   // vector types or Objective-C interfaces. Just return early and let
   4244   // ActOnMemberReferenceExpr do the work.
   4245   if (!BaseType->isRecordType()) {
   4246     // C++ [basic.lookup.classref]p2:
   4247     //   [...] If the type of the object expression is of pointer to scalar
   4248     //   type, the unqualified-id is looked up in the context of the complete
   4249     //   postfix-expression.
   4250     //
   4251     // This also indicates that we should be parsing a
   4252     // pseudo-destructor-name.
   4253     ObjectType = ParsedType();
   4254     MayBePseudoDestructor = true;
   4255     return Owned(Base);
   4256   }
   4257 
   4258   // The object type must be complete (or dependent).
   4259   if (!BaseType->isDependentType() &&
   4260       RequireCompleteType(OpLoc, BaseType,
   4261                           PDiag(diag::err_incomplete_member_access)))
   4262     return ExprError();
   4263 
   4264   // C++ [basic.lookup.classref]p2:
   4265   //   If the id-expression in a class member access (5.2.5) is an
   4266   //   unqualified-id, and the type of the object expression is of a class
   4267   //   type C (or of pointer to a class type C), the unqualified-id is looked
   4268   //   up in the scope of class C. [...]
   4269   ObjectType = ParsedType::make(BaseType);
   4270   return move(Base);
   4271 }
   4272 
   4273 ExprResult Sema::DiagnoseDtorReference(SourceLocation NameLoc,
   4274                                                    Expr *MemExpr) {
   4275   SourceLocation ExpectedLParenLoc = PP.getLocForEndOfToken(NameLoc);
   4276   Diag(MemExpr->getLocStart(), diag::err_dtor_expr_without_call)
   4277     << isa<CXXPseudoDestructorExpr>(MemExpr)
   4278     << FixItHint::CreateInsertion(ExpectedLParenLoc, "()");
   4279 
   4280   return ActOnCallExpr(/*Scope*/ 0,
   4281                        MemExpr,
   4282                        /*LPLoc*/ ExpectedLParenLoc,
   4283                        MultiExprArg(),
   4284                        /*RPLoc*/ ExpectedLParenLoc);
   4285 }
   4286 
   4287 ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base,
   4288                                            SourceLocation OpLoc,
   4289                                            tok::TokenKind OpKind,
   4290                                            const CXXScopeSpec &SS,
   4291                                            TypeSourceInfo *ScopeTypeInfo,
   4292                                            SourceLocation CCLoc,
   4293                                            SourceLocation TildeLoc,
   4294                                          PseudoDestructorTypeStorage Destructed,
   4295                                            bool HasTrailingLParen) {
   4296   TypeSourceInfo *DestructedTypeInfo = Destructed.getTypeSourceInfo();
   4297 
   4298   // C++ [expr.pseudo]p2:
   4299   //   The left-hand side of the dot operator shall be of scalar type. The
   4300   //   left-hand side of the arrow operator shall be of pointer to scalar type.
   4301   //   This scalar type is the object type.
   4302   QualType ObjectType = Base->getType();
   4303   if (OpKind == tok::arrow) {
   4304     if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {
   4305       ObjectType = Ptr->getPointeeType();
   4306     } else if (!Base->isTypeDependent()) {
   4307       // The user wrote "p->" when she probably meant "p."; fix it.
   4308       Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
   4309         << ObjectType << true
   4310         << FixItHint::CreateReplacement(OpLoc, ".");
   4311       if (isSFINAEContext())
   4312         return ExprError();
   4313 
   4314       OpKind = tok::period;
   4315     }
   4316   }
   4317 
   4318   if (!ObjectType->isDependentType() && !ObjectType->isScalarType()) {
   4319     Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar)
   4320       << ObjectType << Base->getSourceRange();
   4321     return ExprError();
   4322   }
   4323 
   4324   // C++ [expr.pseudo]p2:
   4325   //   [...] The cv-unqualified versions of the object type and of the type
   4326   //   designated by the pseudo-destructor-name shall be the same type.
   4327   if (DestructedTypeInfo) {
   4328     QualType DestructedType = DestructedTypeInfo->getType();
   4329     SourceLocation DestructedTypeStart
   4330       = DestructedTypeInfo->getTypeLoc().getLocalSourceRange().getBegin();
   4331     if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {
   4332       if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {
   4333         Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch)
   4334           << ObjectType << DestructedType << Base->getSourceRange()
   4335           << DestructedTypeInfo->getTypeLoc().getLocalSourceRange();
   4336 
   4337         // Recover by setting the destructed type to the object type.
   4338         DestructedType = ObjectType;
   4339         DestructedTypeInfo = Context.getTrivialTypeSourceInfo(ObjectType,
   4340                                                            DestructedTypeStart);
   4341         Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo);
   4342       } else if (DestructedType.getObjCLifetime() !=
   4343                                                 ObjectType.getObjCLifetime()) {
   4344 
   4345         if (DestructedType.getObjCLifetime() == Qualifiers::OCL_None) {
   4346           // Okay: just pretend that the user provided the correctly-qualified
   4347           // type.
   4348         } else {
   4349           Diag(DestructedTypeStart, diag::err_arc_pseudo_dtor_inconstant_quals)
   4350             << ObjectType << DestructedType << Base->getSourceRange()
   4351             << DestructedTypeInfo->getTypeLoc().getLocalSourceRange();
   4352         }
   4353 
   4354         // Recover by setting the destructed type to the object type.
   4355         DestructedType = ObjectType;
   4356         DestructedTypeInfo = Context.getTrivialTypeSourceInfo(ObjectType,
   4357                                                            DestructedTypeStart);
   4358         Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo);
   4359       }
   4360     }
   4361   }
   4362 
   4363   // C++ [expr.pseudo]p2:
   4364   //   [...] Furthermore, the two type-names in a pseudo-destructor-name of the
   4365   //   form
   4366   //
   4367   //     ::[opt] nested-name-specifier[opt] type-name :: ~ type-name
   4368   //
   4369   //   shall designate the same scalar type.
   4370   if (ScopeTypeInfo) {
   4371     QualType ScopeType = ScopeTypeInfo->getType();
   4372     if (!ScopeType->isDependentType() && !ObjectType->isDependentType() &&
   4373         !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {
   4374 
   4375       Diag(ScopeTypeInfo->getTypeLoc().getLocalSourceRange().getBegin(),
   4376            diag::err_pseudo_dtor_type_mismatch)
   4377         << ObjectType << ScopeType << Base->getSourceRange()
   4378         << ScopeTypeInfo->getTypeLoc().getLocalSourceRange();
   4379 
   4380       ScopeType = QualType();
   4381       ScopeTypeInfo = 0;
   4382     }
   4383   }
   4384 
   4385   Expr *Result
   4386     = new (Context) CXXPseudoDestructorExpr(Context, Base,
   4387                                             OpKind == tok::arrow, OpLoc,
   4388                                             SS.getWithLocInContext(Context),
   4389                                             ScopeTypeInfo,
   4390                                             CCLoc,
   4391                                             TildeLoc,
   4392                                             Destructed);
   4393 
   4394   if (HasTrailingLParen)
   4395     return Owned(Result);
   4396 
   4397   return DiagnoseDtorReference(Destructed.getLocation(), Result);
   4398 }
   4399 
   4400 ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
   4401                                            SourceLocation OpLoc,
   4402                                            tok::TokenKind OpKind,
   4403                                            CXXScopeSpec &SS,
   4404                                            UnqualifiedId &FirstTypeName,
   4405                                            SourceLocation CCLoc,
   4406                                            SourceLocation TildeLoc,
   4407                                            UnqualifiedId &SecondTypeName,
   4408                                            bool HasTrailingLParen) {
   4409   assert((FirstTypeName.getKind() == UnqualifiedId::IK_TemplateId ||
   4410           FirstTypeName.getKind() == UnqualifiedId::IK_Identifier) &&
   4411          "Invalid first type name in pseudo-destructor");
   4412   assert((SecondTypeName.getKind() == UnqualifiedId::IK_TemplateId ||
   4413           SecondTypeName.getKind() == UnqualifiedId::IK_Identifier) &&
   4414          "Invalid second type name in pseudo-destructor");
   4415 
   4416   // C++ [expr.pseudo]p2:
   4417   //   The left-hand side of the dot operator shall be of scalar type. The
   4418   //   left-hand side of the arrow operator shall be of pointer to scalar type.
   4419   //   This scalar type is the object type.
   4420   QualType ObjectType = Base->getType();
   4421   if (OpKind == tok::arrow) {
   4422     if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {
   4423       ObjectType = Ptr->getPointeeType();
   4424     } else if (!ObjectType->isDependentType()) {
   4425       // The user wrote "p->" when she probably meant "p."; fix it.
   4426       Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
   4427         << ObjectType << true
   4428         << FixItHint::CreateReplacement(OpLoc, ".");
   4429       if (isSFINAEContext())
   4430         return ExprError();
   4431 
   4432       OpKind = tok::period;
   4433     }
   4434   }
   4435 
   4436   // Compute the object type that we should use for name lookup purposes. Only
   4437   // record types and dependent types matter.
   4438   ParsedType ObjectTypePtrForLookup;
   4439   if (!SS.isSet()) {
   4440     if (ObjectType->isRecordType())
   4441       ObjectTypePtrForLookup = ParsedType::make(ObjectType);
   4442     else if (ObjectType->isDependentType())
   4443       ObjectTypePtrForLookup = ParsedType::make(Context.DependentTy);
   4444   }
   4445 
   4446   // Convert the name of the type being destructed (following the ~) into a
   4447   // type (with source-location information).
   4448   QualType DestructedType;
   4449   TypeSourceInfo *DestructedTypeInfo = 0;
   4450   PseudoDestructorTypeStorage Destructed;
   4451   if (SecondTypeName.getKind() == UnqualifiedId::IK_Identifier) {
   4452     ParsedType T = getTypeName(*SecondTypeName.Identifier,
   4453                                SecondTypeName.StartLocation,
   4454                                S, &SS, true, false, ObjectTypePtrForLookup);
   4455     if (!T &&
   4456         ((SS.isSet() && !computeDeclContext(SS, false)) ||
   4457          (!SS.isSet() && ObjectType->isDependentType()))) {
   4458       // The name of the type being destroyed is a dependent name, and we
   4459       // couldn't find anything useful in scope. Just store the identifier and
   4460       // it's location, and we'll perform (qualified) name lookup again at
   4461       // template instantiation time.
   4462       Destructed = PseudoDestructorTypeStorage(SecondTypeName.Identifier,
   4463                                                SecondTypeName.StartLocation);
   4464     } else if (!T) {
   4465       Diag(SecondTypeName.StartLocation,
   4466            diag::err_pseudo_dtor_destructor_non_type)
   4467         << SecondTypeName.Identifier << ObjectType;
   4468       if (isSFINAEContext())
   4469         return ExprError();
   4470 
   4471       // Recover by assuming we had the right type all along.
   4472       DestructedType = ObjectType;
   4473     } else
   4474       DestructedType = GetTypeFromParser(T, &DestructedTypeInfo);
   4475   } else {
   4476     // Resolve the template-id to a type.
   4477     TemplateIdAnnotation *TemplateId = SecondTypeName.TemplateId;
   4478     ASTTemplateArgsPtr TemplateArgsPtr(*this,
   4479                                        TemplateId->getTemplateArgs(),
   4480                                        TemplateId->NumArgs);
   4481     TypeResult T = ActOnTemplateIdType(TemplateId->SS,
   4482                                        TemplateId->Template,
   4483                                        TemplateId->TemplateNameLoc,
   4484                                        TemplateId->LAngleLoc,
   4485                                        TemplateArgsPtr,
   4486                                        TemplateId->RAngleLoc);
   4487     if (T.isInvalid() || !T.get()) {
   4488       // Recover by assuming we had the right type all along.
   4489       DestructedType = ObjectType;
   4490     } else
   4491       DestructedType = GetTypeFromParser(T.get(), &DestructedTypeInfo);
   4492   }
   4493 
   4494   // If we've performed some kind of recovery, (re-)build the type source
   4495   // information.
   4496   if (!DestructedType.isNull()) {
   4497     if (!DestructedTypeInfo)
   4498       DestructedTypeInfo = Context.getTrivialTypeSourceInfo(DestructedType,
   4499                                                   SecondTypeName.StartLocation);
   4500     Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo);
   4501   }
   4502 
   4503   // Convert the name of the scope type (the type prior to '::') into a type.
   4504   TypeSourceInfo *ScopeTypeInfo = 0;
   4505   QualType ScopeType;
   4506   if (FirstTypeName.getKind() == UnqualifiedId::IK_TemplateId ||
   4507       FirstTypeName.Identifier) {
   4508     if (FirstTypeName.getKind() == UnqualifiedId::IK_Identifier) {
   4509       ParsedType T = getTypeName(*FirstTypeName.Identifier,
   4510                                  FirstTypeName.StartLocation,
   4511                                  S, &SS, true, false, ObjectTypePtrForLookup);
   4512       if (!T) {
   4513         Diag(FirstTypeName.StartLocation,
   4514              diag::err_pseudo_dtor_destructor_non_type)
   4515           << FirstTypeName.Identifier << ObjectType;
   4516 
   4517         if (isSFINAEContext())
   4518           return ExprError();
   4519 
   4520         // Just drop this type. It's unnecessary anyway.
   4521         ScopeType = QualType();
   4522       } else
   4523         ScopeType = GetTypeFromParser(T, &ScopeTypeInfo);
   4524     } else {
   4525       // Resolve the template-id to a type.
   4526       TemplateIdAnnotation *TemplateId = FirstTypeName.TemplateId;
   4527       ASTTemplateArgsPtr TemplateArgsPtr(*this,
   4528                                          TemplateId->getTemplateArgs(),
   4529                                          TemplateId->NumArgs);
   4530       TypeResult T = ActOnTemplateIdType(TemplateId->SS,
   4531                                          TemplateId->Template,
   4532                                          TemplateId->TemplateNameLoc,
   4533                                          TemplateId->LAngleLoc,
   4534                                          TemplateArgsPtr,
   4535                                          TemplateId->RAngleLoc);
   4536       if (T.isInvalid() || !T.get()) {
   4537         // Recover by dropping this type.
   4538         ScopeType = QualType();
   4539       } else
   4540         ScopeType = GetTypeFromParser(T.get(), &ScopeTypeInfo);
   4541     }
   4542   }
   4543 
   4544   if (!ScopeType.isNull() && !ScopeTypeInfo)
   4545     ScopeTypeInfo = Context.getTrivialTypeSourceInfo(ScopeType,
   4546                                                   FirstTypeName.StartLocation);
   4547 
   4548 
   4549   return BuildPseudoDestructorExpr(Base, OpLoc, OpKind, SS,
   4550                                    ScopeTypeInfo, CCLoc, TildeLoc,
   4551                                    Destructed, HasTrailingLParen);
   4552 }
   4553 
   4554 ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl,
   4555                                         CXXMethodDecl *Method,
   4556                                         bool HadMultipleCandidates) {
   4557   ExprResult Exp = PerformObjectArgumentInitialization(E, /*Qualifier=*/0,
   4558                                           FoundDecl, Method);
   4559   if (Exp.isInvalid())
   4560     return true;
   4561 
   4562   MemberExpr *ME =
   4563       new (Context) MemberExpr(Exp.take(), /*IsArrow=*/false, Method,
   4564                                SourceLocation(), Method->getType(),
   4565                                VK_RValue, OK_Ordinary);
   4566   if (HadMultipleCandidates)
   4567     ME->setHadMultipleCandidates(true);
   4568 
   4569   QualType ResultType = Method->getResultType();
   4570   ExprValueKind VK = Expr::getValueKindForType(ResultType);
   4571   ResultType = ResultType.getNonLValueExprType(Context);
   4572 
   4573   MarkDeclarationReferenced(Exp.get()->getLocStart(), Method);
   4574   CXXMemberCallExpr *CE =
   4575     new (Context) CXXMemberCallExpr(Context, ME, 0, 0, ResultType, VK,
   4576                                     Exp.get()->getLocEnd());
   4577   return CE;
   4578 }
   4579 
   4580 ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
   4581                                       SourceLocation RParen) {
   4582   return Owned(new (Context) CXXNoexceptExpr(Context.BoolTy, Operand,
   4583                                              Operand->CanThrow(Context),
   4584                                              KeyLoc, RParen));
   4585 }
   4586 
   4587 ExprResult Sema::ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation,
   4588                                    Expr *Operand, SourceLocation RParen) {
   4589   return BuildCXXNoexceptExpr(KeyLoc, Operand, RParen);
   4590 }
   4591 
   4592 /// Perform the conversions required for an expression used in a
   4593 /// context that ignores the result.
   4594 ExprResult Sema::IgnoredValueConversions(Expr *E) {
   4595   // C99 6.3.2.1:
   4596   //   [Except in specific positions,] an lvalue that does not have
   4597   //   array type is converted to the value stored in the
   4598   //   designated object (and is no longer an lvalue).
   4599   if (E->isRValue()) {
   4600     // In C, function designators (i.e. expressions of function type)
   4601     // are r-values, but we still want to do function-to-pointer decay
   4602     // on them.  This is both technically correct and convenient for
   4603     // some clients.
   4604     if (!getLangOptions().CPlusPlus && E->getType()->isFunctionType())
   4605       return DefaultFunctionArrayConversion(E);
   4606 
   4607     return Owned(E);
   4608   }
   4609 
   4610   // We always want to do this on ObjC property references.
   4611   if (E->getObjectKind() == OK_ObjCProperty) {
   4612     ExprResult Res = ConvertPropertyForRValue(E);
   4613     if (Res.isInvalid()) return Owned(E);
   4614     E = Res.take();
   4615     if (E->isRValue()) return Owned(E);
   4616   }
   4617 
   4618   // Otherwise, this rule does not apply in C++, at least not for the moment.
   4619   if (getLangOptions().CPlusPlus) return Owned(E);
   4620 
   4621   // GCC seems to also exclude expressions of incomplete enum type.
   4622   if (const EnumType *T = E->getType()->getAs<EnumType>()) {
   4623     if (!T->getDecl()->isComplete()) {
   4624       // FIXME: stupid workaround for a codegen bug!
   4625       E = ImpCastExprToType(E, Context.VoidTy, CK_ToVoid).take();
   4626       return Owned(E);
   4627     }
   4628   }
   4629 
   4630   ExprResult Res = DefaultFunctionArrayLvalueConversion(E);
   4631   if (Res.isInvalid())
   4632     return Owned(E);
   4633   E = Res.take();
   4634 
   4635   if (!E->getType()->isVoidType())
   4636     RequireCompleteType(E->getExprLoc(), E->getType(),
   4637                         diag::err_incomplete_type);
   4638   return Owned(E);
   4639 }
   4640 
   4641 ExprResult Sema::ActOnFinishFullExpr(Expr *FE) {
   4642   ExprResult FullExpr = Owned(FE);
   4643 
   4644   if (!FullExpr.get())
   4645     return ExprError();
   4646 
   4647   if (DiagnoseUnexpandedParameterPack(FullExpr.get()))
   4648     return ExprError();
   4649 
   4650   FullExpr = CheckPlaceholderExpr(FullExpr.take());
   4651   if (FullExpr.isInvalid())
   4652     return ExprError();
   4653 
   4654   FullExpr = IgnoredValueConversions(FullExpr.take());
   4655   if (FullExpr.isInvalid())
   4656     return ExprError();
   4657 
   4658   CheckImplicitConversions(FullExpr.get(), FullExpr.get()->getExprLoc());
   4659   return MaybeCreateExprWithCleanups(FullExpr);
   4660 }
   4661 
   4662 StmtResult Sema::ActOnFinishFullStmt(Stmt *FullStmt) {
   4663   if (!FullStmt) return StmtError();
   4664 
   4665   return MaybeCreateStmtWithCleanups(FullStmt);
   4666 }
   4667 
   4668 bool Sema::CheckMicrosoftIfExistsSymbol(CXXScopeSpec &SS,
   4669                                         UnqualifiedId &Name) {
   4670   DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
   4671   DeclarationName TargetName = TargetNameInfo.getName();
   4672   if (!TargetName)
   4673     return false;
   4674 
   4675   // Do the redeclaration lookup in the current scope.
   4676   LookupResult R(*this, TargetNameInfo, Sema::LookupAnyName,
   4677                  Sema::NotForRedeclaration);
   4678   R.suppressDiagnostics();
   4679   LookupParsedName(R, getCurScope(), &SS);
   4680   return !R.empty();
   4681 }
   4682