SemaExprCXX.cpp revision 27a5b9b9babd1e4f8a19c5c9c0736c4b311c79b2
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 "SemaInherit.h"
15#include "Sema.h"
16#include "clang/AST/ExprCXX.h"
17#include "clang/AST/ASTContext.h"
18#include "clang/Parse/DeclSpec.h"
19#include "clang/Lex/Preprocessor.h"
20#include "clang/Basic/TargetInfo.h"
21#include "llvm/ADT/STLExtras.h"
22using namespace clang;
23
24/// ActOnCXXConversionFunctionExpr - Parse a C++ conversion function
25/// name (e.g., operator void const *) as an expression. This is
26/// very similar to ActOnIdentifierExpr, except that instead of
27/// providing an identifier the parser provides the type of the
28/// conversion function.
29Sema::OwningExprResult
30Sema::ActOnCXXConversionFunctionExpr(Scope *S, SourceLocation OperatorLoc,
31                                     TypeTy *Ty, bool HasTrailingLParen,
32                                     const CXXScopeSpec &SS,
33                                     bool isAddressOfOperand) {
34  //FIXME: Preserve type source info.
35  QualType ConvType = GetTypeFromParser(Ty);
36  CanQualType ConvTypeCanon = Context.getCanonicalType(ConvType);
37  DeclarationName ConvName
38    = Context.DeclarationNames.getCXXConversionFunctionName(ConvTypeCanon);
39  return ActOnDeclarationNameExpr(S, OperatorLoc, ConvName, HasTrailingLParen,
40                                  &SS, isAddressOfOperand);
41}
42
43/// ActOnCXXOperatorFunctionIdExpr - Parse a C++ overloaded operator
44/// name (e.g., @c operator+ ) as an expression. This is very
45/// similar to ActOnIdentifierExpr, except that instead of providing
46/// an identifier the parser provides the kind of overloaded
47/// operator that was parsed.
48Sema::OwningExprResult
49Sema::ActOnCXXOperatorFunctionIdExpr(Scope *S, SourceLocation OperatorLoc,
50                                     OverloadedOperatorKind Op,
51                                     bool HasTrailingLParen,
52                                     const CXXScopeSpec &SS,
53                                     bool isAddressOfOperand) {
54  DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(Op);
55  return ActOnDeclarationNameExpr(S, OperatorLoc, Name, HasTrailingLParen, &SS,
56                                  isAddressOfOperand);
57}
58
59/// ActOnCXXTypeidOfType - Parse typeid( type-id ).
60Action::OwningExprResult
61Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc,
62                     bool isType, void *TyOrExpr, SourceLocation RParenLoc) {
63  NamespaceDecl *StdNs = GetStdNamespace();
64  if (!StdNs)
65    return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));
66
67  if (isType)
68    // FIXME: Preserve type source info.
69    TyOrExpr = GetTypeFromParser(TyOrExpr).getAsOpaquePtr();
70
71  IdentifierInfo *TypeInfoII = &PP.getIdentifierTable().get("type_info");
72  Decl *TypeInfoDecl = LookupQualifiedName(StdNs, TypeInfoII, LookupTagName);
73  RecordDecl *TypeInfoRecordDecl = dyn_cast_or_null<RecordDecl>(TypeInfoDecl);
74  if (!TypeInfoRecordDecl)
75    return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));
76
77  QualType TypeInfoType = Context.getTypeDeclType(TypeInfoRecordDecl);
78
79  if (!isType) {
80    // C++0x [expr.typeid]p3:
81    //   When typeid is applied to an expression other than an lvalue of a
82    //   polymorphic class type [...] [the] expression is an unevaluated
83    //   operand.
84
85    // FIXME: if the type of the expression is a class type, the class
86    // shall be completely defined.
87    bool isUnevaluatedOperand = true;
88    Expr *E = static_cast<Expr *>(TyOrExpr);
89    if (E && !E->isTypeDependent() && E->isLvalue(Context) == Expr::LV_Valid) {
90      QualType T = E->getType();
91      if (const RecordType *RecordT = T->getAs<RecordType>()) {
92        CXXRecordDecl *RecordD = cast<CXXRecordDecl>(RecordT->getDecl());
93        if (RecordD->isPolymorphic())
94          isUnevaluatedOperand = false;
95      }
96    }
97
98    // If this is an unevaluated operand, clear out the set of declaration
99    // references we have been computing.
100    if (isUnevaluatedOperand)
101      PotentiallyReferencedDeclStack.back().clear();
102  }
103
104  return Owned(new (Context) CXXTypeidExpr(isType, TyOrExpr,
105                                           TypeInfoType.withConst(),
106                                           SourceRange(OpLoc, RParenLoc)));
107}
108
109/// ActOnCXXBoolLiteral - Parse {true,false} literals.
110Action::OwningExprResult
111Sema::ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind) {
112  assert((Kind == tok::kw_true || Kind == tok::kw_false) &&
113         "Unknown C++ Boolean value!");
114  return Owned(new (Context) CXXBoolLiteralExpr(Kind == tok::kw_true,
115                                                Context.BoolTy, OpLoc));
116}
117
118/// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
119Action::OwningExprResult
120Sema::ActOnCXXNullPtrLiteral(SourceLocation Loc) {
121  return Owned(new (Context) CXXNullPtrLiteralExpr(Context.NullPtrTy, Loc));
122}
123
124/// ActOnCXXThrow - Parse throw expressions.
125Action::OwningExprResult
126Sema::ActOnCXXThrow(SourceLocation OpLoc, ExprArg E) {
127  Expr *Ex = E.takeAs<Expr>();
128  if (Ex && !Ex->isTypeDependent() && CheckCXXThrowOperand(OpLoc, Ex))
129    return ExprError();
130  return Owned(new (Context) CXXThrowExpr(Ex, Context.VoidTy, OpLoc));
131}
132
133/// CheckCXXThrowOperand - Validate the operand of a throw.
134bool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, Expr *&E) {
135  // C++ [except.throw]p3:
136  //   [...] adjusting the type from "array of T" or "function returning T"
137  //   to "pointer to T" or "pointer to function returning T", [...]
138  DefaultFunctionArrayConversion(E);
139
140  //   If the type of the exception would be an incomplete type or a pointer
141  //   to an incomplete type other than (cv) void the program is ill-formed.
142  QualType Ty = E->getType();
143  int isPointer = 0;
144  if (const PointerType* Ptr = Ty->getAs<PointerType>()) {
145    Ty = Ptr->getPointeeType();
146    isPointer = 1;
147  }
148  if (!isPointer || !Ty->isVoidType()) {
149    if (RequireCompleteType(ThrowLoc, Ty,
150                            isPointer ? diag::err_throw_incomplete_ptr
151                                      : diag::err_throw_incomplete,
152                            E->getSourceRange(), SourceRange(), QualType()))
153      return true;
154  }
155
156  // FIXME: Construct a temporary here.
157  return false;
158}
159
160Action::OwningExprResult Sema::ActOnCXXThis(SourceLocation ThisLoc) {
161  /// C++ 9.3.2: In the body of a non-static member function, the keyword this
162  /// is a non-lvalue expression whose value is the address of the object for
163  /// which the function is called.
164
165  if (!isa<FunctionDecl>(CurContext))
166    return ExprError(Diag(ThisLoc, diag::err_invalid_this_use));
167
168  if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CurContext))
169    if (MD->isInstance())
170      return Owned(new (Context) CXXThisExpr(ThisLoc,
171                                             MD->getThisType(Context)));
172
173  return ExprError(Diag(ThisLoc, diag::err_invalid_this_use));
174}
175
176/// ActOnCXXTypeConstructExpr - Parse construction of a specified type.
177/// Can be interpreted either as function-style casting ("int(x)")
178/// or class type construction ("ClassType(x,y,z)")
179/// or creation of a value-initialized type ("int()").
180Action::OwningExprResult
181Sema::ActOnCXXTypeConstructExpr(SourceRange TypeRange, TypeTy *TypeRep,
182                                SourceLocation LParenLoc,
183                                MultiExprArg exprs,
184                                SourceLocation *CommaLocs,
185                                SourceLocation RParenLoc) {
186  assert(TypeRep && "Missing type!");
187  // FIXME: Preserve type source info.
188  QualType Ty = GetTypeFromParser(TypeRep);
189  unsigned NumExprs = exprs.size();
190  Expr **Exprs = (Expr**)exprs.get();
191  SourceLocation TyBeginLoc = TypeRange.getBegin();
192  SourceRange FullRange = SourceRange(TyBeginLoc, RParenLoc);
193
194  if (Ty->isDependentType() ||
195      CallExpr::hasAnyTypeDependentArguments(Exprs, NumExprs)) {
196    exprs.release();
197
198    return Owned(CXXUnresolvedConstructExpr::Create(Context,
199                                                    TypeRange.getBegin(), Ty,
200                                                    LParenLoc,
201                                                    Exprs, NumExprs,
202                                                    RParenLoc));
203  }
204
205
206  // C++ [expr.type.conv]p1:
207  // If the expression list is a single expression, the type conversion
208  // expression is equivalent (in definedness, and if defined in meaning) to the
209  // corresponding cast expression.
210  //
211  if (NumExprs == 1) {
212    CastExpr::CastKind Kind = CastExpr::CK_Unknown;
213    if (CheckCastTypes(TypeRange, Ty, Exprs[0], Kind, /*functional-style*/true))
214      return ExprError();
215    exprs.release();
216    return Owned(new (Context) CXXFunctionalCastExpr(Ty.getNonReferenceType(),
217                                                     Ty, TyBeginLoc, Kind,
218                                                     Exprs[0], RParenLoc));
219  }
220
221  if (const RecordType *RT = Ty->getAs<RecordType>()) {
222    CXXRecordDecl *Record = cast<CXXRecordDecl>(RT->getDecl());
223
224    // FIXME: We should always create a CXXTemporaryObjectExpr here unless
225    // both the ctor and dtor are trivial.
226    if (NumExprs > 1 || Record->hasUserDeclaredConstructor()) {
227      CXXConstructorDecl *Constructor
228        = PerformInitializationByConstructor(Ty, Exprs, NumExprs,
229                                             TypeRange.getBegin(),
230                                             SourceRange(TypeRange.getBegin(),
231                                                         RParenLoc),
232                                             DeclarationName(),
233                                             IK_Direct);
234
235      if (!Constructor)
236        return ExprError();
237
238      exprs.release();
239      Expr *E = new (Context) CXXTemporaryObjectExpr(Context, Constructor,
240                                                     Ty, TyBeginLoc, Exprs,
241                                                     NumExprs, RParenLoc);
242      return MaybeBindToTemporary(E);
243    }
244
245    // Fall through to value-initialize an object of class type that
246    // doesn't have a user-declared default constructor.
247  }
248
249  // C++ [expr.type.conv]p1:
250  // If the expression list specifies more than a single value, the type shall
251  // be a class with a suitably declared constructor.
252  //
253  if (NumExprs > 1)
254    return ExprError(Diag(CommaLocs[0],
255                          diag::err_builtin_func_cast_more_than_one_arg)
256      << FullRange);
257
258  assert(NumExprs == 0 && "Expected 0 expressions");
259
260  // C++ [expr.type.conv]p2:
261  // The expression T(), where T is a simple-type-specifier for a non-array
262  // complete object type or the (possibly cv-qualified) void type, creates an
263  // rvalue of the specified type, which is value-initialized.
264  //
265  if (Ty->isArrayType())
266    return ExprError(Diag(TyBeginLoc,
267                          diag::err_value_init_for_array_type) << FullRange);
268  if (!Ty->isDependentType() && !Ty->isVoidType() &&
269      RequireCompleteType(TyBeginLoc, Ty,
270                          diag::err_invalid_incomplete_type_use, FullRange))
271    return ExprError();
272
273  if (RequireNonAbstractType(TyBeginLoc, Ty,
274                             diag::err_allocation_of_abstract_type))
275    return ExprError();
276
277  exprs.release();
278  return Owned(new (Context) CXXZeroInitValueExpr(Ty, TyBeginLoc, RParenLoc));
279}
280
281
282/// ActOnCXXNew - Parsed a C++ 'new' expression (C++ 5.3.4), as in e.g.:
283/// @code new (memory) int[size][4] @endcode
284/// or
285/// @code ::new Foo(23, "hello") @endcode
286/// For the interpretation of this heap of arguments, consult the base version.
287Action::OwningExprResult
288Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
289                  SourceLocation PlacementLParen, MultiExprArg PlacementArgs,
290                  SourceLocation PlacementRParen, bool ParenTypeId,
291                  Declarator &D, SourceLocation ConstructorLParen,
292                  MultiExprArg ConstructorArgs,
293                  SourceLocation ConstructorRParen)
294{
295  Expr *ArraySize = 0;
296  unsigned Skip = 0;
297  // If the specified type is an array, unwrap it and save the expression.
298  if (D.getNumTypeObjects() > 0 &&
299      D.getTypeObject(0).Kind == DeclaratorChunk::Array) {
300    DeclaratorChunk &Chunk = D.getTypeObject(0);
301    if (Chunk.Arr.hasStatic)
302      return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new)
303        << D.getSourceRange());
304    if (!Chunk.Arr.NumElts)
305      return ExprError(Diag(Chunk.Loc, diag::err_array_new_needs_size)
306        << D.getSourceRange());
307    ArraySize = static_cast<Expr*>(Chunk.Arr.NumElts);
308    Skip = 1;
309  }
310
311  //FIXME: Store DeclaratorInfo in CXXNew expression.
312  DeclaratorInfo *DInfo = 0;
313  QualType AllocType = GetTypeForDeclarator(D, /*Scope=*/0, &DInfo, Skip);
314  if (D.isInvalidType())
315    return ExprError();
316
317  // Every dimension shall be of constant size.
318  unsigned i = 1;
319  QualType ElementType = AllocType;
320  while (const ArrayType *Array = Context.getAsArrayType(ElementType)) {
321    if (!Array->isConstantArrayType()) {
322      Diag(D.getTypeObject(i).Loc, diag::err_new_array_nonconst)
323        << static_cast<Expr*>(D.getTypeObject(i).Arr.NumElts)->getSourceRange();
324      return ExprError();
325    }
326    ElementType = Array->getElementType();
327    ++i;
328  }
329
330  return BuildCXXNew(StartLoc, UseGlobal,
331                     PlacementLParen,
332                     move(PlacementArgs),
333                     PlacementRParen,
334                     ParenTypeId,
335                     AllocType,
336                     D.getSourceRange().getBegin(),
337                     D.getSourceRange(),
338                     Owned(ArraySize),
339                     ConstructorLParen,
340                     move(ConstructorArgs),
341                     ConstructorRParen);
342}
343
344Sema::OwningExprResult
345Sema::BuildCXXNew(SourceLocation StartLoc, bool UseGlobal,
346                  SourceLocation PlacementLParen,
347                  MultiExprArg PlacementArgs,
348                  SourceLocation PlacementRParen,
349                  bool ParenTypeId,
350                  QualType AllocType,
351                  SourceLocation TypeLoc,
352                  SourceRange TypeRange,
353                  ExprArg ArraySizeE,
354                  SourceLocation ConstructorLParen,
355                  MultiExprArg ConstructorArgs,
356                  SourceLocation ConstructorRParen) {
357  if (CheckAllocatedType(AllocType, TypeLoc, TypeRange))
358    return ExprError();
359
360  QualType ResultType = Context.getPointerType(AllocType);
361
362  // That every array dimension except the first is constant was already
363  // checked by the type check above.
364
365  // C++ 5.3.4p6: "The expression in a direct-new-declarator shall have integral
366  //   or enumeration type with a non-negative value."
367  Expr *ArraySize = (Expr *)ArraySizeE.get();
368  if (ArraySize && !ArraySize->isTypeDependent()) {
369    QualType SizeType = ArraySize->getType();
370    if (!SizeType->isIntegralType() && !SizeType->isEnumeralType())
371      return ExprError(Diag(ArraySize->getSourceRange().getBegin(),
372                            diag::err_array_size_not_integral)
373        << SizeType << ArraySize->getSourceRange());
374    // Let's see if this is a constant < 0. If so, we reject it out of hand.
375    // We don't care about special rules, so we tell the machinery it's not
376    // evaluated - it gives us a result in more cases.
377    if (!ArraySize->isValueDependent()) {
378      llvm::APSInt Value;
379      if (ArraySize->isIntegerConstantExpr(Value, Context, 0, false)) {
380        if (Value < llvm::APSInt(
381                        llvm::APInt::getNullValue(Value.getBitWidth()), false))
382          return ExprError(Diag(ArraySize->getSourceRange().getBegin(),
383                           diag::err_typecheck_negative_array_size)
384            << ArraySize->getSourceRange());
385      }
386    }
387  }
388
389  FunctionDecl *OperatorNew = 0;
390  FunctionDecl *OperatorDelete = 0;
391  Expr **PlaceArgs = (Expr**)PlacementArgs.get();
392  unsigned NumPlaceArgs = PlacementArgs.size();
393  if (!AllocType->isDependentType() &&
394      !Expr::hasAnyTypeDependentArguments(PlaceArgs, NumPlaceArgs) &&
395      FindAllocationFunctions(StartLoc,
396                              SourceRange(PlacementLParen, PlacementRParen),
397                              UseGlobal, AllocType, ArraySize, PlaceArgs,
398                              NumPlaceArgs, OperatorNew, OperatorDelete))
399    return ExprError();
400
401  bool Init = ConstructorLParen.isValid();
402  // --- Choosing a constructor ---
403  // C++ 5.3.4p15
404  // 1) If T is a POD and there's no initializer (ConstructorLParen is invalid)
405  //   the object is not initialized. If the object, or any part of it, is
406  //   const-qualified, it's an error.
407  // 2) If T is a POD and there's an empty initializer, the object is value-
408  //   initialized.
409  // 3) If T is a POD and there's one initializer argument, the object is copy-
410  //   constructed.
411  // 4) If T is a POD and there's more initializer arguments, it's an error.
412  // 5) If T is not a POD, the initializer arguments are used as constructor
413  //   arguments.
414  //
415  // Or by the C++0x formulation:
416  // 1) If there's no initializer, the object is default-initialized according
417  //    to C++0x rules.
418  // 2) Otherwise, the object is direct-initialized.
419  CXXConstructorDecl *Constructor = 0;
420  Expr **ConsArgs = (Expr**)ConstructorArgs.get();
421  const RecordType *RT;
422  unsigned NumConsArgs = ConstructorArgs.size();
423  if (AllocType->isDependentType()) {
424    // Skip all the checks.
425  } else if ((RT = AllocType->getAs<RecordType>()) &&
426             !AllocType->isAggregateType()) {
427    Constructor = PerformInitializationByConstructor(
428                      AllocType, ConsArgs, NumConsArgs,
429                      TypeLoc,
430                      SourceRange(TypeLoc, ConstructorRParen),
431                      RT->getDecl()->getDeclName(),
432                      NumConsArgs != 0 ? IK_Direct : IK_Default);
433    if (!Constructor)
434      return ExprError();
435  } else {
436    if (!Init) {
437      // FIXME: Check that no subpart is const.
438      if (AllocType.isConstQualified())
439        return ExprError(Diag(StartLoc, diag::err_new_uninitialized_const)
440                           << TypeRange);
441    } else if (NumConsArgs == 0) {
442      // Object is value-initialized. Do nothing.
443    } else if (NumConsArgs == 1) {
444      // Object is direct-initialized.
445      // FIXME: What DeclarationName do we pass in here?
446      if (CheckInitializerTypes(ConsArgs[0], AllocType, StartLoc,
447                                DeclarationName() /*AllocType.getAsString()*/,
448                                /*DirectInit=*/true))
449        return ExprError();
450    } else {
451      return ExprError(Diag(StartLoc,
452                            diag::err_builtin_direct_init_more_than_one_arg)
453        << SourceRange(ConstructorLParen, ConstructorRParen));
454    }
455  }
456
457  // FIXME: Also check that the destructor is accessible. (C++ 5.3.4p16)
458
459  PlacementArgs.release();
460  ConstructorArgs.release();
461  ArraySizeE.release();
462  return Owned(new (Context) CXXNewExpr(UseGlobal, OperatorNew, PlaceArgs,
463                        NumPlaceArgs, ParenTypeId, ArraySize, Constructor, Init,
464                        ConsArgs, NumConsArgs, OperatorDelete, ResultType,
465                        StartLoc, Init ? ConstructorRParen : SourceLocation()));
466}
467
468/// CheckAllocatedType - Checks that a type is suitable as the allocated type
469/// in a new-expression.
470/// dimension off and stores the size expression in ArraySize.
471bool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc,
472                              SourceRange R)
473{
474  // C++ 5.3.4p1: "[The] type shall be a complete object type, but not an
475  //   abstract class type or array thereof.
476  if (AllocType->isFunctionType())
477    return Diag(Loc, diag::err_bad_new_type)
478      << AllocType << 0 << R;
479  else if (AllocType->isReferenceType())
480    return Diag(Loc, diag::err_bad_new_type)
481      << AllocType << 1 << R;
482  else if (!AllocType->isDependentType() &&
483           RequireCompleteType(Loc, AllocType,
484                               diag::err_new_incomplete_type,
485                               R))
486    return true;
487  else if (RequireNonAbstractType(Loc, AllocType,
488                                  diag::err_allocation_of_abstract_type))
489    return true;
490
491  return false;
492}
493
494/// FindAllocationFunctions - Finds the overloads of operator new and delete
495/// that are appropriate for the allocation.
496bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
497                                   bool UseGlobal, QualType AllocType,
498                                   bool IsArray, Expr **PlaceArgs,
499                                   unsigned NumPlaceArgs,
500                                   FunctionDecl *&OperatorNew,
501                                   FunctionDecl *&OperatorDelete)
502{
503  // --- Choosing an allocation function ---
504  // C++ 5.3.4p8 - 14 & 18
505  // 1) If UseGlobal is true, only look in the global scope. Else, also look
506  //   in the scope of the allocated class.
507  // 2) If an array size is given, look for operator new[], else look for
508  //   operator new.
509  // 3) The first argument is always size_t. Append the arguments from the
510  //   placement form.
511  // FIXME: Also find the appropriate delete operator.
512
513  llvm::SmallVector<Expr*, 8> AllocArgs(1 + NumPlaceArgs);
514  // We don't care about the actual value of this argument.
515  // FIXME: Should the Sema create the expression and embed it in the syntax
516  // tree? Or should the consumer just recalculate the value?
517  IntegerLiteral Size(llvm::APInt::getNullValue(
518                      Context.Target.getPointerWidth(0)),
519                      Context.getSizeType(),
520                      SourceLocation());
521  AllocArgs[0] = &Size;
522  std::copy(PlaceArgs, PlaceArgs + NumPlaceArgs, AllocArgs.begin() + 1);
523
524  DeclarationName NewName = Context.DeclarationNames.getCXXOperatorName(
525                                        IsArray ? OO_Array_New : OO_New);
526  if (AllocType->isRecordType() && !UseGlobal) {
527    CXXRecordDecl *Record
528      = cast<CXXRecordDecl>(AllocType->getAs<RecordType>()->getDecl());
529    // FIXME: We fail to find inherited overloads.
530    if (FindAllocationOverload(StartLoc, Range, NewName, &AllocArgs[0],
531                          AllocArgs.size(), Record, /*AllowMissing=*/true,
532                          OperatorNew))
533      return true;
534  }
535  if (!OperatorNew) {
536    // Didn't find a member overload. Look for a global one.
537    DeclareGlobalNewDelete();
538    DeclContext *TUDecl = Context.getTranslationUnitDecl();
539    if (FindAllocationOverload(StartLoc, Range, NewName, &AllocArgs[0],
540                          AllocArgs.size(), TUDecl, /*AllowMissing=*/false,
541                          OperatorNew))
542      return true;
543  }
544
545  // FindAllocationOverload can change the passed in arguments, so we need to
546  // copy them back.
547  if (NumPlaceArgs > 0)
548    std::copy(&AllocArgs[1], AllocArgs.end(), PlaceArgs);
549
550  return false;
551}
552
553/// FindAllocationOverload - Find an fitting overload for the allocation
554/// function in the specified scope.
555bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range,
556                                  DeclarationName Name, Expr** Args,
557                                  unsigned NumArgs, DeclContext *Ctx,
558                                  bool AllowMissing, FunctionDecl *&Operator)
559{
560  DeclContext::lookup_iterator Alloc, AllocEnd;
561  llvm::tie(Alloc, AllocEnd) = Ctx->lookup(Name);
562  if (Alloc == AllocEnd) {
563    if (AllowMissing)
564      return false;
565    return Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
566      << Name << Range;
567  }
568
569  OverloadCandidateSet Candidates;
570  for (; Alloc != AllocEnd; ++Alloc) {
571    // Even member operator new/delete are implicitly treated as
572    // static, so don't use AddMemberCandidate.
573    if (FunctionDecl *Fn = dyn_cast<FunctionDecl>(*Alloc))
574      AddOverloadCandidate(Fn, Args, NumArgs, Candidates,
575                           /*SuppressUserConversions=*/false);
576  }
577
578  // Do the resolution.
579  OverloadCandidateSet::iterator Best;
580  switch(BestViableFunction(Candidates, StartLoc, Best)) {
581  case OR_Success: {
582    // Got one!
583    FunctionDecl *FnDecl = Best->Function;
584    // The first argument is size_t, and the first parameter must be size_t,
585    // too. This is checked on declaration and can be assumed. (It can't be
586    // asserted on, though, since invalid decls are left in there.)
587    for (unsigned i = 1; i < NumArgs; ++i) {
588      // FIXME: Passing word to diagnostic.
589      if (PerformCopyInitialization(Args[i],
590                                    FnDecl->getParamDecl(i)->getType(),
591                                    "passing"))
592        return true;
593    }
594    Operator = FnDecl;
595    return false;
596  }
597
598  case OR_No_Viable_Function:
599    Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
600      << Name << Range;
601    PrintOverloadCandidates(Candidates, /*OnlyViable=*/false);
602    return true;
603
604  case OR_Ambiguous:
605    Diag(StartLoc, diag::err_ovl_ambiguous_call)
606      << Name << Range;
607    PrintOverloadCandidates(Candidates, /*OnlyViable=*/true);
608    return true;
609
610  case OR_Deleted:
611    Diag(StartLoc, diag::err_ovl_deleted_call)
612      << Best->Function->isDeleted()
613      << Name << Range;
614    PrintOverloadCandidates(Candidates, /*OnlyViable=*/true);
615    return true;
616  }
617  assert(false && "Unreachable, bad result from BestViableFunction");
618  return true;
619}
620
621
622/// DeclareGlobalNewDelete - Declare the global forms of operator new and
623/// delete. These are:
624/// @code
625///   void* operator new(std::size_t) throw(std::bad_alloc);
626///   void* operator new[](std::size_t) throw(std::bad_alloc);
627///   void operator delete(void *) throw();
628///   void operator delete[](void *) throw();
629/// @endcode
630/// Note that the placement and nothrow forms of new are *not* implicitly
631/// declared. Their use requires including \<new\>.
632void Sema::DeclareGlobalNewDelete()
633{
634  if (GlobalNewDeleteDeclared)
635    return;
636  GlobalNewDeleteDeclared = true;
637
638  QualType VoidPtr = Context.getPointerType(Context.VoidTy);
639  QualType SizeT = Context.getSizeType();
640
641  // FIXME: Exception specifications are not added.
642  DeclareGlobalAllocationFunction(
643      Context.DeclarationNames.getCXXOperatorName(OO_New),
644      VoidPtr, SizeT);
645  DeclareGlobalAllocationFunction(
646      Context.DeclarationNames.getCXXOperatorName(OO_Array_New),
647      VoidPtr, SizeT);
648  DeclareGlobalAllocationFunction(
649      Context.DeclarationNames.getCXXOperatorName(OO_Delete),
650      Context.VoidTy, VoidPtr);
651  DeclareGlobalAllocationFunction(
652      Context.DeclarationNames.getCXXOperatorName(OO_Array_Delete),
653      Context.VoidTy, VoidPtr);
654}
655
656/// DeclareGlobalAllocationFunction - Declares a single implicit global
657/// allocation function if it doesn't already exist.
658void Sema::DeclareGlobalAllocationFunction(DeclarationName Name,
659                                           QualType Return, QualType Argument)
660{
661  DeclContext *GlobalCtx = Context.getTranslationUnitDecl();
662
663  // Check if this function is already declared.
664  {
665    DeclContext::lookup_iterator Alloc, AllocEnd;
666    for (llvm::tie(Alloc, AllocEnd) = GlobalCtx->lookup(Name);
667         Alloc != AllocEnd; ++Alloc) {
668      // FIXME: Do we need to check for default arguments here?
669      FunctionDecl *Func = cast<FunctionDecl>(*Alloc);
670      if (Func->getNumParams() == 1 &&
671          Context.getCanonicalType(Func->getParamDecl(0)->getType())==Argument)
672        return;
673    }
674  }
675
676  QualType FnType = Context.getFunctionType(Return, &Argument, 1, false, 0);
677  FunctionDecl *Alloc =
678    FunctionDecl::Create(Context, GlobalCtx, SourceLocation(), Name,
679                         FnType, /*DInfo=*/0, FunctionDecl::None, false, true);
680  Alloc->setImplicit();
681  ParmVarDecl *Param = ParmVarDecl::Create(Context, Alloc, SourceLocation(),
682                                           0, Argument, /*DInfo=*/0,
683                                           VarDecl::None, 0);
684  Alloc->setParams(Context, &Param, 1);
685
686  // FIXME: Also add this declaration to the IdentifierResolver, but
687  // make sure it is at the end of the chain to coincide with the
688  // global scope.
689  ((DeclContext *)TUScope->getEntity())->addDecl(Alloc);
690}
691
692/// ActOnCXXDelete - Parsed a C++ 'delete' expression (C++ 5.3.5), as in:
693/// @code ::delete ptr; @endcode
694/// or
695/// @code delete [] ptr; @endcode
696Action::OwningExprResult
697Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal,
698                     bool ArrayForm, ExprArg Operand)
699{
700  // C++ 5.3.5p1: "The operand shall have a pointer type, or a class type
701  //   having a single conversion function to a pointer type. The result has
702  //   type void."
703  // DR599 amends "pointer type" to "pointer to object type" in both cases.
704
705  FunctionDecl *OperatorDelete = 0;
706
707  Expr *Ex = (Expr *)Operand.get();
708  if (!Ex->isTypeDependent()) {
709    QualType Type = Ex->getType();
710
711    if (Type->isRecordType()) {
712      // FIXME: Find that one conversion function and amend the type.
713    }
714
715    if (!Type->isPointerType())
716      return ExprError(Diag(StartLoc, diag::err_delete_operand)
717        << Type << Ex->getSourceRange());
718
719    QualType Pointee = Type->getAs<PointerType>()->getPointeeType();
720    if (Pointee->isFunctionType() || Pointee->isVoidType())
721      return ExprError(Diag(StartLoc, diag::err_delete_operand)
722        << Type << Ex->getSourceRange());
723    else if (!Pointee->isDependentType() &&
724             RequireCompleteType(StartLoc, Pointee,
725                                 diag::warn_delete_incomplete,
726                                 Ex->getSourceRange()))
727      return ExprError();
728
729    // FIXME: This should be shared with the code for finding the delete
730    // operator in ActOnCXXNew.
731    IntegerLiteral Size(llvm::APInt::getNullValue(
732                        Context.Target.getPointerWidth(0)),
733                        Context.getSizeType(),
734                        SourceLocation());
735    ImplicitCastExpr Cast(Context.getPointerType(Context.VoidTy),
736                          CastExpr::CK_Unknown, &Size, false);
737    Expr *DeleteArg = &Cast;
738
739    DeclarationName DeleteName = Context.DeclarationNames.getCXXOperatorName(
740                                      ArrayForm ? OO_Array_Delete : OO_Delete);
741
742    if (Pointee->isRecordType() && !UseGlobal) {
743      CXXRecordDecl *Record
744        = cast<CXXRecordDecl>(Pointee->getAs<RecordType>()->getDecl());
745      // FIXME: We fail to find inherited overloads.
746      if (FindAllocationOverload(StartLoc, SourceRange(), DeleteName,
747                                 &DeleteArg, 1, Record, /*AllowMissing=*/true,
748                                 OperatorDelete))
749        return ExprError();
750    }
751
752    if (!OperatorDelete) {
753      // Didn't find a member overload. Look for a global one.
754      DeclareGlobalNewDelete();
755      DeclContext *TUDecl = Context.getTranslationUnitDecl();
756      if (FindAllocationOverload(StartLoc, SourceRange(), DeleteName,
757                                 &DeleteArg, 1, TUDecl, /*AllowMissing=*/false,
758                                 OperatorDelete))
759        return ExprError();
760    }
761
762    // FIXME: Check access and ambiguity of operator delete and destructor.
763  }
764
765  Operand.release();
766  return Owned(new (Context) CXXDeleteExpr(Context.VoidTy, UseGlobal, ArrayForm,
767                                           OperatorDelete, Ex, StartLoc));
768}
769
770
771/// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
772/// C++ if/switch/while/for statement.
773/// e.g: "if (int x = f()) {...}"
774Action::OwningExprResult
775Sema::ActOnCXXConditionDeclarationExpr(Scope *S, SourceLocation StartLoc,
776                                       Declarator &D,
777                                       SourceLocation EqualLoc,
778                                       ExprArg AssignExprVal) {
779  assert(AssignExprVal.get() && "Null assignment expression");
780
781  // C++ 6.4p2:
782  // The declarator shall not specify a function or an array.
783  // The type-specifier-seq shall not contain typedef and shall not declare a
784  // new class or enumeration.
785
786  assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
787         "Parser allowed 'typedef' as storage class of condition decl.");
788
789  // FIXME: Store DeclaratorInfo in the expression.
790  DeclaratorInfo *DInfo = 0;
791  TagDecl *OwnedTag = 0;
792  QualType Ty = GetTypeForDeclarator(D, S, &DInfo, /*Skip=*/0, &OwnedTag);
793
794  if (Ty->isFunctionType()) { // The declarator shall not specify a function...
795    // We exit without creating a CXXConditionDeclExpr because a FunctionDecl
796    // would be created and CXXConditionDeclExpr wants a VarDecl.
797    return ExprError(Diag(StartLoc, diag::err_invalid_use_of_function_type)
798      << SourceRange(StartLoc, EqualLoc));
799  } else if (Ty->isArrayType()) { // ...or an array.
800    Diag(StartLoc, diag::err_invalid_use_of_array_type)
801      << SourceRange(StartLoc, EqualLoc);
802  } else if (OwnedTag && OwnedTag->isDefinition()) {
803    // The type-specifier-seq shall not declare a new class or enumeration.
804    Diag(OwnedTag->getLocation(), diag::err_type_defined_in_condition);
805  }
806
807  DeclPtrTy Dcl = ActOnDeclarator(S, D);
808  if (!Dcl)
809    return ExprError();
810  AddInitializerToDecl(Dcl, move(AssignExprVal), /*DirectInit=*/false);
811
812  // Mark this variable as one that is declared within a conditional.
813  // We know that the decl had to be a VarDecl because that is the only type of
814  // decl that can be assigned and the grammar requires an '='.
815  VarDecl *VD = cast<VarDecl>(Dcl.getAs<Decl>());
816  VD->setDeclaredInCondition(true);
817  return Owned(new (Context) CXXConditionDeclExpr(StartLoc, EqualLoc, VD));
818}
819
820/// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid.
821bool Sema::CheckCXXBooleanCondition(Expr *&CondExpr) {
822  // C++ 6.4p4:
823  // The value of a condition that is an initialized declaration in a statement
824  // other than a switch statement is the value of the declared variable
825  // implicitly converted to type bool. If that conversion is ill-formed, the
826  // program is ill-formed.
827  // The value of a condition that is an expression is the value of the
828  // expression, implicitly converted to bool.
829  //
830  return PerformContextuallyConvertToBool(CondExpr);
831}
832
833/// Helper function to determine whether this is the (deprecated) C++
834/// conversion from a string literal to a pointer to non-const char or
835/// non-const wchar_t (for narrow and wide string literals,
836/// respectively).
837bool
838Sema::IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType) {
839  // Look inside the implicit cast, if it exists.
840  if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(From))
841    From = Cast->getSubExpr();
842
843  // A string literal (2.13.4) that is not a wide string literal can
844  // be converted to an rvalue of type "pointer to char"; a wide
845  // string literal can be converted to an rvalue of type "pointer
846  // to wchar_t" (C++ 4.2p2).
847  if (StringLiteral *StrLit = dyn_cast<StringLiteral>(From))
848    if (const PointerType *ToPtrType = ToType->getAs<PointerType>())
849      if (const BuiltinType *ToPointeeType
850          = ToPtrType->getPointeeType()->getAsBuiltinType()) {
851        // This conversion is considered only when there is an
852        // explicit appropriate pointer target type (C++ 4.2p2).
853        if (ToPtrType->getPointeeType().getCVRQualifiers() == 0 &&
854            ((StrLit->isWide() && ToPointeeType->isWideCharType()) ||
855             (!StrLit->isWide() &&
856              (ToPointeeType->getKind() == BuiltinType::Char_U ||
857               ToPointeeType->getKind() == BuiltinType::Char_S))))
858          return true;
859      }
860
861  return false;
862}
863
864/// PerformImplicitConversion - Perform an implicit conversion of the
865/// expression From to the type ToType. Returns true if there was an
866/// error, false otherwise. The expression From is replaced with the
867/// converted expression. Flavor is the kind of conversion we're
868/// performing, used in the error message. If @p AllowExplicit,
869/// explicit user-defined conversions are permitted. @p Elidable should be true
870/// when called for copies which may be elided (C++ 12.8p15). C++0x overload
871/// resolution works differently in that case.
872bool
873Sema::PerformImplicitConversion(Expr *&From, QualType ToType,
874                                const char *Flavor, bool AllowExplicit,
875                                bool Elidable)
876{
877  ImplicitConversionSequence ICS;
878  ICS.ConversionKind = ImplicitConversionSequence::BadConversion;
879  if (Elidable && getLangOptions().CPlusPlus0x) {
880    ICS = TryImplicitConversion(From, ToType, /*SuppressUserConversions*/false,
881                                AllowExplicit, /*ForceRValue*/true);
882  }
883  if (ICS.ConversionKind == ImplicitConversionSequence::BadConversion) {
884    ICS = TryImplicitConversion(From, ToType, false, AllowExplicit);
885  }
886  return PerformImplicitConversion(From, ToType, ICS, Flavor);
887}
888
889/// PerformImplicitConversion - Perform an implicit conversion of the
890/// expression From to the type ToType using the pre-computed implicit
891/// conversion sequence ICS. Returns true if there was an error, false
892/// otherwise. The expression From is replaced with the converted
893/// expression. Flavor is the kind of conversion we're performing,
894/// used in the error message.
895bool
896Sema::PerformImplicitConversion(Expr *&From, QualType ToType,
897                                const ImplicitConversionSequence &ICS,
898                                const char* Flavor) {
899  switch (ICS.ConversionKind) {
900  case ImplicitConversionSequence::StandardConversion:
901    if (PerformImplicitConversion(From, ToType, ICS.Standard, Flavor))
902      return true;
903    break;
904
905  case ImplicitConversionSequence::UserDefinedConversion:
906    // FIXME: This is, of course, wrong. We'll need to actually call the
907    // constructor or conversion operator, and then cope with the standard
908    // conversions.
909    ImpCastExprToType(From, ToType.getNonReferenceType(),
910                      CastExpr::CK_Unknown,
911                      ToType->isLValueReferenceType());
912    return false;
913
914  case ImplicitConversionSequence::EllipsisConversion:
915    assert(false && "Cannot perform an ellipsis conversion");
916    return false;
917
918  case ImplicitConversionSequence::BadConversion:
919    return true;
920  }
921
922  // Everything went well.
923  return false;
924}
925
926/// PerformImplicitConversion - Perform an implicit conversion of the
927/// expression From to the type ToType by following the standard
928/// conversion sequence SCS. Returns true if there was an error, false
929/// otherwise. The expression From is replaced with the converted
930/// expression. Flavor is the context in which we're performing this
931/// conversion, for use in error messages.
932bool
933Sema::PerformImplicitConversion(Expr *&From, QualType ToType,
934                                const StandardConversionSequence& SCS,
935                                const char *Flavor) {
936  // Overall FIXME: we are recomputing too many types here and doing far too
937  // much extra work. What this means is that we need to keep track of more
938  // information that is computed when we try the implicit conversion initially,
939  // so that we don't need to recompute anything here.
940  QualType FromType = From->getType();
941
942  if (SCS.CopyConstructor) {
943    // FIXME: When can ToType be a reference type?
944    assert(!ToType->isReferenceType());
945
946    From = BuildCXXConstructExpr(ToType, SCS.CopyConstructor, &From, 1);
947    return false;
948  }
949
950  // Perform the first implicit conversion.
951  switch (SCS.First) {
952  case ICK_Identity:
953  case ICK_Lvalue_To_Rvalue:
954    // Nothing to do.
955    break;
956
957  case ICK_Array_To_Pointer:
958    FromType = Context.getArrayDecayedType(FromType);
959    ImpCastExprToType(From, FromType, CastExpr::CK_ArrayToPointerDecay);
960    break;
961
962  case ICK_Function_To_Pointer:
963    if (Context.getCanonicalType(FromType) == Context.OverloadTy) {
964      FunctionDecl *Fn = ResolveAddressOfOverloadedFunction(From, ToType, true);
965      if (!Fn)
966        return true;
967
968      if (DiagnoseUseOfDecl(Fn, From->getSourceRange().getBegin()))
969        return true;
970
971      FixOverloadedFunctionReference(From, Fn);
972      FromType = From->getType();
973    }
974    FromType = Context.getPointerType(FromType);
975    ImpCastExprToType(From, FromType);
976    break;
977
978  default:
979    assert(false && "Improper first standard conversion");
980    break;
981  }
982
983  // Perform the second implicit conversion
984  switch (SCS.Second) {
985  case ICK_Identity:
986    // Nothing to do.
987    break;
988
989  case ICK_Integral_Promotion:
990  case ICK_Floating_Promotion:
991  case ICK_Complex_Promotion:
992  case ICK_Integral_Conversion:
993  case ICK_Floating_Conversion:
994  case ICK_Complex_Conversion:
995  case ICK_Floating_Integral:
996  case ICK_Complex_Real:
997  case ICK_Compatible_Conversion:
998      // FIXME: Go deeper to get the unqualified type!
999    FromType = ToType.getUnqualifiedType();
1000    ImpCastExprToType(From, FromType);
1001    break;
1002
1003  case ICK_Pointer_Conversion:
1004    if (SCS.IncompatibleObjC) {
1005      // Diagnose incompatible Objective-C conversions
1006      Diag(From->getSourceRange().getBegin(),
1007           diag::ext_typecheck_convert_incompatible_pointer)
1008        << From->getType() << ToType << Flavor
1009        << From->getSourceRange();
1010    }
1011
1012    if (CheckPointerConversion(From, ToType))
1013      return true;
1014    ImpCastExprToType(From, ToType);
1015    break;
1016
1017    case ICK_Pointer_Member: {
1018      CastExpr::CastKind Kind = CastExpr::CK_Unknown;
1019      if (CheckMemberPointerConversion(From, ToType, Kind))
1020        return true;
1021      ImpCastExprToType(From, ToType, Kind);
1022      break;
1023    }
1024  case ICK_Boolean_Conversion:
1025    FromType = Context.BoolTy;
1026    ImpCastExprToType(From, FromType);
1027    break;
1028
1029  default:
1030    assert(false && "Improper second standard conversion");
1031    break;
1032  }
1033
1034  switch (SCS.Third) {
1035  case ICK_Identity:
1036    // Nothing to do.
1037    break;
1038
1039  case ICK_Qualification:
1040    // FIXME: Not sure about lvalue vs rvalue here in the presence of rvalue
1041    // references.
1042    ImpCastExprToType(From, ToType.getNonReferenceType(),
1043                      CastExpr::CK_Unknown,
1044                      ToType->isLValueReferenceType());
1045    break;
1046
1047  default:
1048    assert(false && "Improper second standard conversion");
1049    break;
1050  }
1051
1052  return false;
1053}
1054
1055Sema::OwningExprResult Sema::ActOnUnaryTypeTrait(UnaryTypeTrait OTT,
1056                                                 SourceLocation KWLoc,
1057                                                 SourceLocation LParen,
1058                                                 TypeTy *Ty,
1059                                                 SourceLocation RParen) {
1060  QualType T = GetTypeFromParser(Ty);
1061
1062  // According to http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html
1063  // all traits except __is_class, __is_enum and __is_union require a the type
1064  // to be complete.
1065  if (OTT != UTT_IsClass && OTT != UTT_IsEnum && OTT != UTT_IsUnion) {
1066    if (RequireCompleteType(KWLoc, T,
1067                            diag::err_incomplete_type_used_in_type_trait_expr,
1068                            SourceRange(), SourceRange(), T))
1069      return ExprError();
1070  }
1071
1072  // There is no point in eagerly computing the value. The traits are designed
1073  // to be used from type trait templates, so Ty will be a template parameter
1074  // 99% of the time.
1075  return Owned(new (Context) UnaryTypeTraitExpr(KWLoc, OTT, T,
1076                                                RParen, Context.BoolTy));
1077}
1078
1079QualType Sema::CheckPointerToMemberOperands(
1080  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isIndirect)
1081{
1082  const char *OpSpelling = isIndirect ? "->*" : ".*";
1083  // C++ 5.5p2
1084  //   The binary operator .* [p3: ->*] binds its second operand, which shall
1085  //   be of type "pointer to member of T" (where T is a completely-defined
1086  //   class type) [...]
1087  QualType RType = rex->getType();
1088  const MemberPointerType *MemPtr = RType->getAs<MemberPointerType>();
1089  if (!MemPtr) {
1090    Diag(Loc, diag::err_bad_memptr_rhs)
1091      << OpSpelling << RType << rex->getSourceRange();
1092    return QualType();
1093  }
1094
1095  QualType Class(MemPtr->getClass(), 0);
1096
1097  // C++ 5.5p2
1098  //   [...] to its first operand, which shall be of class T or of a class of
1099  //   which T is an unambiguous and accessible base class. [p3: a pointer to
1100  //   such a class]
1101  QualType LType = lex->getType();
1102  if (isIndirect) {
1103    if (const PointerType *Ptr = LType->getAs<PointerType>())
1104      LType = Ptr->getPointeeType().getNonReferenceType();
1105    else {
1106      Diag(Loc, diag::err_bad_memptr_lhs)
1107        << OpSpelling << 1 << LType << lex->getSourceRange();
1108      return QualType();
1109    }
1110  }
1111
1112  if (Context.getCanonicalType(Class).getUnqualifiedType() !=
1113      Context.getCanonicalType(LType).getUnqualifiedType()) {
1114    BasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/false,
1115                    /*DetectVirtual=*/false);
1116    // FIXME: Would it be useful to print full ambiguity paths, or is that
1117    // overkill?
1118    if (!IsDerivedFrom(LType, Class, Paths) ||
1119        Paths.isAmbiguous(Context.getCanonicalType(Class))) {
1120      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling
1121        << (int)isIndirect << lex->getType() << lex->getSourceRange();
1122      return QualType();
1123    }
1124  }
1125
1126  // C++ 5.5p2
1127  //   The result is an object or a function of the type specified by the
1128  //   second operand.
1129  // The cv qualifiers are the union of those in the pointer and the left side,
1130  // in accordance with 5.5p5 and 5.2.5.
1131  // FIXME: This returns a dereferenced member function pointer as a normal
1132  // function type. However, the only operation valid on such functions is
1133  // calling them. There's also a GCC extension to get a function pointer to the
1134  // thing, which is another complication, because this type - unlike the type
1135  // that is the result of this expression - takes the class as the first
1136  // argument.
1137  // We probably need a "MemberFunctionClosureType" or something like that.
1138  QualType Result = MemPtr->getPointeeType();
1139  if (LType.isConstQualified())
1140    Result.addConst();
1141  if (LType.isVolatileQualified())
1142    Result.addVolatile();
1143  return Result;
1144}
1145
1146/// \brief Get the target type of a standard or user-defined conversion.
1147static QualType TargetType(const ImplicitConversionSequence &ICS) {
1148  assert((ICS.ConversionKind ==
1149              ImplicitConversionSequence::StandardConversion ||
1150          ICS.ConversionKind ==
1151              ImplicitConversionSequence::UserDefinedConversion) &&
1152         "function only valid for standard or user-defined conversions");
1153  if (ICS.ConversionKind == ImplicitConversionSequence::StandardConversion)
1154    return QualType::getFromOpaquePtr(ICS.Standard.ToTypePtr);
1155  return QualType::getFromOpaquePtr(ICS.UserDefined.After.ToTypePtr);
1156}
1157
1158/// \brief Try to convert a type to another according to C++0x 5.16p3.
1159///
1160/// This is part of the parameter validation for the ? operator. If either
1161/// value operand is a class type, the two operands are attempted to be
1162/// converted to each other. This function does the conversion in one direction.
1163/// It emits a diagnostic and returns true only if it finds an ambiguous
1164/// conversion.
1165static bool TryClassUnification(Sema &Self, Expr *From, Expr *To,
1166                                SourceLocation QuestionLoc,
1167                                ImplicitConversionSequence &ICS)
1168{
1169  // C++0x 5.16p3
1170  //   The process for determining whether an operand expression E1 of type T1
1171  //   can be converted to match an operand expression E2 of type T2 is defined
1172  //   as follows:
1173  //   -- If E2 is an lvalue:
1174  if (To->isLvalue(Self.Context) == Expr::LV_Valid) {
1175    //   E1 can be converted to match E2 if E1 can be implicitly converted to
1176    //   type "lvalue reference to T2", subject to the constraint that in the
1177    //   conversion the reference must bind directly to E1.
1178    if (!Self.CheckReferenceInit(From,
1179                            Self.Context.getLValueReferenceType(To->getType()),
1180                            &ICS))
1181    {
1182      assert((ICS.ConversionKind ==
1183                  ImplicitConversionSequence::StandardConversion ||
1184              ICS.ConversionKind ==
1185                  ImplicitConversionSequence::UserDefinedConversion) &&
1186             "expected a definite conversion");
1187      bool DirectBinding =
1188        ICS.ConversionKind == ImplicitConversionSequence::StandardConversion ?
1189        ICS.Standard.DirectBinding : ICS.UserDefined.After.DirectBinding;
1190      if (DirectBinding)
1191        return false;
1192    }
1193  }
1194  ICS.ConversionKind = ImplicitConversionSequence::BadConversion;
1195  //   -- If E2 is an rvalue, or if the conversion above cannot be done:
1196  //      -- if E1 and E2 have class type, and the underlying class types are
1197  //         the same or one is a base class of the other:
1198  QualType FTy = From->getType();
1199  QualType TTy = To->getType();
1200  const RecordType *FRec = FTy->getAs<RecordType>();
1201  const RecordType *TRec = TTy->getAs<RecordType>();
1202  bool FDerivedFromT = FRec && TRec && Self.IsDerivedFrom(FTy, TTy);
1203  if (FRec && TRec && (FRec == TRec ||
1204        FDerivedFromT || Self.IsDerivedFrom(TTy, FTy))) {
1205    //         E1 can be converted to match E2 if the class of T2 is the
1206    //         same type as, or a base class of, the class of T1, and
1207    //         [cv2 > cv1].
1208    if ((FRec == TRec || FDerivedFromT) && TTy.isAtLeastAsQualifiedAs(FTy)) {
1209      // Could still fail if there's no copy constructor.
1210      // FIXME: Is this a hard error then, or just a conversion failure? The
1211      // standard doesn't say.
1212      ICS = Self.TryCopyInitialization(From, TTy);
1213    }
1214  } else {
1215    //     -- Otherwise: E1 can be converted to match E2 if E1 can be
1216    //        implicitly converted to the type that expression E2 would have
1217    //        if E2 were converted to an rvalue.
1218    // First find the decayed type.
1219    if (TTy->isFunctionType())
1220      TTy = Self.Context.getPointerType(TTy);
1221    else if(TTy->isArrayType())
1222      TTy = Self.Context.getArrayDecayedType(TTy);
1223
1224    // Now try the implicit conversion.
1225    // FIXME: This doesn't detect ambiguities.
1226    ICS = Self.TryImplicitConversion(From, TTy);
1227  }
1228  return false;
1229}
1230
1231/// \brief Try to find a common type for two according to C++0x 5.16p5.
1232///
1233/// This is part of the parameter validation for the ? operator. If either
1234/// value operand is a class type, overload resolution is used to find a
1235/// conversion to a common type.
1236static bool FindConditionalOverload(Sema &Self, Expr *&LHS, Expr *&RHS,
1237                                    SourceLocation Loc) {
1238  Expr *Args[2] = { LHS, RHS };
1239  OverloadCandidateSet CandidateSet;
1240  Self.AddBuiltinOperatorCandidates(OO_Conditional, Args, 2, CandidateSet);
1241
1242  OverloadCandidateSet::iterator Best;
1243  switch (Self.BestViableFunction(CandidateSet, Loc, Best)) {
1244    case Sema::OR_Success:
1245      // We found a match. Perform the conversions on the arguments and move on.
1246      if (Self.PerformImplicitConversion(LHS, Best->BuiltinTypes.ParamTypes[0],
1247                                         Best->Conversions[0], "converting") ||
1248          Self.PerformImplicitConversion(RHS, Best->BuiltinTypes.ParamTypes[1],
1249                                         Best->Conversions[1], "converting"))
1250        break;
1251      return false;
1252
1253    case Sema::OR_No_Viable_Function:
1254      Self.Diag(Loc, diag::err_typecheck_cond_incompatible_operands)
1255        << LHS->getType() << RHS->getType()
1256        << LHS->getSourceRange() << RHS->getSourceRange();
1257      return true;
1258
1259    case Sema::OR_Ambiguous:
1260      Self.Diag(Loc, diag::err_conditional_ambiguous_ovl)
1261        << LHS->getType() << RHS->getType()
1262        << LHS->getSourceRange() << RHS->getSourceRange();
1263      // FIXME: Print the possible common types by printing the return types of
1264      // the viable candidates.
1265      break;
1266
1267    case Sema::OR_Deleted:
1268      assert(false && "Conditional operator has only built-in overloads");
1269      break;
1270  }
1271  return true;
1272}
1273
1274/// \brief Perform an "extended" implicit conversion as returned by
1275/// TryClassUnification.
1276///
1277/// TryClassUnification generates ICSs that include reference bindings.
1278/// PerformImplicitConversion is not suitable for this; it chokes if the
1279/// second part of a standard conversion is ICK_DerivedToBase. This function
1280/// handles the reference binding specially.
1281static bool ConvertForConditional(Sema &Self, Expr *&E,
1282                                  const ImplicitConversionSequence &ICS)
1283{
1284  if (ICS.ConversionKind == ImplicitConversionSequence::StandardConversion &&
1285      ICS.Standard.ReferenceBinding) {
1286    assert(ICS.Standard.DirectBinding &&
1287           "TryClassUnification should never generate indirect ref bindings");
1288    // FIXME: CheckReferenceInit should be able to reuse the ICS instead of
1289    // redoing all the work.
1290    return Self.CheckReferenceInit(E, Self.Context.getLValueReferenceType(
1291                                        TargetType(ICS)));
1292  }
1293  if (ICS.ConversionKind == ImplicitConversionSequence::UserDefinedConversion &&
1294      ICS.UserDefined.After.ReferenceBinding) {
1295    assert(ICS.UserDefined.After.DirectBinding &&
1296           "TryClassUnification should never generate indirect ref bindings");
1297    return Self.CheckReferenceInit(E, Self.Context.getLValueReferenceType(
1298                                        TargetType(ICS)));
1299  }
1300  if (Self.PerformImplicitConversion(E, TargetType(ICS), ICS, "converting"))
1301    return true;
1302  return false;
1303}
1304
1305/// \brief Check the operands of ?: under C++ semantics.
1306///
1307/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y
1308/// extension. In this case, LHS == Cond. (But they're not aliases.)
1309QualType Sema::CXXCheckConditionalOperands(Expr *&Cond, Expr *&LHS, Expr *&RHS,
1310                                           SourceLocation QuestionLoc) {
1311  // FIXME: Handle C99's complex types, vector types, block pointers and Obj-C++
1312  // interface pointers.
1313
1314  // C++0x 5.16p1
1315  //   The first expression is contextually converted to bool.
1316  if (!Cond->isTypeDependent()) {
1317    if (CheckCXXBooleanCondition(Cond))
1318      return QualType();
1319  }
1320
1321  // Either of the arguments dependent?
1322  if (LHS->isTypeDependent() || RHS->isTypeDependent())
1323    return Context.DependentTy;
1324
1325  // C++0x 5.16p2
1326  //   If either the second or the third operand has type (cv) void, ...
1327  QualType LTy = LHS->getType();
1328  QualType RTy = RHS->getType();
1329  bool LVoid = LTy->isVoidType();
1330  bool RVoid = RTy->isVoidType();
1331  if (LVoid || RVoid) {
1332    //   ... then the [l2r] conversions are performed on the second and third
1333    //   operands ...
1334    DefaultFunctionArrayConversion(LHS);
1335    DefaultFunctionArrayConversion(RHS);
1336    LTy = LHS->getType();
1337    RTy = RHS->getType();
1338
1339    //   ... and one of the following shall hold:
1340    //   -- The second or the third operand (but not both) is a throw-
1341    //      expression; the result is of the type of the other and is an rvalue.
1342    bool LThrow = isa<CXXThrowExpr>(LHS);
1343    bool RThrow = isa<CXXThrowExpr>(RHS);
1344    if (LThrow && !RThrow)
1345      return RTy;
1346    if (RThrow && !LThrow)
1347      return LTy;
1348
1349    //   -- Both the second and third operands have type void; the result is of
1350    //      type void and is an rvalue.
1351    if (LVoid && RVoid)
1352      return Context.VoidTy;
1353
1354    // Neither holds, error.
1355    Diag(QuestionLoc, diag::err_conditional_void_nonvoid)
1356      << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1)
1357      << LHS->getSourceRange() << RHS->getSourceRange();
1358    return QualType();
1359  }
1360
1361  // Neither is void.
1362
1363  // C++0x 5.16p3
1364  //   Otherwise, if the second and third operand have different types, and
1365  //   either has (cv) class type, and attempt is made to convert each of those
1366  //   operands to the other.
1367  if (Context.getCanonicalType(LTy) != Context.getCanonicalType(RTy) &&
1368      (LTy->isRecordType() || RTy->isRecordType())) {
1369    ImplicitConversionSequence ICSLeftToRight, ICSRightToLeft;
1370    // These return true if a single direction is already ambiguous.
1371    if (TryClassUnification(*this, LHS, RHS, QuestionLoc, ICSLeftToRight))
1372      return QualType();
1373    if (TryClassUnification(*this, RHS, LHS, QuestionLoc, ICSRightToLeft))
1374      return QualType();
1375
1376    bool HaveL2R = ICSLeftToRight.ConversionKind !=
1377      ImplicitConversionSequence::BadConversion;
1378    bool HaveR2L = ICSRightToLeft.ConversionKind !=
1379      ImplicitConversionSequence::BadConversion;
1380    //   If both can be converted, [...] the program is ill-formed.
1381    if (HaveL2R && HaveR2L) {
1382      Diag(QuestionLoc, diag::err_conditional_ambiguous)
1383        << LTy << RTy << LHS->getSourceRange() << RHS->getSourceRange();
1384      return QualType();
1385    }
1386
1387    //   If exactly one conversion is possible, that conversion is applied to
1388    //   the chosen operand and the converted operands are used in place of the
1389    //   original operands for the remainder of this section.
1390    if (HaveL2R) {
1391      if (ConvertForConditional(*this, LHS, ICSLeftToRight))
1392        return QualType();
1393      LTy = LHS->getType();
1394    } else if (HaveR2L) {
1395      if (ConvertForConditional(*this, RHS, ICSRightToLeft))
1396        return QualType();
1397      RTy = RHS->getType();
1398    }
1399  }
1400
1401  // C++0x 5.16p4
1402  //   If the second and third operands are lvalues and have the same type,
1403  //   the result is of that type [...]
1404  bool Same = Context.getCanonicalType(LTy) == Context.getCanonicalType(RTy);
1405  if (Same && LHS->isLvalue(Context) == Expr::LV_Valid &&
1406      RHS->isLvalue(Context) == Expr::LV_Valid)
1407    return LTy;
1408
1409  // C++0x 5.16p5
1410  //   Otherwise, the result is an rvalue. If the second and third operands
1411  //   do not have the same type, and either has (cv) class type, ...
1412  if (!Same && (LTy->isRecordType() || RTy->isRecordType())) {
1413    //   ... overload resolution is used to determine the conversions (if any)
1414    //   to be applied to the operands. If the overload resolution fails, the
1415    //   program is ill-formed.
1416    if (FindConditionalOverload(*this, LHS, RHS, QuestionLoc))
1417      return QualType();
1418  }
1419
1420  // C++0x 5.16p6
1421  //   LValue-to-rvalue, array-to-pointer, and function-to-pointer standard
1422  //   conversions are performed on the second and third operands.
1423  DefaultFunctionArrayConversion(LHS);
1424  DefaultFunctionArrayConversion(RHS);
1425  LTy = LHS->getType();
1426  RTy = RHS->getType();
1427
1428  //   After those conversions, one of the following shall hold:
1429  //   -- The second and third operands have the same type; the result
1430  //      is of that type.
1431  if (Context.getCanonicalType(LTy) == Context.getCanonicalType(RTy))
1432    return LTy;
1433
1434  //   -- The second and third operands have arithmetic or enumeration type;
1435  //      the usual arithmetic conversions are performed to bring them to a
1436  //      common type, and the result is of that type.
1437  if (LTy->isArithmeticType() && RTy->isArithmeticType()) {
1438    UsualArithmeticConversions(LHS, RHS);
1439    return LHS->getType();
1440  }
1441
1442  //   -- The second and third operands have pointer type, or one has pointer
1443  //      type and the other is a null pointer constant; pointer conversions
1444  //      and qualification conversions are performed to bring them to their
1445  //      composite pointer type. The result is of the composite pointer type.
1446  QualType Composite = FindCompositePointerType(LHS, RHS);
1447  if (!Composite.isNull())
1448    return Composite;
1449
1450  // Fourth bullet is same for pointers-to-member. However, the possible
1451  // conversions are far more limited: we have null-to-pointer, upcast of
1452  // containing class, and second-level cv-ness.
1453  // cv-ness is not a union, but must match one of the two operands. (Which,
1454  // frankly, is stupid.)
1455  const MemberPointerType *LMemPtr = LTy->getAs<MemberPointerType>();
1456  const MemberPointerType *RMemPtr = RTy->getAs<MemberPointerType>();
1457  if (LMemPtr && RHS->isNullPointerConstant(Context)) {
1458    ImpCastExprToType(RHS, LTy);
1459    return LTy;
1460  }
1461  if (RMemPtr && LHS->isNullPointerConstant(Context)) {
1462    ImpCastExprToType(LHS, RTy);
1463    return RTy;
1464  }
1465  if (LMemPtr && RMemPtr) {
1466    QualType LPointee = LMemPtr->getPointeeType();
1467    QualType RPointee = RMemPtr->getPointeeType();
1468    // First, we check that the unqualified pointee type is the same. If it's
1469    // not, there's no conversion that will unify the two pointers.
1470    if (Context.getCanonicalType(LPointee).getUnqualifiedType() ==
1471        Context.getCanonicalType(RPointee).getUnqualifiedType()) {
1472      // Second, we take the greater of the two cv qualifications. If neither
1473      // is greater than the other, the conversion is not possible.
1474      unsigned Q = LPointee.getCVRQualifiers() | RPointee.getCVRQualifiers();
1475      if (Q == LPointee.getCVRQualifiers() || Q == RPointee.getCVRQualifiers()){
1476        // Third, we check if either of the container classes is derived from
1477        // the other.
1478        QualType LContainer(LMemPtr->getClass(), 0);
1479        QualType RContainer(RMemPtr->getClass(), 0);
1480        QualType MoreDerived;
1481        if (Context.getCanonicalType(LContainer) ==
1482            Context.getCanonicalType(RContainer))
1483          MoreDerived = LContainer;
1484        else if (IsDerivedFrom(LContainer, RContainer))
1485          MoreDerived = LContainer;
1486        else if (IsDerivedFrom(RContainer, LContainer))
1487          MoreDerived = RContainer;
1488
1489        if (!MoreDerived.isNull()) {
1490          // The type 'Q Pointee (MoreDerived::*)' is the common type.
1491          // We don't use ImpCastExprToType here because this could still fail
1492          // for ambiguous or inaccessible conversions.
1493          QualType Common = Context.getMemberPointerType(
1494            LPointee.getQualifiedType(Q), MoreDerived.getTypePtr());
1495          if (PerformImplicitConversion(LHS, Common, "converting"))
1496            return QualType();
1497          if (PerformImplicitConversion(RHS, Common, "converting"))
1498            return QualType();
1499          return Common;
1500        }
1501      }
1502    }
1503  }
1504
1505  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
1506    << LHS->getType() << RHS->getType()
1507    << LHS->getSourceRange() << RHS->getSourceRange();
1508  return QualType();
1509}
1510
1511/// \brief Find a merged pointer type and convert the two expressions to it.
1512///
1513/// This finds the composite pointer type for @p E1 and @p E2 according to
1514/// C++0x 5.9p2. It converts both expressions to this type and returns it.
1515/// It does not emit diagnostics.
1516QualType Sema::FindCompositePointerType(Expr *&E1, Expr *&E2) {
1517  assert(getLangOptions().CPlusPlus && "This function assumes C++");
1518  QualType T1 = E1->getType(), T2 = E2->getType();
1519  if(!T1->isAnyPointerType() && !T2->isAnyPointerType())
1520    return QualType();
1521
1522  // C++0x 5.9p2
1523  //   Pointer conversions and qualification conversions are performed on
1524  //   pointer operands to bring them to their composite pointer type. If
1525  //   one operand is a null pointer constant, the composite pointer type is
1526  //   the type of the other operand.
1527  if (E1->isNullPointerConstant(Context)) {
1528    ImpCastExprToType(E1, T2);
1529    return T2;
1530  }
1531  if (E2->isNullPointerConstant(Context)) {
1532    ImpCastExprToType(E2, T1);
1533    return T1;
1534  }
1535  // Now both have to be pointers.
1536  if(!T1->isPointerType() || !T2->isPointerType())
1537    return QualType();
1538
1539  //   Otherwise, of one of the operands has type "pointer to cv1 void," then
1540  //   the other has type "pointer to cv2 T" and the composite pointer type is
1541  //   "pointer to cv12 void," where cv12 is the union of cv1 and cv2.
1542  //   Otherwise, the composite pointer type is a pointer type similar to the
1543  //   type of one of the operands, with a cv-qualification signature that is
1544  //   the union of the cv-qualification signatures of the operand types.
1545  // In practice, the first part here is redundant; it's subsumed by the second.
1546  // What we do here is, we build the two possible composite types, and try the
1547  // conversions in both directions. If only one works, or if the two composite
1548  // types are the same, we have succeeded.
1549  llvm::SmallVector<unsigned, 4> QualifierUnion;
1550  QualType Composite1 = T1, Composite2 = T2;
1551  const PointerType *Ptr1, *Ptr2;
1552  while ((Ptr1 = Composite1->getAs<PointerType>()) &&
1553         (Ptr2 = Composite2->getAs<PointerType>())) {
1554    Composite1 = Ptr1->getPointeeType();
1555    Composite2 = Ptr2->getPointeeType();
1556    QualifierUnion.push_back(
1557      Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers());
1558  }
1559  // Rewrap the composites as pointers with the union CVRs.
1560  for (llvm::SmallVector<unsigned, 4>::iterator I = QualifierUnion.begin(),
1561       E = QualifierUnion.end(); I != E; ++I) {
1562    Composite1 = Context.getPointerType(Composite1.getQualifiedType(*I));
1563    Composite2 = Context.getPointerType(Composite2.getQualifiedType(*I));
1564  }
1565
1566  ImplicitConversionSequence E1ToC1 = TryImplicitConversion(E1, Composite1);
1567  ImplicitConversionSequence E2ToC1 = TryImplicitConversion(E2, Composite1);
1568  ImplicitConversionSequence E1ToC2, E2ToC2;
1569  E1ToC2.ConversionKind = ImplicitConversionSequence::BadConversion;
1570  E2ToC2.ConversionKind = ImplicitConversionSequence::BadConversion;
1571  if (Context.getCanonicalType(Composite1) !=
1572      Context.getCanonicalType(Composite2)) {
1573    E1ToC2 = TryImplicitConversion(E1, Composite2);
1574    E2ToC2 = TryImplicitConversion(E2, Composite2);
1575  }
1576
1577  bool ToC1Viable = E1ToC1.ConversionKind !=
1578                      ImplicitConversionSequence::BadConversion
1579                 && E2ToC1.ConversionKind !=
1580                      ImplicitConversionSequence::BadConversion;
1581  bool ToC2Viable = E1ToC2.ConversionKind !=
1582                      ImplicitConversionSequence::BadConversion
1583                 && E2ToC2.ConversionKind !=
1584                      ImplicitConversionSequence::BadConversion;
1585  if (ToC1Viable && !ToC2Viable) {
1586    if (!PerformImplicitConversion(E1, Composite1, E1ToC1, "converting") &&
1587        !PerformImplicitConversion(E2, Composite1, E2ToC1, "converting"))
1588      return Composite1;
1589  }
1590  if (ToC2Viable && !ToC1Viable) {
1591    if (!PerformImplicitConversion(E1, Composite2, E1ToC2, "converting") &&
1592        !PerformImplicitConversion(E2, Composite2, E2ToC2, "converting"))
1593      return Composite2;
1594  }
1595  return QualType();
1596}
1597
1598Sema::OwningExprResult Sema::MaybeBindToTemporary(Expr *E) {
1599  if (!Context.getLangOptions().CPlusPlus)
1600    return Owned(E);
1601
1602  const RecordType *RT = E->getType()->getAs<RecordType>();
1603  if (!RT)
1604    return Owned(E);
1605
1606  CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
1607  if (RD->hasTrivialDestructor())
1608    return Owned(E);
1609
1610  CXXTemporary *Temp = CXXTemporary::Create(Context,
1611                                            RD->getDestructor(Context));
1612  ExprTemporaries.push_back(Temp);
1613  if (CXXDestructorDecl *Destructor =
1614        const_cast<CXXDestructorDecl*>(RD->getDestructor(Context)))
1615    MarkDeclarationReferenced(E->getExprLoc(), Destructor);
1616  // FIXME: Add the temporary to the temporaries vector.
1617  return Owned(CXXBindTemporaryExpr::Create(Context, Temp, E));
1618}
1619
1620Expr *Sema::MaybeCreateCXXExprWithTemporaries(Expr *SubExpr,
1621                                              bool ShouldDestroyTemps) {
1622  assert(SubExpr && "sub expression can't be null!");
1623
1624  if (ExprTemporaries.empty())
1625    return SubExpr;
1626
1627  Expr *E = CXXExprWithTemporaries::Create(Context, SubExpr,
1628                                           &ExprTemporaries[0],
1629                                           ExprTemporaries.size(),
1630                                           ShouldDestroyTemps);
1631  ExprTemporaries.clear();
1632
1633  return E;
1634}
1635
1636Sema::OwningExprResult Sema::ActOnFinishFullExpr(ExprArg Arg) {
1637  Expr *FullExpr = Arg.takeAs<Expr>();
1638  if (FullExpr)
1639    FullExpr = MaybeCreateCXXExprWithTemporaries(FullExpr,
1640                                                 /*ShouldDestroyTemps=*/true);
1641
1642  return Owned(FullExpr);
1643}
1644