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