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       assert(FD && "FIXME: aggregate initialization from init list");
2133       if (const CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(FD)) {
2134         CastKind = CK_UserDefinedConversion;
2135 
2136         // If the user-defined conversion is specified by a conversion function,
2137         // the initial standard conversion sequence converts the source type to
2138         // the implicit object parameter of the conversion function.
2139         BeforeToType = Context.getTagDeclType(Conv->getParent());
2140       } else {
2141         const CXXConstructorDecl *Ctor = cast<CXXConstructorDecl>(FD);
2142         CastKind = CK_ConstructorConversion;
2143         // Do no conversion if dealing with ... for the first conversion.
2144         if (!ICS.UserDefined.EllipsisConversion) {
2145           // If the user-defined conversion is specified by a constructor, the
2146           // initial standard conversion sequence converts the source type to the
2147           // type required by the argument of the constructor
2148           BeforeToType = Ctor->getParamDecl(0)->getType().getNonReferenceType();
2149         }
2150       }
2151       // Watch out for elipsis conversion.
2152       if (!ICS.UserDefined.EllipsisConversion) {
2153         ExprResult Res =
2154           PerformImplicitConversion(From, BeforeToType,
2155                                     ICS.UserDefined.Before, AA_Converting,
2156                                     CCK);
2157         if (Res.isInvalid())
2158           return ExprError();
2159         From = Res.take();
2160       }
2161 
2162       ExprResult CastArg
2163         = BuildCXXCastArgument(*this,
2164                                From->getLocStart(),
2165                                ToType.getNonReferenceType(),
2166                                CastKind, cast<CXXMethodDecl>(FD),
2167                                ICS.UserDefined.FoundConversionFunction,
2168                                ICS.UserDefined.HadMultipleCandidates,
2169                                From);
2170 
2171       if (CastArg.isInvalid())
2172         return ExprError();
2173 
2174       From = CastArg.take();
2175 
2176       return PerformImplicitConversion(From, ToType, ICS.UserDefined.After,
2177                                        AA_Converting, CCK);
2178   }
2179 
2180   case ImplicitConversionSequence::AmbiguousConversion:
2181     ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(),
2182                           PDiag(diag::err_typecheck_ambiguous_condition)
2183                             << From->getSourceRange());
2184      return ExprError();
2185 
2186   case ImplicitConversionSequence::EllipsisConversion:
2187     llvm_unreachable("Cannot perform an ellipsis conversion");
2188 
2189   case ImplicitConversionSequence::BadConversion:
2190     return ExprError();
2191   }
2192 
2193   // Everything went well.
2194   return Owned(From);
2195 }
2196 
2197 /// PerformImplicitConversion - Perform an implicit conversion of the
2198 /// expression From to the type ToType by following the standard
2199 /// conversion sequence SCS. Returns the converted
2200 /// expression. Flavor is the context in which we're performing this
2201 /// conversion, for use in error messages.
2202 ExprResult
2203 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
2204                                 const StandardConversionSequence& SCS,
2205                                 AssignmentAction Action,
2206                                 CheckedConversionKind CCK) {
2207   bool CStyle = (CCK == CCK_CStyleCast || CCK == CCK_FunctionalCast);
2208 
2209   // Overall FIXME: we are recomputing too many types here and doing far too
2210   // much extra work. What this means is that we need to keep track of more
2211   // information that is computed when we try the implicit conversion initially,
2212   // so that we don't need to recompute anything here.
2213   QualType FromType = From->getType();
2214 
2215   if (SCS.CopyConstructor) {
2216     // FIXME: When can ToType be a reference type?
2217     assert(!ToType->isReferenceType());
2218     if (SCS.Second == ICK_Derived_To_Base) {
2219       ASTOwningVector<Expr*> ConstructorArgs(*this);
2220       if (CompleteConstructorCall(cast<CXXConstructorDecl>(SCS.CopyConstructor),
2221                                   MultiExprArg(*this, &From, 1),
2222                                   /*FIXME:ConstructLoc*/SourceLocation(),
2223                                   ConstructorArgs))
2224         return ExprError();
2225       return BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
2226                                    ToType, SCS.CopyConstructor,
2227                                    move_arg(ConstructorArgs),
2228                                    /*HadMultipleCandidates*/ false,
2229                                    /*ZeroInit*/ false,
2230                                    CXXConstructExpr::CK_Complete,
2231                                    SourceRange());
2232     }
2233     return BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
2234                                  ToType, SCS.CopyConstructor,
2235                                  MultiExprArg(*this, &From, 1),
2236                                  /*HadMultipleCandidates*/ false,
2237                                  /*ZeroInit*/ false,
2238                                  CXXConstructExpr::CK_Complete,
2239                                  SourceRange());
2240   }
2241 
2242   // Resolve overloaded function references.
2243   if (Context.hasSameType(FromType, Context.OverloadTy)) {
2244     DeclAccessPair Found;
2245     FunctionDecl *Fn = ResolveAddressOfOverloadedFunction(From, ToType,
2246                                                           true, Found);
2247     if (!Fn)
2248       return ExprError();
2249 
2250     if (DiagnoseUseOfDecl(Fn, From->getSourceRange().getBegin()))
2251       return ExprError();
2252 
2253     From = FixOverloadedFunctionReference(From, Found, Fn);
2254     FromType = From->getType();
2255   }
2256 
2257   // Perform the first implicit conversion.
2258   switch (SCS.First) {
2259   case ICK_Identity:
2260     // Nothing to do.
2261     break;
2262 
2263   case ICK_Lvalue_To_Rvalue:
2264     assert(From->getObjectKind() != OK_ObjCProperty);
2265     FromType = FromType.getUnqualifiedType();
2266     From = ImplicitCastExpr::Create(Context, FromType, CK_LValueToRValue,
2267                                     From, 0, VK_RValue);
2268     break;
2269 
2270   case ICK_Array_To_Pointer:
2271     FromType = Context.getArrayDecayedType(FromType);
2272     From = ImpCastExprToType(From, FromType, CK_ArrayToPointerDecay,
2273                              VK_RValue, /*BasePath=*/0, CCK).take();
2274     break;
2275 
2276   case ICK_Function_To_Pointer:
2277     FromType = Context.getPointerType(FromType);
2278     From = ImpCastExprToType(From, FromType, CK_FunctionToPointerDecay,
2279                              VK_RValue, /*BasePath=*/0, CCK).take();
2280     break;
2281 
2282   default:
2283     llvm_unreachable("Improper first standard conversion");
2284   }
2285 
2286   // Perform the second implicit conversion
2287   switch (SCS.Second) {
2288   case ICK_Identity:
2289     // If both sides are functions (or pointers/references to them), there could
2290     // be incompatible exception declarations.
2291     if (CheckExceptionSpecCompatibility(From, ToType))
2292       return ExprError();
2293     // Nothing else to do.
2294     break;
2295 
2296   case ICK_NoReturn_Adjustment:
2297     // If both sides are functions (or pointers/references to them), there could
2298     // be incompatible exception declarations.
2299     if (CheckExceptionSpecCompatibility(From, ToType))
2300       return ExprError();
2301 
2302     From = ImpCastExprToType(From, ToType, CK_NoOp,
2303                              VK_RValue, /*BasePath=*/0, CCK).take();
2304     break;
2305 
2306   case ICK_Integral_Promotion:
2307   case ICK_Integral_Conversion:
2308     From = ImpCastExprToType(From, ToType, CK_IntegralCast,
2309                              VK_RValue, /*BasePath=*/0, CCK).take();
2310     break;
2311 
2312   case ICK_Floating_Promotion:
2313   case ICK_Floating_Conversion:
2314     From = ImpCastExprToType(From, ToType, CK_FloatingCast,
2315                              VK_RValue, /*BasePath=*/0, CCK).take();
2316     break;
2317 
2318   case ICK_Complex_Promotion:
2319   case ICK_Complex_Conversion: {
2320     QualType FromEl = From->getType()->getAs<ComplexType>()->getElementType();
2321     QualType ToEl = ToType->getAs<ComplexType>()->getElementType();
2322     CastKind CK;
2323     if (FromEl->isRealFloatingType()) {
2324       if (ToEl->isRealFloatingType())
2325         CK = CK_FloatingComplexCast;
2326       else
2327         CK = CK_FloatingComplexToIntegralComplex;
2328     } else if (ToEl->isRealFloatingType()) {
2329       CK = CK_IntegralComplexToFloatingComplex;
2330     } else {
2331       CK = CK_IntegralComplexCast;
2332     }
2333     From = ImpCastExprToType(From, ToType, CK,
2334                              VK_RValue, /*BasePath=*/0, CCK).take();
2335     break;
2336   }
2337 
2338   case ICK_Floating_Integral:
2339     if (ToType->isRealFloatingType())
2340       From = ImpCastExprToType(From, ToType, CK_IntegralToFloating,
2341                                VK_RValue, /*BasePath=*/0, CCK).take();
2342     else
2343       From = ImpCastExprToType(From, ToType, CK_FloatingToIntegral,
2344                                VK_RValue, /*BasePath=*/0, CCK).take();
2345     break;
2346 
2347   case ICK_Compatible_Conversion:
2348       From = ImpCastExprToType(From, ToType, CK_NoOp,
2349                                VK_RValue, /*BasePath=*/0, CCK).take();
2350     break;
2351 
2352   case ICK_Writeback_Conversion:
2353   case ICK_Pointer_Conversion: {
2354     if (SCS.IncompatibleObjC && Action != AA_Casting) {
2355       // Diagnose incompatible Objective-C conversions
2356       if (Action == AA_Initializing || Action == AA_Assigning)
2357         Diag(From->getSourceRange().getBegin(),
2358              diag::ext_typecheck_convert_incompatible_pointer)
2359           << ToType << From->getType() << Action
2360           << From->getSourceRange() << 0;
2361       else
2362         Diag(From->getSourceRange().getBegin(),
2363              diag::ext_typecheck_convert_incompatible_pointer)
2364           << From->getType() << ToType << Action
2365           << From->getSourceRange() << 0;
2366 
2367       if (From->getType()->isObjCObjectPointerType() &&
2368           ToType->isObjCObjectPointerType())
2369         EmitRelatedResultTypeNote(From);
2370     }
2371     else if (getLangOptions().ObjCAutoRefCount &&
2372              !CheckObjCARCUnavailableWeakConversion(ToType,
2373                                                     From->getType())) {
2374       if (Action == AA_Initializing)
2375         Diag(From->getSourceRange().getBegin(),
2376              diag::err_arc_weak_unavailable_assign);
2377       else
2378         Diag(From->getSourceRange().getBegin(),
2379              diag::err_arc_convesion_of_weak_unavailable)
2380           << (Action == AA_Casting) << From->getType() << ToType
2381           << From->getSourceRange();
2382     }
2383 
2384     CastKind Kind = CK_Invalid;
2385     CXXCastPath BasePath;
2386     if (CheckPointerConversion(From, ToType, Kind, BasePath, CStyle))
2387       return ExprError();
2388 
2389     // Make sure we extend blocks if necessary.
2390     // FIXME: doing this here is really ugly.
2391     if (Kind == CK_BlockPointerToObjCPointerCast) {
2392       ExprResult E = From;
2393       (void) PrepareCastToObjCObjectPointer(E);
2394       From = E.take();
2395     }
2396 
2397     From = ImpCastExprToType(From, ToType, Kind, VK_RValue, &BasePath, CCK)
2398              .take();
2399     break;
2400   }
2401 
2402   case ICK_Pointer_Member: {
2403     CastKind Kind = CK_Invalid;
2404     CXXCastPath BasePath;
2405     if (CheckMemberPointerConversion(From, ToType, Kind, BasePath, CStyle))
2406       return ExprError();
2407     if (CheckExceptionSpecCompatibility(From, ToType))
2408       return ExprError();
2409     From = ImpCastExprToType(From, ToType, Kind, VK_RValue, &BasePath, CCK)
2410              .take();
2411     break;
2412   }
2413 
2414   case ICK_Boolean_Conversion:
2415     // Perform half-to-boolean conversion via float.
2416     if (From->getType()->isHalfType()) {
2417       From = ImpCastExprToType(From, Context.FloatTy, CK_FloatingCast).take();
2418       FromType = Context.FloatTy;
2419     }
2420 
2421     From = ImpCastExprToType(From, Context.BoolTy,
2422                              ScalarTypeToBooleanCastKind(FromType),
2423                              VK_RValue, /*BasePath=*/0, CCK).take();
2424     break;
2425 
2426   case ICK_Derived_To_Base: {
2427     CXXCastPath BasePath;
2428     if (CheckDerivedToBaseConversion(From->getType(),
2429                                      ToType.getNonReferenceType(),
2430                                      From->getLocStart(),
2431                                      From->getSourceRange(),
2432                                      &BasePath,
2433                                      CStyle))
2434       return ExprError();
2435 
2436     From = ImpCastExprToType(From, ToType.getNonReferenceType(),
2437                       CK_DerivedToBase, From->getValueKind(),
2438                       &BasePath, CCK).take();
2439     break;
2440   }
2441 
2442   case ICK_Vector_Conversion:
2443     From = ImpCastExprToType(From, ToType, CK_BitCast,
2444                              VK_RValue, /*BasePath=*/0, CCK).take();
2445     break;
2446 
2447   case ICK_Vector_Splat:
2448     From = ImpCastExprToType(From, ToType, CK_VectorSplat,
2449                              VK_RValue, /*BasePath=*/0, CCK).take();
2450     break;
2451 
2452   case ICK_Complex_Real:
2453     // Case 1.  x -> _Complex y
2454     if (const ComplexType *ToComplex = ToType->getAs<ComplexType>()) {
2455       QualType ElType = ToComplex->getElementType();
2456       bool isFloatingComplex = ElType->isRealFloatingType();
2457 
2458       // x -> y
2459       if (Context.hasSameUnqualifiedType(ElType, From->getType())) {
2460         // do nothing
2461       } else if (From->getType()->isRealFloatingType()) {
2462         From = ImpCastExprToType(From, ElType,
2463                 isFloatingComplex ? CK_FloatingCast : CK_FloatingToIntegral).take();
2464       } else {
2465         assert(From->getType()->isIntegerType());
2466         From = ImpCastExprToType(From, ElType,
2467                 isFloatingComplex ? CK_IntegralToFloating : CK_IntegralCast).take();
2468       }
2469       // y -> _Complex y
2470       From = ImpCastExprToType(From, ToType,
2471                    isFloatingComplex ? CK_FloatingRealToComplex
2472                                      : CK_IntegralRealToComplex).take();
2473 
2474     // Case 2.  _Complex x -> y
2475     } else {
2476       const ComplexType *FromComplex = From->getType()->getAs<ComplexType>();
2477       assert(FromComplex);
2478 
2479       QualType ElType = FromComplex->getElementType();
2480       bool isFloatingComplex = ElType->isRealFloatingType();
2481 
2482       // _Complex x -> x
2483       From = ImpCastExprToType(From, ElType,
2484                    isFloatingComplex ? CK_FloatingComplexToReal
2485                                      : CK_IntegralComplexToReal,
2486                                VK_RValue, /*BasePath=*/0, CCK).take();
2487 
2488       // x -> y
2489       if (Context.hasSameUnqualifiedType(ElType, ToType)) {
2490         // do nothing
2491       } else if (ToType->isRealFloatingType()) {
2492         From = ImpCastExprToType(From, ToType,
2493                    isFloatingComplex ? CK_FloatingCast : CK_IntegralToFloating,
2494                                  VK_RValue, /*BasePath=*/0, CCK).take();
2495       } else {
2496         assert(ToType->isIntegerType());
2497         From = ImpCastExprToType(From, ToType,
2498                    isFloatingComplex ? CK_FloatingToIntegral : CK_IntegralCast,
2499                                  VK_RValue, /*BasePath=*/0, CCK).take();
2500       }
2501     }
2502     break;
2503 
2504   case ICK_Block_Pointer_Conversion: {
2505     From = ImpCastExprToType(From, ToType.getUnqualifiedType(), CK_BitCast,
2506                              VK_RValue, /*BasePath=*/0, CCK).take();
2507     break;
2508   }
2509 
2510   case ICK_TransparentUnionConversion: {
2511     ExprResult FromRes = Owned(From);
2512     Sema::AssignConvertType ConvTy =
2513       CheckTransparentUnionArgumentConstraints(ToType, FromRes);
2514     if (FromRes.isInvalid())
2515       return ExprError();
2516     From = FromRes.take();
2517     assert ((ConvTy == Sema::Compatible) &&
2518             "Improper transparent union conversion");
2519     (void)ConvTy;
2520     break;
2521   }
2522 
2523   case ICK_Lvalue_To_Rvalue:
2524   case ICK_Array_To_Pointer:
2525   case ICK_Function_To_Pointer:
2526   case ICK_Qualification:
2527   case ICK_Num_Conversion_Kinds:
2528     llvm_unreachable("Improper second standard conversion");
2529   }
2530 
2531   switch (SCS.Third) {
2532   case ICK_Identity:
2533     // Nothing to do.
2534     break;
2535 
2536   case ICK_Qualification: {
2537     // The qualification keeps the category of the inner expression, unless the
2538     // target type isn't a reference.
2539     ExprValueKind VK = ToType->isReferenceType() ?
2540                                   From->getValueKind() : VK_RValue;
2541     From = ImpCastExprToType(From, ToType.getNonLValueExprType(Context),
2542                              CK_NoOp, VK, /*BasePath=*/0, CCK).take();
2543 
2544     if (SCS.DeprecatedStringLiteralToCharPtr &&
2545         !getLangOptions().WritableStrings)
2546       Diag(From->getLocStart(), diag::warn_deprecated_string_literal_conversion)
2547         << ToType.getNonReferenceType();
2548 
2549     break;
2550     }
2551 
2552   default:
2553     llvm_unreachable("Improper third standard conversion");
2554   }
2555 
2556   return Owned(From);
2557 }
2558 
2559 ExprResult Sema::ActOnUnaryTypeTrait(UnaryTypeTrait UTT,
2560                                      SourceLocation KWLoc,
2561                                      ParsedType Ty,
2562                                      SourceLocation RParen) {
2563   TypeSourceInfo *TSInfo;
2564   QualType T = GetTypeFromParser(Ty, &TSInfo);
2565 
2566   if (!TSInfo)
2567     TSInfo = Context.getTrivialTypeSourceInfo(T);
2568   return BuildUnaryTypeTrait(UTT, KWLoc, TSInfo, RParen);
2569 }
2570 
2571 /// \brief Check the completeness of a type in a unary type trait.
2572 ///
2573 /// If the particular type trait requires a complete type, tries to complete
2574 /// it. If completing the type fails, a diagnostic is emitted and false
2575 /// returned. If completing the type succeeds or no completion was required,
2576 /// returns true.
2577 static bool CheckUnaryTypeTraitTypeCompleteness(Sema &S,
2578                                                 UnaryTypeTrait UTT,
2579                                                 SourceLocation Loc,
2580                                                 QualType ArgTy) {
2581   // C++0x [meta.unary.prop]p3:
2582   //   For all of the class templates X declared in this Clause, instantiating
2583   //   that template with a template argument that is a class template
2584   //   specialization may result in the implicit instantiation of the template
2585   //   argument if and only if the semantics of X require that the argument
2586   //   must be a complete type.
2587   // We apply this rule to all the type trait expressions used to implement
2588   // these class templates. We also try to follow any GCC documented behavior
2589   // in these expressions to ensure portability of standard libraries.
2590   switch (UTT) {
2591     // is_complete_type somewhat obviously cannot require a complete type.
2592   case UTT_IsCompleteType:
2593     // Fall-through
2594 
2595     // These traits are modeled on the type predicates in C++0x
2596     // [meta.unary.cat] and [meta.unary.comp]. They are not specified as
2597     // requiring a complete type, as whether or not they return true cannot be
2598     // impacted by the completeness of the type.
2599   case UTT_IsVoid:
2600   case UTT_IsIntegral:
2601   case UTT_IsFloatingPoint:
2602   case UTT_IsArray:
2603   case UTT_IsPointer:
2604   case UTT_IsLvalueReference:
2605   case UTT_IsRvalueReference:
2606   case UTT_IsMemberFunctionPointer:
2607   case UTT_IsMemberObjectPointer:
2608   case UTT_IsEnum:
2609   case UTT_IsUnion:
2610   case UTT_IsClass:
2611   case UTT_IsFunction:
2612   case UTT_IsReference:
2613   case UTT_IsArithmetic:
2614   case UTT_IsFundamental:
2615   case UTT_IsObject:
2616   case UTT_IsScalar:
2617   case UTT_IsCompound:
2618   case UTT_IsMemberPointer:
2619     // Fall-through
2620 
2621     // These traits are modeled on type predicates in C++0x [meta.unary.prop]
2622     // which requires some of its traits to have the complete type. However,
2623     // the completeness of the type cannot impact these traits' semantics, and
2624     // so they don't require it. This matches the comments on these traits in
2625     // Table 49.
2626   case UTT_IsConst:
2627   case UTT_IsVolatile:
2628   case UTT_IsSigned:
2629   case UTT_IsUnsigned:
2630     return true;
2631 
2632     // C++0x [meta.unary.prop] Table 49 requires the following traits to be
2633     // applied to a complete type.
2634   case UTT_IsTrivial:
2635   case UTT_IsTriviallyCopyable:
2636   case UTT_IsStandardLayout:
2637   case UTT_IsPOD:
2638   case UTT_IsLiteral:
2639   case UTT_IsEmpty:
2640   case UTT_IsPolymorphic:
2641   case UTT_IsAbstract:
2642     // Fall-through
2643 
2644     // These trait expressions are designed to help implement predicates in
2645     // [meta.unary.prop] despite not being named the same. They are specified
2646     // by both GCC and the Embarcadero C++ compiler, and require the complete
2647     // type due to the overarching C++0x type predicates being implemented
2648     // requiring the complete type.
2649   case UTT_HasNothrowAssign:
2650   case UTT_HasNothrowConstructor:
2651   case UTT_HasNothrowCopy:
2652   case UTT_HasTrivialAssign:
2653   case UTT_HasTrivialDefaultConstructor:
2654   case UTT_HasTrivialCopy:
2655   case UTT_HasTrivialDestructor:
2656   case UTT_HasVirtualDestructor:
2657     // Arrays of unknown bound are expressly allowed.
2658     QualType ElTy = ArgTy;
2659     if (ArgTy->isIncompleteArrayType())
2660       ElTy = S.Context.getAsArrayType(ArgTy)->getElementType();
2661 
2662     // The void type is expressly allowed.
2663     if (ElTy->isVoidType())
2664       return true;
2665 
2666     return !S.RequireCompleteType(
2667       Loc, ElTy, diag::err_incomplete_type_used_in_type_trait_expr);
2668   }
2669   llvm_unreachable("Type trait not handled by switch");
2670 }
2671 
2672 static bool EvaluateUnaryTypeTrait(Sema &Self, UnaryTypeTrait UTT,
2673                                    SourceLocation KeyLoc, QualType T) {
2674   assert(!T->isDependentType() && "Cannot evaluate traits of dependent type");
2675 
2676   ASTContext &C = Self.Context;
2677   switch(UTT) {
2678     // Type trait expressions corresponding to the primary type category
2679     // predicates in C++0x [meta.unary.cat].
2680   case UTT_IsVoid:
2681     return T->isVoidType();
2682   case UTT_IsIntegral:
2683     return T->isIntegralType(C);
2684   case UTT_IsFloatingPoint:
2685     return T->isFloatingType();
2686   case UTT_IsArray:
2687     return T->isArrayType();
2688   case UTT_IsPointer:
2689     return T->isPointerType();
2690   case UTT_IsLvalueReference:
2691     return T->isLValueReferenceType();
2692   case UTT_IsRvalueReference:
2693     return T->isRValueReferenceType();
2694   case UTT_IsMemberFunctionPointer:
2695     return T->isMemberFunctionPointerType();
2696   case UTT_IsMemberObjectPointer:
2697     return T->isMemberDataPointerType();
2698   case UTT_IsEnum:
2699     return T->isEnumeralType();
2700   case UTT_IsUnion:
2701     return T->isUnionType();
2702   case UTT_IsClass:
2703     return T->isClassType() || T->isStructureType();
2704   case UTT_IsFunction:
2705     return T->isFunctionType();
2706 
2707     // Type trait expressions which correspond to the convenient composition
2708     // predicates in C++0x [meta.unary.comp].
2709   case UTT_IsReference:
2710     return T->isReferenceType();
2711   case UTT_IsArithmetic:
2712     return T->isArithmeticType() && !T->isEnumeralType();
2713   case UTT_IsFundamental:
2714     return T->isFundamentalType();
2715   case UTT_IsObject:
2716     return T->isObjectType();
2717   case UTT_IsScalar:
2718     // Note: semantic analysis depends on Objective-C lifetime types to be
2719     // considered scalar types. However, such types do not actually behave
2720     // like scalar types at run time (since they may require retain/release
2721     // operations), so we report them as non-scalar.
2722     if (T->isObjCLifetimeType()) {
2723       switch (T.getObjCLifetime()) {
2724       case Qualifiers::OCL_None:
2725       case Qualifiers::OCL_ExplicitNone:
2726         return true;
2727 
2728       case Qualifiers::OCL_Strong:
2729       case Qualifiers::OCL_Weak:
2730       case Qualifiers::OCL_Autoreleasing:
2731         return false;
2732       }
2733     }
2734 
2735     return T->isScalarType();
2736   case UTT_IsCompound:
2737     return T->isCompoundType();
2738   case UTT_IsMemberPointer:
2739     return T->isMemberPointerType();
2740 
2741     // Type trait expressions which correspond to the type property predicates
2742     // in C++0x [meta.unary.prop].
2743   case UTT_IsConst:
2744     return T.isConstQualified();
2745   case UTT_IsVolatile:
2746     return T.isVolatileQualified();
2747   case UTT_IsTrivial:
2748     return T.isTrivialType(Self.Context);
2749   case UTT_IsTriviallyCopyable:
2750     return T.isTriviallyCopyableType(Self.Context);
2751   case UTT_IsStandardLayout:
2752     return T->isStandardLayoutType();
2753   case UTT_IsPOD:
2754     return T.isPODType(Self.Context);
2755   case UTT_IsLiteral:
2756     return T->isLiteralType();
2757   case UTT_IsEmpty:
2758     if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
2759       return !RD->isUnion() && RD->isEmpty();
2760     return false;
2761   case UTT_IsPolymorphic:
2762     if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
2763       return RD->isPolymorphic();
2764     return false;
2765   case UTT_IsAbstract:
2766     if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
2767       return RD->isAbstract();
2768     return false;
2769   case UTT_IsSigned:
2770     return T->isSignedIntegerType();
2771   case UTT_IsUnsigned:
2772     return T->isUnsignedIntegerType();
2773 
2774     // Type trait expressions which query classes regarding their construction,
2775     // destruction, and copying. Rather than being based directly on the
2776     // related type predicates in the standard, they are specified by both
2777     // GCC[1] and the Embarcadero C++ compiler[2], and Clang implements those
2778     // specifications.
2779     //
2780     //   1: http://gcc.gnu/.org/onlinedocs/gcc/Type-Traits.html
2781     //   2: http://docwiki.embarcadero.com/RADStudio/XE/en/Type_Trait_Functions_(C%2B%2B0x)_Index
2782   case UTT_HasTrivialDefaultConstructor:
2783     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
2784     //   If __is_pod (type) is true then the trait is true, else if type is
2785     //   a cv class or union type (or array thereof) with a trivial default
2786     //   constructor ([class.ctor]) then the trait is true, else it is false.
2787     if (T.isPODType(Self.Context))
2788       return true;
2789     if (const RecordType *RT =
2790           C.getBaseElementType(T)->getAs<RecordType>())
2791       return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDefaultConstructor();
2792     return false;
2793   case UTT_HasTrivialCopy:
2794     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
2795     //   If __is_pod (type) is true or type is a reference type then
2796     //   the trait is true, else if type is a cv class or union type
2797     //   with a trivial copy constructor ([class.copy]) then the trait
2798     //   is true, else it is false.
2799     if (T.isPODType(Self.Context) || T->isReferenceType())
2800       return true;
2801     if (const RecordType *RT = T->getAs<RecordType>())
2802       return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialCopyConstructor();
2803     return false;
2804   case UTT_HasTrivialAssign:
2805     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
2806     //   If type is const qualified or is a reference type then the
2807     //   trait is false. Otherwise if __is_pod (type) is true then the
2808     //   trait is true, else if type is a cv class or union type with
2809     //   a trivial copy assignment ([class.copy]) then the trait is
2810     //   true, else it is false.
2811     // Note: the const and reference restrictions are interesting,
2812     // given that const and reference members don't prevent a class
2813     // from having a trivial copy assignment operator (but do cause
2814     // errors if the copy assignment operator is actually used, q.v.
2815     // [class.copy]p12).
2816 
2817     if (C.getBaseElementType(T).isConstQualified())
2818       return false;
2819     if (T.isPODType(Self.Context))
2820       return true;
2821     if (const RecordType *RT = T->getAs<RecordType>())
2822       return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialCopyAssignment();
2823     return false;
2824   case UTT_HasTrivialDestructor:
2825     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
2826     //   If __is_pod (type) is true or type is a reference type
2827     //   then the trait is true, else if type is a cv class or union
2828     //   type (or array thereof) with a trivial destructor
2829     //   ([class.dtor]) then the trait is true, else it is
2830     //   false.
2831     if (T.isPODType(Self.Context) || T->isReferenceType())
2832       return true;
2833 
2834     // Objective-C++ ARC: autorelease types don't require destruction.
2835     if (T->isObjCLifetimeType() &&
2836         T.getObjCLifetime() == Qualifiers::OCL_Autoreleasing)
2837       return true;
2838 
2839     if (const RecordType *RT =
2840           C.getBaseElementType(T)->getAs<RecordType>())
2841       return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDestructor();
2842     return false;
2843   // TODO: Propagate nothrowness for implicitly declared special members.
2844   case UTT_HasNothrowAssign:
2845     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
2846     //   If type is const qualified or is a reference type then the
2847     //   trait is false. Otherwise if __has_trivial_assign (type)
2848     //   is true then the trait is true, else if type is a cv class
2849     //   or union type with copy assignment operators that are known
2850     //   not to throw an exception then the trait is true, else it is
2851     //   false.
2852     if (C.getBaseElementType(T).isConstQualified())
2853       return false;
2854     if (T->isReferenceType())
2855       return false;
2856     if (T.isPODType(Self.Context) || T->isObjCLifetimeType())
2857       return true;
2858     if (const RecordType *RT = T->getAs<RecordType>()) {
2859       CXXRecordDecl* RD = cast<CXXRecordDecl>(RT->getDecl());
2860       if (RD->hasTrivialCopyAssignment())
2861         return true;
2862 
2863       bool FoundAssign = false;
2864       DeclarationName Name = C.DeclarationNames.getCXXOperatorName(OO_Equal);
2865       LookupResult Res(Self, DeclarationNameInfo(Name, KeyLoc),
2866                        Sema::LookupOrdinaryName);
2867       if (Self.LookupQualifiedName(Res, RD)) {
2868         Res.suppressDiagnostics();
2869         for (LookupResult::iterator Op = Res.begin(), OpEnd = Res.end();
2870              Op != OpEnd; ++Op) {
2871           if (isa<FunctionTemplateDecl>(*Op))
2872             continue;
2873 
2874           CXXMethodDecl *Operator = cast<CXXMethodDecl>(*Op);
2875           if (Operator->isCopyAssignmentOperator()) {
2876             FoundAssign = true;
2877             const FunctionProtoType *CPT
2878                 = Operator->getType()->getAs<FunctionProtoType>();
2879             if (CPT->getExceptionSpecType() == EST_Delayed)
2880               return false;
2881             if (!CPT->isNothrow(Self.Context))
2882               return false;
2883           }
2884         }
2885       }
2886 
2887       return FoundAssign;
2888     }
2889     return false;
2890   case UTT_HasNothrowCopy:
2891     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
2892     //   If __has_trivial_copy (type) is true then the trait is true, else
2893     //   if type is a cv class or union type with copy constructors that are
2894     //   known not to throw an exception then the trait is true, else it is
2895     //   false.
2896     if (T.isPODType(C) || T->isReferenceType() || T->isObjCLifetimeType())
2897       return true;
2898     if (const RecordType *RT = T->getAs<RecordType>()) {
2899       CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
2900       if (RD->hasTrivialCopyConstructor())
2901         return true;
2902 
2903       bool FoundConstructor = false;
2904       unsigned FoundTQs;
2905       DeclContext::lookup_const_iterator Con, ConEnd;
2906       for (llvm::tie(Con, ConEnd) = Self.LookupConstructors(RD);
2907            Con != ConEnd; ++Con) {
2908         // A template constructor is never a copy constructor.
2909         // FIXME: However, it may actually be selected at the actual overload
2910         // resolution point.
2911         if (isa<FunctionTemplateDecl>(*Con))
2912           continue;
2913         CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
2914         if (Constructor->isCopyConstructor(FoundTQs)) {
2915           FoundConstructor = true;
2916           const FunctionProtoType *CPT
2917               = Constructor->getType()->getAs<FunctionProtoType>();
2918           if (CPT->getExceptionSpecType() == EST_Delayed)
2919             return false;
2920           // FIXME: check whether evaluating default arguments can throw.
2921           // For now, we'll be conservative and assume that they can throw.
2922           if (!CPT->isNothrow(Self.Context) || CPT->getNumArgs() > 1)
2923             return false;
2924         }
2925       }
2926 
2927       return FoundConstructor;
2928     }
2929     return false;
2930   case UTT_HasNothrowConstructor:
2931     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
2932     //   If __has_trivial_constructor (type) is true then the trait is
2933     //   true, else if type is a cv class or union type (or array
2934     //   thereof) with a default constructor that is known not to
2935     //   throw an exception then the trait is true, else it is false.
2936     if (T.isPODType(C) || T->isObjCLifetimeType())
2937       return true;
2938     if (const RecordType *RT = C.getBaseElementType(T)->getAs<RecordType>()) {
2939       CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
2940       if (RD->hasTrivialDefaultConstructor())
2941         return true;
2942 
2943       DeclContext::lookup_const_iterator Con, ConEnd;
2944       for (llvm::tie(Con, ConEnd) = Self.LookupConstructors(RD);
2945            Con != ConEnd; ++Con) {
2946         // FIXME: In C++0x, a constructor template can be a default constructor.
2947         if (isa<FunctionTemplateDecl>(*Con))
2948           continue;
2949         CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
2950         if (Constructor->isDefaultConstructor()) {
2951           const FunctionProtoType *CPT
2952               = Constructor->getType()->getAs<FunctionProtoType>();
2953           if (CPT->getExceptionSpecType() == EST_Delayed)
2954             return false;
2955           // TODO: check whether evaluating default arguments can throw.
2956           // For now, we'll be conservative and assume that they can throw.
2957           return CPT->isNothrow(Self.Context) && CPT->getNumArgs() == 0;
2958         }
2959       }
2960     }
2961     return false;
2962   case UTT_HasVirtualDestructor:
2963     // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
2964     //   If type is a class type with a virtual destructor ([class.dtor])
2965     //   then the trait is true, else it is false.
2966     if (const RecordType *Record = T->getAs<RecordType>()) {
2967       CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
2968       if (CXXDestructorDecl *Destructor = Self.LookupDestructor(RD))
2969         return Destructor->isVirtual();
2970     }
2971     return false;
2972 
2973     // These type trait expressions are modeled on the specifications for the
2974     // Embarcadero C++0x type trait functions:
2975     //   http://docwiki.embarcadero.com/RADStudio/XE/en/Type_Trait_Functions_(C%2B%2B0x)_Index
2976   case UTT_IsCompleteType:
2977     // http://docwiki.embarcadero.com/RADStudio/XE/en/Is_complete_type_(typename_T_):
2978     //   Returns True if and only if T is a complete type at the point of the
2979     //   function call.
2980     return !T->isIncompleteType();
2981   }
2982   llvm_unreachable("Type trait not covered by switch");
2983 }
2984 
2985 ExprResult Sema::BuildUnaryTypeTrait(UnaryTypeTrait UTT,
2986                                      SourceLocation KWLoc,
2987                                      TypeSourceInfo *TSInfo,
2988                                      SourceLocation RParen) {
2989   QualType T = TSInfo->getType();
2990   if (!CheckUnaryTypeTraitTypeCompleteness(*this, UTT, KWLoc, T))
2991     return ExprError();
2992 
2993   bool Value = false;
2994   if (!T->isDependentType())
2995     Value = EvaluateUnaryTypeTrait(*this, UTT, KWLoc, T);
2996 
2997   return Owned(new (Context) UnaryTypeTraitExpr(KWLoc, UTT, TSInfo, Value,
2998                                                 RParen, Context.BoolTy));
2999 }
3000 
3001 ExprResult Sema::ActOnBinaryTypeTrait(BinaryTypeTrait BTT,
3002                                       SourceLocation KWLoc,
3003                                       ParsedType LhsTy,
3004                                       ParsedType RhsTy,
3005                                       SourceLocation RParen) {
3006   TypeSourceInfo *LhsTSInfo;
3007   QualType LhsT = GetTypeFromParser(LhsTy, &LhsTSInfo);
3008   if (!LhsTSInfo)
3009     LhsTSInfo = Context.getTrivialTypeSourceInfo(LhsT);
3010 
3011   TypeSourceInfo *RhsTSInfo;
3012   QualType RhsT = GetTypeFromParser(RhsTy, &RhsTSInfo);
3013   if (!RhsTSInfo)
3014     RhsTSInfo = Context.getTrivialTypeSourceInfo(RhsT);
3015 
3016   return BuildBinaryTypeTrait(BTT, KWLoc, LhsTSInfo, RhsTSInfo, RParen);
3017 }
3018 
3019 static bool EvaluateBinaryTypeTrait(Sema &Self, BinaryTypeTrait BTT,
3020                                     QualType LhsT, QualType RhsT,
3021                                     SourceLocation KeyLoc) {
3022   assert(!LhsT->isDependentType() && !RhsT->isDependentType() &&
3023          "Cannot evaluate traits of dependent types");
3024 
3025   switch(BTT) {
3026   case BTT_IsBaseOf: {
3027     // C++0x [meta.rel]p2
3028     // Base is a base class of Derived without regard to cv-qualifiers or
3029     // Base and Derived are not unions and name the same class type without
3030     // regard to cv-qualifiers.
3031 
3032     const RecordType *lhsRecord = LhsT->getAs<RecordType>();
3033     if (!lhsRecord) return false;
3034 
3035     const RecordType *rhsRecord = RhsT->getAs<RecordType>();
3036     if (!rhsRecord) return false;
3037 
3038     assert(Self.Context.hasSameUnqualifiedType(LhsT, RhsT)
3039              == (lhsRecord == rhsRecord));
3040 
3041     if (lhsRecord == rhsRecord)
3042       return !lhsRecord->getDecl()->isUnion();
3043 
3044     // C++0x [meta.rel]p2:
3045     //   If Base and Derived are class types and are different types
3046     //   (ignoring possible cv-qualifiers) then Derived shall be a
3047     //   complete type.
3048     if (Self.RequireCompleteType(KeyLoc, RhsT,
3049                           diag::err_incomplete_type_used_in_type_trait_expr))
3050       return false;
3051 
3052     return cast<CXXRecordDecl>(rhsRecord->getDecl())
3053       ->isDerivedFrom(cast<CXXRecordDecl>(lhsRecord->getDecl()));
3054   }
3055   case BTT_IsSame:
3056     return Self.Context.hasSameType(LhsT, RhsT);
3057   case BTT_TypeCompatible:
3058     return Self.Context.typesAreCompatible(LhsT.getUnqualifiedType(),
3059                                            RhsT.getUnqualifiedType());
3060   case BTT_IsConvertible:
3061   case BTT_IsConvertibleTo: {
3062     // C++0x [meta.rel]p4:
3063     //   Given the following function prototype:
3064     //
3065     //     template <class T>
3066     //       typename add_rvalue_reference<T>::type create();
3067     //
3068     //   the predicate condition for a template specialization
3069     //   is_convertible<From, To> shall be satisfied if and only if
3070     //   the return expression in the following code would be
3071     //   well-formed, including any implicit conversions to the return
3072     //   type of the function:
3073     //
3074     //     To test() {
3075     //       return create<From>();
3076     //     }
3077     //
3078     //   Access checking is performed as if in a context unrelated to To and
3079     //   From. Only the validity of the immediate context of the expression
3080     //   of the return-statement (including conversions to the return type)
3081     //   is considered.
3082     //
3083     // We model the initialization as a copy-initialization of a temporary
3084     // of the appropriate type, which for this expression is identical to the
3085     // return statement (since NRVO doesn't apply).
3086     if (LhsT->isObjectType() || LhsT->isFunctionType())
3087       LhsT = Self.Context.getRValueReferenceType(LhsT);
3088 
3089     InitializedEntity To(InitializedEntity::InitializeTemporary(RhsT));
3090     OpaqueValueExpr From(KeyLoc, LhsT.getNonLValueExprType(Self.Context),
3091                          Expr::getValueKindForType(LhsT));
3092     Expr *FromPtr = &From;
3093     InitializationKind Kind(InitializationKind::CreateCopy(KeyLoc,
3094                                                            SourceLocation()));
3095 
3096     // Perform the initialization within a SFINAE trap at translation unit
3097     // scope.
3098     Sema::SFINAETrap SFINAE(Self, /*AccessCheckingSFINAE=*/true);
3099     Sema::ContextRAII TUContext(Self, Self.Context.getTranslationUnitDecl());
3100     InitializationSequence Init(Self, To, Kind, &FromPtr, 1);
3101     if (Init.Failed())
3102       return false;
3103 
3104     ExprResult Result = Init.Perform(Self, To, Kind, MultiExprArg(&FromPtr, 1));
3105     return !Result.isInvalid() && !SFINAE.hasErrorOccurred();
3106   }
3107   }
3108   llvm_unreachable("Unknown type trait or not implemented");
3109 }
3110 
3111 ExprResult Sema::BuildBinaryTypeTrait(BinaryTypeTrait BTT,
3112                                       SourceLocation KWLoc,
3113                                       TypeSourceInfo *LhsTSInfo,
3114                                       TypeSourceInfo *RhsTSInfo,
3115                                       SourceLocation RParen) {
3116   QualType LhsT = LhsTSInfo->getType();
3117   QualType RhsT = RhsTSInfo->getType();
3118 
3119   if (BTT == BTT_TypeCompatible) {
3120     if (getLangOptions().CPlusPlus) {
3121       Diag(KWLoc, diag::err_types_compatible_p_in_cplusplus)
3122         << SourceRange(KWLoc, RParen);
3123       return ExprError();
3124     }
3125   }
3126 
3127   bool Value = false;
3128   if (!LhsT->isDependentType() && !RhsT->isDependentType())
3129     Value = EvaluateBinaryTypeTrait(*this, BTT, LhsT, RhsT, KWLoc);
3130 
3131   // Select trait result type.
3132   QualType ResultType;
3133   switch (BTT) {
3134   case BTT_IsBaseOf:       ResultType = Context.BoolTy; break;
3135   case BTT_IsConvertible:  ResultType = Context.BoolTy; break;
3136   case BTT_IsSame:         ResultType = Context.BoolTy; break;
3137   case BTT_TypeCompatible: ResultType = Context.IntTy; break;
3138   case BTT_IsConvertibleTo: ResultType = Context.BoolTy; break;
3139   }
3140 
3141   return Owned(new (Context) BinaryTypeTraitExpr(KWLoc, BTT, LhsTSInfo,
3142                                                  RhsTSInfo, Value, RParen,
3143                                                  ResultType));
3144 }
3145 
3146 ExprResult Sema::ActOnArrayTypeTrait(ArrayTypeTrait ATT,
3147                                      SourceLocation KWLoc,
3148                                      ParsedType Ty,
3149                                      Expr* DimExpr,
3150                                      SourceLocation RParen) {
3151   TypeSourceInfo *TSInfo;
3152   QualType T = GetTypeFromParser(Ty, &TSInfo);
3153   if (!TSInfo)
3154     TSInfo = Context.getTrivialTypeSourceInfo(T);
3155 
3156   return BuildArrayTypeTrait(ATT, KWLoc, TSInfo, DimExpr, RParen);
3157 }
3158 
3159 static uint64_t EvaluateArrayTypeTrait(Sema &Self, ArrayTypeTrait ATT,
3160                                            QualType T, Expr *DimExpr,
3161                                            SourceLocation KeyLoc) {
3162   assert(!T->isDependentType() && "Cannot evaluate traits of dependent type");
3163 
3164   switch(ATT) {
3165   case ATT_ArrayRank:
3166     if (T->isArrayType()) {
3167       unsigned Dim = 0;
3168       while (const ArrayType *AT = Self.Context.getAsArrayType(T)) {
3169         ++Dim;
3170         T = AT->getElementType();
3171       }
3172       return Dim;
3173     }
3174     return 0;
3175 
3176   case ATT_ArrayExtent: {
3177     llvm::APSInt Value;
3178     uint64_t Dim;
3179     if (DimExpr->isIntegerConstantExpr(Value, Self.Context, 0, false)) {
3180       if (Value < llvm::APSInt(Value.getBitWidth(), Value.isUnsigned())) {
3181         Self.Diag(KeyLoc, diag::err_dimension_expr_not_constant_integer) <<
3182           DimExpr->getSourceRange();
3183         return false;
3184       }
3185       Dim = Value.getLimitedValue();
3186     } else {
3187       Self.Diag(KeyLoc, diag::err_dimension_expr_not_constant_integer) <<
3188         DimExpr->getSourceRange();
3189       return false;
3190     }
3191 
3192     if (T->isArrayType()) {
3193       unsigned D = 0;
3194       bool Matched = false;
3195       while (const ArrayType *AT = Self.Context.getAsArrayType(T)) {
3196         if (Dim == D) {
3197           Matched = true;
3198           break;
3199         }
3200         ++D;
3201         T = AT->getElementType();
3202       }
3203 
3204       if (Matched && T->isArrayType()) {
3205         if (const ConstantArrayType *CAT = Self.Context.getAsConstantArrayType(T))
3206           return CAT->getSize().getLimitedValue();
3207       }
3208     }
3209     return 0;
3210   }
3211   }
3212   llvm_unreachable("Unknown type trait or not implemented");
3213 }
3214 
3215 ExprResult Sema::BuildArrayTypeTrait(ArrayTypeTrait ATT,
3216                                      SourceLocation KWLoc,
3217                                      TypeSourceInfo *TSInfo,
3218                                      Expr* DimExpr,
3219                                      SourceLocation RParen) {
3220   QualType T = TSInfo->getType();
3221 
3222   // FIXME: This should likely be tracked as an APInt to remove any host
3223   // assumptions about the width of size_t on the target.
3224   uint64_t Value = 0;
3225   if (!T->isDependentType())
3226     Value = EvaluateArrayTypeTrait(*this, ATT, T, DimExpr, KWLoc);
3227 
3228   // While the specification for these traits from the Embarcadero C++
3229   // compiler's documentation says the return type is 'unsigned int', Clang
3230   // returns 'size_t'. On Windows, the primary platform for the Embarcadero
3231   // compiler, there is no difference. On several other platforms this is an
3232   // important distinction.
3233   return Owned(new (Context) ArrayTypeTraitExpr(KWLoc, ATT, TSInfo, Value,
3234                                                 DimExpr, RParen,
3235                                                 Context.getSizeType()));
3236 }
3237 
3238 ExprResult Sema::ActOnExpressionTrait(ExpressionTrait ET,
3239                                       SourceLocation KWLoc,
3240                                       Expr *Queried,
3241                                       SourceLocation RParen) {
3242   // If error parsing the expression, ignore.
3243   if (!Queried)
3244     return ExprError();
3245 
3246   ExprResult Result = BuildExpressionTrait(ET, KWLoc, Queried, RParen);
3247 
3248   return move(Result);
3249 }
3250 
3251 static bool EvaluateExpressionTrait(ExpressionTrait ET, Expr *E) {
3252   switch (ET) {
3253   case ET_IsLValueExpr: return E->isLValue();
3254   case ET_IsRValueExpr: return E->isRValue();
3255   }
3256   llvm_unreachable("Expression trait not covered by switch");
3257 }
3258 
3259 ExprResult Sema::BuildExpressionTrait(ExpressionTrait ET,
3260                                       SourceLocation KWLoc,
3261                                       Expr *Queried,
3262                                       SourceLocation RParen) {
3263   if (Queried->isTypeDependent()) {
3264     // Delay type-checking for type-dependent expressions.
3265   } else if (Queried->getType()->isPlaceholderType()) {
3266     ExprResult PE = CheckPlaceholderExpr(Queried);
3267     if (PE.isInvalid()) return ExprError();
3268     return BuildExpressionTrait(ET, KWLoc, PE.take(), RParen);
3269   }
3270 
3271   bool Value = EvaluateExpressionTrait(ET, Queried);
3272 
3273   return Owned(new (Context) ExpressionTraitExpr(KWLoc, ET, Queried, Value,
3274                                                  RParen, Context.BoolTy));
3275 }
3276 
3277 QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS,
3278                                             ExprValueKind &VK,
3279                                             SourceLocation Loc,
3280                                             bool isIndirect) {
3281   assert(!LHS.get()->getType()->isPlaceholderType() &&
3282          !RHS.get()->getType()->isPlaceholderType() &&
3283          "placeholders should have been weeded out by now");
3284 
3285   // The LHS undergoes lvalue conversions if this is ->*.
3286   if (isIndirect) {
3287     LHS = DefaultLvalueConversion(LHS.take());
3288     if (LHS.isInvalid()) return QualType();
3289   }
3290 
3291   // The RHS always undergoes lvalue conversions.
3292   RHS = DefaultLvalueConversion(RHS.take());
3293   if (RHS.isInvalid()) return QualType();
3294 
3295   const char *OpSpelling = isIndirect ? "->*" : ".*";
3296   // C++ 5.5p2
3297   //   The binary operator .* [p3: ->*] binds its second operand, which shall
3298   //   be of type "pointer to member of T" (where T is a completely-defined
3299   //   class type) [...]
3300   QualType RHSType = RHS.get()->getType();
3301   const MemberPointerType *MemPtr = RHSType->getAs<MemberPointerType>();
3302   if (!MemPtr) {
3303     Diag(Loc, diag::err_bad_memptr_rhs)
3304       << OpSpelling << RHSType << RHS.get()->getSourceRange();
3305     return QualType();
3306   }
3307 
3308   QualType Class(MemPtr->getClass(), 0);
3309 
3310   // Note: C++ [expr.mptr.oper]p2-3 says that the class type into which the
3311   // member pointer points must be completely-defined. However, there is no
3312   // reason for this semantic distinction, and the rule is not enforced by
3313   // other compilers. Therefore, we do not check this property, as it is
3314   // likely to be considered a defect.
3315 
3316   // C++ 5.5p2
3317   //   [...] to its first operand, which shall be of class T or of a class of
3318   //   which T is an unambiguous and accessible base class. [p3: a pointer to
3319   //   such a class]
3320   QualType LHSType = LHS.get()->getType();
3321   if (isIndirect) {
3322     if (const PointerType *Ptr = LHSType->getAs<PointerType>())
3323       LHSType = Ptr->getPointeeType();
3324     else {
3325       Diag(Loc, diag::err_bad_memptr_lhs)
3326         << OpSpelling << 1 << LHSType
3327         << FixItHint::CreateReplacement(SourceRange(Loc), ".*");
3328       return QualType();
3329     }
3330   }
3331 
3332   if (!Context.hasSameUnqualifiedType(Class, LHSType)) {
3333     // If we want to check the hierarchy, we need a complete type.
3334     if (RequireCompleteType(Loc, LHSType, PDiag(diag::err_bad_memptr_lhs)
3335         << OpSpelling << (int)isIndirect)) {
3336       return QualType();
3337     }
3338     CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
3339                        /*DetectVirtual=*/false);
3340     // FIXME: Would it be useful to print full ambiguity paths, or is that
3341     // overkill?
3342     if (!IsDerivedFrom(LHSType, Class, Paths) ||
3343         Paths.isAmbiguous(Context.getCanonicalType(Class))) {
3344       Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling
3345         << (int)isIndirect << LHS.get()->getType();
3346       return QualType();
3347     }
3348     // Cast LHS to type of use.
3349     QualType UseType = isIndirect ? Context.getPointerType(Class) : Class;
3350     ExprValueKind VK = isIndirect ? VK_RValue : LHS.get()->getValueKind();
3351 
3352     CXXCastPath BasePath;
3353     BuildBasePathArray(Paths, BasePath);
3354     LHS = ImpCastExprToType(LHS.take(), UseType, CK_DerivedToBase, VK,
3355                             &BasePath);
3356   }
3357 
3358   if (isa<CXXScalarValueInitExpr>(RHS.get()->IgnoreParens())) {
3359     // Diagnose use of pointer-to-member type which when used as
3360     // the functional cast in a pointer-to-member expression.
3361     Diag(Loc, diag::err_pointer_to_member_type) << isIndirect;
3362      return QualType();
3363   }
3364 
3365   // C++ 5.5p2
3366   //   The result is an object or a function of the type specified by the
3367   //   second operand.
3368   // The cv qualifiers are the union of those in the pointer and the left side,
3369   // in accordance with 5.5p5 and 5.2.5.
3370   QualType Result = MemPtr->getPointeeType();
3371   Result = Context.getCVRQualifiedType(Result, LHSType.getCVRQualifiers());
3372 
3373   // C++0x [expr.mptr.oper]p6:
3374   //   In a .* expression whose object expression is an rvalue, the program is
3375   //   ill-formed if the second operand is a pointer to member function with
3376   //   ref-qualifier &. In a ->* expression or in a .* expression whose object
3377   //   expression is an lvalue, the program is ill-formed if the second operand
3378   //   is a pointer to member function with ref-qualifier &&.
3379   if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {
3380     switch (Proto->getRefQualifier()) {
3381     case RQ_None:
3382       // Do nothing
3383       break;
3384 
3385     case RQ_LValue:
3386       if (!isIndirect && !LHS.get()->Classify(Context).isLValue())
3387         Diag(Loc, diag::err_pointer_to_member_oper_value_classify)
3388           << RHSType << 1 << LHS.get()->getSourceRange();
3389       break;
3390 
3391     case RQ_RValue:
3392       if (isIndirect || !LHS.get()->Classify(Context).isRValue())
3393         Diag(Loc, diag::err_pointer_to_member_oper_value_classify)
3394           << RHSType << 0 << LHS.get()->getSourceRange();
3395       break;
3396     }
3397   }
3398 
3399   // C++ [expr.mptr.oper]p6:
3400   //   The result of a .* expression whose second operand is a pointer
3401   //   to a data member is of the same value category as its
3402   //   first operand. The result of a .* expression whose second
3403   //   operand is a pointer to a member function is a prvalue. The
3404   //   result of an ->* expression is an lvalue if its second operand
3405   //   is a pointer to data member and a prvalue otherwise.
3406   if (Result->isFunctionType()) {
3407     VK = VK_RValue;
3408     return Context.BoundMemberTy;
3409   } else if (isIndirect) {
3410     VK = VK_LValue;
3411   } else {
3412     VK = LHS.get()->getValueKind();
3413   }
3414 
3415   return Result;
3416 }
3417 
3418 /// \brief Try to convert a type to another according to C++0x 5.16p3.
3419 ///
3420 /// This is part of the parameter validation for the ? operator. If either
3421 /// value operand is a class type, the two operands are attempted to be
3422 /// converted to each other. This function does the conversion in one direction.
3423 /// It returns true if the program is ill-formed and has already been diagnosed
3424 /// as such.
3425 static bool TryClassUnification(Sema &Self, Expr *From, Expr *To,
3426                                 SourceLocation QuestionLoc,
3427                                 bool &HaveConversion,
3428                                 QualType &ToType) {
3429   HaveConversion = false;
3430   ToType = To->getType();
3431 
3432   InitializationKind Kind = InitializationKind::CreateCopy(To->getLocStart(),
3433                                                            SourceLocation());
3434   // C++0x 5.16p3
3435   //   The process for determining whether an operand expression E1 of type T1
3436   //   can be converted to match an operand expression E2 of type T2 is defined
3437   //   as follows:
3438   //   -- If E2 is an lvalue:
3439   bool ToIsLvalue = To->isLValue();
3440   if (ToIsLvalue) {
3441     //   E1 can be converted to match E2 if E1 can be implicitly converted to
3442     //   type "lvalue reference to T2", subject to the constraint that in the
3443     //   conversion the reference must bind directly to E1.
3444     QualType T = Self.Context.getLValueReferenceType(ToType);
3445     InitializedEntity Entity = InitializedEntity::InitializeTemporary(T);
3446 
3447     InitializationSequence InitSeq(Self, Entity, Kind, &From, 1);
3448     if (InitSeq.isDirectReferenceBinding()) {
3449       ToType = T;
3450       HaveConversion = true;
3451       return false;
3452     }
3453 
3454     if (InitSeq.isAmbiguous())
3455       return InitSeq.Diagnose(Self, Entity, Kind, &From, 1);
3456   }
3457 
3458   //   -- If E2 is an rvalue, or if the conversion above cannot be done:
3459   //      -- if E1 and E2 have class type, and the underlying class types are
3460   //         the same or one is a base class of the other:
3461   QualType FTy = From->getType();
3462   QualType TTy = To->getType();
3463   const RecordType *FRec = FTy->getAs<RecordType>();
3464   const RecordType *TRec = TTy->getAs<RecordType>();
3465   bool FDerivedFromT = FRec && TRec && FRec != TRec &&
3466                        Self.IsDerivedFrom(FTy, TTy);
3467   if (FRec && TRec &&
3468       (FRec == TRec || FDerivedFromT || Self.IsDerivedFrom(TTy, FTy))) {
3469     //         E1 can be converted to match E2 if the class of T2 is the
3470     //         same type as, or a base class of, the class of T1, and
3471     //         [cv2 > cv1].
3472     if (FRec == TRec || FDerivedFromT) {
3473       if (TTy.isAtLeastAsQualifiedAs(FTy)) {
3474         InitializedEntity Entity = InitializedEntity::InitializeTemporary(TTy);
3475         InitializationSequence InitSeq(Self, Entity, Kind, &From, 1);
3476         if (InitSeq) {
3477           HaveConversion = true;
3478           return false;
3479         }
3480 
3481         if (InitSeq.isAmbiguous())
3482           return InitSeq.Diagnose(Self, Entity, Kind, &From, 1);
3483       }
3484     }
3485 
3486     return false;
3487   }
3488 
3489   //     -- Otherwise: E1 can be converted to match E2 if E1 can be
3490   //        implicitly converted to the type that expression E2 would have
3491   //        if E2 were converted to an rvalue (or the type it has, if E2 is
3492   //        an rvalue).
3493   //
3494   // This actually refers very narrowly to the lvalue-to-rvalue conversion, not
3495   // to the array-to-pointer or function-to-pointer conversions.
3496   if (!TTy->getAs<TagType>())
3497     TTy = TTy.getUnqualifiedType();
3498 
3499   InitializedEntity Entity = InitializedEntity::InitializeTemporary(TTy);
3500   InitializationSequence InitSeq(Self, Entity, Kind, &From, 1);
3501   HaveConversion = !InitSeq.Failed();
3502   ToType = TTy;
3503   if (InitSeq.isAmbiguous())
3504     return InitSeq.Diagnose(Self, Entity, Kind, &From, 1);
3505 
3506   return false;
3507 }
3508 
3509 /// \brief Try to find a common type for two according to C++0x 5.16p5.
3510 ///
3511 /// This is part of the parameter validation for the ? operator. If either
3512 /// value operand is a class type, overload resolution is used to find a
3513 /// conversion to a common type.
3514 static bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS,
3515                                     SourceLocation QuestionLoc) {
3516   Expr *Args[2] = { LHS.get(), RHS.get() };
3517   OverloadCandidateSet CandidateSet(QuestionLoc);
3518   Self.AddBuiltinOperatorCandidates(OO_Conditional, QuestionLoc, Args, 2,
3519                                     CandidateSet);
3520 
3521   OverloadCandidateSet::iterator Best;
3522   switch (CandidateSet.BestViableFunction(Self, QuestionLoc, Best)) {
3523     case OR_Success: {
3524       // We found a match. Perform the conversions on the arguments and move on.
3525       ExprResult LHSRes =
3526         Self.PerformImplicitConversion(LHS.get(), Best->BuiltinTypes.ParamTypes[0],
3527                                        Best->Conversions[0], Sema::AA_Converting);
3528       if (LHSRes.isInvalid())
3529         break;
3530       LHS = move(LHSRes);
3531 
3532       ExprResult RHSRes =
3533         Self.PerformImplicitConversion(RHS.get(), Best->BuiltinTypes.ParamTypes[1],
3534                                        Best->Conversions[1], Sema::AA_Converting);
3535       if (RHSRes.isInvalid())
3536         break;
3537       RHS = move(RHSRes);
3538       if (Best->Function)
3539         Self.MarkDeclarationReferenced(QuestionLoc, Best->Function);
3540       return false;
3541     }
3542 
3543     case OR_No_Viable_Function:
3544 
3545       // Emit a better diagnostic if one of the expressions is a null pointer
3546       // constant and the other is a pointer type. In this case, the user most
3547       // likely forgot to take the address of the other expression.
3548       if (Self.DiagnoseConditionalForNull(LHS.get(), RHS.get(), QuestionLoc))
3549         return true;
3550 
3551       Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
3552         << LHS.get()->getType() << RHS.get()->getType()
3553         << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
3554       return true;
3555 
3556     case OR_Ambiguous:
3557       Self.Diag(QuestionLoc, diag::err_conditional_ambiguous_ovl)
3558         << LHS.get()->getType() << RHS.get()->getType()
3559         << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
3560       // FIXME: Print the possible common types by printing the return types of
3561       // the viable candidates.
3562       break;
3563 
3564     case OR_Deleted:
3565       llvm_unreachable("Conditional operator has only built-in overloads");
3566   }
3567   return true;
3568 }
3569 
3570 /// \brief Perform an "extended" implicit conversion as returned by
3571 /// TryClassUnification.
3572 static bool ConvertForConditional(Sema &Self, ExprResult &E, QualType T) {
3573   InitializedEntity Entity = InitializedEntity::InitializeTemporary(T);
3574   InitializationKind Kind = InitializationKind::CreateCopy(E.get()->getLocStart(),
3575                                                            SourceLocation());
3576   Expr *Arg = E.take();
3577   InitializationSequence InitSeq(Self, Entity, Kind, &Arg, 1);
3578   ExprResult Result = InitSeq.Perform(Self, Entity, Kind, MultiExprArg(&Arg, 1));
3579   if (Result.isInvalid())
3580     return true;
3581 
3582   E = Result;
3583   return false;
3584 }
3585 
3586 /// \brief Check the operands of ?: under C++ semantics.
3587 ///
3588 /// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y
3589 /// extension. In this case, LHS == Cond. (But they're not aliases.)
3590 QualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS,
3591                                            ExprValueKind &VK, ExprObjectKind &OK,
3592                                            SourceLocation QuestionLoc) {
3593   // FIXME: Handle C99's complex types, vector types, block pointers and Obj-C++
3594   // interface pointers.
3595 
3596   // C++0x 5.16p1
3597   //   The first expression is contextually converted to bool.
3598   if (!Cond.get()->isTypeDependent()) {
3599     ExprResult CondRes = CheckCXXBooleanCondition(Cond.take());
3600     if (CondRes.isInvalid())
3601       return QualType();
3602     Cond = move(CondRes);
3603   }
3604 
3605   // Assume r-value.
3606   VK = VK_RValue;
3607   OK = OK_Ordinary;
3608 
3609   // Either of the arguments dependent?
3610   if (LHS.get()->isTypeDependent() || RHS.get()->isTypeDependent())
3611     return Context.DependentTy;
3612 
3613   // C++0x 5.16p2
3614   //   If either the second or the third operand has type (cv) void, ...
3615   QualType LTy = LHS.get()->getType();
3616   QualType RTy = RHS.get()->getType();
3617   bool LVoid = LTy->isVoidType();
3618   bool RVoid = RTy->isVoidType();
3619   if (LVoid || RVoid) {
3620     //   ... then the [l2r] conversions are performed on the second and third
3621     //   operands ...
3622     LHS = DefaultFunctionArrayLvalueConversion(LHS.take());
3623     RHS = DefaultFunctionArrayLvalueConversion(RHS.take());
3624     if (LHS.isInvalid() || RHS.isInvalid())
3625       return QualType();
3626     LTy = LHS.get()->getType();
3627     RTy = RHS.get()->getType();
3628 
3629     //   ... and one of the following shall hold:
3630     //   -- The second or the third operand (but not both) is a throw-
3631     //      expression; the result is of the type of the other and is an rvalue.
3632     bool LThrow = isa<CXXThrowExpr>(LHS.get());
3633     bool RThrow = isa<CXXThrowExpr>(RHS.get());
3634     if (LThrow && !RThrow)
3635       return RTy;
3636     if (RThrow && !LThrow)
3637       return LTy;
3638 
3639     //   -- Both the second and third operands have type void; the result is of
3640     //      type void and is an rvalue.
3641     if (LVoid && RVoid)
3642       return Context.VoidTy;
3643 
3644     // Neither holds, error.
3645     Diag(QuestionLoc, diag::err_conditional_void_nonvoid)
3646       << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1)
3647       << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
3648     return QualType();
3649   }
3650 
3651   // Neither is void.
3652 
3653   // C++0x 5.16p3
3654   //   Otherwise, if the second and third operand have different types, and
3655   //   either has (cv) class type, and attempt is made to convert each of those
3656   //   operands to the other.
3657   if (!Context.hasSameType(LTy, RTy) &&
3658       (LTy->isRecordType() || RTy->isRecordType())) {
3659     ImplicitConversionSequence ICSLeftToRight, ICSRightToLeft;
3660     // These return true if a single direction is already ambiguous.
3661     QualType L2RType, R2LType;
3662     bool HaveL2R, HaveR2L;
3663     if (TryClassUnification(*this, LHS.get(), RHS.get(), QuestionLoc, HaveL2R, L2RType))
3664       return QualType();
3665     if (TryClassUnification(*this, RHS.get(), LHS.get(), QuestionLoc, HaveR2L, R2LType))
3666       return QualType();
3667 
3668     //   If both can be converted, [...] the program is ill-formed.
3669     if (HaveL2R && HaveR2L) {
3670       Diag(QuestionLoc, diag::err_conditional_ambiguous)
3671         << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
3672       return QualType();
3673     }
3674 
3675     //   If exactly one conversion is possible, that conversion is applied to
3676     //   the chosen operand and the converted operands are used in place of the
3677     //   original operands for the remainder of this section.
3678     if (HaveL2R) {
3679       if (ConvertForConditional(*this, LHS, L2RType) || LHS.isInvalid())
3680         return QualType();
3681       LTy = LHS.get()->getType();
3682     } else if (HaveR2L) {
3683       if (ConvertForConditional(*this, RHS, R2LType) || RHS.isInvalid())
3684         return QualType();
3685       RTy = RHS.get()->getType();
3686     }
3687   }
3688 
3689   // C++0x 5.16p4
3690   //   If the second and third operands are glvalues of the same value
3691   //   category and have the same type, the result is of that type and
3692   //   value category and it is a bit-field if the second or the third
3693   //   operand is a bit-field, or if both are bit-fields.
3694   // We only extend this to bitfields, not to the crazy other kinds of
3695   // l-values.
3696   bool Same = Context.hasSameType(LTy, RTy);
3697   if (Same &&
3698       LHS.get()->isGLValue() &&
3699       LHS.get()->getValueKind() == RHS.get()->getValueKind() &&
3700       LHS.get()->isOrdinaryOrBitFieldObject() &&
3701       RHS.get()->isOrdinaryOrBitFieldObject()) {
3702     VK = LHS.get()->getValueKind();
3703     if (LHS.get()->getObjectKind() == OK_BitField ||
3704         RHS.get()->getObjectKind() == OK_BitField)
3705       OK = OK_BitField;
3706     return LTy;
3707   }
3708 
3709   // C++0x 5.16p5
3710   //   Otherwise, the result is an rvalue. If the second and third operands
3711   //   do not have the same type, and either has (cv) class type, ...
3712   if (!Same && (LTy->isRecordType() || RTy->isRecordType())) {
3713     //   ... overload resolution is used to determine the conversions (if any)
3714     //   to be applied to the operands. If the overload resolution fails, the
3715     //   program is ill-formed.
3716     if (FindConditionalOverload(*this, LHS, RHS, QuestionLoc))
3717       return QualType();
3718   }
3719 
3720   // C++0x 5.16p6
3721   //   LValue-to-rvalue, array-to-pointer, and function-to-pointer standard
3722   //   conversions are performed on the second and third operands.
3723   LHS = DefaultFunctionArrayLvalueConversion(LHS.take());
3724   RHS = DefaultFunctionArrayLvalueConversion(RHS.take());
3725   if (LHS.isInvalid() || RHS.isInvalid())
3726     return QualType();
3727   LTy = LHS.get()->getType();
3728   RTy = RHS.get()->getType();
3729 
3730   //   After those conversions, one of the following shall hold:
3731   //   -- The second and third operands have the same type; the result
3732   //      is of that type. If the operands have class type, the result
3733   //      is a prvalue temporary of the result type, which is
3734   //      copy-initialized from either the second operand or the third
3735   //      operand depending on the value of the first operand.
3736   if (Context.getCanonicalType(LTy) == Context.getCanonicalType(RTy)) {
3737     if (LTy->isRecordType()) {
3738       // The operands have class type. Make a temporary copy.
3739       InitializedEntity Entity = InitializedEntity::InitializeTemporary(LTy);
3740       ExprResult LHSCopy = PerformCopyInitialization(Entity,
3741                                                      SourceLocation(),
3742                                                      LHS);
3743       if (LHSCopy.isInvalid())
3744         return QualType();
3745 
3746       ExprResult RHSCopy = PerformCopyInitialization(Entity,
3747                                                      SourceLocation(),
3748                                                      RHS);
3749       if (RHSCopy.isInvalid())
3750         return QualType();
3751 
3752       LHS = LHSCopy;
3753       RHS = RHSCopy;
3754     }
3755 
3756     return LTy;
3757   }
3758 
3759   // Extension: conditional operator involving vector types.
3760   if (LTy->isVectorType() || RTy->isVectorType())
3761     return CheckVectorOperands(LHS, RHS, QuestionLoc, /*isCompAssign*/false);
3762 
3763   //   -- The second and third operands have arithmetic or enumeration type;
3764   //      the usual arithmetic conversions are performed to bring them to a
3765   //      common type, and the result is of that type.
3766   if (LTy->isArithmeticType() && RTy->isArithmeticType()) {
3767     UsualArithmeticConversions(LHS, RHS);
3768     if (LHS.isInvalid() || RHS.isInvalid())
3769       return QualType();
3770     return LHS.get()->getType();
3771   }
3772 
3773   //   -- The second and third operands have pointer type, or one has pointer
3774   //      type and the other is a null pointer constant; pointer conversions
3775   //      and qualification conversions are performed to bring them to their
3776   //      composite pointer type. The result is of the composite pointer type.
3777   //   -- The second and third operands have pointer to member type, or one has
3778   //      pointer to member type and the other is a null pointer constant;
3779   //      pointer to member conversions and qualification conversions are
3780   //      performed to bring them to a common type, whose cv-qualification
3781   //      shall match the cv-qualification of either the second or the third
3782   //      operand. The result is of the common type.
3783   bool NonStandardCompositeType = false;
3784   QualType Composite = FindCompositePointerType(QuestionLoc, LHS, RHS,
3785                               isSFINAEContext()? 0 : &NonStandardCompositeType);
3786   if (!Composite.isNull()) {
3787     if (NonStandardCompositeType)
3788       Diag(QuestionLoc,
3789            diag::ext_typecheck_cond_incompatible_operands_nonstandard)
3790         << LTy << RTy << Composite
3791         << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
3792 
3793     return Composite;
3794   }
3795 
3796   // Similarly, attempt to find composite type of two objective-c pointers.
3797   Composite = FindCompositeObjCPointerType(LHS, RHS, QuestionLoc);
3798   if (!Composite.isNull())
3799     return Composite;
3800 
3801   // Check if we are using a null with a non-pointer type.
3802   if (DiagnoseConditionalForNull(LHS.get(), RHS.get(), QuestionLoc))
3803     return QualType();
3804 
3805   Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
3806     << LHS.get()->getType() << RHS.get()->getType()
3807     << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();
3808   return QualType();
3809 }
3810 
3811 /// \brief Find a merged pointer type and convert the two expressions to it.
3812 ///
3813 /// This finds the composite pointer type (or member pointer type) for @p E1
3814 /// and @p E2 according to C++0x 5.9p2. It converts both expressions to this
3815 /// type and returns it.
3816 /// It does not emit diagnostics.
3817 ///
3818 /// \param Loc The location of the operator requiring these two expressions to
3819 /// be converted to the composite pointer type.
3820 ///
3821 /// If \p NonStandardCompositeType is non-NULL, then we are permitted to find
3822 /// a non-standard (but still sane) composite type to which both expressions
3823 /// can be converted. When such a type is chosen, \c *NonStandardCompositeType
3824 /// will be set true.
3825 QualType Sema::FindCompositePointerType(SourceLocation Loc,
3826                                         Expr *&E1, Expr *&E2,
3827                                         bool *NonStandardCompositeType) {
3828   if (NonStandardCompositeType)
3829     *NonStandardCompositeType = false;
3830 
3831   assert(getLangOptions().CPlusPlus && "This function assumes C++");
3832   QualType T1 = E1->getType(), T2 = E2->getType();
3833 
3834   if (!T1->isAnyPointerType() && !T1->isMemberPointerType() &&
3835       !T2->isAnyPointerType() && !T2->isMemberPointerType())
3836    return QualType();
3837 
3838   // C++0x 5.9p2
3839   //   Pointer conversions and qualification conversions are performed on
3840   //   pointer operands to bring them to their composite pointer type. If
3841   //   one operand is a null pointer constant, the composite pointer type is
3842   //   the type of the other operand.
3843   if (E1->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
3844     if (T2->isMemberPointerType())
3845       E1 = ImpCastExprToType(E1, T2, CK_NullToMemberPointer).take();
3846     else
3847       E1 = ImpCastExprToType(E1, T2, CK_NullToPointer).take();
3848     return T2;
3849   }
3850   if (E2->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
3851     if (T1->isMemberPointerType())
3852       E2 = ImpCastExprToType(E2, T1, CK_NullToMemberPointer).take();
3853     else
3854       E2 = ImpCastExprToType(E2, T1, CK_NullToPointer).take();
3855     return T1;
3856   }
3857 
3858   // Now both have to be pointers or member pointers.
3859   if ((!T1->isPointerType() && !T1->isMemberPointerType()) ||
3860       (!T2->isPointerType() && !T2->isMemberPointerType()))
3861     return QualType();
3862 
3863   //   Otherwise, of one of the operands has type "pointer to cv1 void," then
3864   //   the other has type "pointer to cv2 T" and the composite pointer type is
3865   //   "pointer to cv12 void," where cv12 is the union of cv1 and cv2.
3866   //   Otherwise, the composite pointer type is a pointer type similar to the
3867   //   type of one of the operands, with a cv-qualification signature that is
3868   //   the union of the cv-qualification signatures of the operand types.
3869   // In practice, the first part here is redundant; it's subsumed by the second.
3870   // What we do here is, we build the two possible composite types, and try the
3871   // conversions in both directions. If only one works, or if the two composite
3872   // types are the same, we have succeeded.
3873   // FIXME: extended qualifiers?
3874   typedef SmallVector<unsigned, 4> QualifierVector;
3875   QualifierVector QualifierUnion;
3876   typedef SmallVector<std::pair<const Type *, const Type *>, 4>
3877       ContainingClassVector;
3878   ContainingClassVector MemberOfClass;
3879   QualType Composite1 = Context.getCanonicalType(T1),
3880            Composite2 = Context.getCanonicalType(T2);
3881   unsigned NeedConstBefore = 0;
3882   do {
3883     const PointerType *Ptr1, *Ptr2;
3884     if ((Ptr1 = Composite1->getAs<PointerType>()) &&
3885         (Ptr2 = Composite2->getAs<PointerType>())) {
3886       Composite1 = Ptr1->getPointeeType();
3887       Composite2 = Ptr2->getPointeeType();
3888 
3889       // If we're allowed to create a non-standard composite type, keep track
3890       // of where we need to fill in additional 'const' qualifiers.
3891       if (NonStandardCompositeType &&
3892           Composite1.getCVRQualifiers() != Composite2.getCVRQualifiers())
3893         NeedConstBefore = QualifierUnion.size();
3894 
3895       QualifierUnion.push_back(
3896                  Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers());
3897       MemberOfClass.push_back(std::make_pair((const Type *)0, (const Type *)0));
3898       continue;
3899     }
3900 
3901     const MemberPointerType *MemPtr1, *MemPtr2;
3902     if ((MemPtr1 = Composite1->getAs<MemberPointerType>()) &&
3903         (MemPtr2 = Composite2->getAs<MemberPointerType>())) {
3904       Composite1 = MemPtr1->getPointeeType();
3905       Composite2 = MemPtr2->getPointeeType();
3906 
3907       // If we're allowed to create a non-standard composite type, keep track
3908       // of where we need to fill in additional 'const' qualifiers.
3909       if (NonStandardCompositeType &&
3910           Composite1.getCVRQualifiers() != Composite2.getCVRQualifiers())
3911         NeedConstBefore = QualifierUnion.size();
3912 
3913       QualifierUnion.push_back(
3914                  Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers());
3915       MemberOfClass.push_back(std::make_pair(MemPtr1->getClass(),
3916                                              MemPtr2->getClass()));
3917       continue;
3918     }
3919 
3920     // FIXME: block pointer types?
3921 
3922     // Cannot unwrap any more types.
3923     break;
3924   } while (true);
3925 
3926   if (NeedConstBefore && NonStandardCompositeType) {
3927     // Extension: Add 'const' to qualifiers that come before the first qualifier
3928     // mismatch, so that our (non-standard!) composite type meets the
3929     // requirements of C++ [conv.qual]p4 bullet 3.
3930     for (unsigned I = 0; I != NeedConstBefore; ++I) {
3931       if ((QualifierUnion[I] & Qualifiers::Const) == 0) {
3932         QualifierUnion[I] = QualifierUnion[I] | Qualifiers::Const;
3933         *NonStandardCompositeType = true;
3934       }
3935     }
3936   }
3937 
3938   // Rewrap the composites as pointers or member pointers with the union CVRs.
3939   ContainingClassVector::reverse_iterator MOC
3940     = MemberOfClass.rbegin();
3941   for (QualifierVector::reverse_iterator
3942          I = QualifierUnion.rbegin(),
3943          E = QualifierUnion.rend();
3944        I != E; (void)++I, ++MOC) {
3945     Qualifiers Quals = Qualifiers::fromCVRMask(*I);
3946     if (MOC->first && MOC->second) {
3947       // Rebuild member pointer type
3948       Composite1 = Context.getMemberPointerType(
3949                                     Context.getQualifiedType(Composite1, Quals),
3950                                     MOC->first);
3951       Composite2 = Context.getMemberPointerType(
3952                                     Context.getQualifiedType(Composite2, Quals),
3953                                     MOC->second);
3954     } else {
3955       // Rebuild pointer type
3956       Composite1
3957         = Context.getPointerType(Context.getQualifiedType(Composite1, Quals));
3958       Composite2
3959         = Context.getPointerType(Context.getQualifiedType(Composite2, Quals));
3960     }
3961   }
3962 
3963   // Try to convert to the first composite pointer type.
3964   InitializedEntity Entity1
3965     = InitializedEntity::InitializeTemporary(Composite1);
3966   InitializationKind Kind
3967     = InitializationKind::CreateCopy(Loc, SourceLocation());
3968   InitializationSequence E1ToC1(*this, Entity1, Kind, &E1, 1);
3969   InitializationSequence E2ToC1(*this, Entity1, Kind, &E2, 1);
3970 
3971   if (E1ToC1 && E2ToC1) {
3972     // Conversion to Composite1 is viable.
3973     if (!Context.hasSameType(Composite1, Composite2)) {
3974       // Composite2 is a different type from Composite1. Check whether
3975       // Composite2 is also viable.
3976       InitializedEntity Entity2
3977         = InitializedEntity::InitializeTemporary(Composite2);
3978       InitializationSequence E1ToC2(*this, Entity2, Kind, &E1, 1);
3979       InitializationSequence E2ToC2(*this, Entity2, Kind, &E2, 1);
3980       if (E1ToC2 && E2ToC2) {
3981         // Both Composite1 and Composite2 are viable and are different;
3982         // this is an ambiguity.
3983         return QualType();
3984       }
3985     }
3986 
3987     // Convert E1 to Composite1
3988     ExprResult E1Result
3989       = E1ToC1.Perform(*this, Entity1, Kind, MultiExprArg(*this,&E1,1));
3990     if (E1Result.isInvalid())
3991       return QualType();
3992     E1 = E1Result.takeAs<Expr>();
3993 
3994     // Convert E2 to Composite1
3995     ExprResult E2Result
3996       = E2ToC1.Perform(*this, Entity1, Kind, MultiExprArg(*this,&E2,1));
3997     if (E2Result.isInvalid())
3998       return QualType();
3999     E2 = E2Result.takeAs<Expr>();
4000 
4001     return Composite1;
4002   }
4003 
4004   // Check whether Composite2 is viable.
4005   InitializedEntity Entity2
4006     = InitializedEntity::InitializeTemporary(Composite2);
4007   InitializationSequence E1ToC2(*this, Entity2, Kind, &E1, 1);
4008   InitializationSequence E2ToC2(*this, Entity2, Kind, &E2, 1);
4009   if (!E1ToC2 || !E2ToC2)
4010     return QualType();
4011 
4012   // Convert E1 to Composite2
4013   ExprResult E1Result
4014     = E1ToC2.Perform(*this, Entity2, Kind, MultiExprArg(*this, &E1, 1));
4015   if (E1Result.isInvalid())
4016     return QualType();
4017   E1 = E1Result.takeAs<Expr>();
4018 
4019   // Convert E2 to Composite2
4020   ExprResult E2Result
4021     = E2ToC2.Perform(*this, Entity2, Kind, MultiExprArg(*this, &E2, 1));
4022   if (E2Result.isInvalid())
4023     return QualType();
4024   E2 = E2Result.takeAs<Expr>();
4025 
4026   return Composite2;
4027 }
4028 
4029 ExprResult Sema::MaybeBindToTemporary(Expr *E) {
4030   if (!E)
4031     return ExprError();
4032 
4033   assert(!isa<CXXBindTemporaryExpr>(E) && "Double-bound temporary?");
4034 
4035   // If the result is a glvalue, we shouldn't bind it.
4036   if (!E->isRValue())
4037     return Owned(E);
4038 
4039   // In ARC, calls that return a retainable type can return retained,
4040   // in which case we have to insert a consuming cast.
4041   if (getLangOptions().ObjCAutoRefCount &&
4042       E->getType()->isObjCRetainableType()) {
4043 
4044     bool ReturnsRetained;
4045 
4046     // For actual calls, we compute this by examining the type of the
4047     // called value.
4048     if (CallExpr *Call = dyn_cast<CallExpr>(E)) {
4049       Expr *Callee = Call->getCallee()->IgnoreParens();
4050       QualType T = Callee->getType();
4051 
4052       if (T == Context.BoundMemberTy) {
4053         // Handle pointer-to-members.
4054         if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(Callee))
4055           T = BinOp->getRHS()->getType();
4056         else if (MemberExpr *Mem = dyn_cast<MemberExpr>(Callee))
4057           T = Mem->getMemberDecl()->getType();
4058       }
4059 
4060       if (const PointerType *Ptr = T->getAs<PointerType>())
4061         T = Ptr->getPointeeType();
4062       else if (const BlockPointerType *Ptr = T->getAs<BlockPointerType>())
4063         T = Ptr->getPointeeType();
4064       else if (const MemberPointerType *MemPtr = T->getAs<MemberPointerType>())
4065         T = MemPtr->getPointeeType();
4066 
4067       const FunctionType *FTy = T->getAs<FunctionType>();
4068       assert(FTy && "call to value not of function type?");
4069       ReturnsRetained = FTy->getExtInfo().getProducesResult();
4070 
4071     // ActOnStmtExpr arranges things so that StmtExprs of retainable
4072     // type always produce a +1 object.
4073     } else if (isa<StmtExpr>(E)) {
4074       ReturnsRetained = true;
4075 
4076     // For message sends and property references, we try to find an
4077     // actual method.  FIXME: we should infer retention by selector in
4078     // cases where we don't have an actual method.
4079     } else {
4080       ObjCMethodDecl *D = 0;
4081       if (ObjCMessageExpr *Send = dyn_cast<ObjCMessageExpr>(E)) {
4082         D = Send->getMethodDecl();
4083       }
4084 
4085       ReturnsRetained = (D && D->hasAttr<NSReturnsRetainedAttr>());
4086 
4087       // Don't do reclaims on performSelector calls; despite their
4088       // return type, the invoked method doesn't necessarily actually
4089       // return an object.
4090       if (!ReturnsRetained &&
4091           D && D->getMethodFamily() == OMF_performSelector)
4092         return Owned(E);
4093     }
4094 
4095     ExprNeedsCleanups = true;
4096 
4097     CastKind ck = (ReturnsRetained ? CK_ARCConsumeObject
4098                                    : CK_ARCReclaimReturnedObject);
4099     return Owned(ImplicitCastExpr::Create(Context, E->getType(), ck, E, 0,
4100                                           VK_RValue));
4101   }
4102 
4103   if (!getLangOptions().CPlusPlus)
4104     return Owned(E);
4105 
4106   const RecordType *RT = E->getType()->getAs<RecordType>();
4107   if (!RT)
4108     return Owned(E);
4109 
4110   // That should be enough to guarantee that this type is complete.
4111   // If it has a trivial destructor, we can avoid the extra copy.
4112   CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
4113   if (RD->isInvalidDecl() || RD->hasTrivialDestructor())
4114     return Owned(E);
4115 
4116   CXXDestructorDecl *Destructor = LookupDestructor(RD);
4117 
4118   CXXTemporary *Temp = CXXTemporary::Create(Context, Destructor);
4119   if (Destructor) {
4120     MarkDeclarationReferenced(E->getExprLoc(), Destructor);
4121     CheckDestructorAccess(E->getExprLoc(), Destructor,
4122                           PDiag(diag::err_access_dtor_temp)
4123                             << E->getType());
4124 
4125     // We need a cleanup, but we don't need to remember the temporary.
4126     ExprNeedsCleanups = true;
4127   }
4128   return Owned(CXXBindTemporaryExpr::Create(Context, Temp, E));
4129 }
4130 
4131 ExprResult
4132 Sema::MaybeCreateExprWithCleanups(ExprResult SubExpr) {
4133   if (SubExpr.isInvalid())
4134     return ExprError();
4135 
4136   return Owned(MaybeCreateExprWithCleanups(SubExpr.take()));
4137 }
4138 
4139 Expr *Sema::MaybeCreateExprWithCleanups(Expr *SubExpr) {
4140   assert(SubExpr && "sub expression can't be null!");
4141 
4142   unsigned FirstCleanup = ExprEvalContexts.back().NumCleanupObjects;
4143   assert(ExprCleanupObjects.size() >= FirstCleanup);
4144   assert(ExprNeedsCleanups || ExprCleanupObjects.size() == FirstCleanup);
4145   if (!ExprNeedsCleanups)
4146     return SubExpr;
4147 
4148   ArrayRef<ExprWithCleanups::CleanupObject> Cleanups
4149     = llvm::makeArrayRef(ExprCleanupObjects.begin() + FirstCleanup,
4150                          ExprCleanupObjects.size() - FirstCleanup);
4151 
4152   Expr *E = ExprWithCleanups::Create(Context, SubExpr, Cleanups);
4153   DiscardCleanupsInEvaluationContext();
4154 
4155   return E;
4156 }
4157 
4158 Stmt *Sema::MaybeCreateStmtWithCleanups(Stmt *SubStmt) {
4159   assert(SubStmt && "sub statement can't be null!");
4160 
4161   if (!ExprNeedsCleanups)
4162     return SubStmt;
4163 
4164   // FIXME: In order to attach the temporaries, wrap the statement into
4165   // a StmtExpr; currently this is only used for asm statements.
4166   // This is hacky, either create a new CXXStmtWithTemporaries statement or
4167   // a new AsmStmtWithTemporaries.
4168   CompoundStmt *CompStmt = new (Context) CompoundStmt(Context, &SubStmt, 1,
4169                                                       SourceLocation(),
4170                                                       SourceLocation());
4171   Expr *E = new (Context) StmtExpr(CompStmt, Context.VoidTy, SourceLocation(),
4172                                    SourceLocation());
4173   return MaybeCreateExprWithCleanups(E);
4174 }
4175 
4176 ExprResult
4177 Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc,
4178                                    tok::TokenKind OpKind, ParsedType &ObjectType,
4179                                    bool &MayBePseudoDestructor) {
4180   // Since this might be a postfix expression, get rid of ParenListExprs.
4181   ExprResult Result = MaybeConvertParenListExprToParenExpr(S, Base);
4182   if (Result.isInvalid()) return ExprError();
4183   Base = Result.get();
4184 
4185   Result = CheckPlaceholderExpr(Base);
4186   if (Result.isInvalid()) return ExprError();
4187   Base = Result.take();
4188 
4189   QualType BaseType = Base->getType();
4190   MayBePseudoDestructor = false;
4191   if (BaseType->isDependentType()) {
4192     // If we have a pointer to a dependent type and are using the -> operator,
4193     // the object type is the type that the pointer points to. We might still
4194     // have enough information about that type to do something useful.
4195     if (OpKind == tok::arrow)
4196       if (const PointerType *Ptr = BaseType->getAs<PointerType>())
4197         BaseType = Ptr->getPointeeType();
4198 
4199     ObjectType = ParsedType::make(BaseType);
4200     MayBePseudoDestructor = true;
4201     return Owned(Base);
4202   }
4203 
4204   // C++ [over.match.oper]p8:
4205   //   [...] When operator->returns, the operator-> is applied  to the value
4206   //   returned, with the original second operand.
4207   if (OpKind == tok::arrow) {
4208     // The set of types we've considered so far.
4209     llvm::SmallPtrSet<CanQualType,8> CTypes;
4210     SmallVector<SourceLocation, 8> Locations;
4211     CTypes.insert(Context.getCanonicalType(BaseType));
4212 
4213     while (BaseType->isRecordType()) {
4214       Result = BuildOverloadedArrowExpr(S, Base, OpLoc);
4215       if (Result.isInvalid())
4216         return ExprError();
4217       Base = Result.get();
4218       if (CXXOperatorCallExpr *OpCall = dyn_cast<CXXOperatorCallExpr>(Base))
4219         Locations.push_back(OpCall->getDirectCallee()->getLocation());
4220       BaseType = Base->getType();
4221       CanQualType CBaseType = Context.getCanonicalType(BaseType);
4222       if (!CTypes.insert(CBaseType)) {
4223         Diag(OpLoc, diag::err_operator_arrow_circular);
4224         for (unsigned i = 0; i < Locations.size(); i++)
4225           Diag(Locations[i], diag::note_declared_at);
4226         return ExprError();
4227       }
4228     }
4229 
4230     if (BaseType->isPointerType())
4231       BaseType = BaseType->getPointeeType();
4232   }
4233 
4234   // We could end up with various non-record types here, such as extended
4235   // vector types or Objective-C interfaces. Just return early and let
4236   // ActOnMemberReferenceExpr do the work.
4237   if (!BaseType->isRecordType()) {
4238     // C++ [basic.lookup.classref]p2:
4239     //   [...] If the type of the object expression is of pointer to scalar
4240     //   type, the unqualified-id is looked up in the context of the complete
4241     //   postfix-expression.
4242     //
4243     // This also indicates that we should be parsing a
4244     // pseudo-destructor-name.
4245     ObjectType = ParsedType();
4246     MayBePseudoDestructor = true;
4247     return Owned(Base);
4248   }
4249 
4250   // The object type must be complete (or dependent).
4251   if (!BaseType->isDependentType() &&
4252       RequireCompleteType(OpLoc, BaseType,
4253                           PDiag(diag::err_incomplete_member_access)))
4254     return ExprError();
4255 
4256   // C++ [basic.lookup.classref]p2:
4257   //   If the id-expression in a class member access (5.2.5) is an
4258   //   unqualified-id, and the type of the object expression is of a class
4259   //   type C (or of pointer to a class type C), the unqualified-id is looked
4260   //   up in the scope of class C. [...]
4261   ObjectType = ParsedType::make(BaseType);
4262   return move(Base);
4263 }
4264 
4265 ExprResult Sema::DiagnoseDtorReference(SourceLocation NameLoc,
4266                                                    Expr *MemExpr) {
4267   SourceLocation ExpectedLParenLoc = PP.getLocForEndOfToken(NameLoc);
4268   Diag(MemExpr->getLocStart(), diag::err_dtor_expr_without_call)
4269     << isa<CXXPseudoDestructorExpr>(MemExpr)
4270     << FixItHint::CreateInsertion(ExpectedLParenLoc, "()");
4271 
4272   return ActOnCallExpr(/*Scope*/ 0,
4273                        MemExpr,
4274                        /*LPLoc*/ ExpectedLParenLoc,
4275                        MultiExprArg(),
4276                        /*RPLoc*/ ExpectedLParenLoc);
4277 }
4278 
4279 ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base,
4280                                            SourceLocation OpLoc,
4281                                            tok::TokenKind OpKind,
4282                                            const CXXScopeSpec &SS,
4283                                            TypeSourceInfo *ScopeTypeInfo,
4284                                            SourceLocation CCLoc,
4285                                            SourceLocation TildeLoc,
4286                                          PseudoDestructorTypeStorage Destructed,
4287                                            bool HasTrailingLParen) {
4288   TypeSourceInfo *DestructedTypeInfo = Destructed.getTypeSourceInfo();
4289 
4290   // C++ [expr.pseudo]p2:
4291   //   The left-hand side of the dot operator shall be of scalar type. The
4292   //   left-hand side of the arrow operator shall be of pointer to scalar type.
4293   //   This scalar type is the object type.
4294   QualType ObjectType = Base->getType();
4295   if (OpKind == tok::arrow) {
4296     if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {
4297       ObjectType = Ptr->getPointeeType();
4298     } else if (!Base->isTypeDependent()) {
4299       // The user wrote "p->" when she probably meant "p."; fix it.
4300       Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
4301         << ObjectType << true
4302         << FixItHint::CreateReplacement(OpLoc, ".");
4303       if (isSFINAEContext())
4304         return ExprError();
4305 
4306       OpKind = tok::period;
4307     }
4308   }
4309 
4310   if (!ObjectType->isDependentType() && !ObjectType->isScalarType()) {
4311     Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar)
4312       << ObjectType << Base->getSourceRange();
4313     return ExprError();
4314   }
4315 
4316   // C++ [expr.pseudo]p2:
4317   //   [...] The cv-unqualified versions of the object type and of the type
4318   //   designated by the pseudo-destructor-name shall be the same type.
4319   if (DestructedTypeInfo) {
4320     QualType DestructedType = DestructedTypeInfo->getType();
4321     SourceLocation DestructedTypeStart
4322       = DestructedTypeInfo->getTypeLoc().getLocalSourceRange().getBegin();
4323     if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {
4324       if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {
4325         Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch)
4326           << ObjectType << DestructedType << Base->getSourceRange()
4327           << DestructedTypeInfo->getTypeLoc().getLocalSourceRange();
4328 
4329         // Recover by setting the destructed type to the object type.
4330         DestructedType = ObjectType;
4331         DestructedTypeInfo = Context.getTrivialTypeSourceInfo(ObjectType,
4332                                                            DestructedTypeStart);
4333         Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo);
4334       } else if (DestructedType.getObjCLifetime() !=
4335                                                 ObjectType.getObjCLifetime()) {
4336 
4337         if (DestructedType.getObjCLifetime() == Qualifiers::OCL_None) {
4338           // Okay: just pretend that the user provided the correctly-qualified
4339           // type.
4340         } else {
4341           Diag(DestructedTypeStart, diag::err_arc_pseudo_dtor_inconstant_quals)
4342             << ObjectType << DestructedType << Base->getSourceRange()
4343             << DestructedTypeInfo->getTypeLoc().getLocalSourceRange();
4344         }
4345 
4346         // Recover by setting the destructed type to the object type.
4347         DestructedType = ObjectType;
4348         DestructedTypeInfo = Context.getTrivialTypeSourceInfo(ObjectType,
4349                                                            DestructedTypeStart);
4350         Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo);
4351       }
4352     }
4353   }
4354 
4355   // C++ [expr.pseudo]p2:
4356   //   [...] Furthermore, the two type-names in a pseudo-destructor-name of the
4357   //   form
4358   //
4359   //     ::[opt] nested-name-specifier[opt] type-name :: ~ type-name
4360   //
4361   //   shall designate the same scalar type.
4362   if (ScopeTypeInfo) {
4363     QualType ScopeType = ScopeTypeInfo->getType();
4364     if (!ScopeType->isDependentType() && !ObjectType->isDependentType() &&
4365         !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {
4366 
4367       Diag(ScopeTypeInfo->getTypeLoc().getLocalSourceRange().getBegin(),
4368            diag::err_pseudo_dtor_type_mismatch)
4369         << ObjectType << ScopeType << Base->getSourceRange()
4370         << ScopeTypeInfo->getTypeLoc().getLocalSourceRange();
4371 
4372       ScopeType = QualType();
4373       ScopeTypeInfo = 0;
4374     }
4375   }
4376 
4377   Expr *Result
4378     = new (Context) CXXPseudoDestructorExpr(Context, Base,
4379                                             OpKind == tok::arrow, OpLoc,
4380                                             SS.getWithLocInContext(Context),
4381                                             ScopeTypeInfo,
4382                                             CCLoc,
4383                                             TildeLoc,
4384                                             Destructed);
4385 
4386   if (HasTrailingLParen)
4387     return Owned(Result);
4388 
4389   return DiagnoseDtorReference(Destructed.getLocation(), Result);
4390 }
4391 
4392 ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
4393                                            SourceLocation OpLoc,
4394                                            tok::TokenKind OpKind,
4395                                            CXXScopeSpec &SS,
4396                                            UnqualifiedId &FirstTypeName,
4397                                            SourceLocation CCLoc,
4398                                            SourceLocation TildeLoc,
4399                                            UnqualifiedId &SecondTypeName,
4400                                            bool HasTrailingLParen) {
4401   assert((FirstTypeName.getKind() == UnqualifiedId::IK_TemplateId ||
4402           FirstTypeName.getKind() == UnqualifiedId::IK_Identifier) &&
4403          "Invalid first type name in pseudo-destructor");
4404   assert((SecondTypeName.getKind() == UnqualifiedId::IK_TemplateId ||
4405           SecondTypeName.getKind() == UnqualifiedId::IK_Identifier) &&
4406          "Invalid second type name in pseudo-destructor");
4407 
4408   // C++ [expr.pseudo]p2:
4409   //   The left-hand side of the dot operator shall be of scalar type. The
4410   //   left-hand side of the arrow operator shall be of pointer to scalar type.
4411   //   This scalar type is the object type.
4412   QualType ObjectType = Base->getType();
4413   if (OpKind == tok::arrow) {
4414     if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {
4415       ObjectType = Ptr->getPointeeType();
4416     } else if (!ObjectType->isDependentType()) {
4417       // The user wrote "p->" when she probably meant "p."; fix it.
4418       Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
4419         << ObjectType << true
4420         << FixItHint::CreateReplacement(OpLoc, ".");
4421       if (isSFINAEContext())
4422         return ExprError();
4423 
4424       OpKind = tok::period;
4425     }
4426   }
4427 
4428   // Compute the object type that we should use for name lookup purposes. Only
4429   // record types and dependent types matter.
4430   ParsedType ObjectTypePtrForLookup;
4431   if (!SS.isSet()) {
4432     if (ObjectType->isRecordType())
4433       ObjectTypePtrForLookup = ParsedType::make(ObjectType);
4434     else if (ObjectType->isDependentType())
4435       ObjectTypePtrForLookup = ParsedType::make(Context.DependentTy);
4436   }
4437 
4438   // Convert the name of the type being destructed (following the ~) into a
4439   // type (with source-location information).
4440   QualType DestructedType;
4441   TypeSourceInfo *DestructedTypeInfo = 0;
4442   PseudoDestructorTypeStorage Destructed;
4443   if (SecondTypeName.getKind() == UnqualifiedId::IK_Identifier) {
4444     ParsedType T = getTypeName(*SecondTypeName.Identifier,
4445                                SecondTypeName.StartLocation,
4446                                S, &SS, true, false, ObjectTypePtrForLookup);
4447     if (!T &&
4448         ((SS.isSet() && !computeDeclContext(SS, false)) ||
4449          (!SS.isSet() && ObjectType->isDependentType()))) {
4450       // The name of the type being destroyed is a dependent name, and we
4451       // couldn't find anything useful in scope. Just store the identifier and
4452       // it's location, and we'll perform (qualified) name lookup again at
4453       // template instantiation time.
4454       Destructed = PseudoDestructorTypeStorage(SecondTypeName.Identifier,
4455                                                SecondTypeName.StartLocation);
4456     } else if (!T) {
4457       Diag(SecondTypeName.StartLocation,
4458            diag::err_pseudo_dtor_destructor_non_type)
4459         << SecondTypeName.Identifier << ObjectType;
4460       if (isSFINAEContext())
4461         return ExprError();
4462 
4463       // Recover by assuming we had the right type all along.
4464       DestructedType = ObjectType;
4465     } else
4466       DestructedType = GetTypeFromParser(T, &DestructedTypeInfo);
4467   } else {
4468     // Resolve the template-id to a type.
4469     TemplateIdAnnotation *TemplateId = SecondTypeName.TemplateId;
4470     ASTTemplateArgsPtr TemplateArgsPtr(*this,
4471                                        TemplateId->getTemplateArgs(),
4472                                        TemplateId->NumArgs);
4473     TypeResult T = ActOnTemplateIdType(TemplateId->SS,
4474                                        TemplateId->Template,
4475                                        TemplateId->TemplateNameLoc,
4476                                        TemplateId->LAngleLoc,
4477                                        TemplateArgsPtr,
4478                                        TemplateId->RAngleLoc);
4479     if (T.isInvalid() || !T.get()) {
4480       // Recover by assuming we had the right type all along.
4481       DestructedType = ObjectType;
4482     } else
4483       DestructedType = GetTypeFromParser(T.get(), &DestructedTypeInfo);
4484   }
4485 
4486   // If we've performed some kind of recovery, (re-)build the type source
4487   // information.
4488   if (!DestructedType.isNull()) {
4489     if (!DestructedTypeInfo)
4490       DestructedTypeInfo = Context.getTrivialTypeSourceInfo(DestructedType,
4491                                                   SecondTypeName.StartLocation);
4492     Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo);
4493   }
4494 
4495   // Convert the name of the scope type (the type prior to '::') into a type.
4496   TypeSourceInfo *ScopeTypeInfo = 0;
4497   QualType ScopeType;
4498   if (FirstTypeName.getKind() == UnqualifiedId::IK_TemplateId ||
4499       FirstTypeName.Identifier) {
4500     if (FirstTypeName.getKind() == UnqualifiedId::IK_Identifier) {
4501       ParsedType T = getTypeName(*FirstTypeName.Identifier,
4502                                  FirstTypeName.StartLocation,
4503                                  S, &SS, true, false, ObjectTypePtrForLookup);
4504       if (!T) {
4505         Diag(FirstTypeName.StartLocation,
4506              diag::err_pseudo_dtor_destructor_non_type)
4507           << FirstTypeName.Identifier << ObjectType;
4508 
4509         if (isSFINAEContext())
4510           return ExprError();
4511 
4512         // Just drop this type. It's unnecessary anyway.
4513         ScopeType = QualType();
4514       } else
4515         ScopeType = GetTypeFromParser(T, &ScopeTypeInfo);
4516     } else {
4517       // Resolve the template-id to a type.
4518       TemplateIdAnnotation *TemplateId = FirstTypeName.TemplateId;
4519       ASTTemplateArgsPtr TemplateArgsPtr(*this,
4520                                          TemplateId->getTemplateArgs(),
4521                                          TemplateId->NumArgs);
4522       TypeResult T = ActOnTemplateIdType(TemplateId->SS,
4523                                          TemplateId->Template,
4524                                          TemplateId->TemplateNameLoc,
4525                                          TemplateId->LAngleLoc,
4526                                          TemplateArgsPtr,
4527                                          TemplateId->RAngleLoc);
4528       if (T.isInvalid() || !T.get()) {
4529         // Recover by dropping this type.
4530         ScopeType = QualType();
4531       } else
4532         ScopeType = GetTypeFromParser(T.get(), &ScopeTypeInfo);
4533     }
4534   }
4535 
4536   if (!ScopeType.isNull() && !ScopeTypeInfo)
4537     ScopeTypeInfo = Context.getTrivialTypeSourceInfo(ScopeType,
4538                                                   FirstTypeName.StartLocation);
4539 
4540 
4541   return BuildPseudoDestructorExpr(Base, OpLoc, OpKind, SS,
4542                                    ScopeTypeInfo, CCLoc, TildeLoc,
4543                                    Destructed, HasTrailingLParen);
4544 }
4545 
4546 ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl,
4547                                         CXXMethodDecl *Method,
4548                                         bool HadMultipleCandidates) {
4549   ExprResult Exp = PerformObjectArgumentInitialization(E, /*Qualifier=*/0,
4550                                           FoundDecl, Method);
4551   if (Exp.isInvalid())
4552     return true;
4553 
4554   MemberExpr *ME =
4555       new (Context) MemberExpr(Exp.take(), /*IsArrow=*/false, Method,
4556                                SourceLocation(), Method->getType(),
4557                                VK_RValue, OK_Ordinary);
4558   if (HadMultipleCandidates)
4559     ME->setHadMultipleCandidates(true);
4560 
4561   QualType ResultType = Method->getResultType();
4562   ExprValueKind VK = Expr::getValueKindForType(ResultType);
4563   ResultType = ResultType.getNonLValueExprType(Context);
4564 
4565   MarkDeclarationReferenced(Exp.get()->getLocStart(), Method);
4566   CXXMemberCallExpr *CE =
4567     new (Context) CXXMemberCallExpr(Context, ME, 0, 0, ResultType, VK,
4568                                     Exp.get()->getLocEnd());
4569   return CE;
4570 }
4571 
4572 ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
4573                                       SourceLocation RParen) {
4574   return Owned(new (Context) CXXNoexceptExpr(Context.BoolTy, Operand,
4575                                              Operand->CanThrow(Context),
4576                                              KeyLoc, RParen));
4577 }
4578 
4579 ExprResult Sema::ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation,
4580                                    Expr *Operand, SourceLocation RParen) {
4581   return BuildCXXNoexceptExpr(KeyLoc, Operand, RParen);
4582 }
4583 
4584 /// Perform the conversions required for an expression used in a
4585 /// context that ignores the result.
4586 ExprResult Sema::IgnoredValueConversions(Expr *E) {
4587   if (E->hasPlaceholderType()) {
4588     ExprResult result = CheckPlaceholderExpr(E);
4589     if (result.isInvalid()) return Owned(E);
4590     E = result.take();
4591   }
4592 
4593   // C99 6.3.2.1:
4594   //   [Except in specific positions,] an lvalue that does not have
4595   //   array type is converted to the value stored in the
4596   //   designated object (and is no longer an lvalue).
4597   if (E->isRValue()) {
4598     // In C, function designators (i.e. expressions of function type)
4599     // are r-values, but we still want to do function-to-pointer decay
4600     // on them.  This is both technically correct and convenient for
4601     // some clients.
4602     if (!getLangOptions().CPlusPlus && E->getType()->isFunctionType())
4603       return DefaultFunctionArrayConversion(E);
4604 
4605     return Owned(E);
4606   }
4607 
4608   // Otherwise, this rule does not apply in C++, at least not for the moment.
4609   if (getLangOptions().CPlusPlus) return Owned(E);
4610 
4611   // GCC seems to also exclude expressions of incomplete enum type.
4612   if (const EnumType *T = E->getType()->getAs<EnumType>()) {
4613     if (!T->getDecl()->isComplete()) {
4614       // FIXME: stupid workaround for a codegen bug!
4615       E = ImpCastExprToType(E, Context.VoidTy, CK_ToVoid).take();
4616       return Owned(E);
4617     }
4618   }
4619 
4620   ExprResult Res = DefaultFunctionArrayLvalueConversion(E);
4621   if (Res.isInvalid())
4622     return Owned(E);
4623   E = Res.take();
4624 
4625   if (!E->getType()->isVoidType())
4626     RequireCompleteType(E->getExprLoc(), E->getType(),
4627                         diag::err_incomplete_type);
4628   return Owned(E);
4629 }
4630 
4631 ExprResult Sema::ActOnFinishFullExpr(Expr *FE) {
4632   ExprResult FullExpr = Owned(FE);
4633 
4634   if (!FullExpr.get())
4635     return ExprError();
4636 
4637   if (DiagnoseUnexpandedParameterPack(FullExpr.get()))
4638     return ExprError();
4639 
4640   FullExpr = CheckPlaceholderExpr(FullExpr.take());
4641   if (FullExpr.isInvalid())
4642     return ExprError();
4643 
4644   FullExpr = IgnoredValueConversions(FullExpr.take());
4645   if (FullExpr.isInvalid())
4646     return ExprError();
4647 
4648   CheckImplicitConversions(FullExpr.get(), FullExpr.get()->getExprLoc());
4649   return MaybeCreateExprWithCleanups(FullExpr);
4650 }
4651 
4652 StmtResult Sema::ActOnFinishFullStmt(Stmt *FullStmt) {
4653   if (!FullStmt) return StmtError();
4654 
4655   return MaybeCreateStmtWithCleanups(FullStmt);
4656 }
4657 
4658 Sema::IfExistsResult
4659 Sema::CheckMicrosoftIfExistsSymbol(Scope *S,
4660                                    CXXScopeSpec &SS,
4661                                    const DeclarationNameInfo &TargetNameInfo) {
4662   DeclarationName TargetName = TargetNameInfo.getName();
4663   if (!TargetName)
4664     return IER_DoesNotExist;
4665 
4666   // If the name itself is dependent, then the result is dependent.
4667   if (TargetName.isDependentName())
4668     return IER_Dependent;
4669 
4670   // Do the redeclaration lookup in the current scope.
4671   LookupResult R(*this, TargetNameInfo, Sema::LookupAnyName,
4672                  Sema::NotForRedeclaration);
4673   LookupParsedName(R, S, &SS);
4674   R.suppressDiagnostics();
4675 
4676   switch (R.getResultKind()) {
4677   case LookupResult::Found:
4678   case LookupResult::FoundOverloaded:
4679   case LookupResult::FoundUnresolvedValue:
4680   case LookupResult::Ambiguous:
4681     return IER_Exists;
4682 
4683   case LookupResult::NotFound:
4684     return IER_DoesNotExist;
4685 
4686   case LookupResult::NotFoundInCurrentInstantiation:
4687     return IER_Dependent;
4688   }
4689 
4690   return IER_DoesNotExist;
4691 }
4692 
4693 Sema::IfExistsResult
4694 Sema::CheckMicrosoftIfExistsSymbol(Scope *S, SourceLocation KeywordLoc,
4695                                    bool IsIfExists, CXXScopeSpec &SS,
4696                                    UnqualifiedId &Name) {
4697   DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
4698 
4699   // Check for unexpanded parameter packs.
4700   SmallVector<UnexpandedParameterPack, 4> Unexpanded;
4701   collectUnexpandedParameterPacks(SS, Unexpanded);
4702   collectUnexpandedParameterPacks(TargetNameInfo, Unexpanded);
4703   if (!Unexpanded.empty()) {
4704     DiagnoseUnexpandedParameterPacks(KeywordLoc,
4705                                      IsIfExists? UPPC_IfExists
4706                                                : UPPC_IfNotExists,
4707                                      Unexpanded);
4708     return IER_Error;
4709   }
4710 
4711   return CheckMicrosoftIfExistsSymbol(S, SS, TargetNameInfo);
4712 }
4713 
4714