SemaExpr.cpp revision 95d07b33ba7d066893a897fd3270ed4b36fbefc5
1//===--- SemaExpr.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 expressions.
11//
12//===----------------------------------------------------------------------===//
13
14#include "Sema.h"
15#include "SemaInit.h"
16#include "Lookup.h"
17#include "AnalysisBasedWarnings.h"
18#include "clang/AST/ASTContext.h"
19#include "clang/AST/DeclObjC.h"
20#include "clang/AST/DeclTemplate.h"
21#include "clang/AST/ExprCXX.h"
22#include "clang/AST/ExprObjC.h"
23#include "clang/Basic/PartialDiagnostic.h"
24#include "clang/Basic/SourceManager.h"
25#include "clang/Basic/TargetInfo.h"
26#include "clang/Lex/LiteralSupport.h"
27#include "clang/Lex/Preprocessor.h"
28#include "clang/Parse/DeclSpec.h"
29#include "clang/Parse/Designator.h"
30#include "clang/Parse/Scope.h"
31#include "clang/Parse/Template.h"
32using namespace clang;
33
34
35/// \brief Determine whether the use of this declaration is valid, and
36/// emit any corresponding diagnostics.
37///
38/// This routine diagnoses various problems with referencing
39/// declarations that can occur when using a declaration. For example,
40/// it might warn if a deprecated or unavailable declaration is being
41/// used, or produce an error (and return true) if a C++0x deleted
42/// function is being used.
43///
44/// If IgnoreDeprecated is set to true, this should not want about deprecated
45/// decls.
46///
47/// \returns true if there was an error (this declaration cannot be
48/// referenced), false otherwise.
49///
50bool Sema::DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc) {
51  // See if the decl is deprecated.
52  if (D->getAttr<DeprecatedAttr>()) {
53    EmitDeprecationWarning(D, Loc);
54  }
55
56  // See if the decl is unavailable
57  if (D->getAttr<UnavailableAttr>()) {
58    Diag(Loc, diag::warn_unavailable) << D->getDeclName();
59    Diag(D->getLocation(), diag::note_unavailable_here) << 0;
60  }
61
62  // See if this is a deleted function.
63  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
64    if (FD->isDeleted()) {
65      Diag(Loc, diag::err_deleted_function_use);
66      Diag(D->getLocation(), diag::note_unavailable_here) << true;
67      return true;
68    }
69  }
70
71  return false;
72}
73
74/// DiagnoseSentinelCalls - This routine checks on method dispatch calls
75/// (and other functions in future), which have been declared with sentinel
76/// attribute. It warns if call does not have the sentinel argument.
77///
78void Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc,
79                                 Expr **Args, unsigned NumArgs) {
80  const SentinelAttr *attr = D->getAttr<SentinelAttr>();
81  if (!attr)
82    return;
83
84  // FIXME: In C++0x, if any of the arguments are parameter pack
85  // expansions, we can't check for the sentinel now.
86  int sentinelPos = attr->getSentinel();
87  int nullPos = attr->getNullPos();
88
89  // FIXME. ObjCMethodDecl and FunctionDecl need be derived from the same common
90  // base class. Then we won't be needing two versions of the same code.
91  unsigned int i = 0;
92  bool warnNotEnoughArgs = false;
93  int isMethod = 0;
94  if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D)) {
95    // skip over named parameters.
96    ObjCMethodDecl::param_iterator P, E = MD->param_end();
97    for (P = MD->param_begin(); (P != E && i < NumArgs); ++P) {
98      if (nullPos)
99        --nullPos;
100      else
101        ++i;
102    }
103    warnNotEnoughArgs = (P != E || i >= NumArgs);
104    isMethod = 1;
105  } else if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
106    // skip over named parameters.
107    ObjCMethodDecl::param_iterator P, E = FD->param_end();
108    for (P = FD->param_begin(); (P != E && i < NumArgs); ++P) {
109      if (nullPos)
110        --nullPos;
111      else
112        ++i;
113    }
114    warnNotEnoughArgs = (P != E || i >= NumArgs);
115  } else if (VarDecl *V = dyn_cast<VarDecl>(D)) {
116    // block or function pointer call.
117    QualType Ty = V->getType();
118    if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {
119      const FunctionType *FT = Ty->isFunctionPointerType()
120      ? Ty->getAs<PointerType>()->getPointeeType()->getAs<FunctionType>()
121      : Ty->getAs<BlockPointerType>()->getPointeeType()->getAs<FunctionType>();
122      if (const FunctionProtoType *Proto = dyn_cast<FunctionProtoType>(FT)) {
123        unsigned NumArgsInProto = Proto->getNumArgs();
124        unsigned k;
125        for (k = 0; (k != NumArgsInProto && i < NumArgs); k++) {
126          if (nullPos)
127            --nullPos;
128          else
129            ++i;
130        }
131        warnNotEnoughArgs = (k != NumArgsInProto || i >= NumArgs);
132      }
133      if (Ty->isBlockPointerType())
134        isMethod = 2;
135    } else
136      return;
137  } else
138    return;
139
140  if (warnNotEnoughArgs) {
141    Diag(Loc, diag::warn_not_enough_argument) << D->getDeclName();
142    Diag(D->getLocation(), diag::note_sentinel_here) << isMethod;
143    return;
144  }
145  int sentinel = i;
146  while (sentinelPos > 0 && i < NumArgs-1) {
147    --sentinelPos;
148    ++i;
149  }
150  if (sentinelPos > 0) {
151    Diag(Loc, diag::warn_not_enough_argument) << D->getDeclName();
152    Diag(D->getLocation(), diag::note_sentinel_here) << isMethod;
153    return;
154  }
155  while (i < NumArgs-1) {
156    ++i;
157    ++sentinel;
158  }
159  Expr *sentinelExpr = Args[sentinel];
160  if (sentinelExpr && (!isa<GNUNullExpr>(sentinelExpr) &&
161                       !sentinelExpr->isTypeDependent() &&
162                       !sentinelExpr->isValueDependent() &&
163                       (!sentinelExpr->getType()->isPointerType() ||
164                        !sentinelExpr->isNullPointerConstant(Context,
165                                            Expr::NPC_ValueDependentIsNull)))) {
166    Diag(Loc, diag::warn_missing_sentinel) << isMethod;
167    Diag(D->getLocation(), diag::note_sentinel_here) << isMethod;
168  }
169  return;
170}
171
172SourceRange Sema::getExprRange(ExprTy *E) const {
173  Expr *Ex = (Expr *)E;
174  return Ex? Ex->getSourceRange() : SourceRange();
175}
176
177//===----------------------------------------------------------------------===//
178//  Standard Promotions and Conversions
179//===----------------------------------------------------------------------===//
180
181/// DefaultFunctionArrayConversion (C99 6.3.2.1p3, C99 6.3.2.1p4).
182void Sema::DefaultFunctionArrayConversion(Expr *&E) {
183  QualType Ty = E->getType();
184  assert(!Ty.isNull() && "DefaultFunctionArrayConversion - missing type");
185
186  if (Ty->isFunctionType())
187    ImpCastExprToType(E, Context.getPointerType(Ty),
188                      CastExpr::CK_FunctionToPointerDecay);
189  else if (Ty->isArrayType()) {
190    // In C90 mode, arrays only promote to pointers if the array expression is
191    // an lvalue.  The relevant legalese is C90 6.2.2.1p3: "an lvalue that has
192    // type 'array of type' is converted to an expression that has type 'pointer
193    // to type'...".  In C99 this was changed to: C99 6.3.2.1p3: "an expression
194    // that has type 'array of type' ...".  The relevant change is "an lvalue"
195    // (C90) to "an expression" (C99).
196    //
197    // C++ 4.2p1:
198    // An lvalue or rvalue of type "array of N T" or "array of unknown bound of
199    // T" can be converted to an rvalue of type "pointer to T".
200    //
201    if (getLangOptions().C99 || getLangOptions().CPlusPlus ||
202        E->isLvalue(Context) == Expr::LV_Valid)
203      ImpCastExprToType(E, Context.getArrayDecayedType(Ty),
204                        CastExpr::CK_ArrayToPointerDecay);
205  }
206}
207
208void Sema::DefaultFunctionArrayLvalueConversion(Expr *&E) {
209  DefaultFunctionArrayConversion(E);
210
211  QualType Ty = E->getType();
212  assert(!Ty.isNull() && "DefaultFunctionArrayLvalueConversion - missing type");
213  if (!Ty->isDependentType() && Ty.hasQualifiers() &&
214      (!getLangOptions().CPlusPlus || !Ty->isRecordType()) &&
215      E->isLvalue(Context) == Expr::LV_Valid) {
216    // C++ [conv.lval]p1:
217    //   [...] If T is a non-class type, the type of the rvalue is the
218    //   cv-unqualified version of T. Otherwise, the type of the
219    //   rvalue is T
220    //
221    // C99 6.3.2.1p2:
222    //   If the lvalue has qualified type, the value has the unqualified
223    //   version of the type of the lvalue; otherwise, the value has the
224    //   type of the lvalue.
225    ImpCastExprToType(E, Ty.getUnqualifiedType(), CastExpr::CK_NoOp);
226  }
227}
228
229
230/// UsualUnaryConversions - Performs various conversions that are common to most
231/// operators (C99 6.3). The conversions of array and function types are
232/// sometimes surpressed. For example, the array->pointer conversion doesn't
233/// apply if the array is an argument to the sizeof or address (&) operators.
234/// In these instances, this routine should *not* be called.
235Expr *Sema::UsualUnaryConversions(Expr *&Expr) {
236  QualType Ty = Expr->getType();
237  assert(!Ty.isNull() && "UsualUnaryConversions - missing type");
238
239  // C99 6.3.1.1p2:
240  //
241  //   The following may be used in an expression wherever an int or
242  //   unsigned int may be used:
243  //     - an object or expression with an integer type whose integer
244  //       conversion rank is less than or equal to the rank of int
245  //       and unsigned int.
246  //     - A bit-field of type _Bool, int, signed int, or unsigned int.
247  //
248  //   If an int can represent all values of the original type, the
249  //   value is converted to an int; otherwise, it is converted to an
250  //   unsigned int. These are called the integer promotions. All
251  //   other types are unchanged by the integer promotions.
252  QualType PTy = Context.isPromotableBitField(Expr);
253  if (!PTy.isNull()) {
254    ImpCastExprToType(Expr, PTy, CastExpr::CK_IntegralCast);
255    return Expr;
256  }
257  if (Ty->isPromotableIntegerType()) {
258    QualType PT = Context.getPromotedIntegerType(Ty);
259    ImpCastExprToType(Expr, PT, CastExpr::CK_IntegralCast);
260    return Expr;
261  }
262
263  DefaultFunctionArrayLvalueConversion(Expr);
264  return Expr;
265}
266
267/// DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that
268/// do not have a prototype. Arguments that have type float are promoted to
269/// double. All other argument types are converted by UsualUnaryConversions().
270void Sema::DefaultArgumentPromotion(Expr *&Expr) {
271  QualType Ty = Expr->getType();
272  assert(!Ty.isNull() && "DefaultArgumentPromotion - missing type");
273
274  // If this is a 'float' (CVR qualified or typedef) promote to double.
275  if (const BuiltinType *BT = Ty->getAs<BuiltinType>())
276    if (BT->getKind() == BuiltinType::Float)
277      return ImpCastExprToType(Expr, Context.DoubleTy,
278                               CastExpr::CK_FloatingCast);
279
280  UsualUnaryConversions(Expr);
281}
282
283/// DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but
284/// will warn if the resulting type is not a POD type, and rejects ObjC
285/// interfaces passed by value.  This returns true if the argument type is
286/// completely illegal.
287bool Sema::DefaultVariadicArgumentPromotion(Expr *&Expr, VariadicCallType CT) {
288  DefaultArgumentPromotion(Expr);
289
290  if (Expr->getType()->isObjCInterfaceType() &&
291      DiagRuntimeBehavior(Expr->getLocStart(),
292        PDiag(diag::err_cannot_pass_objc_interface_to_vararg)
293          << Expr->getType() << CT))
294    return true;
295
296  if (!Expr->getType()->isPODType() &&
297      DiagRuntimeBehavior(Expr->getLocStart(),
298                          PDiag(diag::warn_cannot_pass_non_pod_arg_to_vararg)
299                            << Expr->getType() << CT))
300    return true;
301
302  return false;
303}
304
305
306/// UsualArithmeticConversions - Performs various conversions that are common to
307/// binary operators (C99 6.3.1.8). If both operands aren't arithmetic, this
308/// routine returns the first non-arithmetic type found. The client is
309/// responsible for emitting appropriate error diagnostics.
310/// FIXME: verify the conversion rules for "complex int" are consistent with
311/// GCC.
312QualType Sema::UsualArithmeticConversions(Expr *&lhsExpr, Expr *&rhsExpr,
313                                          bool isCompAssign) {
314  if (!isCompAssign)
315    UsualUnaryConversions(lhsExpr);
316
317  UsualUnaryConversions(rhsExpr);
318
319  // For conversion purposes, we ignore any qualifiers.
320  // For example, "const float" and "float" are equivalent.
321  QualType lhs =
322    Context.getCanonicalType(lhsExpr->getType()).getUnqualifiedType();
323  QualType rhs =
324    Context.getCanonicalType(rhsExpr->getType()).getUnqualifiedType();
325
326  // If both types are identical, no conversion is needed.
327  if (lhs == rhs)
328    return lhs;
329
330  // If either side is a non-arithmetic type (e.g. a pointer), we are done.
331  // The caller can deal with this (e.g. pointer + int).
332  if (!lhs->isArithmeticType() || !rhs->isArithmeticType())
333    return lhs;
334
335  // Perform bitfield promotions.
336  QualType LHSBitfieldPromoteTy = Context.isPromotableBitField(lhsExpr);
337  if (!LHSBitfieldPromoteTy.isNull())
338    lhs = LHSBitfieldPromoteTy;
339  QualType RHSBitfieldPromoteTy = Context.isPromotableBitField(rhsExpr);
340  if (!RHSBitfieldPromoteTy.isNull())
341    rhs = RHSBitfieldPromoteTy;
342
343  QualType destType = Context.UsualArithmeticConversionsType(lhs, rhs);
344  if (!isCompAssign)
345    ImpCastExprToType(lhsExpr, destType, CastExpr::CK_Unknown);
346  ImpCastExprToType(rhsExpr, destType, CastExpr::CK_Unknown);
347  return destType;
348}
349
350//===----------------------------------------------------------------------===//
351//  Semantic Analysis for various Expression Types
352//===----------------------------------------------------------------------===//
353
354
355/// ActOnStringLiteral - The specified tokens were lexed as pasted string
356/// fragments (e.g. "foo" "bar" L"baz").  The result string has to handle string
357/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from
358/// multiple tokens.  However, the common case is that StringToks points to one
359/// string.
360///
361Action::OwningExprResult
362Sema::ActOnStringLiteral(const Token *StringToks, unsigned NumStringToks) {
363  assert(NumStringToks && "Must have at least one string!");
364
365  StringLiteralParser Literal(StringToks, NumStringToks, PP);
366  if (Literal.hadError)
367    return ExprError();
368
369  llvm::SmallVector<SourceLocation, 4> StringTokLocs;
370  for (unsigned i = 0; i != NumStringToks; ++i)
371    StringTokLocs.push_back(StringToks[i].getLocation());
372
373  QualType StrTy = Context.CharTy;
374  if (Literal.AnyWide) StrTy = Context.getWCharType();
375  if (Literal.Pascal) StrTy = Context.UnsignedCharTy;
376
377  // A C++ string literal has a const-qualified element type (C++ 2.13.4p1).
378  if (getLangOptions().CPlusPlus || getLangOptions().ConstStrings )
379    StrTy.addConst();
380
381  // Get an array type for the string, according to C99 6.4.5.  This includes
382  // the nul terminator character as well as the string length for pascal
383  // strings.
384  StrTy = Context.getConstantArrayType(StrTy,
385                                 llvm::APInt(32, Literal.GetNumStringChars()+1),
386                                       ArrayType::Normal, 0);
387
388  // Pass &StringTokLocs[0], StringTokLocs.size() to factory!
389  return Owned(StringLiteral::Create(Context, Literal.GetString(),
390                                     Literal.GetStringLength(),
391                                     Literal.AnyWide, StrTy,
392                                     &StringTokLocs[0],
393                                     StringTokLocs.size()));
394}
395
396/// ShouldSnapshotBlockValueReference - Return true if a reference inside of
397/// CurBlock to VD should cause it to be snapshotted (as we do for auto
398/// variables defined outside the block) or false if this is not needed (e.g.
399/// for values inside the block or for globals).
400///
401/// This also keeps the 'hasBlockDeclRefExprs' in the BlockScopeInfo records
402/// up-to-date.
403///
404static bool ShouldSnapshotBlockValueReference(Sema &S, BlockScopeInfo *CurBlock,
405                                              ValueDecl *VD) {
406  // If the value is defined inside the block, we couldn't snapshot it even if
407  // we wanted to.
408  if (CurBlock->TheDecl == VD->getDeclContext())
409    return false;
410
411  // If this is an enum constant or function, it is constant, don't snapshot.
412  if (isa<EnumConstantDecl>(VD) || isa<FunctionDecl>(VD))
413    return false;
414
415  // If this is a reference to an extern, static, or global variable, no need to
416  // snapshot it.
417  // FIXME: What about 'const' variables in C++?
418  if (const VarDecl *Var = dyn_cast<VarDecl>(VD))
419    if (!Var->hasLocalStorage())
420      return false;
421
422  // Blocks that have these can't be constant.
423  CurBlock->hasBlockDeclRefExprs = true;
424
425  // If we have nested blocks, the decl may be declared in an outer block (in
426  // which case that outer block doesn't get "hasBlockDeclRefExprs") or it may
427  // be defined outside all of the current blocks (in which case the blocks do
428  // all get the bit).  Walk the nesting chain.
429  for (unsigned I = S.FunctionScopes.size() - 1; I; --I) {
430    BlockScopeInfo *NextBlock = dyn_cast<BlockScopeInfo>(S.FunctionScopes[I]);
431
432    if (!NextBlock)
433      continue;
434
435    // If we found the defining block for the variable, don't mark the block as
436    // having a reference outside it.
437    if (NextBlock->TheDecl == VD->getDeclContext())
438      break;
439
440    // Otherwise, the DeclRef from the inner block causes the outer one to need
441    // a snapshot as well.
442    NextBlock->hasBlockDeclRefExprs = true;
443  }
444
445  return true;
446}
447
448
449
450/// BuildDeclRefExpr - Build a DeclRefExpr.
451Sema::OwningExprResult
452Sema::BuildDeclRefExpr(ValueDecl *D, QualType Ty, SourceLocation Loc,
453                       const CXXScopeSpec *SS) {
454  if (Context.getCanonicalType(Ty) == Context.UndeducedAutoTy) {
455    Diag(Loc,
456         diag::err_auto_variable_cannot_appear_in_own_initializer)
457      << D->getDeclName();
458    return ExprError();
459  }
460
461  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
462    if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CurContext)) {
463      if (const FunctionDecl *FD = MD->getParent()->isLocalClass()) {
464        if (VD->hasLocalStorage() && VD->getDeclContext() != CurContext) {
465          Diag(Loc, diag::err_reference_to_local_var_in_enclosing_function)
466            << D->getIdentifier() << FD->getDeclName();
467          Diag(D->getLocation(), diag::note_local_variable_declared_here)
468            << D->getIdentifier();
469          return ExprError();
470        }
471      }
472    }
473  }
474
475  MarkDeclarationReferenced(Loc, D);
476
477  return Owned(DeclRefExpr::Create(Context,
478                              SS? (NestedNameSpecifier *)SS->getScopeRep() : 0,
479                                   SS? SS->getRange() : SourceRange(),
480                                   D, Loc, Ty));
481}
482
483/// getObjectForAnonymousRecordDecl - Retrieve the (unnamed) field or
484/// variable corresponding to the anonymous union or struct whose type
485/// is Record.
486static Decl *getObjectForAnonymousRecordDecl(ASTContext &Context,
487                                             RecordDecl *Record) {
488  assert(Record->isAnonymousStructOrUnion() &&
489         "Record must be an anonymous struct or union!");
490
491  // FIXME: Once Decls are directly linked together, this will be an O(1)
492  // operation rather than a slow walk through DeclContext's vector (which
493  // itself will be eliminated). DeclGroups might make this even better.
494  DeclContext *Ctx = Record->getDeclContext();
495  for (DeclContext::decl_iterator D = Ctx->decls_begin(),
496                               DEnd = Ctx->decls_end();
497       D != DEnd; ++D) {
498    if (*D == Record) {
499      // The object for the anonymous struct/union directly
500      // follows its type in the list of declarations.
501      ++D;
502      assert(D != DEnd && "Missing object for anonymous record");
503      assert(!cast<NamedDecl>(*D)->getDeclName() && "Decl should be unnamed");
504      return *D;
505    }
506  }
507
508  assert(false && "Missing object for anonymous record");
509  return 0;
510}
511
512/// \brief Given a field that represents a member of an anonymous
513/// struct/union, build the path from that field's context to the
514/// actual member.
515///
516/// Construct the sequence of field member references we'll have to
517/// perform to get to the field in the anonymous union/struct. The
518/// list of members is built from the field outward, so traverse it
519/// backwards to go from an object in the current context to the field
520/// we found.
521///
522/// \returns The variable from which the field access should begin,
523/// for an anonymous struct/union that is not a member of another
524/// class. Otherwise, returns NULL.
525VarDecl *Sema::BuildAnonymousStructUnionMemberPath(FieldDecl *Field,
526                                   llvm::SmallVectorImpl<FieldDecl *> &Path) {
527  assert(Field->getDeclContext()->isRecord() &&
528         cast<RecordDecl>(Field->getDeclContext())->isAnonymousStructOrUnion()
529         && "Field must be stored inside an anonymous struct or union");
530
531  Path.push_back(Field);
532  VarDecl *BaseObject = 0;
533  DeclContext *Ctx = Field->getDeclContext();
534  do {
535    RecordDecl *Record = cast<RecordDecl>(Ctx);
536    Decl *AnonObject = getObjectForAnonymousRecordDecl(Context, Record);
537    if (FieldDecl *AnonField = dyn_cast<FieldDecl>(AnonObject))
538      Path.push_back(AnonField);
539    else {
540      BaseObject = cast<VarDecl>(AnonObject);
541      break;
542    }
543    Ctx = Ctx->getParent();
544  } while (Ctx->isRecord() &&
545           cast<RecordDecl>(Ctx)->isAnonymousStructOrUnion());
546
547  return BaseObject;
548}
549
550Sema::OwningExprResult
551Sema::BuildAnonymousStructUnionMemberReference(SourceLocation Loc,
552                                               FieldDecl *Field,
553                                               Expr *BaseObjectExpr,
554                                               SourceLocation OpLoc) {
555  llvm::SmallVector<FieldDecl *, 4> AnonFields;
556  VarDecl *BaseObject = BuildAnonymousStructUnionMemberPath(Field,
557                                                            AnonFields);
558
559  // Build the expression that refers to the base object, from
560  // which we will build a sequence of member references to each
561  // of the anonymous union objects and, eventually, the field we
562  // found via name lookup.
563  bool BaseObjectIsPointer = false;
564  Qualifiers BaseQuals;
565  if (BaseObject) {
566    // BaseObject is an anonymous struct/union variable (and is,
567    // therefore, not part of another non-anonymous record).
568    if (BaseObjectExpr) BaseObjectExpr->Destroy(Context);
569    MarkDeclarationReferenced(Loc, BaseObject);
570    BaseObjectExpr = new (Context) DeclRefExpr(BaseObject,BaseObject->getType(),
571                                               SourceLocation());
572    BaseQuals
573      = Context.getCanonicalType(BaseObject->getType()).getQualifiers();
574  } else if (BaseObjectExpr) {
575    // The caller provided the base object expression. Determine
576    // whether its a pointer and whether it adds any qualifiers to the
577    // anonymous struct/union fields we're looking into.
578    QualType ObjectType = BaseObjectExpr->getType();
579    if (const PointerType *ObjectPtr = ObjectType->getAs<PointerType>()) {
580      BaseObjectIsPointer = true;
581      ObjectType = ObjectPtr->getPointeeType();
582    }
583    BaseQuals
584      = Context.getCanonicalType(ObjectType).getQualifiers();
585  } else {
586    // We've found a member of an anonymous struct/union that is
587    // inside a non-anonymous struct/union, so in a well-formed
588    // program our base object expression is "this".
589    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CurContext)) {
590      if (!MD->isStatic()) {
591        QualType AnonFieldType
592          = Context.getTagDeclType(
593                     cast<RecordDecl>(AnonFields.back()->getDeclContext()));
594        QualType ThisType = Context.getTagDeclType(MD->getParent());
595        if ((Context.getCanonicalType(AnonFieldType)
596               == Context.getCanonicalType(ThisType)) ||
597            IsDerivedFrom(ThisType, AnonFieldType)) {
598          // Our base object expression is "this".
599          BaseObjectExpr = new (Context) CXXThisExpr(Loc,
600                                                     MD->getThisType(Context),
601                                                     /*isImplicit=*/true);
602          BaseObjectIsPointer = true;
603        }
604      } else {
605        return ExprError(Diag(Loc,diag::err_invalid_member_use_in_static_method)
606          << Field->getDeclName());
607      }
608      BaseQuals = Qualifiers::fromCVRMask(MD->getTypeQualifiers());
609    }
610
611    if (!BaseObjectExpr)
612      return ExprError(Diag(Loc, diag::err_invalid_non_static_member_use)
613        << Field->getDeclName());
614  }
615
616  // Build the implicit member references to the field of the
617  // anonymous struct/union.
618  Expr *Result = BaseObjectExpr;
619  Qualifiers ResultQuals = BaseQuals;
620  for (llvm::SmallVector<FieldDecl *, 4>::reverse_iterator
621         FI = AnonFields.rbegin(), FIEnd = AnonFields.rend();
622       FI != FIEnd; ++FI) {
623    QualType MemberType = (*FI)->getType();
624    Qualifiers MemberTypeQuals =
625      Context.getCanonicalType(MemberType).getQualifiers();
626
627    // CVR attributes from the base are picked up by members,
628    // except that 'mutable' members don't pick up 'const'.
629    if ((*FI)->isMutable())
630      ResultQuals.removeConst();
631
632    // GC attributes are never picked up by members.
633    ResultQuals.removeObjCGCAttr();
634
635    // TR 18037 does not allow fields to be declared with address spaces.
636    assert(!MemberTypeQuals.hasAddressSpace());
637
638    Qualifiers NewQuals = ResultQuals + MemberTypeQuals;
639    if (NewQuals != MemberTypeQuals)
640      MemberType = Context.getQualifiedType(MemberType, NewQuals);
641
642    MarkDeclarationReferenced(Loc, *FI);
643    PerformObjectMemberConversion(Result, /*FIXME:Qualifier=*/0, *FI, *FI);
644    // FIXME: Might this end up being a qualified name?
645    Result = new (Context) MemberExpr(Result, BaseObjectIsPointer, *FI,
646                                      OpLoc, MemberType);
647    BaseObjectIsPointer = false;
648    ResultQuals = NewQuals;
649  }
650
651  return Owned(Result);
652}
653
654/// Decomposes the given name into a DeclarationName, its location, and
655/// possibly a list of template arguments.
656///
657/// If this produces template arguments, it is permitted to call
658/// DecomposeTemplateName.
659///
660/// This actually loses a lot of source location information for
661/// non-standard name kinds; we should consider preserving that in
662/// some way.
663static void DecomposeUnqualifiedId(Sema &SemaRef,
664                                   const UnqualifiedId &Id,
665                                   TemplateArgumentListInfo &Buffer,
666                                   DeclarationName &Name,
667                                   SourceLocation &NameLoc,
668                             const TemplateArgumentListInfo *&TemplateArgs) {
669  if (Id.getKind() == UnqualifiedId::IK_TemplateId) {
670    Buffer.setLAngleLoc(Id.TemplateId->LAngleLoc);
671    Buffer.setRAngleLoc(Id.TemplateId->RAngleLoc);
672
673    ASTTemplateArgsPtr TemplateArgsPtr(SemaRef,
674                                       Id.TemplateId->getTemplateArgs(),
675                                       Id.TemplateId->NumArgs);
676    SemaRef.translateTemplateArguments(TemplateArgsPtr, Buffer);
677    TemplateArgsPtr.release();
678
679    TemplateName TName =
680      Sema::TemplateTy::make(Id.TemplateId->Template).getAsVal<TemplateName>();
681
682    Name = SemaRef.Context.getNameForTemplate(TName);
683    NameLoc = Id.TemplateId->TemplateNameLoc;
684    TemplateArgs = &Buffer;
685  } else {
686    Name = SemaRef.GetNameFromUnqualifiedId(Id);
687    NameLoc = Id.StartLocation;
688    TemplateArgs = 0;
689  }
690}
691
692/// Decompose the given template name into a list of lookup results.
693///
694/// The unqualified ID must name a non-dependent template, which can
695/// be more easily tested by checking whether DecomposeUnqualifiedId
696/// found template arguments.
697static void DecomposeTemplateName(LookupResult &R, const UnqualifiedId &Id) {
698  assert(Id.getKind() == UnqualifiedId::IK_TemplateId);
699  TemplateName TName =
700    Sema::TemplateTy::make(Id.TemplateId->Template).getAsVal<TemplateName>();
701
702  if (TemplateDecl *TD = TName.getAsTemplateDecl())
703    R.addDecl(TD);
704  else if (OverloadedTemplateStorage *OT = TName.getAsOverloadedTemplate())
705    for (OverloadedTemplateStorage::iterator I = OT->begin(), E = OT->end();
706           I != E; ++I)
707      R.addDecl(*I);
708
709  R.resolveKind();
710}
711
712/// Determines whether the given record is "fully-formed" at the given
713/// location, i.e. whether a qualified lookup into it is assured of
714/// getting consistent results already.
715static bool IsFullyFormedScope(Sema &SemaRef, CXXRecordDecl *Record) {
716  if (!Record->hasDefinition())
717    return false;
718
719  for (CXXRecordDecl::base_class_iterator I = Record->bases_begin(),
720         E = Record->bases_end(); I != E; ++I) {
721    CanQualType BaseT = SemaRef.Context.getCanonicalType((*I).getType());
722    CanQual<RecordType> BaseRT = BaseT->getAs<RecordType>();
723    if (!BaseRT) return false;
724
725    CXXRecordDecl *BaseRecord = cast<CXXRecordDecl>(BaseRT->getDecl());
726    if (!BaseRecord->hasDefinition() ||
727        !IsFullyFormedScope(SemaRef, BaseRecord))
728      return false;
729  }
730
731  return true;
732}
733
734/// Determines whether we can lookup this id-expression now or whether
735/// we have to wait until template instantiation is complete.
736static bool IsDependentIdExpression(Sema &SemaRef, const CXXScopeSpec &SS) {
737  DeclContext *DC = SemaRef.computeDeclContext(SS, false);
738
739  // If the qualifier scope isn't computable, it's definitely dependent.
740  if (!DC) return true;
741
742  // If the qualifier scope doesn't name a record, we can always look into it.
743  if (!isa<CXXRecordDecl>(DC)) return false;
744
745  // We can't look into record types unless they're fully-formed.
746  if (!IsFullyFormedScope(SemaRef, cast<CXXRecordDecl>(DC))) return true;
747
748  return false;
749}
750
751/// Determines if the given class is provably not derived from all of
752/// the prospective base classes.
753static bool IsProvablyNotDerivedFrom(Sema &SemaRef,
754                                     CXXRecordDecl *Record,
755                            const llvm::SmallPtrSet<CXXRecordDecl*, 4> &Bases) {
756  if (Bases.count(Record->getCanonicalDecl()))
757    return false;
758
759  RecordDecl *RD = Record->getDefinition();
760  if (!RD) return false;
761  Record = cast<CXXRecordDecl>(RD);
762
763  for (CXXRecordDecl::base_class_iterator I = Record->bases_begin(),
764         E = Record->bases_end(); I != E; ++I) {
765    CanQualType BaseT = SemaRef.Context.getCanonicalType((*I).getType());
766    CanQual<RecordType> BaseRT = BaseT->getAs<RecordType>();
767    if (!BaseRT) return false;
768
769    CXXRecordDecl *BaseRecord = cast<CXXRecordDecl>(BaseRT->getDecl());
770    if (!IsProvablyNotDerivedFrom(SemaRef, BaseRecord, Bases))
771      return false;
772  }
773
774  return true;
775}
776
777enum IMAKind {
778  /// The reference is definitely not an instance member access.
779  IMA_Static,
780
781  /// The reference may be an implicit instance member access.
782  IMA_Mixed,
783
784  /// The reference may be to an instance member, but it is invalid if
785  /// so, because the context is not an instance method.
786  IMA_Mixed_StaticContext,
787
788  /// The reference may be to an instance member, but it is invalid if
789  /// so, because the context is from an unrelated class.
790  IMA_Mixed_Unrelated,
791
792  /// The reference is definitely an implicit instance member access.
793  IMA_Instance,
794
795  /// The reference may be to an unresolved using declaration.
796  IMA_Unresolved,
797
798  /// The reference may be to an unresolved using declaration and the
799  /// context is not an instance method.
800  IMA_Unresolved_StaticContext,
801
802  /// The reference is to a member of an anonymous structure in a
803  /// non-class context.
804  IMA_AnonymousMember,
805
806  /// All possible referrents are instance members and the current
807  /// context is not an instance method.
808  IMA_Error_StaticContext,
809
810  /// All possible referrents are instance members of an unrelated
811  /// class.
812  IMA_Error_Unrelated
813};
814
815/// The given lookup names class member(s) and is not being used for
816/// an address-of-member expression.  Classify the type of access
817/// according to whether it's possible that this reference names an
818/// instance member.  This is best-effort; it is okay to
819/// conservatively answer "yes", in which case some errors will simply
820/// not be caught until template-instantiation.
821static IMAKind ClassifyImplicitMemberAccess(Sema &SemaRef,
822                                            const LookupResult &R) {
823  assert(!R.empty() && (*R.begin())->isCXXClassMember());
824
825  bool isStaticContext =
826    (!isa<CXXMethodDecl>(SemaRef.CurContext) ||
827     cast<CXXMethodDecl>(SemaRef.CurContext)->isStatic());
828
829  if (R.isUnresolvableResult())
830    return isStaticContext ? IMA_Unresolved_StaticContext : IMA_Unresolved;
831
832  // Collect all the declaring classes of instance members we find.
833  bool hasNonInstance = false;
834  llvm::SmallPtrSet<CXXRecordDecl*, 4> Classes;
835  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
836    NamedDecl *D = *I;
837    if (D->isCXXInstanceMember()) {
838      CXXRecordDecl *R = cast<CXXRecordDecl>(D->getDeclContext());
839
840      // If this is a member of an anonymous record, move out to the
841      // innermost non-anonymous struct or union.  If there isn't one,
842      // that's a special case.
843      while (R->isAnonymousStructOrUnion()) {
844        R = dyn_cast<CXXRecordDecl>(R->getParent());
845        if (!R) return IMA_AnonymousMember;
846      }
847      Classes.insert(R->getCanonicalDecl());
848    }
849    else
850      hasNonInstance = true;
851  }
852
853  // If we didn't find any instance members, it can't be an implicit
854  // member reference.
855  if (Classes.empty())
856    return IMA_Static;
857
858  // If the current context is not an instance method, it can't be
859  // an implicit member reference.
860  if (isStaticContext)
861    return (hasNonInstance ? IMA_Mixed_StaticContext : IMA_Error_StaticContext);
862
863  // If we can prove that the current context is unrelated to all the
864  // declaring classes, it can't be an implicit member reference (in
865  // which case it's an error if any of those members are selected).
866  if (IsProvablyNotDerivedFrom(SemaRef,
867                        cast<CXXMethodDecl>(SemaRef.CurContext)->getParent(),
868                               Classes))
869    return (hasNonInstance ? IMA_Mixed_Unrelated : IMA_Error_Unrelated);
870
871  return (hasNonInstance ? IMA_Mixed : IMA_Instance);
872}
873
874/// Diagnose a reference to a field with no object available.
875static void DiagnoseInstanceReference(Sema &SemaRef,
876                                      const CXXScopeSpec &SS,
877                                      const LookupResult &R) {
878  SourceLocation Loc = R.getNameLoc();
879  SourceRange Range(Loc);
880  if (SS.isSet()) Range.setBegin(SS.getRange().getBegin());
881
882  if (R.getAsSingle<FieldDecl>()) {
883    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(SemaRef.CurContext)) {
884      if (MD->isStatic()) {
885        // "invalid use of member 'x' in static member function"
886        SemaRef.Diag(Loc, diag::err_invalid_member_use_in_static_method)
887          << Range << R.getLookupName();
888        return;
889      }
890    }
891
892    SemaRef.Diag(Loc, diag::err_invalid_non_static_member_use)
893      << R.getLookupName() << Range;
894    return;
895  }
896
897  SemaRef.Diag(Loc, diag::err_member_call_without_object) << Range;
898}
899
900/// Diagnose an empty lookup.
901///
902/// \return false if new lookup candidates were found
903bool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS,
904                               LookupResult &R) {
905  DeclarationName Name = R.getLookupName();
906
907  unsigned diagnostic = diag::err_undeclared_var_use;
908  unsigned diagnostic_suggest = diag::err_undeclared_var_use_suggest;
909  if (Name.getNameKind() == DeclarationName::CXXOperatorName ||
910      Name.getNameKind() == DeclarationName::CXXLiteralOperatorName ||
911      Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {
912    diagnostic = diag::err_undeclared_use;
913    diagnostic_suggest = diag::err_undeclared_use_suggest;
914  }
915
916  // If the original lookup was an unqualified lookup, fake an
917  // unqualified lookup.  This is useful when (for example) the
918  // original lookup would not have found something because it was a
919  // dependent name.
920  for (DeclContext *DC = SS.isEmpty()? CurContext : 0;
921       DC; DC = DC->getParent()) {
922    if (isa<CXXRecordDecl>(DC)) {
923      LookupQualifiedName(R, DC);
924
925      if (!R.empty()) {
926        // Don't give errors about ambiguities in this lookup.
927        R.suppressDiagnostics();
928
929        CXXMethodDecl *CurMethod = dyn_cast<CXXMethodDecl>(CurContext);
930        bool isInstance = CurMethod &&
931                          CurMethod->isInstance() &&
932                          DC == CurMethod->getParent();
933
934        // Give a code modification hint to insert 'this->'.
935        // TODO: fixit for inserting 'Base<T>::' in the other cases.
936        // Actually quite difficult!
937        if (isInstance)
938          Diag(R.getNameLoc(), diagnostic) << Name
939            << FixItHint::CreateInsertion(R.getNameLoc(), "this->");
940        else
941          Diag(R.getNameLoc(), diagnostic) << Name;
942
943        // Do we really want to note all of these?
944        for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
945          Diag((*I)->getLocation(), diag::note_dependent_var_use);
946
947        // Tell the callee to try to recover.
948        return false;
949      }
950    }
951  }
952
953  // We didn't find anything, so try to correct for a typo.
954  DeclarationName Corrected;
955  if (S && (Corrected = CorrectTypo(R, S, &SS))) {
956    if (!R.empty()) {
957      if (isa<ValueDecl>(*R.begin()) || isa<FunctionTemplateDecl>(*R.begin())) {
958        if (SS.isEmpty())
959          Diag(R.getNameLoc(), diagnostic_suggest) << Name << R.getLookupName()
960            << FixItHint::CreateReplacement(R.getNameLoc(),
961                                            R.getLookupName().getAsString());
962        else
963          Diag(R.getNameLoc(), diag::err_no_member_suggest)
964            << Name << computeDeclContext(SS, false) << R.getLookupName()
965            << SS.getRange()
966            << FixItHint::CreateReplacement(R.getNameLoc(),
967                                            R.getLookupName().getAsString());
968        if (NamedDecl *ND = R.getAsSingle<NamedDecl>())
969          Diag(ND->getLocation(), diag::note_previous_decl)
970            << ND->getDeclName();
971
972        // Tell the callee to try to recover.
973        return false;
974      }
975
976      if (isa<TypeDecl>(*R.begin()) || isa<ObjCInterfaceDecl>(*R.begin())) {
977        // FIXME: If we ended up with a typo for a type name or
978        // Objective-C class name, we're in trouble because the parser
979        // is in the wrong place to recover. Suggest the typo
980        // correction, but don't make it a fix-it since we're not going
981        // to recover well anyway.
982        if (SS.isEmpty())
983          Diag(R.getNameLoc(), diagnostic_suggest) << Name << R.getLookupName();
984        else
985          Diag(R.getNameLoc(), diag::err_no_member_suggest)
986            << Name << computeDeclContext(SS, false) << R.getLookupName()
987            << SS.getRange();
988
989        // Don't try to recover; it won't work.
990        return true;
991      }
992    } else {
993      // FIXME: We found a keyword. Suggest it, but don't provide a fix-it
994      // because we aren't able to recover.
995      if (SS.isEmpty())
996        Diag(R.getNameLoc(), diagnostic_suggest) << Name << Corrected;
997      else
998        Diag(R.getNameLoc(), diag::err_no_member_suggest)
999        << Name << computeDeclContext(SS, false) << Corrected
1000        << SS.getRange();
1001      return true;
1002    }
1003    R.clear();
1004  }
1005
1006  // Emit a special diagnostic for failed member lookups.
1007  // FIXME: computing the declaration context might fail here (?)
1008  if (!SS.isEmpty()) {
1009    Diag(R.getNameLoc(), diag::err_no_member)
1010      << Name << computeDeclContext(SS, false)
1011      << SS.getRange();
1012    return true;
1013  }
1014
1015  // Give up, we can't recover.
1016  Diag(R.getNameLoc(), diagnostic) << Name;
1017  return true;
1018}
1019
1020Sema::OwningExprResult Sema::ActOnIdExpression(Scope *S,
1021                                               CXXScopeSpec &SS,
1022                                               UnqualifiedId &Id,
1023                                               bool HasTrailingLParen,
1024                                               bool isAddressOfOperand) {
1025  assert(!(isAddressOfOperand && HasTrailingLParen) &&
1026         "cannot be direct & operand and have a trailing lparen");
1027
1028  if (SS.isInvalid())
1029    return ExprError();
1030
1031  TemplateArgumentListInfo TemplateArgsBuffer;
1032
1033  // Decompose the UnqualifiedId into the following data.
1034  DeclarationName Name;
1035  SourceLocation NameLoc;
1036  const TemplateArgumentListInfo *TemplateArgs;
1037  DecomposeUnqualifiedId(*this, Id, TemplateArgsBuffer,
1038                         Name, NameLoc, TemplateArgs);
1039
1040  IdentifierInfo *II = Name.getAsIdentifierInfo();
1041
1042  // C++ [temp.dep.expr]p3:
1043  //   An id-expression is type-dependent if it contains:
1044  //     -- an identifier that was declared with a dependent type,
1045  //        (note: handled after lookup)
1046  //     -- a template-id that is dependent,
1047  //        (note: handled in BuildTemplateIdExpr)
1048  //     -- a conversion-function-id that specifies a dependent type,
1049  //     -- a nested-name-specifier that contains a class-name that
1050  //        names a dependent type.
1051  // Determine whether this is a member of an unknown specialization;
1052  // we need to handle these differently.
1053  if ((Name.getNameKind() == DeclarationName::CXXConversionFunctionName &&
1054       Name.getCXXNameType()->isDependentType()) ||
1055      (SS.isSet() && IsDependentIdExpression(*this, SS))) {
1056    return ActOnDependentIdExpression(SS, Name, NameLoc,
1057                                      isAddressOfOperand,
1058                                      TemplateArgs);
1059  }
1060
1061  // Perform the required lookup.
1062  LookupResult R(*this, Name, NameLoc, LookupOrdinaryName);
1063  if (TemplateArgs) {
1064    // Just re-use the lookup done by isTemplateName.
1065    DecomposeTemplateName(R, Id);
1066  } else {
1067    bool IvarLookupFollowUp = (!SS.isSet() && II && getCurMethodDecl());
1068    LookupParsedName(R, S, &SS, !IvarLookupFollowUp);
1069
1070    // If this reference is in an Objective-C method, then we need to do
1071    // some special Objective-C lookup, too.
1072    if (IvarLookupFollowUp) {
1073      OwningExprResult E(LookupInObjCMethod(R, S, II, true));
1074      if (E.isInvalid())
1075        return ExprError();
1076
1077      Expr *Ex = E.takeAs<Expr>();
1078      if (Ex) return Owned(Ex);
1079    }
1080  }
1081
1082  if (R.isAmbiguous())
1083    return ExprError();
1084
1085  // Determine whether this name might be a candidate for
1086  // argument-dependent lookup.
1087  bool ADL = UseArgumentDependentLookup(SS, R, HasTrailingLParen);
1088
1089  if (R.empty() && !ADL) {
1090    // Otherwise, this could be an implicitly declared function reference (legal
1091    // in C90, extension in C99, forbidden in C++).
1092    if (HasTrailingLParen && II && !getLangOptions().CPlusPlus) {
1093      NamedDecl *D = ImplicitlyDefineFunction(NameLoc, *II, S);
1094      if (D) R.addDecl(D);
1095    }
1096
1097    // If this name wasn't predeclared and if this is not a function
1098    // call, diagnose the problem.
1099    if (R.empty()) {
1100      if (DiagnoseEmptyLookup(S, SS, R))
1101        return ExprError();
1102
1103      assert(!R.empty() &&
1104             "DiagnoseEmptyLookup returned false but added no results");
1105
1106      // If we found an Objective-C instance variable, let
1107      // LookupInObjCMethod build the appropriate expression to
1108      // reference the ivar.
1109      if (ObjCIvarDecl *Ivar = R.getAsSingle<ObjCIvarDecl>()) {
1110        R.clear();
1111        OwningExprResult E(LookupInObjCMethod(R, S, Ivar->getIdentifier()));
1112        assert(E.isInvalid() || E.get());
1113        return move(E);
1114      }
1115    }
1116  }
1117
1118  // This is guaranteed from this point on.
1119  assert(!R.empty() || ADL);
1120
1121  if (VarDecl *Var = R.getAsSingle<VarDecl>()) {
1122    // Warn about constructs like:
1123    //   if (void *X = foo()) { ... } else { X }.
1124    // In the else block, the pointer is always false.
1125    if (Var->isDeclaredInCondition() && Var->getType()->isScalarType()) {
1126      Scope *CheckS = S;
1127      while (CheckS && CheckS->getControlParent()) {
1128        if ((CheckS->getFlags() & Scope::ElseScope) &&
1129            CheckS->getControlParent()->isDeclScope(DeclPtrTy::make(Var))) {
1130          ExprError(Diag(NameLoc, diag::warn_value_always_zero)
1131            << Var->getDeclName()
1132            << (Var->getType()->isPointerType() ? 2 :
1133                Var->getType()->isBooleanType() ? 1 : 0));
1134          break;
1135        }
1136
1137        // Move to the parent of this scope.
1138        CheckS = CheckS->getParent();
1139      }
1140    }
1141  } else if (FunctionDecl *Func = R.getAsSingle<FunctionDecl>()) {
1142    if (!getLangOptions().CPlusPlus && !Func->hasPrototype()) {
1143      // C99 DR 316 says that, if a function type comes from a
1144      // function definition (without a prototype), that type is only
1145      // used for checking compatibility. Therefore, when referencing
1146      // the function, we pretend that we don't have the full function
1147      // type.
1148      if (DiagnoseUseOfDecl(Func, NameLoc))
1149        return ExprError();
1150
1151      QualType T = Func->getType();
1152      QualType NoProtoType = T;
1153      if (const FunctionProtoType *Proto = T->getAs<FunctionProtoType>())
1154        NoProtoType = Context.getFunctionNoProtoType(Proto->getResultType());
1155      return BuildDeclRefExpr(Func, NoProtoType, NameLoc, &SS);
1156    }
1157  }
1158
1159  // Check whether this might be a C++ implicit instance member access.
1160  // C++ [expr.prim.general]p6:
1161  //   Within the definition of a non-static member function, an
1162  //   identifier that names a non-static member is transformed to a
1163  //   class member access expression.
1164  // But note that &SomeClass::foo is grammatically distinct, even
1165  // though we don't parse it that way.
1166  if (!R.empty() && (*R.begin())->isCXXClassMember()) {
1167    bool isAbstractMemberPointer = (isAddressOfOperand && !SS.isEmpty());
1168    if (!isAbstractMemberPointer)
1169      return BuildPossibleImplicitMemberExpr(SS, R, TemplateArgs);
1170  }
1171
1172  if (TemplateArgs)
1173    return BuildTemplateIdExpr(SS, R, ADL, *TemplateArgs);
1174
1175  return BuildDeclarationNameExpr(SS, R, ADL);
1176}
1177
1178/// Builds an expression which might be an implicit member expression.
1179Sema::OwningExprResult
1180Sema::BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS,
1181                                      LookupResult &R,
1182                                const TemplateArgumentListInfo *TemplateArgs) {
1183  switch (ClassifyImplicitMemberAccess(*this, R)) {
1184  case IMA_Instance:
1185    return BuildImplicitMemberExpr(SS, R, TemplateArgs, true);
1186
1187  case IMA_AnonymousMember:
1188    assert(R.isSingleResult());
1189    return BuildAnonymousStructUnionMemberReference(R.getNameLoc(),
1190                                                    R.getAsSingle<FieldDecl>());
1191
1192  case IMA_Mixed:
1193  case IMA_Mixed_Unrelated:
1194  case IMA_Unresolved:
1195    return BuildImplicitMemberExpr(SS, R, TemplateArgs, false);
1196
1197  case IMA_Static:
1198  case IMA_Mixed_StaticContext:
1199  case IMA_Unresolved_StaticContext:
1200    if (TemplateArgs)
1201      return BuildTemplateIdExpr(SS, R, false, *TemplateArgs);
1202    return BuildDeclarationNameExpr(SS, R, false);
1203
1204  case IMA_Error_StaticContext:
1205  case IMA_Error_Unrelated:
1206    DiagnoseInstanceReference(*this, SS, R);
1207    return ExprError();
1208  }
1209
1210  llvm_unreachable("unexpected instance member access kind");
1211  return ExprError();
1212}
1213
1214/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified
1215/// declaration name, generally during template instantiation.
1216/// There's a large number of things which don't need to be done along
1217/// this path.
1218Sema::OwningExprResult
1219Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS,
1220                                        DeclarationName Name,
1221                                        SourceLocation NameLoc) {
1222  DeclContext *DC;
1223  if (!(DC = computeDeclContext(SS, false)) ||
1224      DC->isDependentContext() ||
1225      RequireCompleteDeclContext(SS))
1226    return BuildDependentDeclRefExpr(SS, Name, NameLoc, 0);
1227
1228  LookupResult R(*this, Name, NameLoc, LookupOrdinaryName);
1229  LookupQualifiedName(R, DC);
1230
1231  if (R.isAmbiguous())
1232    return ExprError();
1233
1234  if (R.empty()) {
1235    Diag(NameLoc, diag::err_no_member) << Name << DC << SS.getRange();
1236    return ExprError();
1237  }
1238
1239  return BuildDeclarationNameExpr(SS, R, /*ADL*/ false);
1240}
1241
1242/// LookupInObjCMethod - The parser has read a name in, and Sema has
1243/// detected that we're currently inside an ObjC method.  Perform some
1244/// additional lookup.
1245///
1246/// Ideally, most of this would be done by lookup, but there's
1247/// actually quite a lot of extra work involved.
1248///
1249/// Returns a null sentinel to indicate trivial success.
1250Sema::OwningExprResult
1251Sema::LookupInObjCMethod(LookupResult &Lookup, Scope *S,
1252                         IdentifierInfo *II, bool AllowBuiltinCreation) {
1253  SourceLocation Loc = Lookup.getNameLoc();
1254  ObjCMethodDecl *CurMethod = getCurMethodDecl();
1255
1256  // There are two cases to handle here.  1) scoped lookup could have failed,
1257  // in which case we should look for an ivar.  2) scoped lookup could have
1258  // found a decl, but that decl is outside the current instance method (i.e.
1259  // a global variable).  In these two cases, we do a lookup for an ivar with
1260  // this name, if the lookup sucedes, we replace it our current decl.
1261
1262  // If we're in a class method, we don't normally want to look for
1263  // ivars.  But if we don't find anything else, and there's an
1264  // ivar, that's an error.
1265  bool IsClassMethod = CurMethod->isClassMethod();
1266
1267  bool LookForIvars;
1268  if (Lookup.empty())
1269    LookForIvars = true;
1270  else if (IsClassMethod)
1271    LookForIvars = false;
1272  else
1273    LookForIvars = (Lookup.isSingleResult() &&
1274                    Lookup.getFoundDecl()->isDefinedOutsideFunctionOrMethod());
1275  ObjCInterfaceDecl *IFace = 0;
1276  if (LookForIvars) {
1277    IFace = CurMethod->getClassInterface();
1278    ObjCInterfaceDecl *ClassDeclared;
1279    if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(II, ClassDeclared)) {
1280      // Diagnose using an ivar in a class method.
1281      if (IsClassMethod)
1282        return ExprError(Diag(Loc, diag::error_ivar_use_in_class_method)
1283                         << IV->getDeclName());
1284
1285      // If we're referencing an invalid decl, just return this as a silent
1286      // error node.  The error diagnostic was already emitted on the decl.
1287      if (IV->isInvalidDecl())
1288        return ExprError();
1289
1290      // Check if referencing a field with __attribute__((deprecated)).
1291      if (DiagnoseUseOfDecl(IV, Loc))
1292        return ExprError();
1293
1294      // Diagnose the use of an ivar outside of the declaring class.
1295      if (IV->getAccessControl() == ObjCIvarDecl::Private &&
1296          ClassDeclared != IFace)
1297        Diag(Loc, diag::error_private_ivar_access) << IV->getDeclName();
1298
1299      // FIXME: This should use a new expr for a direct reference, don't
1300      // turn this into Self->ivar, just return a BareIVarExpr or something.
1301      IdentifierInfo &II = Context.Idents.get("self");
1302      UnqualifiedId SelfName;
1303      SelfName.setIdentifier(&II, SourceLocation());
1304      CXXScopeSpec SelfScopeSpec;
1305      OwningExprResult SelfExpr = ActOnIdExpression(S, SelfScopeSpec,
1306                                                    SelfName, false, false);
1307      MarkDeclarationReferenced(Loc, IV);
1308      return Owned(new (Context)
1309                   ObjCIvarRefExpr(IV, IV->getType(), Loc,
1310                                   SelfExpr.takeAs<Expr>(), true, true));
1311    }
1312  } else if (CurMethod->isInstanceMethod()) {
1313    // We should warn if a local variable hides an ivar.
1314    ObjCInterfaceDecl *IFace = CurMethod->getClassInterface();
1315    ObjCInterfaceDecl *ClassDeclared;
1316    if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(II, ClassDeclared)) {
1317      if (IV->getAccessControl() != ObjCIvarDecl::Private ||
1318          IFace == ClassDeclared)
1319        Diag(Loc, diag::warn_ivar_use_hidden) << IV->getDeclName();
1320    }
1321  }
1322
1323  if (Lookup.empty() && II && AllowBuiltinCreation) {
1324    // FIXME. Consolidate this with similar code in LookupName.
1325    if (unsigned BuiltinID = II->getBuiltinID()) {
1326      if (!(getLangOptions().CPlusPlus &&
1327            Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID))) {
1328        NamedDecl *D = LazilyCreateBuiltin((IdentifierInfo *)II, BuiltinID,
1329                                           S, Lookup.isForRedeclaration(),
1330                                           Lookup.getNameLoc());
1331        if (D) Lookup.addDecl(D);
1332      }
1333    }
1334  }
1335  // Sentinel value saying that we didn't do anything special.
1336  return Owned((Expr*) 0);
1337}
1338
1339/// \brief Cast a base object to a member's actual type.
1340///
1341/// Logically this happens in three phases:
1342///
1343/// * First we cast from the base type to the naming class.
1344///   The naming class is the class into which we were looking
1345///   when we found the member;  it's the qualifier type if a
1346///   qualifier was provided, and otherwise it's the base type.
1347///
1348/// * Next we cast from the naming class to the declaring class.
1349///   If the member we found was brought into a class's scope by
1350///   a using declaration, this is that class;  otherwise it's
1351///   the class declaring the member.
1352///
1353/// * Finally we cast from the declaring class to the "true"
1354///   declaring class of the member.  This conversion does not
1355///   obey access control.
1356bool
1357Sema::PerformObjectMemberConversion(Expr *&From,
1358                                    NestedNameSpecifier *Qualifier,
1359                                    NamedDecl *FoundDecl,
1360                                    NamedDecl *Member) {
1361  CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Member->getDeclContext());
1362  if (!RD)
1363    return false;
1364
1365  QualType DestRecordType;
1366  QualType DestType;
1367  QualType FromRecordType;
1368  QualType FromType = From->getType();
1369  bool PointerConversions = false;
1370  if (isa<FieldDecl>(Member)) {
1371    DestRecordType = Context.getCanonicalType(Context.getTypeDeclType(RD));
1372
1373    if (FromType->getAs<PointerType>()) {
1374      DestType = Context.getPointerType(DestRecordType);
1375      FromRecordType = FromType->getPointeeType();
1376      PointerConversions = true;
1377    } else {
1378      DestType = DestRecordType;
1379      FromRecordType = FromType;
1380    }
1381  } else if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Member)) {
1382    if (Method->isStatic())
1383      return false;
1384
1385    DestType = Method->getThisType(Context);
1386    DestRecordType = DestType->getPointeeType();
1387
1388    if (FromType->getAs<PointerType>()) {
1389      FromRecordType = FromType->getPointeeType();
1390      PointerConversions = true;
1391    } else {
1392      FromRecordType = FromType;
1393      DestType = DestRecordType;
1394    }
1395  } else {
1396    // No conversion necessary.
1397    return false;
1398  }
1399
1400  if (DestType->isDependentType() || FromType->isDependentType())
1401    return false;
1402
1403  // If the unqualified types are the same, no conversion is necessary.
1404  if (Context.hasSameUnqualifiedType(FromRecordType, DestRecordType))
1405    return false;
1406
1407  SourceRange FromRange = From->getSourceRange();
1408  SourceLocation FromLoc = FromRange.getBegin();
1409
1410  // C++ [class.member.lookup]p8:
1411  //   [...] Ambiguities can often be resolved by qualifying a name with its
1412  //   class name.
1413  //
1414  // If the member was a qualified name and the qualified referred to a
1415  // specific base subobject type, we'll cast to that intermediate type
1416  // first and then to the object in which the member is declared. That allows
1417  // one to resolve ambiguities in, e.g., a diamond-shaped hierarchy such as:
1418  //
1419  //   class Base { public: int x; };
1420  //   class Derived1 : public Base { };
1421  //   class Derived2 : public Base { };
1422  //   class VeryDerived : public Derived1, public Derived2 { void f(); };
1423  //
1424  //   void VeryDerived::f() {
1425  //     x = 17; // error: ambiguous base subobjects
1426  //     Derived1::x = 17; // okay, pick the Base subobject of Derived1
1427  //   }
1428  if (Qualifier) {
1429    QualType QType = QualType(Qualifier->getAsType(), 0);
1430    assert(!QType.isNull() && "lookup done with dependent qualifier?");
1431    assert(QType->isRecordType() && "lookup done with non-record type");
1432
1433    QualType QRecordType = QualType(QType->getAs<RecordType>(), 0);
1434
1435    // In C++98, the qualifier type doesn't actually have to be a base
1436    // type of the object type, in which case we just ignore it.
1437    // Otherwise build the appropriate casts.
1438    if (IsDerivedFrom(FromRecordType, QRecordType)) {
1439      if (CheckDerivedToBaseConversion(FromRecordType, QRecordType,
1440                                       FromLoc, FromRange))
1441        return true;
1442
1443      if (PointerConversions)
1444        QType = Context.getPointerType(QType);
1445      ImpCastExprToType(From, QType, CastExpr::CK_UncheckedDerivedToBase,
1446                        /*isLvalue=*/!PointerConversions);
1447
1448      FromType = QType;
1449      FromRecordType = QRecordType;
1450
1451      // If the qualifier type was the same as the destination type,
1452      // we're done.
1453      if (Context.hasSameUnqualifiedType(FromRecordType, DestRecordType))
1454        return false;
1455    }
1456  }
1457
1458  bool IgnoreAccess = false;
1459
1460  // If we actually found the member through a using declaration, cast
1461  // down to the using declaration's type.
1462  //
1463  // Pointer equality is fine here because only one declaration of a
1464  // class ever has member declarations.
1465  if (FoundDecl->getDeclContext() != Member->getDeclContext()) {
1466    assert(isa<UsingShadowDecl>(FoundDecl));
1467    QualType URecordType = Context.getTypeDeclType(
1468                           cast<CXXRecordDecl>(FoundDecl->getDeclContext()));
1469
1470    // We only need to do this if the naming-class to declaring-class
1471    // conversion is non-trivial.
1472    if (!Context.hasSameUnqualifiedType(FromRecordType, URecordType)) {
1473      assert(IsDerivedFrom(FromRecordType, URecordType));
1474      if (CheckDerivedToBaseConversion(FromRecordType, URecordType,
1475                                       FromLoc, FromRange))
1476        return true;
1477
1478      QualType UType = URecordType;
1479      if (PointerConversions)
1480        UType = Context.getPointerType(UType);
1481      ImpCastExprToType(From, UType, CastExpr::CK_UncheckedDerivedToBase,
1482                        /*isLvalue*/ !PointerConversions);
1483      FromType = UType;
1484      FromRecordType = URecordType;
1485    }
1486
1487    // We don't do access control for the conversion from the
1488    // declaring class to the true declaring class.
1489    IgnoreAccess = true;
1490  }
1491
1492  if (CheckDerivedToBaseConversion(FromRecordType,
1493                                   DestRecordType,
1494                                   FromLoc,
1495                                   FromRange, 0,
1496                                   IgnoreAccess))
1497    return true;
1498
1499  ImpCastExprToType(From, DestType, CastExpr::CK_UncheckedDerivedToBase,
1500                    /*isLvalue=*/!PointerConversions);
1501  return false;
1502}
1503
1504/// \brief Build a MemberExpr AST node.
1505static MemberExpr *BuildMemberExpr(ASTContext &C, Expr *Base, bool isArrow,
1506                                   const CXXScopeSpec &SS, ValueDecl *Member,
1507                                   DeclAccessPair FoundDecl,
1508                                   SourceLocation Loc, QualType Ty,
1509                          const TemplateArgumentListInfo *TemplateArgs = 0) {
1510  NestedNameSpecifier *Qualifier = 0;
1511  SourceRange QualifierRange;
1512  if (SS.isSet()) {
1513    Qualifier = (NestedNameSpecifier *) SS.getScopeRep();
1514    QualifierRange = SS.getRange();
1515  }
1516
1517  return MemberExpr::Create(C, Base, isArrow, Qualifier, QualifierRange,
1518                            Member, FoundDecl, Loc, TemplateArgs, Ty);
1519}
1520
1521/// Builds an implicit member access expression.  The current context
1522/// is known to be an instance method, and the given unqualified lookup
1523/// set is known to contain only instance members, at least one of which
1524/// is from an appropriate type.
1525Sema::OwningExprResult
1526Sema::BuildImplicitMemberExpr(const CXXScopeSpec &SS,
1527                              LookupResult &R,
1528                              const TemplateArgumentListInfo *TemplateArgs,
1529                              bool IsKnownInstance) {
1530  assert(!R.empty() && !R.isAmbiguous());
1531
1532  SourceLocation Loc = R.getNameLoc();
1533
1534  // We may have found a field within an anonymous union or struct
1535  // (C++ [class.union]).
1536  // FIXME: This needs to happen post-isImplicitMemberReference?
1537  // FIXME: template-ids inside anonymous structs?
1538  if (FieldDecl *FD = R.getAsSingle<FieldDecl>())
1539    if (cast<RecordDecl>(FD->getDeclContext())->isAnonymousStructOrUnion())
1540      return BuildAnonymousStructUnionMemberReference(Loc, FD);
1541
1542  // If this is known to be an instance access, go ahead and build a
1543  // 'this' expression now.
1544  QualType ThisType = cast<CXXMethodDecl>(CurContext)->getThisType(Context);
1545  Expr *This = 0; // null signifies implicit access
1546  if (IsKnownInstance) {
1547    SourceLocation Loc = R.getNameLoc();
1548    if (SS.getRange().isValid())
1549      Loc = SS.getRange().getBegin();
1550    This = new (Context) CXXThisExpr(Loc, ThisType, /*isImplicit=*/true);
1551  }
1552
1553  return BuildMemberReferenceExpr(ExprArg(*this, This), ThisType,
1554                                  /*OpLoc*/ SourceLocation(),
1555                                  /*IsArrow*/ true,
1556                                  SS,
1557                                  /*FirstQualifierInScope*/ 0,
1558                                  R, TemplateArgs);
1559}
1560
1561bool Sema::UseArgumentDependentLookup(const CXXScopeSpec &SS,
1562                                      const LookupResult &R,
1563                                      bool HasTrailingLParen) {
1564  // Only when used directly as the postfix-expression of a call.
1565  if (!HasTrailingLParen)
1566    return false;
1567
1568  // Never if a scope specifier was provided.
1569  if (SS.isSet())
1570    return false;
1571
1572  // Only in C++ or ObjC++.
1573  if (!getLangOptions().CPlusPlus)
1574    return false;
1575
1576  // Turn off ADL when we find certain kinds of declarations during
1577  // normal lookup:
1578  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
1579    NamedDecl *D = *I;
1580
1581    // C++0x [basic.lookup.argdep]p3:
1582    //     -- a declaration of a class member
1583    // Since using decls preserve this property, we check this on the
1584    // original decl.
1585    if (D->isCXXClassMember())
1586      return false;
1587
1588    // C++0x [basic.lookup.argdep]p3:
1589    //     -- a block-scope function declaration that is not a
1590    //        using-declaration
1591    // NOTE: we also trigger this for function templates (in fact, we
1592    // don't check the decl type at all, since all other decl types
1593    // turn off ADL anyway).
1594    if (isa<UsingShadowDecl>(D))
1595      D = cast<UsingShadowDecl>(D)->getTargetDecl();
1596    else if (D->getDeclContext()->isFunctionOrMethod())
1597      return false;
1598
1599    // C++0x [basic.lookup.argdep]p3:
1600    //     -- a declaration that is neither a function or a function
1601    //        template
1602    // And also for builtin functions.
1603    if (isa<FunctionDecl>(D)) {
1604      FunctionDecl *FDecl = cast<FunctionDecl>(D);
1605
1606      // But also builtin functions.
1607      if (FDecl->getBuiltinID() && FDecl->isImplicit())
1608        return false;
1609    } else if (!isa<FunctionTemplateDecl>(D))
1610      return false;
1611  }
1612
1613  return true;
1614}
1615
1616
1617/// Diagnoses obvious problems with the use of the given declaration
1618/// as an expression.  This is only actually called for lookups that
1619/// were not overloaded, and it doesn't promise that the declaration
1620/// will in fact be used.
1621static bool CheckDeclInExpr(Sema &S, SourceLocation Loc, NamedDecl *D) {
1622  if (isa<TypedefDecl>(D)) {
1623    S.Diag(Loc, diag::err_unexpected_typedef) << D->getDeclName();
1624    return true;
1625  }
1626
1627  if (isa<ObjCInterfaceDecl>(D)) {
1628    S.Diag(Loc, diag::err_unexpected_interface) << D->getDeclName();
1629    return true;
1630  }
1631
1632  if (isa<NamespaceDecl>(D)) {
1633    S.Diag(Loc, diag::err_unexpected_namespace) << D->getDeclName();
1634    return true;
1635  }
1636
1637  return false;
1638}
1639
1640Sema::OwningExprResult
1641Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS,
1642                               LookupResult &R,
1643                               bool NeedsADL) {
1644  // If this is a single, fully-resolved result and we don't need ADL,
1645  // just build an ordinary singleton decl ref.
1646  if (!NeedsADL && R.isSingleResult() && !R.getAsSingle<FunctionTemplateDecl>())
1647    return BuildDeclarationNameExpr(SS, R.getNameLoc(), R.getFoundDecl());
1648
1649  // We only need to check the declaration if there's exactly one
1650  // result, because in the overloaded case the results can only be
1651  // functions and function templates.
1652  if (R.isSingleResult() &&
1653      CheckDeclInExpr(*this, R.getNameLoc(), R.getFoundDecl()))
1654    return ExprError();
1655
1656  // Otherwise, just build an unresolved lookup expression.  Suppress
1657  // any lookup-related diagnostics; we'll hash these out later, when
1658  // we've picked a target.
1659  R.suppressDiagnostics();
1660
1661  bool Dependent
1662    = UnresolvedLookupExpr::ComputeDependence(R.begin(), R.end(), 0);
1663  UnresolvedLookupExpr *ULE
1664    = UnresolvedLookupExpr::Create(Context, Dependent, R.getNamingClass(),
1665                                   (NestedNameSpecifier*) SS.getScopeRep(),
1666                                   SS.getRange(),
1667                                   R.getLookupName(), R.getNameLoc(),
1668                                   NeedsADL, R.isOverloadedResult());
1669  ULE->addDecls(R.begin(), R.end());
1670
1671  return Owned(ULE);
1672}
1673
1674
1675/// \brief Complete semantic analysis for a reference to the given declaration.
1676Sema::OwningExprResult
1677Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS,
1678                               SourceLocation Loc, NamedDecl *D) {
1679  assert(D && "Cannot refer to a NULL declaration");
1680  assert(!isa<FunctionTemplateDecl>(D) &&
1681         "Cannot refer unambiguously to a function template");
1682
1683  if (CheckDeclInExpr(*this, Loc, D))
1684    return ExprError();
1685
1686  if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D)) {
1687    // Specifically diagnose references to class templates that are missing
1688    // a template argument list.
1689    Diag(Loc, diag::err_template_decl_ref)
1690      << Template << SS.getRange();
1691    Diag(Template->getLocation(), diag::note_template_decl_here);
1692    return ExprError();
1693  }
1694
1695  // Make sure that we're referring to a value.
1696  ValueDecl *VD = dyn_cast<ValueDecl>(D);
1697  if (!VD) {
1698    Diag(Loc, diag::err_ref_non_value)
1699      << D << SS.getRange();
1700    Diag(D->getLocation(), diag::note_declared_at);
1701    return ExprError();
1702  }
1703
1704  // Check whether this declaration can be used. Note that we suppress
1705  // this check when we're going to perform argument-dependent lookup
1706  // on this function name, because this might not be the function
1707  // that overload resolution actually selects.
1708  if (DiagnoseUseOfDecl(VD, Loc))
1709    return ExprError();
1710
1711  // Only create DeclRefExpr's for valid Decl's.
1712  if (VD->isInvalidDecl())
1713    return ExprError();
1714
1715  // If the identifier reference is inside a block, and it refers to a value
1716  // that is outside the block, create a BlockDeclRefExpr instead of a
1717  // DeclRefExpr.  This ensures the value is treated as a copy-in snapshot when
1718  // the block is formed.
1719  //
1720  // We do not do this for things like enum constants, global variables, etc,
1721  // as they do not get snapshotted.
1722  //
1723  if (getCurBlock() &&
1724      ShouldSnapshotBlockValueReference(*this, getCurBlock(), VD)) {
1725    if (VD->getType().getTypePtr()->isVariablyModifiedType()) {
1726      Diag(Loc, diag::err_ref_vm_type);
1727      Diag(D->getLocation(), diag::note_declared_at);
1728      return ExprError();
1729    }
1730
1731    if (VD->getType()->isArrayType()) {
1732      Diag(Loc, diag::err_ref_array_type);
1733      Diag(D->getLocation(), diag::note_declared_at);
1734      return ExprError();
1735    }
1736
1737    MarkDeclarationReferenced(Loc, VD);
1738    QualType ExprTy = VD->getType().getNonReferenceType();
1739    // The BlocksAttr indicates the variable is bound by-reference.
1740    if (VD->getAttr<BlocksAttr>())
1741      return Owned(new (Context) BlockDeclRefExpr(VD, ExprTy, Loc, true));
1742    // This is to record that a 'const' was actually synthesize and added.
1743    bool constAdded = !ExprTy.isConstQualified();
1744    // Variable will be bound by-copy, make it const within the closure.
1745
1746    ExprTy.addConst();
1747    return Owned(new (Context) BlockDeclRefExpr(VD, ExprTy, Loc, false,
1748                                                constAdded));
1749  }
1750  // If this reference is not in a block or if the referenced variable is
1751  // within the block, create a normal DeclRefExpr.
1752
1753  return BuildDeclRefExpr(VD, VD->getType().getNonReferenceType(), Loc, &SS);
1754}
1755
1756Sema::OwningExprResult Sema::ActOnPredefinedExpr(SourceLocation Loc,
1757                                                 tok::TokenKind Kind) {
1758  PredefinedExpr::IdentType IT;
1759
1760  switch (Kind) {
1761  default: assert(0 && "Unknown simple primary expr!");
1762  case tok::kw___func__: IT = PredefinedExpr::Func; break; // [C99 6.4.2.2]
1763  case tok::kw___FUNCTION__: IT = PredefinedExpr::Function; break;
1764  case tok::kw___PRETTY_FUNCTION__: IT = PredefinedExpr::PrettyFunction; break;
1765  }
1766
1767  // Pre-defined identifiers are of type char[x], where x is the length of the
1768  // string.
1769
1770  Decl *currentDecl = getCurFunctionOrMethodDecl();
1771  if (!currentDecl) {
1772    Diag(Loc, diag::ext_predef_outside_function);
1773    currentDecl = Context.getTranslationUnitDecl();
1774  }
1775
1776  QualType ResTy;
1777  if (cast<DeclContext>(currentDecl)->isDependentContext()) {
1778    ResTy = Context.DependentTy;
1779  } else {
1780    unsigned Length = PredefinedExpr::ComputeName(IT, currentDecl).length();
1781
1782    llvm::APInt LengthI(32, Length + 1);
1783    ResTy = Context.CharTy.withConst();
1784    ResTy = Context.getConstantArrayType(ResTy, LengthI, ArrayType::Normal, 0);
1785  }
1786  return Owned(new (Context) PredefinedExpr(Loc, ResTy, IT));
1787}
1788
1789Sema::OwningExprResult Sema::ActOnCharacterConstant(const Token &Tok) {
1790  llvm::SmallString<16> CharBuffer;
1791  bool Invalid = false;
1792  llvm::StringRef ThisTok = PP.getSpelling(Tok, CharBuffer, &Invalid);
1793  if (Invalid)
1794    return ExprError();
1795
1796  CharLiteralParser Literal(ThisTok.begin(), ThisTok.end(), Tok.getLocation(),
1797                            PP);
1798  if (Literal.hadError())
1799    return ExprError();
1800
1801  QualType Ty;
1802  if (!getLangOptions().CPlusPlus)
1803    Ty = Context.IntTy;   // 'x' and L'x' -> int in C.
1804  else if (Literal.isWide())
1805    Ty = Context.WCharTy; // L'x' -> wchar_t in C++.
1806  else if (Literal.isMultiChar())
1807    Ty = Context.IntTy;   // 'wxyz' -> int in C++.
1808  else
1809    Ty = Context.CharTy;  // 'x' -> char in C++
1810
1811  return Owned(new (Context) CharacterLiteral(Literal.getValue(),
1812                                              Literal.isWide(),
1813                                              Ty, Tok.getLocation()));
1814}
1815
1816Action::OwningExprResult Sema::ActOnNumericConstant(const Token &Tok) {
1817  // Fast path for a single digit (which is quite common).  A single digit
1818  // cannot have a trigraph, escaped newline, radix prefix, or type suffix.
1819  if (Tok.getLength() == 1) {
1820    const char Val = PP.getSpellingOfSingleCharacterNumericConstant(Tok);
1821    unsigned IntSize = Context.Target.getIntWidth();
1822    return Owned(new (Context) IntegerLiteral(llvm::APInt(IntSize, Val-'0'),
1823                    Context.IntTy, Tok.getLocation()));
1824  }
1825
1826  llvm::SmallString<512> IntegerBuffer;
1827  // Add padding so that NumericLiteralParser can overread by one character.
1828  IntegerBuffer.resize(Tok.getLength()+1);
1829  const char *ThisTokBegin = &IntegerBuffer[0];
1830
1831  // Get the spelling of the token, which eliminates trigraphs, etc.
1832  bool Invalid = false;
1833  unsigned ActualLength = PP.getSpelling(Tok, ThisTokBegin, &Invalid);
1834  if (Invalid)
1835    return ExprError();
1836
1837  NumericLiteralParser Literal(ThisTokBegin, ThisTokBegin+ActualLength,
1838                               Tok.getLocation(), PP);
1839  if (Literal.hadError)
1840    return ExprError();
1841
1842  Expr *Res;
1843
1844  if (Literal.isFloatingLiteral()) {
1845    QualType Ty;
1846    if (Literal.isFloat)
1847      Ty = Context.FloatTy;
1848    else if (!Literal.isLong)
1849      Ty = Context.DoubleTy;
1850    else
1851      Ty = Context.LongDoubleTy;
1852
1853    const llvm::fltSemantics &Format = Context.getFloatTypeSemantics(Ty);
1854
1855    using llvm::APFloat;
1856    APFloat Val(Format);
1857
1858    APFloat::opStatus result = Literal.GetFloatValue(Val);
1859
1860    // Overflow is always an error, but underflow is only an error if
1861    // we underflowed to zero (APFloat reports denormals as underflow).
1862    if ((result & APFloat::opOverflow) ||
1863        ((result & APFloat::opUnderflow) && Val.isZero())) {
1864      unsigned diagnostic;
1865      llvm::SmallString<20> buffer;
1866      if (result & APFloat::opOverflow) {
1867        diagnostic = diag::warn_float_overflow;
1868        APFloat::getLargest(Format).toString(buffer);
1869      } else {
1870        diagnostic = diag::warn_float_underflow;
1871        APFloat::getSmallest(Format).toString(buffer);
1872      }
1873
1874      Diag(Tok.getLocation(), diagnostic)
1875        << Ty
1876        << llvm::StringRef(buffer.data(), buffer.size());
1877    }
1878
1879    bool isExact = (result == APFloat::opOK);
1880    Res = new (Context) FloatingLiteral(Val, isExact, Ty, Tok.getLocation());
1881
1882  } else if (!Literal.isIntegerLiteral()) {
1883    return ExprError();
1884  } else {
1885    QualType Ty;
1886
1887    // long long is a C99 feature.
1888    if (!getLangOptions().C99 && !getLangOptions().CPlusPlus0x &&
1889        Literal.isLongLong)
1890      Diag(Tok.getLocation(), diag::ext_longlong);
1891
1892    // Get the value in the widest-possible width.
1893    llvm::APInt ResultVal(Context.Target.getIntMaxTWidth(), 0);
1894
1895    if (Literal.GetIntegerValue(ResultVal)) {
1896      // If this value didn't fit into uintmax_t, warn and force to ull.
1897      Diag(Tok.getLocation(), diag::warn_integer_too_large);
1898      Ty = Context.UnsignedLongLongTy;
1899      assert(Context.getTypeSize(Ty) == ResultVal.getBitWidth() &&
1900             "long long is not intmax_t?");
1901    } else {
1902      // If this value fits into a ULL, try to figure out what else it fits into
1903      // according to the rules of C99 6.4.4.1p5.
1904
1905      // Octal, Hexadecimal, and integers with a U suffix are allowed to
1906      // be an unsigned int.
1907      bool AllowUnsigned = Literal.isUnsigned || Literal.getRadix() != 10;
1908
1909      // Check from smallest to largest, picking the smallest type we can.
1910      unsigned Width = 0;
1911      if (!Literal.isLong && !Literal.isLongLong) {
1912        // Are int/unsigned possibilities?
1913        unsigned IntSize = Context.Target.getIntWidth();
1914
1915        // Does it fit in a unsigned int?
1916        if (ResultVal.isIntN(IntSize)) {
1917          // Does it fit in a signed int?
1918          if (!Literal.isUnsigned && ResultVal[IntSize-1] == 0)
1919            Ty = Context.IntTy;
1920          else if (AllowUnsigned)
1921            Ty = Context.UnsignedIntTy;
1922          Width = IntSize;
1923        }
1924      }
1925
1926      // Are long/unsigned long possibilities?
1927      if (Ty.isNull() && !Literal.isLongLong) {
1928        unsigned LongSize = Context.Target.getLongWidth();
1929
1930        // Does it fit in a unsigned long?
1931        if (ResultVal.isIntN(LongSize)) {
1932          // Does it fit in a signed long?
1933          if (!Literal.isUnsigned && ResultVal[LongSize-1] == 0)
1934            Ty = Context.LongTy;
1935          else if (AllowUnsigned)
1936            Ty = Context.UnsignedLongTy;
1937          Width = LongSize;
1938        }
1939      }
1940
1941      // Finally, check long long if needed.
1942      if (Ty.isNull()) {
1943        unsigned LongLongSize = Context.Target.getLongLongWidth();
1944
1945        // Does it fit in a unsigned long long?
1946        if (ResultVal.isIntN(LongLongSize)) {
1947          // Does it fit in a signed long long?
1948          if (!Literal.isUnsigned && ResultVal[LongLongSize-1] == 0)
1949            Ty = Context.LongLongTy;
1950          else if (AllowUnsigned)
1951            Ty = Context.UnsignedLongLongTy;
1952          Width = LongLongSize;
1953        }
1954      }
1955
1956      // If we still couldn't decide a type, we probably have something that
1957      // does not fit in a signed long long, but has no U suffix.
1958      if (Ty.isNull()) {
1959        Diag(Tok.getLocation(), diag::warn_integer_too_large_for_signed);
1960        Ty = Context.UnsignedLongLongTy;
1961        Width = Context.Target.getLongLongWidth();
1962      }
1963
1964      if (ResultVal.getBitWidth() != Width)
1965        ResultVal.trunc(Width);
1966    }
1967    Res = new (Context) IntegerLiteral(ResultVal, Ty, Tok.getLocation());
1968  }
1969
1970  // If this is an imaginary literal, create the ImaginaryLiteral wrapper.
1971  if (Literal.isImaginary)
1972    Res = new (Context) ImaginaryLiteral(Res,
1973                                        Context.getComplexType(Res->getType()));
1974
1975  return Owned(Res);
1976}
1977
1978Action::OwningExprResult Sema::ActOnParenExpr(SourceLocation L,
1979                                              SourceLocation R, ExprArg Val) {
1980  Expr *E = Val.takeAs<Expr>();
1981  assert((E != 0) && "ActOnParenExpr() missing expr");
1982  return Owned(new (Context) ParenExpr(L, R, E));
1983}
1984
1985/// The UsualUnaryConversions() function is *not* called by this routine.
1986/// See C99 6.3.2.1p[2-4] for more details.
1987bool Sema::CheckSizeOfAlignOfOperand(QualType exprType,
1988                                     SourceLocation OpLoc,
1989                                     const SourceRange &ExprRange,
1990                                     bool isSizeof) {
1991  if (exprType->isDependentType())
1992    return false;
1993
1994  // C++ [expr.sizeof]p2: "When applied to a reference or a reference type,
1995  //   the result is the size of the referenced type."
1996  // C++ [expr.alignof]p3: "When alignof is applied to a reference type, the
1997  //   result shall be the alignment of the referenced type."
1998  if (const ReferenceType *Ref = exprType->getAs<ReferenceType>())
1999    exprType = Ref->getPointeeType();
2000
2001  // C99 6.5.3.4p1:
2002  if (exprType->isFunctionType()) {
2003    // alignof(function) is allowed as an extension.
2004    if (isSizeof)
2005      Diag(OpLoc, diag::ext_sizeof_function_type) << ExprRange;
2006    return false;
2007  }
2008
2009  // Allow sizeof(void)/alignof(void) as an extension.
2010  if (exprType->isVoidType()) {
2011    Diag(OpLoc, diag::ext_sizeof_void_type)
2012      << (isSizeof ? "sizeof" : "__alignof") << ExprRange;
2013    return false;
2014  }
2015
2016  if (RequireCompleteType(OpLoc, exprType,
2017                          PDiag(diag::err_sizeof_alignof_incomplete_type)
2018                          << int(!isSizeof) << ExprRange))
2019    return true;
2020
2021  // Reject sizeof(interface) and sizeof(interface<proto>) in 64-bit mode.
2022  if (LangOpts.ObjCNonFragileABI && exprType->isObjCInterfaceType()) {
2023    Diag(OpLoc, diag::err_sizeof_nonfragile_interface)
2024      << exprType << isSizeof << ExprRange;
2025    return true;
2026  }
2027
2028  return false;
2029}
2030
2031bool Sema::CheckAlignOfExpr(Expr *E, SourceLocation OpLoc,
2032                            const SourceRange &ExprRange) {
2033  E = E->IgnoreParens();
2034
2035  // alignof decl is always ok.
2036  if (isa<DeclRefExpr>(E))
2037    return false;
2038
2039  // Cannot know anything else if the expression is dependent.
2040  if (E->isTypeDependent())
2041    return false;
2042
2043  if (E->getBitField()) {
2044    Diag(OpLoc, diag::err_sizeof_alignof_bitfield) << 1 << ExprRange;
2045    return true;
2046  }
2047
2048  // Alignment of a field access is always okay, so long as it isn't a
2049  // bit-field.
2050  if (MemberExpr *ME = dyn_cast<MemberExpr>(E))
2051    if (isa<FieldDecl>(ME->getMemberDecl()))
2052      return false;
2053
2054  return CheckSizeOfAlignOfOperand(E->getType(), OpLoc, ExprRange, false);
2055}
2056
2057/// \brief Build a sizeof or alignof expression given a type operand.
2058Action::OwningExprResult
2059Sema::CreateSizeOfAlignOfExpr(TypeSourceInfo *TInfo,
2060                              SourceLocation OpLoc,
2061                              bool isSizeOf, SourceRange R) {
2062  if (!TInfo)
2063    return ExprError();
2064
2065  QualType T = TInfo->getType();
2066
2067  if (!T->isDependentType() &&
2068      CheckSizeOfAlignOfOperand(T, OpLoc, R, isSizeOf))
2069    return ExprError();
2070
2071  // C99 6.5.3.4p4: the type (an unsigned integer type) is size_t.
2072  return Owned(new (Context) SizeOfAlignOfExpr(isSizeOf, TInfo,
2073                                               Context.getSizeType(), OpLoc,
2074                                               R.getEnd()));
2075}
2076
2077/// \brief Build a sizeof or alignof expression given an expression
2078/// operand.
2079Action::OwningExprResult
2080Sema::CreateSizeOfAlignOfExpr(Expr *E, SourceLocation OpLoc,
2081                              bool isSizeOf, SourceRange R) {
2082  // Verify that the operand is valid.
2083  bool isInvalid = false;
2084  if (E->isTypeDependent()) {
2085    // Delay type-checking for type-dependent expressions.
2086  } else if (!isSizeOf) {
2087    isInvalid = CheckAlignOfExpr(E, OpLoc, R);
2088  } else if (E->getBitField()) {  // C99 6.5.3.4p1.
2089    Diag(OpLoc, diag::err_sizeof_alignof_bitfield) << 0;
2090    isInvalid = true;
2091  } else {
2092    isInvalid = CheckSizeOfAlignOfOperand(E->getType(), OpLoc, R, true);
2093  }
2094
2095  if (isInvalid)
2096    return ExprError();
2097
2098  // C99 6.5.3.4p4: the type (an unsigned integer type) is size_t.
2099  return Owned(new (Context) SizeOfAlignOfExpr(isSizeOf, E,
2100                                               Context.getSizeType(), OpLoc,
2101                                               R.getEnd()));
2102}
2103
2104/// ActOnSizeOfAlignOfExpr - Handle @c sizeof(type) and @c sizeof @c expr and
2105/// the same for @c alignof and @c __alignof
2106/// Note that the ArgRange is invalid if isType is false.
2107Action::OwningExprResult
2108Sema::ActOnSizeOfAlignOfExpr(SourceLocation OpLoc, bool isSizeof, bool isType,
2109                             void *TyOrEx, const SourceRange &ArgRange) {
2110  // If error parsing type, ignore.
2111  if (TyOrEx == 0) return ExprError();
2112
2113  if (isType) {
2114    TypeSourceInfo *TInfo;
2115    (void) GetTypeFromParser(TyOrEx, &TInfo);
2116    return CreateSizeOfAlignOfExpr(TInfo, OpLoc, isSizeof, ArgRange);
2117  }
2118
2119  Expr *ArgEx = (Expr *)TyOrEx;
2120  Action::OwningExprResult Result
2121    = CreateSizeOfAlignOfExpr(ArgEx, OpLoc, isSizeof, ArgEx->getSourceRange());
2122
2123  if (Result.isInvalid())
2124    DeleteExpr(ArgEx);
2125
2126  return move(Result);
2127}
2128
2129QualType Sema::CheckRealImagOperand(Expr *&V, SourceLocation Loc, bool isReal) {
2130  if (V->isTypeDependent())
2131    return Context.DependentTy;
2132
2133  // These operators return the element type of a complex type.
2134  if (const ComplexType *CT = V->getType()->getAs<ComplexType>())
2135    return CT->getElementType();
2136
2137  // Otherwise they pass through real integer and floating point types here.
2138  if (V->getType()->isArithmeticType())
2139    return V->getType();
2140
2141  // Reject anything else.
2142  Diag(Loc, diag::err_realimag_invalid_type) << V->getType()
2143    << (isReal ? "__real" : "__imag");
2144  return QualType();
2145}
2146
2147
2148
2149Action::OwningExprResult
2150Sema::ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc,
2151                          tok::TokenKind Kind, ExprArg Input) {
2152  UnaryOperator::Opcode Opc;
2153  switch (Kind) {
2154  default: assert(0 && "Unknown unary op!");
2155  case tok::plusplus:   Opc = UnaryOperator::PostInc; break;
2156  case tok::minusminus: Opc = UnaryOperator::PostDec; break;
2157  }
2158
2159  return BuildUnaryOp(S, OpLoc, Opc, move(Input));
2160}
2161
2162Action::OwningExprResult
2163Sema::ActOnArraySubscriptExpr(Scope *S, ExprArg Base, SourceLocation LLoc,
2164                              ExprArg Idx, SourceLocation RLoc) {
2165  // Since this might be a postfix expression, get rid of ParenListExprs.
2166  Base = MaybeConvertParenListExprToParenExpr(S, move(Base));
2167
2168  Expr *LHSExp = static_cast<Expr*>(Base.get()),
2169       *RHSExp = static_cast<Expr*>(Idx.get());
2170
2171  if (getLangOptions().CPlusPlus &&
2172      (LHSExp->isTypeDependent() || RHSExp->isTypeDependent())) {
2173    Base.release();
2174    Idx.release();
2175    return Owned(new (Context) ArraySubscriptExpr(LHSExp, RHSExp,
2176                                                  Context.DependentTy, RLoc));
2177  }
2178
2179  if (getLangOptions().CPlusPlus &&
2180      (LHSExp->getType()->isRecordType() ||
2181       LHSExp->getType()->isEnumeralType() ||
2182       RHSExp->getType()->isRecordType() ||
2183       RHSExp->getType()->isEnumeralType())) {
2184    return CreateOverloadedArraySubscriptExpr(LLoc, RLoc, move(Base),move(Idx));
2185  }
2186
2187  return CreateBuiltinArraySubscriptExpr(move(Base), LLoc, move(Idx), RLoc);
2188}
2189
2190
2191Action::OwningExprResult
2192Sema::CreateBuiltinArraySubscriptExpr(ExprArg Base, SourceLocation LLoc,
2193                                     ExprArg Idx, SourceLocation RLoc) {
2194  Expr *LHSExp = static_cast<Expr*>(Base.get());
2195  Expr *RHSExp = static_cast<Expr*>(Idx.get());
2196
2197  // Perform default conversions.
2198  if (!LHSExp->getType()->getAs<VectorType>())
2199      DefaultFunctionArrayLvalueConversion(LHSExp);
2200  DefaultFunctionArrayLvalueConversion(RHSExp);
2201
2202  QualType LHSTy = LHSExp->getType(), RHSTy = RHSExp->getType();
2203
2204  // C99 6.5.2.1p2: the expression e1[e2] is by definition precisely equivalent
2205  // to the expression *((e1)+(e2)). This means the array "Base" may actually be
2206  // in the subscript position. As a result, we need to derive the array base
2207  // and index from the expression types.
2208  Expr *BaseExpr, *IndexExpr;
2209  QualType ResultType;
2210  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {
2211    BaseExpr = LHSExp;
2212    IndexExpr = RHSExp;
2213    ResultType = Context.DependentTy;
2214  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {
2215    BaseExpr = LHSExp;
2216    IndexExpr = RHSExp;
2217    ResultType = PTy->getPointeeType();
2218  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {
2219     // Handle the uncommon case of "123[Ptr]".
2220    BaseExpr = RHSExp;
2221    IndexExpr = LHSExp;
2222    ResultType = PTy->getPointeeType();
2223  } else if (const ObjCObjectPointerType *PTy =
2224               LHSTy->getAs<ObjCObjectPointerType>()) {
2225    BaseExpr = LHSExp;
2226    IndexExpr = RHSExp;
2227    ResultType = PTy->getPointeeType();
2228  } else if (const ObjCObjectPointerType *PTy =
2229               RHSTy->getAs<ObjCObjectPointerType>()) {
2230     // Handle the uncommon case of "123[Ptr]".
2231    BaseExpr = RHSExp;
2232    IndexExpr = LHSExp;
2233    ResultType = PTy->getPointeeType();
2234  } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {
2235    BaseExpr = LHSExp;    // vectors: V[123]
2236    IndexExpr = RHSExp;
2237
2238    // FIXME: need to deal with const...
2239    ResultType = VTy->getElementType();
2240  } else if (LHSTy->isArrayType()) {
2241    // If we see an array that wasn't promoted by
2242    // DefaultFunctionArrayLvalueConversion, it must be an array that
2243    // wasn't promoted because of the C90 rule that doesn't
2244    // allow promoting non-lvalue arrays.  Warn, then
2245    // force the promotion here.
2246    Diag(LHSExp->getLocStart(), diag::ext_subscript_non_lvalue) <<
2247        LHSExp->getSourceRange();
2248    ImpCastExprToType(LHSExp, Context.getArrayDecayedType(LHSTy),
2249                      CastExpr::CK_ArrayToPointerDecay);
2250    LHSTy = LHSExp->getType();
2251
2252    BaseExpr = LHSExp;
2253    IndexExpr = RHSExp;
2254    ResultType = LHSTy->getAs<PointerType>()->getPointeeType();
2255  } else if (RHSTy->isArrayType()) {
2256    // Same as previous, except for 123[f().a] case
2257    Diag(RHSExp->getLocStart(), diag::ext_subscript_non_lvalue) <<
2258        RHSExp->getSourceRange();
2259    ImpCastExprToType(RHSExp, Context.getArrayDecayedType(RHSTy),
2260                      CastExpr::CK_ArrayToPointerDecay);
2261    RHSTy = RHSExp->getType();
2262
2263    BaseExpr = RHSExp;
2264    IndexExpr = LHSExp;
2265    ResultType = RHSTy->getAs<PointerType>()->getPointeeType();
2266  } else {
2267    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value)
2268       << LHSExp->getSourceRange() << RHSExp->getSourceRange());
2269  }
2270  // C99 6.5.2.1p1
2271  if (!(IndexExpr->getType()->isIntegerType() &&
2272        IndexExpr->getType()->isScalarType()) && !IndexExpr->isTypeDependent())
2273    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer)
2274                     << IndexExpr->getSourceRange());
2275
2276  if ((IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_S) ||
2277       IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_U))
2278         && !IndexExpr->isTypeDependent())
2279    Diag(LLoc, diag::warn_subscript_is_char) << IndexExpr->getSourceRange();
2280
2281  // C99 6.5.2.1p1: "shall have type "pointer to *object* type". Similarly,
2282  // C++ [expr.sub]p1: The type "T" shall be a completely-defined object
2283  // type. Note that Functions are not objects, and that (in C99 parlance)
2284  // incomplete types are not object types.
2285  if (ResultType->isFunctionType()) {
2286    Diag(BaseExpr->getLocStart(), diag::err_subscript_function_type)
2287      << ResultType << BaseExpr->getSourceRange();
2288    return ExprError();
2289  }
2290
2291  if (!ResultType->isDependentType() &&
2292      RequireCompleteType(LLoc, ResultType,
2293                          PDiag(diag::err_subscript_incomplete_type)
2294                            << BaseExpr->getSourceRange()))
2295    return ExprError();
2296
2297  // Diagnose bad cases where we step over interface counts.
2298  if (ResultType->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
2299    Diag(LLoc, diag::err_subscript_nonfragile_interface)
2300      << ResultType << BaseExpr->getSourceRange();
2301    return ExprError();
2302  }
2303
2304  Base.release();
2305  Idx.release();
2306  return Owned(new (Context) ArraySubscriptExpr(LHSExp, RHSExp,
2307                                                ResultType, RLoc));
2308}
2309
2310QualType Sema::
2311CheckExtVectorComponent(QualType baseType, SourceLocation OpLoc,
2312                        const IdentifierInfo *CompName,
2313                        SourceLocation CompLoc) {
2314  // FIXME: Share logic with ExtVectorElementExpr::containsDuplicateElements,
2315  // see FIXME there.
2316  //
2317  // FIXME: This logic can be greatly simplified by splitting it along
2318  // halving/not halving and reworking the component checking.
2319  const ExtVectorType *vecType = baseType->getAs<ExtVectorType>();
2320
2321  // The vector accessor can't exceed the number of elements.
2322  const char *compStr = CompName->getNameStart();
2323
2324  // This flag determines whether or not the component is one of the four
2325  // special names that indicate a subset of exactly half the elements are
2326  // to be selected.
2327  bool HalvingSwizzle = false;
2328
2329  // This flag determines whether or not CompName has an 's' char prefix,
2330  // indicating that it is a string of hex values to be used as vector indices.
2331  bool HexSwizzle = *compStr == 's' || *compStr == 'S';
2332
2333  // Check that we've found one of the special components, or that the component
2334  // names must come from the same set.
2335  if (!strcmp(compStr, "hi") || !strcmp(compStr, "lo") ||
2336      !strcmp(compStr, "even") || !strcmp(compStr, "odd")) {
2337    HalvingSwizzle = true;
2338  } else if (vecType->getPointAccessorIdx(*compStr) != -1) {
2339    do
2340      compStr++;
2341    while (*compStr && vecType->getPointAccessorIdx(*compStr) != -1);
2342  } else if (HexSwizzle || vecType->getNumericAccessorIdx(*compStr) != -1) {
2343    do
2344      compStr++;
2345    while (*compStr && vecType->getNumericAccessorIdx(*compStr) != -1);
2346  }
2347
2348  if (!HalvingSwizzle && *compStr) {
2349    // We didn't get to the end of the string. This means the component names
2350    // didn't come from the same set *or* we encountered an illegal name.
2351    Diag(OpLoc, diag::err_ext_vector_component_name_illegal)
2352      << std::string(compStr,compStr+1) << SourceRange(CompLoc);
2353    return QualType();
2354  }
2355
2356  // Ensure no component accessor exceeds the width of the vector type it
2357  // operates on.
2358  if (!HalvingSwizzle) {
2359    compStr = CompName->getNameStart();
2360
2361    if (HexSwizzle)
2362      compStr++;
2363
2364    while (*compStr) {
2365      if (!vecType->isAccessorWithinNumElements(*compStr++)) {
2366        Diag(OpLoc, diag::err_ext_vector_component_exceeds_length)
2367          << baseType << SourceRange(CompLoc);
2368        return QualType();
2369      }
2370    }
2371  }
2372
2373  // The component accessor looks fine - now we need to compute the actual type.
2374  // The vector type is implied by the component accessor. For example,
2375  // vec4.b is a float, vec4.xy is a vec2, vec4.rgb is a vec3, etc.
2376  // vec4.s0 is a float, vec4.s23 is a vec3, etc.
2377  // vec4.hi, vec4.lo, vec4.e, and vec4.o all return vec2.
2378  unsigned CompSize = HalvingSwizzle ? (vecType->getNumElements() + 1) / 2
2379                                     : CompName->getLength();
2380  if (HexSwizzle)
2381    CompSize--;
2382
2383  if (CompSize == 1)
2384    return vecType->getElementType();
2385
2386  QualType VT = Context.getExtVectorType(vecType->getElementType(), CompSize);
2387  // Now look up the TypeDefDecl from the vector type. Without this,
2388  // diagostics look bad. We want extended vector types to appear built-in.
2389  for (unsigned i = 0, E = ExtVectorDecls.size(); i != E; ++i) {
2390    if (ExtVectorDecls[i]->getUnderlyingType() == VT)
2391      return Context.getTypedefType(ExtVectorDecls[i]);
2392  }
2393  return VT; // should never get here (a typedef type should always be found).
2394}
2395
2396static Decl *FindGetterNameDeclFromProtocolList(const ObjCProtocolDecl*PDecl,
2397                                                IdentifierInfo *Member,
2398                                                const Selector &Sel,
2399                                                ASTContext &Context) {
2400
2401  if (ObjCPropertyDecl *PD = PDecl->FindPropertyDeclaration(Member))
2402    return PD;
2403  if (ObjCMethodDecl *OMD = PDecl->getInstanceMethod(Sel))
2404    return OMD;
2405
2406  for (ObjCProtocolDecl::protocol_iterator I = PDecl->protocol_begin(),
2407       E = PDecl->protocol_end(); I != E; ++I) {
2408    if (Decl *D = FindGetterNameDeclFromProtocolList(*I, Member, Sel,
2409                                                     Context))
2410      return D;
2411  }
2412  return 0;
2413}
2414
2415static Decl *FindGetterNameDecl(const ObjCObjectPointerType *QIdTy,
2416                                IdentifierInfo *Member,
2417                                const Selector &Sel,
2418                                ASTContext &Context) {
2419  // Check protocols on qualified interfaces.
2420  Decl *GDecl = 0;
2421  for (ObjCObjectPointerType::qual_iterator I = QIdTy->qual_begin(),
2422       E = QIdTy->qual_end(); I != E; ++I) {
2423    if (ObjCPropertyDecl *PD = (*I)->FindPropertyDeclaration(Member)) {
2424      GDecl = PD;
2425      break;
2426    }
2427    // Also must look for a getter name which uses property syntax.
2428    if (ObjCMethodDecl *OMD = (*I)->getInstanceMethod(Sel)) {
2429      GDecl = OMD;
2430      break;
2431    }
2432  }
2433  if (!GDecl) {
2434    for (ObjCObjectPointerType::qual_iterator I = QIdTy->qual_begin(),
2435         E = QIdTy->qual_end(); I != E; ++I) {
2436      // Search in the protocol-qualifier list of current protocol.
2437      GDecl = FindGetterNameDeclFromProtocolList(*I, Member, Sel, Context);
2438      if (GDecl)
2439        return GDecl;
2440    }
2441  }
2442  return GDecl;
2443}
2444
2445Sema::OwningExprResult
2446Sema::ActOnDependentMemberExpr(ExprArg Base, QualType BaseType,
2447                               bool IsArrow, SourceLocation OpLoc,
2448                               const CXXScopeSpec &SS,
2449                               NamedDecl *FirstQualifierInScope,
2450                               DeclarationName Name, SourceLocation NameLoc,
2451                               const TemplateArgumentListInfo *TemplateArgs) {
2452  Expr *BaseExpr = Base.takeAs<Expr>();
2453
2454  // Even in dependent contexts, try to diagnose base expressions with
2455  // obviously wrong types, e.g.:
2456  //
2457  // T* t;
2458  // t.f;
2459  //
2460  // In Obj-C++, however, the above expression is valid, since it could be
2461  // accessing the 'f' property if T is an Obj-C interface. The extra check
2462  // allows this, while still reporting an error if T is a struct pointer.
2463  if (!IsArrow) {
2464    const PointerType *PT = BaseType->getAs<PointerType>();
2465    if (PT && (!getLangOptions().ObjC1 ||
2466               PT->getPointeeType()->isRecordType())) {
2467      assert(BaseExpr && "cannot happen with implicit member accesses");
2468      Diag(NameLoc, diag::err_typecheck_member_reference_struct_union)
2469        << BaseType << BaseExpr->getSourceRange();
2470      return ExprError();
2471    }
2472  }
2473
2474  assert(BaseType->isDependentType() || Name.isDependentName() ||
2475         isDependentScopeSpecifier(SS));
2476
2477  // Get the type being accessed in BaseType.  If this is an arrow, the BaseExpr
2478  // must have pointer type, and the accessed type is the pointee.
2479  return Owned(CXXDependentScopeMemberExpr::Create(Context, BaseExpr, BaseType,
2480                                                   IsArrow, OpLoc,
2481                 static_cast<NestedNameSpecifier*>(SS.getScopeRep()),
2482                                                   SS.getRange(),
2483                                                   FirstQualifierInScope,
2484                                                   Name, NameLoc,
2485                                                   TemplateArgs));
2486}
2487
2488/// We know that the given qualified member reference points only to
2489/// declarations which do not belong to the static type of the base
2490/// expression.  Diagnose the problem.
2491static void DiagnoseQualifiedMemberReference(Sema &SemaRef,
2492                                             Expr *BaseExpr,
2493                                             QualType BaseType,
2494                                             const CXXScopeSpec &SS,
2495                                             const LookupResult &R) {
2496  // If this is an implicit member access, use a different set of
2497  // diagnostics.
2498  if (!BaseExpr)
2499    return DiagnoseInstanceReference(SemaRef, SS, R);
2500
2501  // FIXME: this is an exceedingly lame diagnostic for some of the more
2502  // complicated cases here.
2503  DeclContext *DC = R.getRepresentativeDecl()->getDeclContext();
2504  SemaRef.Diag(R.getNameLoc(), diag::err_not_direct_base_or_virtual)
2505    << SS.getRange() << DC << BaseType;
2506}
2507
2508// Check whether the declarations we found through a nested-name
2509// specifier in a member expression are actually members of the base
2510// type.  The restriction here is:
2511//
2512//   C++ [expr.ref]p2:
2513//     ... In these cases, the id-expression shall name a
2514//     member of the class or of one of its base classes.
2515//
2516// So it's perfectly legitimate for the nested-name specifier to name
2517// an unrelated class, and for us to find an overload set including
2518// decls from classes which are not superclasses, as long as the decl
2519// we actually pick through overload resolution is from a superclass.
2520bool Sema::CheckQualifiedMemberReference(Expr *BaseExpr,
2521                                         QualType BaseType,
2522                                         const CXXScopeSpec &SS,
2523                                         const LookupResult &R) {
2524  const RecordType *BaseRT = BaseType->getAs<RecordType>();
2525  if (!BaseRT) {
2526    // We can't check this yet because the base type is still
2527    // dependent.
2528    assert(BaseType->isDependentType());
2529    return false;
2530  }
2531  CXXRecordDecl *BaseRecord = cast<CXXRecordDecl>(BaseRT->getDecl());
2532
2533  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
2534    // If this is an implicit member reference and we find a
2535    // non-instance member, it's not an error.
2536    if (!BaseExpr && !(*I)->isCXXInstanceMember())
2537      return false;
2538
2539    // Note that we use the DC of the decl, not the underlying decl.
2540    CXXRecordDecl *RecordD = cast<CXXRecordDecl>((*I)->getDeclContext());
2541    while (RecordD->isAnonymousStructOrUnion())
2542      RecordD = cast<CXXRecordDecl>(RecordD->getParent());
2543
2544    llvm::SmallPtrSet<CXXRecordDecl*,4> MemberRecord;
2545    MemberRecord.insert(RecordD->getCanonicalDecl());
2546
2547    if (!IsProvablyNotDerivedFrom(*this, BaseRecord, MemberRecord))
2548      return false;
2549  }
2550
2551  DiagnoseQualifiedMemberReference(*this, BaseExpr, BaseType, SS, R);
2552  return true;
2553}
2554
2555static bool
2556LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R,
2557                         SourceRange BaseRange, const RecordType *RTy,
2558                         SourceLocation OpLoc, CXXScopeSpec &SS) {
2559  RecordDecl *RDecl = RTy->getDecl();
2560  if (SemaRef.RequireCompleteType(OpLoc, QualType(RTy, 0),
2561                              SemaRef.PDiag(diag::err_typecheck_incomplete_tag)
2562                                    << BaseRange))
2563    return true;
2564
2565  DeclContext *DC = RDecl;
2566  if (SS.isSet()) {
2567    // If the member name was a qualified-id, look into the
2568    // nested-name-specifier.
2569    DC = SemaRef.computeDeclContext(SS, false);
2570
2571    if (SemaRef.RequireCompleteDeclContext(SS)) {
2572      SemaRef.Diag(SS.getRange().getEnd(), diag::err_typecheck_incomplete_tag)
2573        << SS.getRange() << DC;
2574      return true;
2575    }
2576
2577    assert(DC && "Cannot handle non-computable dependent contexts in lookup");
2578
2579    if (!isa<TypeDecl>(DC)) {
2580      SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass)
2581        << DC << SS.getRange();
2582      return true;
2583    }
2584  }
2585
2586  // The record definition is complete, now look up the member.
2587  SemaRef.LookupQualifiedName(R, DC);
2588
2589  if (!R.empty())
2590    return false;
2591
2592  // We didn't find anything with the given name, so try to correct
2593  // for typos.
2594  DeclarationName Name = R.getLookupName();
2595  if (SemaRef.CorrectTypo(R, 0, &SS, DC, false, Sema::CTC_MemberLookup) &&
2596      !R.empty() &&
2597      (isa<ValueDecl>(*R.begin()) || isa<FunctionTemplateDecl>(*R.begin()))) {
2598    SemaRef.Diag(R.getNameLoc(), diag::err_no_member_suggest)
2599      << Name << DC << R.getLookupName() << SS.getRange()
2600      << FixItHint::CreateReplacement(R.getNameLoc(),
2601                                      R.getLookupName().getAsString());
2602    if (NamedDecl *ND = R.getAsSingle<NamedDecl>())
2603      SemaRef.Diag(ND->getLocation(), diag::note_previous_decl)
2604        << ND->getDeclName();
2605    return false;
2606  } else {
2607    R.clear();
2608  }
2609
2610  return false;
2611}
2612
2613Sema::OwningExprResult
2614Sema::BuildMemberReferenceExpr(ExprArg BaseArg, QualType BaseType,
2615                               SourceLocation OpLoc, bool IsArrow,
2616                               CXXScopeSpec &SS,
2617                               NamedDecl *FirstQualifierInScope,
2618                               DeclarationName Name, SourceLocation NameLoc,
2619                               const TemplateArgumentListInfo *TemplateArgs) {
2620  Expr *Base = BaseArg.takeAs<Expr>();
2621
2622  if (BaseType->isDependentType() ||
2623      (SS.isSet() && isDependentScopeSpecifier(SS)))
2624    return ActOnDependentMemberExpr(ExprArg(*this, Base), BaseType,
2625                                    IsArrow, OpLoc,
2626                                    SS, FirstQualifierInScope,
2627                                    Name, NameLoc,
2628                                    TemplateArgs);
2629
2630  LookupResult R(*this, Name, NameLoc, LookupMemberName);
2631
2632  // Implicit member accesses.
2633  if (!Base) {
2634    QualType RecordTy = BaseType;
2635    if (IsArrow) RecordTy = RecordTy->getAs<PointerType>()->getPointeeType();
2636    if (LookupMemberExprInRecord(*this, R, SourceRange(),
2637                                 RecordTy->getAs<RecordType>(),
2638                                 OpLoc, SS))
2639      return ExprError();
2640
2641  // Explicit member accesses.
2642  } else {
2643    OwningExprResult Result =
2644      LookupMemberExpr(R, Base, IsArrow, OpLoc,
2645                       SS, /*ObjCImpDecl*/ DeclPtrTy());
2646
2647    if (Result.isInvalid()) {
2648      Owned(Base);
2649      return ExprError();
2650    }
2651
2652    if (Result.get())
2653      return move(Result);
2654  }
2655
2656  return BuildMemberReferenceExpr(ExprArg(*this, Base), BaseType,
2657                                  OpLoc, IsArrow, SS, FirstQualifierInScope,
2658                                  R, TemplateArgs);
2659}
2660
2661Sema::OwningExprResult
2662Sema::BuildMemberReferenceExpr(ExprArg Base, QualType BaseExprType,
2663                               SourceLocation OpLoc, bool IsArrow,
2664                               const CXXScopeSpec &SS,
2665                               NamedDecl *FirstQualifierInScope,
2666                               LookupResult &R,
2667                         const TemplateArgumentListInfo *TemplateArgs) {
2668  Expr *BaseExpr = Base.takeAs<Expr>();
2669  QualType BaseType = BaseExprType;
2670  if (IsArrow) {
2671    assert(BaseType->isPointerType());
2672    BaseType = BaseType->getAs<PointerType>()->getPointeeType();
2673  }
2674  R.setBaseObjectType(BaseType);
2675
2676  NestedNameSpecifier *Qualifier =
2677    static_cast<NestedNameSpecifier*>(SS.getScopeRep());
2678  DeclarationName MemberName = R.getLookupName();
2679  SourceLocation MemberLoc = R.getNameLoc();
2680
2681  if (R.isAmbiguous())
2682    return ExprError();
2683
2684  if (R.empty()) {
2685    // Rederive where we looked up.
2686    DeclContext *DC = (SS.isSet()
2687                       ? computeDeclContext(SS, false)
2688                       : BaseType->getAs<RecordType>()->getDecl());
2689
2690    Diag(R.getNameLoc(), diag::err_no_member)
2691      << MemberName << DC
2692      << (BaseExpr ? BaseExpr->getSourceRange() : SourceRange());
2693    return ExprError();
2694  }
2695
2696  // Diagnose lookups that find only declarations from a non-base
2697  // type.  This is possible for either qualified lookups (which may
2698  // have been qualified with an unrelated type) or implicit member
2699  // expressions (which were found with unqualified lookup and thus
2700  // may have come from an enclosing scope).  Note that it's okay for
2701  // lookup to find declarations from a non-base type as long as those
2702  // aren't the ones picked by overload resolution.
2703  if ((SS.isSet() || !BaseExpr ||
2704       (isa<CXXThisExpr>(BaseExpr) &&
2705        cast<CXXThisExpr>(BaseExpr)->isImplicit())) &&
2706      CheckQualifiedMemberReference(BaseExpr, BaseType, SS, R))
2707    return ExprError();
2708
2709  // Construct an unresolved result if we in fact got an unresolved
2710  // result.
2711  if (R.isOverloadedResult() || R.isUnresolvableResult()) {
2712    bool Dependent =
2713      BaseExprType->isDependentType() ||
2714      R.isUnresolvableResult() ||
2715      OverloadExpr::ComputeDependence(R.begin(), R.end(), TemplateArgs);
2716
2717    // Suppress any lookup-related diagnostics; we'll do these when we
2718    // pick a member.
2719    R.suppressDiagnostics();
2720
2721    UnresolvedMemberExpr *MemExpr
2722      = UnresolvedMemberExpr::Create(Context, Dependent,
2723                                     R.isUnresolvableResult(),
2724                                     BaseExpr, BaseExprType,
2725                                     IsArrow, OpLoc,
2726                                     Qualifier, SS.getRange(),
2727                                     MemberName, MemberLoc,
2728                                     TemplateArgs);
2729    MemExpr->addDecls(R.begin(), R.end());
2730
2731    return Owned(MemExpr);
2732  }
2733
2734  assert(R.isSingleResult());
2735  DeclAccessPair FoundDecl = R.begin().getPair();
2736  NamedDecl *MemberDecl = R.getFoundDecl();
2737
2738  // FIXME: diagnose the presence of template arguments now.
2739
2740  // If the decl being referenced had an error, return an error for this
2741  // sub-expr without emitting another error, in order to avoid cascading
2742  // error cases.
2743  if (MemberDecl->isInvalidDecl())
2744    return ExprError();
2745
2746  // Handle the implicit-member-access case.
2747  if (!BaseExpr) {
2748    // If this is not an instance member, convert to a non-member access.
2749    if (!MemberDecl->isCXXInstanceMember())
2750      return BuildDeclarationNameExpr(SS, R.getNameLoc(), MemberDecl);
2751
2752    SourceLocation Loc = R.getNameLoc();
2753    if (SS.getRange().isValid())
2754      Loc = SS.getRange().getBegin();
2755    BaseExpr = new (Context) CXXThisExpr(Loc, BaseExprType,/*isImplicit=*/true);
2756  }
2757
2758  bool ShouldCheckUse = true;
2759  if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(MemberDecl)) {
2760    // Don't diagnose the use of a virtual member function unless it's
2761    // explicitly qualified.
2762    if (MD->isVirtual() && !SS.isSet())
2763      ShouldCheckUse = false;
2764  }
2765
2766  // Check the use of this member.
2767  if (ShouldCheckUse && DiagnoseUseOfDecl(MemberDecl, MemberLoc)) {
2768    Owned(BaseExpr);
2769    return ExprError();
2770  }
2771
2772  if (FieldDecl *FD = dyn_cast<FieldDecl>(MemberDecl)) {
2773    // We may have found a field within an anonymous union or struct
2774    // (C++ [class.union]).
2775    if (cast<RecordDecl>(FD->getDeclContext())->isAnonymousStructOrUnion() &&
2776        !BaseType->getAs<RecordType>()->getDecl()->isAnonymousStructOrUnion())
2777      return BuildAnonymousStructUnionMemberReference(MemberLoc, FD,
2778                                                      BaseExpr, OpLoc);
2779
2780    // Figure out the type of the member; see C99 6.5.2.3p3, C++ [expr.ref]
2781    QualType MemberType = FD->getType();
2782    if (const ReferenceType *Ref = MemberType->getAs<ReferenceType>())
2783      MemberType = Ref->getPointeeType();
2784    else {
2785      Qualifiers BaseQuals = BaseType.getQualifiers();
2786      BaseQuals.removeObjCGCAttr();
2787      if (FD->isMutable()) BaseQuals.removeConst();
2788
2789      Qualifiers MemberQuals
2790        = Context.getCanonicalType(MemberType).getQualifiers();
2791
2792      Qualifiers Combined = BaseQuals + MemberQuals;
2793      if (Combined != MemberQuals)
2794        MemberType = Context.getQualifiedType(MemberType, Combined);
2795    }
2796
2797    MarkDeclarationReferenced(MemberLoc, FD);
2798    if (PerformObjectMemberConversion(BaseExpr, Qualifier, FoundDecl, FD))
2799      return ExprError();
2800    return Owned(BuildMemberExpr(Context, BaseExpr, IsArrow, SS,
2801                                 FD, FoundDecl, MemberLoc, MemberType));
2802  }
2803
2804  if (VarDecl *Var = dyn_cast<VarDecl>(MemberDecl)) {
2805    MarkDeclarationReferenced(MemberLoc, Var);
2806    return Owned(BuildMemberExpr(Context, BaseExpr, IsArrow, SS,
2807                                 Var, FoundDecl, MemberLoc,
2808                                 Var->getType().getNonReferenceType()));
2809  }
2810
2811  if (FunctionDecl *MemberFn = dyn_cast<FunctionDecl>(MemberDecl)) {
2812    MarkDeclarationReferenced(MemberLoc, MemberDecl);
2813    return Owned(BuildMemberExpr(Context, BaseExpr, IsArrow, SS,
2814                                 MemberFn, FoundDecl, MemberLoc,
2815                                 MemberFn->getType()));
2816  }
2817
2818  if (EnumConstantDecl *Enum = dyn_cast<EnumConstantDecl>(MemberDecl)) {
2819    MarkDeclarationReferenced(MemberLoc, MemberDecl);
2820    return Owned(BuildMemberExpr(Context, BaseExpr, IsArrow, SS,
2821                                 Enum, FoundDecl, MemberLoc, Enum->getType()));
2822  }
2823
2824  Owned(BaseExpr);
2825
2826  if (isa<TypeDecl>(MemberDecl))
2827    return ExprError(Diag(MemberLoc,diag::err_typecheck_member_reference_type)
2828                     << MemberName << int(IsArrow));
2829
2830  // We found a declaration kind that we didn't expect. This is a
2831  // generic error message that tells the user that she can't refer
2832  // to this member with '.' or '->'.
2833  return ExprError(Diag(MemberLoc,
2834                        diag::err_typecheck_member_reference_unknown)
2835      << MemberName << int(IsArrow));
2836}
2837
2838/// Look up the given member of the given non-type-dependent
2839/// expression.  This can return in one of two ways:
2840///  * If it returns a sentinel null-but-valid result, the caller will
2841///    assume that lookup was performed and the results written into
2842///    the provided structure.  It will take over from there.
2843///  * Otherwise, the returned expression will be produced in place of
2844///    an ordinary member expression.
2845///
2846/// The ObjCImpDecl bit is a gross hack that will need to be properly
2847/// fixed for ObjC++.
2848Sema::OwningExprResult
2849Sema::LookupMemberExpr(LookupResult &R, Expr *&BaseExpr,
2850                       bool &IsArrow, SourceLocation OpLoc,
2851                       CXXScopeSpec &SS,
2852                       DeclPtrTy ObjCImpDecl) {
2853  assert(BaseExpr && "no base expression");
2854
2855  // Perform default conversions.
2856  DefaultFunctionArrayConversion(BaseExpr);
2857
2858  QualType BaseType = BaseExpr->getType();
2859  assert(!BaseType->isDependentType());
2860
2861  DeclarationName MemberName = R.getLookupName();
2862  SourceLocation MemberLoc = R.getNameLoc();
2863
2864  // If the user is trying to apply -> or . to a function pointer
2865  // type, it's probably because they forgot parentheses to call that
2866  // function. Suggest the addition of those parentheses, build the
2867  // call, and continue on.
2868  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
2869    if (const FunctionProtoType *Fun
2870          = Ptr->getPointeeType()->getAs<FunctionProtoType>()) {
2871      QualType ResultTy = Fun->getResultType();
2872      if (Fun->getNumArgs() == 0 &&
2873          ((!IsArrow && ResultTy->isRecordType()) ||
2874           (IsArrow && ResultTy->isPointerType() &&
2875            ResultTy->getAs<PointerType>()->getPointeeType()
2876                                                          ->isRecordType()))) {
2877        SourceLocation Loc = PP.getLocForEndOfToken(BaseExpr->getLocEnd());
2878        Diag(Loc, diag::err_member_reference_needs_call)
2879          << QualType(Fun, 0)
2880          << FixItHint::CreateInsertion(Loc, "()");
2881
2882        OwningExprResult NewBase
2883          = ActOnCallExpr(0, ExprArg(*this, BaseExpr), Loc,
2884                          MultiExprArg(*this, 0, 0), 0, Loc);
2885        if (NewBase.isInvalid())
2886          return ExprError();
2887
2888        BaseExpr = NewBase.takeAs<Expr>();
2889        DefaultFunctionArrayConversion(BaseExpr);
2890        BaseType = BaseExpr->getType();
2891      }
2892    }
2893  }
2894
2895  // If this is an Objective-C pseudo-builtin and a definition is provided then
2896  // use that.
2897  if (BaseType->isObjCIdType()) {
2898    if (IsArrow) {
2899      // Handle the following exceptional case PObj->isa.
2900      if (const ObjCObjectPointerType *OPT =
2901          BaseType->getAs<ObjCObjectPointerType>()) {
2902        if (OPT->getPointeeType()->isSpecificBuiltinType(BuiltinType::ObjCId) &&
2903            MemberName.getAsIdentifierInfo()->isStr("isa"))
2904          return Owned(new (Context) ObjCIsaExpr(BaseExpr, true, MemberLoc,
2905                                                 Context.getObjCClassType()));
2906      }
2907    }
2908    // We have an 'id' type. Rather than fall through, we check if this
2909    // is a reference to 'isa'.
2910    if (BaseType != Context.ObjCIdRedefinitionType) {
2911      BaseType = Context.ObjCIdRedefinitionType;
2912      ImpCastExprToType(BaseExpr, BaseType, CastExpr::CK_BitCast);
2913    }
2914  }
2915
2916  // If this is an Objective-C pseudo-builtin and a definition is provided then
2917  // use that.
2918  if (Context.isObjCSelType(BaseType)) {
2919    // We have an 'SEL' type. Rather than fall through, we check if this
2920    // is a reference to 'sel_id'.
2921    if (BaseType != Context.ObjCSelRedefinitionType) {
2922      BaseType = Context.ObjCSelRedefinitionType;
2923      ImpCastExprToType(BaseExpr, BaseType, CastExpr::CK_BitCast);
2924    }
2925  }
2926
2927  assert(!BaseType.isNull() && "no type for member expression");
2928
2929  // Handle properties on ObjC 'Class' types.
2930  if (!IsArrow && BaseType->isObjCClassType()) {
2931    // Also must look for a getter name which uses property syntax.
2932    IdentifierInfo *Member = MemberName.getAsIdentifierInfo();
2933    Selector Sel = PP.getSelectorTable().getNullarySelector(Member);
2934    if (ObjCMethodDecl *MD = getCurMethodDecl()) {
2935      ObjCInterfaceDecl *IFace = MD->getClassInterface();
2936      ObjCMethodDecl *Getter;
2937      // FIXME: need to also look locally in the implementation.
2938      if ((Getter = IFace->lookupClassMethod(Sel))) {
2939        // Check the use of this method.
2940        if (DiagnoseUseOfDecl(Getter, MemberLoc))
2941          return ExprError();
2942      }
2943      // If we found a getter then this may be a valid dot-reference, we
2944      // will look for the matching setter, in case it is needed.
2945      Selector SetterSel =
2946      SelectorTable::constructSetterName(PP.getIdentifierTable(),
2947                                         PP.getSelectorTable(), Member);
2948      ObjCMethodDecl *Setter = IFace->lookupClassMethod(SetterSel);
2949      if (!Setter) {
2950        // If this reference is in an @implementation, also check for 'private'
2951        // methods.
2952        Setter = IFace->lookupPrivateInstanceMethod(SetterSel);
2953      }
2954      // Look through local category implementations associated with the class.
2955      if (!Setter)
2956        Setter = IFace->getCategoryClassMethod(SetterSel);
2957
2958      if (Setter && DiagnoseUseOfDecl(Setter, MemberLoc))
2959        return ExprError();
2960
2961      if (Getter || Setter) {
2962        QualType PType;
2963
2964        if (Getter)
2965          PType = Getter->getResultType();
2966        else
2967          // Get the expression type from Setter's incoming parameter.
2968          PType = (*(Setter->param_end() -1))->getType();
2969        // FIXME: we must check that the setter has property type.
2970        return Owned(new (Context) ObjCImplicitSetterGetterRefExpr(Getter,
2971                                                  PType,
2972                                                  Setter, MemberLoc, BaseExpr));
2973      }
2974      return ExprError(Diag(MemberLoc, diag::err_property_not_found)
2975                       << MemberName << BaseType);
2976    }
2977  }
2978
2979  if (BaseType->isObjCClassType() &&
2980      BaseType != Context.ObjCClassRedefinitionType) {
2981    BaseType = Context.ObjCClassRedefinitionType;
2982    ImpCastExprToType(BaseExpr, BaseType, CastExpr::CK_BitCast);
2983  }
2984
2985  if (IsArrow) {
2986    if (const PointerType *PT = BaseType->getAs<PointerType>())
2987      BaseType = PT->getPointeeType();
2988    else if (BaseType->isObjCObjectPointerType())
2989      ;
2990    else if (BaseType->isRecordType()) {
2991      // Recover from arrow accesses to records, e.g.:
2992      //   struct MyRecord foo;
2993      //   foo->bar
2994      // This is actually well-formed in C++ if MyRecord has an
2995      // overloaded operator->, but that should have been dealt with
2996      // by now.
2997      Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
2998        << BaseType << int(IsArrow) << BaseExpr->getSourceRange()
2999        << FixItHint::CreateReplacement(OpLoc, ".");
3000      IsArrow = false;
3001    } else {
3002      Diag(MemberLoc, diag::err_typecheck_member_reference_arrow)
3003        << BaseType << BaseExpr->getSourceRange();
3004      return ExprError();
3005    }
3006  } else {
3007    // Recover from dot accesses to pointers, e.g.:
3008    //   type *foo;
3009    //   foo.bar
3010    // This is actually well-formed in two cases:
3011    //   - 'type' is an Objective C type
3012    //   - 'bar' is a pseudo-destructor name which happens to refer to
3013    //     the appropriate pointer type
3014    if (MemberName.getNameKind() != DeclarationName::CXXDestructorName) {
3015      const PointerType *PT = BaseType->getAs<PointerType>();
3016      if (PT && PT->getPointeeType()->isRecordType()) {
3017        Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
3018          << BaseType << int(IsArrow) << BaseExpr->getSourceRange()
3019          << FixItHint::CreateReplacement(OpLoc, "->");
3020        BaseType = PT->getPointeeType();
3021        IsArrow = true;
3022      }
3023    }
3024  }
3025
3026  // Handle field access to simple records.  This also handles access
3027  // to fields of the ObjC 'id' struct.
3028  if (const RecordType *RTy = BaseType->getAs<RecordType>()) {
3029    if (LookupMemberExprInRecord(*this, R, BaseExpr->getSourceRange(),
3030                                 RTy, OpLoc, SS))
3031      return ExprError();
3032    return Owned((Expr*) 0);
3033  }
3034
3035  // Handle access to Objective-C instance variables, such as "Obj->ivar" and
3036  // (*Obj).ivar.
3037  if ((IsArrow && BaseType->isObjCObjectPointerType()) ||
3038      (!IsArrow && BaseType->isObjCInterfaceType())) {
3039    const ObjCObjectPointerType *OPT = BaseType->getAs<ObjCObjectPointerType>();
3040    const ObjCInterfaceType *IFaceT =
3041      OPT ? OPT->getInterfaceType() : BaseType->getAs<ObjCInterfaceType>();
3042    if (IFaceT) {
3043      IdentifierInfo *Member = MemberName.getAsIdentifierInfo();
3044
3045      ObjCInterfaceDecl *IDecl = IFaceT->getDecl();
3046      ObjCInterfaceDecl *ClassDeclared;
3047      ObjCIvarDecl *IV = IDecl->lookupInstanceVariable(Member, ClassDeclared);
3048
3049      if (!IV) {
3050        // Attempt to correct for typos in ivar names.
3051        LookupResult Res(*this, R.getLookupName(), R.getNameLoc(),
3052                         LookupMemberName);
3053        if (CorrectTypo(Res, 0, 0, IDecl, false, CTC_MemberLookup) &&
3054            (IV = Res.getAsSingle<ObjCIvarDecl>())) {
3055          Diag(R.getNameLoc(),
3056               diag::err_typecheck_member_reference_ivar_suggest)
3057            << IDecl->getDeclName() << MemberName << IV->getDeclName()
3058            << FixItHint::CreateReplacement(R.getNameLoc(),
3059                                            IV->getNameAsString());
3060          Diag(IV->getLocation(), diag::note_previous_decl)
3061            << IV->getDeclName();
3062        }
3063      }
3064
3065      if (IV) {
3066        // If the decl being referenced had an error, return an error for this
3067        // sub-expr without emitting another error, in order to avoid cascading
3068        // error cases.
3069        if (IV->isInvalidDecl())
3070          return ExprError();
3071
3072        // Check whether we can reference this field.
3073        if (DiagnoseUseOfDecl(IV, MemberLoc))
3074          return ExprError();
3075        if (IV->getAccessControl() != ObjCIvarDecl::Public &&
3076            IV->getAccessControl() != ObjCIvarDecl::Package) {
3077          ObjCInterfaceDecl *ClassOfMethodDecl = 0;
3078          if (ObjCMethodDecl *MD = getCurMethodDecl())
3079            ClassOfMethodDecl =  MD->getClassInterface();
3080          else if (ObjCImpDecl && getCurFunctionDecl()) {
3081            // Case of a c-function declared inside an objc implementation.
3082            // FIXME: For a c-style function nested inside an objc implementation
3083            // class, there is no implementation context available, so we pass
3084            // down the context as argument to this routine. Ideally, this context
3085            // need be passed down in the AST node and somehow calculated from the
3086            // AST for a function decl.
3087            Decl *ImplDecl = ObjCImpDecl.getAs<Decl>();
3088            if (ObjCImplementationDecl *IMPD =
3089                dyn_cast<ObjCImplementationDecl>(ImplDecl))
3090              ClassOfMethodDecl = IMPD->getClassInterface();
3091            else if (ObjCCategoryImplDecl* CatImplClass =
3092                        dyn_cast<ObjCCategoryImplDecl>(ImplDecl))
3093              ClassOfMethodDecl = CatImplClass->getClassInterface();
3094          }
3095
3096          if (IV->getAccessControl() == ObjCIvarDecl::Private) {
3097            if (ClassDeclared != IDecl ||
3098                ClassOfMethodDecl != ClassDeclared)
3099              Diag(MemberLoc, diag::error_private_ivar_access)
3100                << IV->getDeclName();
3101          } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))
3102            // @protected
3103            Diag(MemberLoc, diag::error_protected_ivar_access)
3104              << IV->getDeclName();
3105        }
3106
3107        return Owned(new (Context) ObjCIvarRefExpr(IV, IV->getType(),
3108                                                   MemberLoc, BaseExpr,
3109                                                   IsArrow));
3110      }
3111      return ExprError(Diag(MemberLoc, diag::err_typecheck_member_reference_ivar)
3112                         << IDecl->getDeclName() << MemberName
3113                         << BaseExpr->getSourceRange());
3114    }
3115  }
3116  // Handle properties on 'id' and qualified "id".
3117  if (!IsArrow && (BaseType->isObjCIdType() ||
3118                   BaseType->isObjCQualifiedIdType())) {
3119    const ObjCObjectPointerType *QIdTy = BaseType->getAs<ObjCObjectPointerType>();
3120    IdentifierInfo *Member = MemberName.getAsIdentifierInfo();
3121
3122    // Check protocols on qualified interfaces.
3123    Selector Sel = PP.getSelectorTable().getNullarySelector(Member);
3124    if (Decl *PMDecl = FindGetterNameDecl(QIdTy, Member, Sel, Context)) {
3125      if (ObjCPropertyDecl *PD = dyn_cast<ObjCPropertyDecl>(PMDecl)) {
3126        // Check the use of this declaration
3127        if (DiagnoseUseOfDecl(PD, MemberLoc))
3128          return ExprError();
3129
3130        return Owned(new (Context) ObjCPropertyRefExpr(PD, PD->getType(),
3131                                                       MemberLoc, BaseExpr));
3132      }
3133      if (ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(PMDecl)) {
3134        // Check the use of this method.
3135        if (DiagnoseUseOfDecl(OMD, MemberLoc))
3136          return ExprError();
3137
3138        return Owned(ObjCMessageExpr::Create(Context,
3139                                     OMD->getResultType().getNonReferenceType(),
3140                                             OpLoc, BaseExpr, Sel,
3141                                             OMD, NULL, 0, MemberLoc));
3142      }
3143    }
3144
3145    return ExprError(Diag(MemberLoc, diag::err_property_not_found)
3146                       << MemberName << BaseType);
3147  }
3148
3149  // Handle Objective-C property access, which is "Obj.property" where Obj is a
3150  // pointer to a (potentially qualified) interface type.
3151  if (!IsArrow)
3152    if (const ObjCObjectPointerType *OPT =
3153          BaseType->getAsObjCInterfacePointerType())
3154      return HandleExprPropertyRefExpr(OPT, BaseExpr, MemberName, MemberLoc);
3155
3156  // Handle the following exceptional case (*Obj).isa.
3157  if (!IsArrow &&
3158      BaseType->isSpecificBuiltinType(BuiltinType::ObjCId) &&
3159      MemberName.getAsIdentifierInfo()->isStr("isa"))
3160    return Owned(new (Context) ObjCIsaExpr(BaseExpr, false, MemberLoc,
3161                                           Context.getObjCClassType()));
3162
3163  // Handle 'field access' to vectors, such as 'V.xx'.
3164  if (BaseType->isExtVectorType()) {
3165    IdentifierInfo *Member = MemberName.getAsIdentifierInfo();
3166    QualType ret = CheckExtVectorComponent(BaseType, OpLoc, Member, MemberLoc);
3167    if (ret.isNull())
3168      return ExprError();
3169    return Owned(new (Context) ExtVectorElementExpr(ret, BaseExpr, *Member,
3170                                                    MemberLoc));
3171  }
3172
3173  Diag(MemberLoc, diag::err_typecheck_member_reference_struct_union)
3174    << BaseType << BaseExpr->getSourceRange();
3175
3176  return ExprError();
3177}
3178
3179/// The main callback when the parser finds something like
3180///   expression . [nested-name-specifier] identifier
3181///   expression -> [nested-name-specifier] identifier
3182/// where 'identifier' encompasses a fairly broad spectrum of
3183/// possibilities, including destructor and operator references.
3184///
3185/// \param OpKind either tok::arrow or tok::period
3186/// \param HasTrailingLParen whether the next token is '(', which
3187///   is used to diagnose mis-uses of special members that can
3188///   only be called
3189/// \param ObjCImpDecl the current ObjC @implementation decl;
3190///   this is an ugly hack around the fact that ObjC @implementations
3191///   aren't properly put in the context chain
3192Sema::OwningExprResult Sema::ActOnMemberAccessExpr(Scope *S, ExprArg BaseArg,
3193                                                   SourceLocation OpLoc,
3194                                                   tok::TokenKind OpKind,
3195                                                   CXXScopeSpec &SS,
3196                                                   UnqualifiedId &Id,
3197                                                   DeclPtrTy ObjCImpDecl,
3198                                                   bool HasTrailingLParen) {
3199  if (SS.isSet() && SS.isInvalid())
3200    return ExprError();
3201
3202  TemplateArgumentListInfo TemplateArgsBuffer;
3203
3204  // Decompose the name into its component parts.
3205  DeclarationName Name;
3206  SourceLocation NameLoc;
3207  const TemplateArgumentListInfo *TemplateArgs;
3208  DecomposeUnqualifiedId(*this, Id, TemplateArgsBuffer,
3209                         Name, NameLoc, TemplateArgs);
3210
3211  bool IsArrow = (OpKind == tok::arrow);
3212
3213  NamedDecl *FirstQualifierInScope
3214    = (!SS.isSet() ? 0 : FindFirstQualifierInScope(S,
3215                       static_cast<NestedNameSpecifier*>(SS.getScopeRep())));
3216
3217  // This is a postfix expression, so get rid of ParenListExprs.
3218  BaseArg = MaybeConvertParenListExprToParenExpr(S, move(BaseArg));
3219
3220  Expr *Base = BaseArg.takeAs<Expr>();
3221  OwningExprResult Result(*this);
3222  if (Base->getType()->isDependentType() || Name.isDependentName() ||
3223      isDependentScopeSpecifier(SS)) {
3224    Result = ActOnDependentMemberExpr(ExprArg(*this, Base), Base->getType(),
3225                                      IsArrow, OpLoc,
3226                                      SS, FirstQualifierInScope,
3227                                      Name, NameLoc,
3228                                      TemplateArgs);
3229  } else {
3230    LookupResult R(*this, Name, NameLoc, LookupMemberName);
3231    if (TemplateArgs) {
3232      // Re-use the lookup done for the template name.
3233      DecomposeTemplateName(R, Id);
3234    } else {
3235      Result = LookupMemberExpr(R, Base, IsArrow, OpLoc,
3236                                SS, ObjCImpDecl);
3237
3238      if (Result.isInvalid()) {
3239        Owned(Base);
3240        return ExprError();
3241      }
3242
3243      if (Result.get()) {
3244        // The only way a reference to a destructor can be used is to
3245        // immediately call it, which falls into this case.  If the
3246        // next token is not a '(', produce a diagnostic and build the
3247        // call now.
3248        if (!HasTrailingLParen &&
3249            Id.getKind() == UnqualifiedId::IK_DestructorName)
3250          return DiagnoseDtorReference(NameLoc, move(Result));
3251
3252        return move(Result);
3253      }
3254    }
3255
3256    Result = BuildMemberReferenceExpr(ExprArg(*this, Base), Base->getType(),
3257                                      OpLoc, IsArrow, SS, FirstQualifierInScope,
3258                                      R, TemplateArgs);
3259  }
3260
3261  return move(Result);
3262}
3263
3264Sema::OwningExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc,
3265                                                    FunctionDecl *FD,
3266                                                    ParmVarDecl *Param) {
3267  if (Param->hasUnparsedDefaultArg()) {
3268    Diag (CallLoc,
3269          diag::err_use_of_default_argument_to_function_declared_later) <<
3270      FD << cast<CXXRecordDecl>(FD->getDeclContext())->getDeclName();
3271    Diag(UnparsedDefaultArgLocs[Param],
3272          diag::note_default_argument_declared_here);
3273  } else {
3274    if (Param->hasUninstantiatedDefaultArg()) {
3275      Expr *UninstExpr = Param->getUninstantiatedDefaultArg();
3276
3277      // Instantiate the expression.
3278      MultiLevelTemplateArgumentList ArgList
3279        = getTemplateInstantiationArgs(FD, 0, /*RelativeToPrimary=*/true);
3280
3281      InstantiatingTemplate Inst(*this, CallLoc, Param,
3282                                 ArgList.getInnermost().getFlatArgumentList(),
3283                                 ArgList.getInnermost().flat_size());
3284
3285      OwningExprResult Result = SubstExpr(UninstExpr, ArgList);
3286      if (Result.isInvalid())
3287        return ExprError();
3288
3289      // Check the expression as an initializer for the parameter.
3290      InitializedEntity Entity
3291        = InitializedEntity::InitializeParameter(Param);
3292      InitializationKind Kind
3293        = InitializationKind::CreateCopy(Param->getLocation(),
3294               /*FIXME:EqualLoc*/UninstExpr->getSourceRange().getBegin());
3295      Expr *ResultE = Result.takeAs<Expr>();
3296
3297      InitializationSequence InitSeq(*this, Entity, Kind, &ResultE, 1);
3298      Result = InitSeq.Perform(*this, Entity, Kind,
3299                               MultiExprArg(*this, (void**)&ResultE, 1));
3300      if (Result.isInvalid())
3301        return ExprError();
3302
3303      // Build the default argument expression.
3304      return Owned(CXXDefaultArgExpr::Create(Context, CallLoc, Param,
3305                                             Result.takeAs<Expr>()));
3306    }
3307
3308    // If the default expression creates temporaries, we need to
3309    // push them to the current stack of expression temporaries so they'll
3310    // be properly destroyed.
3311    // FIXME: We should really be rebuilding the default argument with new
3312    // bound temporaries; see the comment in PR5810.
3313    for (unsigned i = 0, e = Param->getNumDefaultArgTemporaries(); i != e; ++i)
3314      ExprTemporaries.push_back(Param->getDefaultArgTemporary(i));
3315  }
3316
3317  // We already type-checked the argument, so we know it works.
3318  return Owned(CXXDefaultArgExpr::Create(Context, CallLoc, Param));
3319}
3320
3321/// ConvertArgumentsForCall - Converts the arguments specified in
3322/// Args/NumArgs to the parameter types of the function FDecl with
3323/// function prototype Proto. Call is the call expression itself, and
3324/// Fn is the function expression. For a C++ member function, this
3325/// routine does not attempt to convert the object argument. Returns
3326/// true if the call is ill-formed.
3327bool
3328Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
3329                              FunctionDecl *FDecl,
3330                              const FunctionProtoType *Proto,
3331                              Expr **Args, unsigned NumArgs,
3332                              SourceLocation RParenLoc) {
3333  // C99 6.5.2.2p7 - the arguments are implicitly converted, as if by
3334  // assignment, to the types of the corresponding parameter, ...
3335  unsigned NumArgsInProto = Proto->getNumArgs();
3336  bool Invalid = false;
3337
3338  // If too few arguments are available (and we don't have default
3339  // arguments for the remaining parameters), don't make the call.
3340  if (NumArgs < NumArgsInProto) {
3341    if (!FDecl || NumArgs < FDecl->getMinRequiredArguments())
3342      return Diag(RParenLoc, diag::err_typecheck_call_too_few_args)
3343        << Fn->getType()->isBlockPointerType()
3344        << NumArgsInProto << NumArgs << Fn->getSourceRange();
3345    Call->setNumArgs(Context, NumArgsInProto);
3346  }
3347
3348  // If too many are passed and not variadic, error on the extras and drop
3349  // them.
3350  if (NumArgs > NumArgsInProto) {
3351    if (!Proto->isVariadic()) {
3352      Diag(Args[NumArgsInProto]->getLocStart(),
3353           diag::err_typecheck_call_too_many_args)
3354        << Fn->getType()->isBlockPointerType()
3355        << NumArgsInProto << NumArgs << Fn->getSourceRange()
3356        << SourceRange(Args[NumArgsInProto]->getLocStart(),
3357                       Args[NumArgs-1]->getLocEnd());
3358      // This deletes the extra arguments.
3359      Call->setNumArgs(Context, NumArgsInProto);
3360      return true;
3361    }
3362  }
3363  llvm::SmallVector<Expr *, 8> AllArgs;
3364  VariadicCallType CallType =
3365    Proto->isVariadic() ? VariadicFunction : VariadicDoesNotApply;
3366  if (Fn->getType()->isBlockPointerType())
3367    CallType = VariadicBlock; // Block
3368  else if (isa<MemberExpr>(Fn))
3369    CallType = VariadicMethod;
3370  Invalid = GatherArgumentsForCall(Call->getSourceRange().getBegin(), FDecl,
3371                                   Proto, 0, Args, NumArgs, AllArgs, CallType);
3372  if (Invalid)
3373    return true;
3374  unsigned TotalNumArgs = AllArgs.size();
3375  for (unsigned i = 0; i < TotalNumArgs; ++i)
3376    Call->setArg(i, AllArgs[i]);
3377
3378  return false;
3379}
3380
3381bool Sema::GatherArgumentsForCall(SourceLocation CallLoc,
3382                                  FunctionDecl *FDecl,
3383                                  const FunctionProtoType *Proto,
3384                                  unsigned FirstProtoArg,
3385                                  Expr **Args, unsigned NumArgs,
3386                                  llvm::SmallVector<Expr *, 8> &AllArgs,
3387                                  VariadicCallType CallType) {
3388  unsigned NumArgsInProto = Proto->getNumArgs();
3389  unsigned NumArgsToCheck = NumArgs;
3390  bool Invalid = false;
3391  if (NumArgs != NumArgsInProto)
3392    // Use default arguments for missing arguments
3393    NumArgsToCheck = NumArgsInProto;
3394  unsigned ArgIx = 0;
3395  // Continue to check argument types (even if we have too few/many args).
3396  for (unsigned i = FirstProtoArg; i != NumArgsToCheck; i++) {
3397    QualType ProtoArgType = Proto->getArgType(i);
3398
3399    Expr *Arg;
3400    if (ArgIx < NumArgs) {
3401      Arg = Args[ArgIx++];
3402
3403      if (RequireCompleteType(Arg->getSourceRange().getBegin(),
3404                              ProtoArgType,
3405                              PDiag(diag::err_call_incomplete_argument)
3406                              << Arg->getSourceRange()))
3407        return true;
3408
3409      // Pass the argument
3410      ParmVarDecl *Param = 0;
3411      if (FDecl && i < FDecl->getNumParams())
3412        Param = FDecl->getParamDecl(i);
3413
3414
3415      InitializedEntity Entity =
3416        Param? InitializedEntity::InitializeParameter(Param)
3417             : InitializedEntity::InitializeParameter(ProtoArgType);
3418      OwningExprResult ArgE = PerformCopyInitialization(Entity,
3419                                                        SourceLocation(),
3420                                                        Owned(Arg));
3421      if (ArgE.isInvalid())
3422        return true;
3423
3424      Arg = ArgE.takeAs<Expr>();
3425    } else {
3426      ParmVarDecl *Param = FDecl->getParamDecl(i);
3427
3428      OwningExprResult ArgExpr =
3429        BuildCXXDefaultArgExpr(CallLoc, FDecl, Param);
3430      if (ArgExpr.isInvalid())
3431        return true;
3432
3433      Arg = ArgExpr.takeAs<Expr>();
3434    }
3435    AllArgs.push_back(Arg);
3436  }
3437
3438  // If this is a variadic call, handle args passed through "...".
3439  if (CallType != VariadicDoesNotApply) {
3440    // Promote the arguments (C99 6.5.2.2p7).
3441    for (unsigned i = ArgIx; i < NumArgs; i++) {
3442      Expr *Arg = Args[i];
3443      Invalid |= DefaultVariadicArgumentPromotion(Arg, CallType);
3444      AllArgs.push_back(Arg);
3445    }
3446  }
3447  return Invalid;
3448}
3449
3450/// ActOnCallExpr - Handle a call to Fn with the specified array of arguments.
3451/// This provides the location of the left/right parens and a list of comma
3452/// locations.
3453Action::OwningExprResult
3454Sema::ActOnCallExpr(Scope *S, ExprArg fn, SourceLocation LParenLoc,
3455                    MultiExprArg args,
3456                    SourceLocation *CommaLocs, SourceLocation RParenLoc) {
3457  unsigned NumArgs = args.size();
3458
3459  // Since this might be a postfix expression, get rid of ParenListExprs.
3460  fn = MaybeConvertParenListExprToParenExpr(S, move(fn));
3461
3462  Expr *Fn = fn.takeAs<Expr>();
3463  Expr **Args = reinterpret_cast<Expr**>(args.release());
3464  assert(Fn && "no function call expression");
3465
3466  if (getLangOptions().CPlusPlus) {
3467    // If this is a pseudo-destructor expression, build the call immediately.
3468    if (isa<CXXPseudoDestructorExpr>(Fn)) {
3469      if (NumArgs > 0) {
3470        // Pseudo-destructor calls should not have any arguments.
3471        Diag(Fn->getLocStart(), diag::err_pseudo_dtor_call_with_args)
3472          << FixItHint::CreateRemoval(
3473                                    SourceRange(Args[0]->getLocStart(),
3474                                                Args[NumArgs-1]->getLocEnd()));
3475
3476        for (unsigned I = 0; I != NumArgs; ++I)
3477          Args[I]->Destroy(Context);
3478
3479        NumArgs = 0;
3480      }
3481
3482      return Owned(new (Context) CallExpr(Context, Fn, 0, 0, Context.VoidTy,
3483                                          RParenLoc));
3484    }
3485
3486    // Determine whether this is a dependent call inside a C++ template,
3487    // in which case we won't do any semantic analysis now.
3488    // FIXME: Will need to cache the results of name lookup (including ADL) in
3489    // Fn.
3490    bool Dependent = false;
3491    if (Fn->isTypeDependent())
3492      Dependent = true;
3493    else if (Expr::hasAnyTypeDependentArguments(Args, NumArgs))
3494      Dependent = true;
3495
3496    if (Dependent)
3497      return Owned(new (Context) CallExpr(Context, Fn, Args, NumArgs,
3498                                          Context.DependentTy, RParenLoc));
3499
3500    // Determine whether this is a call to an object (C++ [over.call.object]).
3501    if (Fn->getType()->isRecordType())
3502      return Owned(BuildCallToObjectOfClassType(S, Fn, LParenLoc, Args, NumArgs,
3503                                                CommaLocs, RParenLoc));
3504
3505    Expr *NakedFn = Fn->IgnoreParens();
3506
3507    // Determine whether this is a call to an unresolved member function.
3508    if (UnresolvedMemberExpr *MemE = dyn_cast<UnresolvedMemberExpr>(NakedFn)) {
3509      // If lookup was unresolved but not dependent (i.e. didn't find
3510      // an unresolved using declaration), it has to be an overloaded
3511      // function set, which means it must contain either multiple
3512      // declarations (all methods or method templates) or a single
3513      // method template.
3514      assert((MemE->getNumDecls() > 1) ||
3515             isa<FunctionTemplateDecl>(*MemE->decls_begin()));
3516      (void)MemE;
3517
3518      return BuildCallToMemberFunction(S, Fn, LParenLoc, Args, NumArgs,
3519                                       CommaLocs, RParenLoc);
3520    }
3521
3522    // Determine whether this is a call to a member function.
3523    if (MemberExpr *MemExpr = dyn_cast<MemberExpr>(NakedFn)) {
3524      NamedDecl *MemDecl = MemExpr->getMemberDecl();
3525      if (isa<CXXMethodDecl>(MemDecl))
3526        return BuildCallToMemberFunction(S, Fn, LParenLoc, Args, NumArgs,
3527                                         CommaLocs, RParenLoc);
3528    }
3529
3530    // Determine whether this is a call to a pointer-to-member function.
3531    if (BinaryOperator *BO = dyn_cast<BinaryOperator>(NakedFn)) {
3532      if (BO->getOpcode() == BinaryOperator::PtrMemD ||
3533          BO->getOpcode() == BinaryOperator::PtrMemI) {
3534        if (const FunctionProtoType *FPT =
3535              dyn_cast<FunctionProtoType>(BO->getType())) {
3536          QualType ResultTy = FPT->getResultType().getNonReferenceType();
3537
3538          ExprOwningPtr<CXXMemberCallExpr>
3539            TheCall(this, new (Context) CXXMemberCallExpr(Context, BO, Args,
3540                                                          NumArgs, ResultTy,
3541                                                          RParenLoc));
3542
3543          if (CheckCallReturnType(FPT->getResultType(),
3544                                  BO->getRHS()->getSourceRange().getBegin(),
3545                                  TheCall.get(), 0))
3546            return ExprError();
3547
3548          if (ConvertArgumentsForCall(&*TheCall, BO, 0, FPT, Args, NumArgs,
3549                                      RParenLoc))
3550            return ExprError();
3551
3552          return Owned(MaybeBindToTemporary(TheCall.release()).release());
3553        }
3554        return ExprError(Diag(Fn->getLocStart(),
3555                              diag::err_typecheck_call_not_function)
3556                              << Fn->getType() << Fn->getSourceRange());
3557      }
3558    }
3559  }
3560
3561  // If we're directly calling a function, get the appropriate declaration.
3562  // Also, in C++, keep track of whether we should perform argument-dependent
3563  // lookup and whether there were any explicitly-specified template arguments.
3564
3565  Expr *NakedFn = Fn->IgnoreParens();
3566  if (isa<UnresolvedLookupExpr>(NakedFn)) {
3567    UnresolvedLookupExpr *ULE = cast<UnresolvedLookupExpr>(NakedFn);
3568    return BuildOverloadedCallExpr(S, Fn, ULE, LParenLoc, Args, NumArgs,
3569                                   CommaLocs, RParenLoc);
3570  }
3571
3572  NamedDecl *NDecl = 0;
3573  if (isa<DeclRefExpr>(NakedFn))
3574    NDecl = cast<DeclRefExpr>(NakedFn)->getDecl();
3575
3576  return BuildResolvedCallExpr(Fn, NDecl, LParenLoc, Args, NumArgs, RParenLoc);
3577}
3578
3579/// BuildResolvedCallExpr - Build a call to a resolved expression,
3580/// i.e. an expression not of \p OverloadTy.  The expression should
3581/// unary-convert to an expression of function-pointer or
3582/// block-pointer type.
3583///
3584/// \param NDecl the declaration being called, if available
3585Sema::OwningExprResult
3586Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl,
3587                            SourceLocation LParenLoc,
3588                            Expr **Args, unsigned NumArgs,
3589                            SourceLocation RParenLoc) {
3590  FunctionDecl *FDecl = dyn_cast_or_null<FunctionDecl>(NDecl);
3591
3592  // Promote the function operand.
3593  UsualUnaryConversions(Fn);
3594
3595  // Make the call expr early, before semantic checks.  This guarantees cleanup
3596  // of arguments and function on error.
3597  ExprOwningPtr<CallExpr> TheCall(this, new (Context) CallExpr(Context, Fn,
3598                                                               Args, NumArgs,
3599                                                               Context.BoolTy,
3600                                                               RParenLoc));
3601
3602  const FunctionType *FuncT;
3603  if (!Fn->getType()->isBlockPointerType()) {
3604    // C99 6.5.2.2p1 - "The expression that denotes the called function shall
3605    // have type pointer to function".
3606    const PointerType *PT = Fn->getType()->getAs<PointerType>();
3607    if (PT == 0)
3608      return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function)
3609        << Fn->getType() << Fn->getSourceRange());
3610    FuncT = PT->getPointeeType()->getAs<FunctionType>();
3611  } else { // This is a block call.
3612    FuncT = Fn->getType()->getAs<BlockPointerType>()->getPointeeType()->
3613                getAs<FunctionType>();
3614  }
3615  if (FuncT == 0)
3616    return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function)
3617      << Fn->getType() << Fn->getSourceRange());
3618
3619  // Check for a valid return type
3620  if (CheckCallReturnType(FuncT->getResultType(),
3621                          Fn->getSourceRange().getBegin(), TheCall.get(),
3622                          FDecl))
3623    return ExprError();
3624
3625  // We know the result type of the call, set it.
3626  TheCall->setType(FuncT->getResultType().getNonReferenceType());
3627
3628  if (const FunctionProtoType *Proto = dyn_cast<FunctionProtoType>(FuncT)) {
3629    if (ConvertArgumentsForCall(&*TheCall, Fn, FDecl, Proto, Args, NumArgs,
3630                                RParenLoc))
3631      return ExprError();
3632  } else {
3633    assert(isa<FunctionNoProtoType>(FuncT) && "Unknown FunctionType!");
3634
3635    if (FDecl) {
3636      // Check if we have too few/too many template arguments, based
3637      // on our knowledge of the function definition.
3638      const FunctionDecl *Def = 0;
3639      if (FDecl->getBody(Def) && NumArgs != Def->param_size()) {
3640        const FunctionProtoType *Proto =
3641            Def->getType()->getAs<FunctionProtoType>();
3642        if (!Proto || !(Proto->isVariadic() && NumArgs >= Def->param_size())) {
3643          Diag(RParenLoc, diag::warn_call_wrong_number_of_arguments)
3644            << (NumArgs > Def->param_size()) << FDecl << Fn->getSourceRange();
3645        }
3646      }
3647    }
3648
3649    // Promote the arguments (C99 6.5.2.2p6).
3650    for (unsigned i = 0; i != NumArgs; i++) {
3651      Expr *Arg = Args[i];
3652      DefaultArgumentPromotion(Arg);
3653      if (RequireCompleteType(Arg->getSourceRange().getBegin(),
3654                              Arg->getType(),
3655                              PDiag(diag::err_call_incomplete_argument)
3656                                << Arg->getSourceRange()))
3657        return ExprError();
3658      TheCall->setArg(i, Arg);
3659    }
3660  }
3661
3662  if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(FDecl))
3663    if (!Method->isStatic())
3664      return ExprError(Diag(LParenLoc, diag::err_member_call_without_object)
3665        << Fn->getSourceRange());
3666
3667  // Check for sentinels
3668  if (NDecl)
3669    DiagnoseSentinelCalls(NDecl, LParenLoc, Args, NumArgs);
3670
3671  // Do special checking on direct calls to functions.
3672  if (FDecl) {
3673    if (CheckFunctionCall(FDecl, TheCall.get()))
3674      return ExprError();
3675
3676    if (unsigned BuiltinID = FDecl->getBuiltinID())
3677      return CheckBuiltinFunctionCall(BuiltinID, TheCall.take());
3678  } else if (NDecl) {
3679    if (CheckBlockCall(NDecl, TheCall.get()))
3680      return ExprError();
3681  }
3682
3683  return MaybeBindToTemporary(TheCall.take());
3684}
3685
3686Action::OwningExprResult
3687Sema::ActOnCompoundLiteral(SourceLocation LParenLoc, TypeTy *Ty,
3688                           SourceLocation RParenLoc, ExprArg InitExpr) {
3689  assert((Ty != 0) && "ActOnCompoundLiteral(): missing type");
3690  // FIXME: put back this assert when initializers are worked out.
3691  //assert((InitExpr != 0) && "ActOnCompoundLiteral(): missing expression");
3692
3693  TypeSourceInfo *TInfo;
3694  QualType literalType = GetTypeFromParser(Ty, &TInfo);
3695  if (!TInfo)
3696    TInfo = Context.getTrivialTypeSourceInfo(literalType);
3697
3698  return BuildCompoundLiteralExpr(LParenLoc, TInfo, RParenLoc, move(InitExpr));
3699}
3700
3701Action::OwningExprResult
3702Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo,
3703                               SourceLocation RParenLoc, ExprArg InitExpr) {
3704  QualType literalType = TInfo->getType();
3705  Expr *literalExpr = static_cast<Expr*>(InitExpr.get());
3706
3707  if (literalType->isArrayType()) {
3708    if (literalType->isVariableArrayType())
3709      return ExprError(Diag(LParenLoc, diag::err_variable_object_no_init)
3710        << SourceRange(LParenLoc, literalExpr->getSourceRange().getEnd()));
3711  } else if (!literalType->isDependentType() &&
3712             RequireCompleteType(LParenLoc, literalType,
3713                      PDiag(diag::err_typecheck_decl_incomplete_type)
3714                        << SourceRange(LParenLoc,
3715                                       literalExpr->getSourceRange().getEnd())))
3716    return ExprError();
3717
3718  InitializedEntity Entity
3719    = InitializedEntity::InitializeTemporary(literalType);
3720  InitializationKind Kind
3721    = InitializationKind::CreateCast(SourceRange(LParenLoc, RParenLoc),
3722                                     /*IsCStyleCast=*/true);
3723  InitializationSequence InitSeq(*this, Entity, Kind, &literalExpr, 1);
3724  OwningExprResult Result = InitSeq.Perform(*this, Entity, Kind,
3725                                   MultiExprArg(*this, (void**)&literalExpr, 1),
3726                                            &literalType);
3727  if (Result.isInvalid())
3728    return ExprError();
3729  InitExpr.release();
3730  literalExpr = static_cast<Expr*>(Result.get());
3731
3732  bool isFileScope = getCurFunctionOrMethodDecl() == 0;
3733  if (isFileScope) { // 6.5.2.5p3
3734    if (CheckForConstantInitializer(literalExpr, literalType))
3735      return ExprError();
3736  }
3737
3738  Result.release();
3739
3740  return Owned(new (Context) CompoundLiteralExpr(LParenLoc, TInfo, literalType,
3741                                                 literalExpr, isFileScope));
3742}
3743
3744Action::OwningExprResult
3745Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg initlist,
3746                    SourceLocation RBraceLoc) {
3747  unsigned NumInit = initlist.size();
3748  Expr **InitList = reinterpret_cast<Expr**>(initlist.release());
3749
3750  // Semantic analysis for initializers is done by ActOnDeclarator() and
3751  // CheckInitializer() - it requires knowledge of the object being intialized.
3752
3753  InitListExpr *E = new (Context) InitListExpr(Context, LBraceLoc, InitList,
3754                                               NumInit, RBraceLoc);
3755  E->setType(Context.VoidTy); // FIXME: just a place holder for now.
3756  return Owned(E);
3757}
3758
3759static CastExpr::CastKind getScalarCastKind(ASTContext &Context,
3760                                            QualType SrcTy, QualType DestTy) {
3761  if (Context.hasSameUnqualifiedType(SrcTy, DestTy))
3762    return CastExpr::CK_NoOp;
3763
3764  if (SrcTy->hasPointerRepresentation()) {
3765    if (DestTy->hasPointerRepresentation())
3766      return DestTy->isObjCObjectPointerType() ?
3767                CastExpr::CK_AnyPointerToObjCPointerCast :
3768                CastExpr::CK_BitCast;
3769    if (DestTy->isIntegerType())
3770      return CastExpr::CK_PointerToIntegral;
3771  }
3772
3773  if (SrcTy->isIntegerType()) {
3774    if (DestTy->isIntegerType())
3775      return CastExpr::CK_IntegralCast;
3776    if (DestTy->hasPointerRepresentation())
3777      return CastExpr::CK_IntegralToPointer;
3778    if (DestTy->isRealFloatingType())
3779      return CastExpr::CK_IntegralToFloating;
3780  }
3781
3782  if (SrcTy->isRealFloatingType()) {
3783    if (DestTy->isRealFloatingType())
3784      return CastExpr::CK_FloatingCast;
3785    if (DestTy->isIntegerType())
3786      return CastExpr::CK_FloatingToIntegral;
3787  }
3788
3789  // FIXME: Assert here.
3790  // assert(false && "Unhandled cast combination!");
3791  return CastExpr::CK_Unknown;
3792}
3793
3794/// CheckCastTypes - Check type constraints for casting between types.
3795bool Sema::CheckCastTypes(SourceRange TyR, QualType castType, Expr *&castExpr,
3796                          CastExpr::CastKind& Kind,
3797                          bool FunctionalStyle) {
3798  if (getLangOptions().CPlusPlus)
3799    return CXXCheckCStyleCast(TyR, castType, castExpr, Kind, FunctionalStyle);
3800
3801  DefaultFunctionArrayLvalueConversion(castExpr);
3802
3803  // C99 6.5.4p2: the cast type needs to be void or scalar and the expression
3804  // type needs to be scalar.
3805  if (castType->isVoidType()) {
3806    // Cast to void allows any expr type.
3807    Kind = CastExpr::CK_ToVoid;
3808    return false;
3809  }
3810
3811  if (!castType->isScalarType() && !castType->isVectorType()) {
3812    if (Context.hasSameUnqualifiedType(castType, castExpr->getType()) &&
3813        (castType->isStructureType() || castType->isUnionType())) {
3814      // GCC struct/union extension: allow cast to self.
3815      // FIXME: Check that the cast destination type is complete.
3816      Diag(TyR.getBegin(), diag::ext_typecheck_cast_nonscalar)
3817        << castType << castExpr->getSourceRange();
3818      Kind = CastExpr::CK_NoOp;
3819      return false;
3820    }
3821
3822    if (castType->isUnionType()) {
3823      // GCC cast to union extension
3824      RecordDecl *RD = castType->getAs<RecordType>()->getDecl();
3825      RecordDecl::field_iterator Field, FieldEnd;
3826      for (Field = RD->field_begin(), FieldEnd = RD->field_end();
3827           Field != FieldEnd; ++Field) {
3828        if (Context.hasSameUnqualifiedType(Field->getType(),
3829                                           castExpr->getType())) {
3830          Diag(TyR.getBegin(), diag::ext_typecheck_cast_to_union)
3831            << castExpr->getSourceRange();
3832          break;
3833        }
3834      }
3835      if (Field == FieldEnd)
3836        return Diag(TyR.getBegin(), diag::err_typecheck_cast_to_union_no_type)
3837          << castExpr->getType() << castExpr->getSourceRange();
3838      Kind = CastExpr::CK_ToUnion;
3839      return false;
3840    }
3841
3842    // Reject any other conversions to non-scalar types.
3843    return Diag(TyR.getBegin(), diag::err_typecheck_cond_expect_scalar)
3844      << castType << castExpr->getSourceRange();
3845  }
3846
3847  if (!castExpr->getType()->isScalarType() &&
3848      !castExpr->getType()->isVectorType()) {
3849    return Diag(castExpr->getLocStart(),
3850                diag::err_typecheck_expect_scalar_operand)
3851      << castExpr->getType() << castExpr->getSourceRange();
3852  }
3853
3854  if (castType->isExtVectorType())
3855    return CheckExtVectorCast(TyR, castType, castExpr, Kind);
3856
3857  if (castType->isVectorType())
3858    return CheckVectorCast(TyR, castType, castExpr->getType(), Kind);
3859  if (castExpr->getType()->isVectorType())
3860    return CheckVectorCast(TyR, castExpr->getType(), castType, Kind);
3861
3862  if (isa<ObjCSelectorExpr>(castExpr))
3863    return Diag(castExpr->getLocStart(), diag::err_cast_selector_expr);
3864
3865  if (!castType->isArithmeticType()) {
3866    QualType castExprType = castExpr->getType();
3867    if (!castExprType->isIntegralType() && castExprType->isArithmeticType())
3868      return Diag(castExpr->getLocStart(),
3869                  diag::err_cast_pointer_from_non_pointer_int)
3870        << castExprType << castExpr->getSourceRange();
3871  } else if (!castExpr->getType()->isArithmeticType()) {
3872    if (!castType->isIntegralType() && castType->isArithmeticType())
3873      return Diag(castExpr->getLocStart(),
3874                  diag::err_cast_pointer_to_non_pointer_int)
3875        << castType << castExpr->getSourceRange();
3876  }
3877
3878  Kind = getScalarCastKind(Context, castExpr->getType(), castType);
3879  return false;
3880}
3881
3882bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty,
3883                           CastExpr::CastKind &Kind) {
3884  assert(VectorTy->isVectorType() && "Not a vector type!");
3885
3886  if (Ty->isVectorType() || Ty->isIntegerType()) {
3887    if (Context.getTypeSize(VectorTy) != Context.getTypeSize(Ty))
3888      return Diag(R.getBegin(),
3889                  Ty->isVectorType() ?
3890                  diag::err_invalid_conversion_between_vectors :
3891                  diag::err_invalid_conversion_between_vector_and_integer)
3892        << VectorTy << Ty << R;
3893  } else
3894    return Diag(R.getBegin(),
3895                diag::err_invalid_conversion_between_vector_and_scalar)
3896      << VectorTy << Ty << R;
3897
3898  Kind = CastExpr::CK_BitCast;
3899  return false;
3900}
3901
3902bool Sema::CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *&CastExpr,
3903                              CastExpr::CastKind &Kind) {
3904  assert(DestTy->isExtVectorType() && "Not an extended vector type!");
3905
3906  QualType SrcTy = CastExpr->getType();
3907
3908  // If SrcTy is a VectorType, the total size must match to explicitly cast to
3909  // an ExtVectorType.
3910  if (SrcTy->isVectorType()) {
3911    if (Context.getTypeSize(DestTy) != Context.getTypeSize(SrcTy))
3912      return Diag(R.getBegin(),diag::err_invalid_conversion_between_ext_vectors)
3913        << DestTy << SrcTy << R;
3914    Kind = CastExpr::CK_BitCast;
3915    return false;
3916  }
3917
3918  // All non-pointer scalars can be cast to ExtVector type.  The appropriate
3919  // conversion will take place first from scalar to elt type, and then
3920  // splat from elt type to vector.
3921  if (SrcTy->isPointerType())
3922    return Diag(R.getBegin(),
3923                diag::err_invalid_conversion_between_vector_and_scalar)
3924      << DestTy << SrcTy << R;
3925
3926  QualType DestElemTy = DestTy->getAs<ExtVectorType>()->getElementType();
3927  ImpCastExprToType(CastExpr, DestElemTy,
3928                    getScalarCastKind(Context, SrcTy, DestElemTy));
3929
3930  Kind = CastExpr::CK_VectorSplat;
3931  return false;
3932}
3933
3934Action::OwningExprResult
3935Sema::ActOnCastExpr(Scope *S, SourceLocation LParenLoc, TypeTy *Ty,
3936                    SourceLocation RParenLoc, ExprArg Op) {
3937  assert((Ty != 0) && (Op.get() != 0) &&
3938         "ActOnCastExpr(): missing type or expr");
3939
3940  TypeSourceInfo *castTInfo;
3941  QualType castType = GetTypeFromParser(Ty, &castTInfo);
3942  if (!castTInfo)
3943    castTInfo = Context.getTrivialTypeSourceInfo(castType);
3944
3945  // If the Expr being casted is a ParenListExpr, handle it specially.
3946  Expr *castExpr = (Expr *)Op.get();
3947  if (isa<ParenListExpr>(castExpr))
3948    return ActOnCastOfParenListExpr(S, LParenLoc, RParenLoc, move(Op),
3949                                    castTInfo);
3950
3951  return BuildCStyleCastExpr(LParenLoc, castTInfo, RParenLoc, move(Op));
3952}
3953
3954Action::OwningExprResult
3955Sema::BuildCStyleCastExpr(SourceLocation LParenLoc, TypeSourceInfo *Ty,
3956                          SourceLocation RParenLoc, ExprArg Op) {
3957  Expr *castExpr = static_cast<Expr*>(Op.get());
3958
3959  CastExpr::CastKind Kind = CastExpr::CK_Unknown;
3960  if (CheckCastTypes(SourceRange(LParenLoc, RParenLoc), Ty->getType(), castExpr,
3961                     Kind))
3962    return ExprError();
3963
3964  Op.release();
3965  return Owned(new (Context) CStyleCastExpr(Ty->getType().getNonReferenceType(),
3966                                            Kind, castExpr, Ty,
3967                                            LParenLoc, RParenLoc));
3968}
3969
3970/// This is not an AltiVec-style cast, so turn the ParenListExpr into a sequence
3971/// of comma binary operators.
3972Action::OwningExprResult
3973Sema::MaybeConvertParenListExprToParenExpr(Scope *S, ExprArg EA) {
3974  Expr *expr = EA.takeAs<Expr>();
3975  ParenListExpr *E = dyn_cast<ParenListExpr>(expr);
3976  if (!E)
3977    return Owned(expr);
3978
3979  OwningExprResult Result(*this, E->getExpr(0));
3980
3981  for (unsigned i = 1, e = E->getNumExprs(); i != e && !Result.isInvalid(); ++i)
3982    Result = ActOnBinOp(S, E->getExprLoc(), tok::comma, move(Result),
3983                        Owned(E->getExpr(i)));
3984
3985  return ActOnParenExpr(E->getLParenLoc(), E->getRParenLoc(), move(Result));
3986}
3987
3988Action::OwningExprResult
3989Sema::ActOnCastOfParenListExpr(Scope *S, SourceLocation LParenLoc,
3990                               SourceLocation RParenLoc, ExprArg Op,
3991                               TypeSourceInfo *TInfo) {
3992  ParenListExpr *PE = (ParenListExpr *)Op.get();
3993  QualType Ty = TInfo->getType();
3994
3995  // If this is an altivec initializer, '(' type ')' '(' init, ..., init ')'
3996  // then handle it as such.
3997  if (getLangOptions().AltiVec && Ty->isVectorType()) {
3998    if (PE->getNumExprs() == 0) {
3999      Diag(PE->getExprLoc(), diag::err_altivec_empty_initializer);
4000      return ExprError();
4001    }
4002
4003    llvm::SmallVector<Expr *, 8> initExprs;
4004    for (unsigned i = 0, e = PE->getNumExprs(); i != e; ++i)
4005      initExprs.push_back(PE->getExpr(i));
4006
4007    // FIXME: This means that pretty-printing the final AST will produce curly
4008    // braces instead of the original commas.
4009    Op.release();
4010    InitListExpr *E = new (Context) InitListExpr(Context, LParenLoc,
4011                                                 &initExprs[0],
4012                                                 initExprs.size(), RParenLoc);
4013    E->setType(Ty);
4014    return BuildCompoundLiteralExpr(LParenLoc, TInfo, RParenLoc, Owned(E));
4015  } else {
4016    // This is not an AltiVec-style cast, so turn the ParenListExpr into a
4017    // sequence of BinOp comma operators.
4018    Op = MaybeConvertParenListExprToParenExpr(S, move(Op));
4019    return BuildCStyleCastExpr(LParenLoc, TInfo, RParenLoc, move(Op));
4020  }
4021}
4022
4023Action::OwningExprResult Sema::ActOnParenOrParenListExpr(SourceLocation L,
4024                                                  SourceLocation R,
4025                                                  MultiExprArg Val,
4026                                                  TypeTy *TypeOfCast) {
4027  unsigned nexprs = Val.size();
4028  Expr **exprs = reinterpret_cast<Expr**>(Val.release());
4029  assert((exprs != 0) && "ActOnParenOrParenListExpr() missing expr list");
4030  Expr *expr;
4031  if (nexprs == 1 && TypeOfCast && !TypeIsVectorType(TypeOfCast))
4032    expr = new (Context) ParenExpr(L, R, exprs[0]);
4033  else
4034    expr = new (Context) ParenListExpr(Context, L, exprs, nexprs, R);
4035  return Owned(expr);
4036}
4037
4038/// Note that lhs is not null here, even if this is the gnu "x ?: y" extension.
4039/// In that case, lhs = cond.
4040/// C99 6.5.15
4041QualType Sema::CheckConditionalOperands(Expr *&Cond, Expr *&LHS, Expr *&RHS,
4042                                        SourceLocation QuestionLoc) {
4043  // C++ is sufficiently different to merit its own checker.
4044  if (getLangOptions().CPlusPlus)
4045    return CXXCheckConditionalOperands(Cond, LHS, RHS, QuestionLoc);
4046
4047  CheckSignCompare(LHS, RHS, QuestionLoc);
4048
4049  UsualUnaryConversions(Cond);
4050  UsualUnaryConversions(LHS);
4051  UsualUnaryConversions(RHS);
4052  QualType CondTy = Cond->getType();
4053  QualType LHSTy = LHS->getType();
4054  QualType RHSTy = RHS->getType();
4055
4056  // first, check the condition.
4057  if (!CondTy->isScalarType()) { // C99 6.5.15p2
4058    Diag(Cond->getLocStart(), diag::err_typecheck_cond_expect_scalar)
4059      << CondTy;
4060    return QualType();
4061  }
4062
4063  // Now check the two expressions.
4064  if (LHSTy->isVectorType() || RHSTy->isVectorType())
4065    return CheckVectorOperands(QuestionLoc, LHS, RHS);
4066
4067  // If both operands have arithmetic type, do the usual arithmetic conversions
4068  // to find a common type: C99 6.5.15p3,5.
4069  if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {
4070    UsualArithmeticConversions(LHS, RHS);
4071    return LHS->getType();
4072  }
4073
4074  // If both operands are the same structure or union type, the result is that
4075  // type.
4076  if (const RecordType *LHSRT = LHSTy->getAs<RecordType>()) {    // C99 6.5.15p3
4077    if (const RecordType *RHSRT = RHSTy->getAs<RecordType>())
4078      if (LHSRT->getDecl() == RHSRT->getDecl())
4079        // "If both the operands have structure or union type, the result has
4080        // that type."  This implies that CV qualifiers are dropped.
4081        return LHSTy.getUnqualifiedType();
4082    // FIXME: Type of conditional expression must be complete in C mode.
4083  }
4084
4085  // C99 6.5.15p5: "If both operands have void type, the result has void type."
4086  // The following || allows only one side to be void (a GCC-ism).
4087  if (LHSTy->isVoidType() || RHSTy->isVoidType()) {
4088    if (!LHSTy->isVoidType())
4089      Diag(RHS->getLocStart(), diag::ext_typecheck_cond_one_void)
4090        << RHS->getSourceRange();
4091    if (!RHSTy->isVoidType())
4092      Diag(LHS->getLocStart(), diag::ext_typecheck_cond_one_void)
4093        << LHS->getSourceRange();
4094    ImpCastExprToType(LHS, Context.VoidTy, CastExpr::CK_ToVoid);
4095    ImpCastExprToType(RHS, Context.VoidTy, CastExpr::CK_ToVoid);
4096    return Context.VoidTy;
4097  }
4098  // C99 6.5.15p6 - "if one operand is a null pointer constant, the result has
4099  // the type of the other operand."
4100  if ((LHSTy->isAnyPointerType() || LHSTy->isBlockPointerType()) &&
4101      RHS->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
4102    // promote the null to a pointer.
4103    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_Unknown);
4104    return LHSTy;
4105  }
4106  if ((RHSTy->isAnyPointerType() || RHSTy->isBlockPointerType()) &&
4107      LHS->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
4108    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_Unknown);
4109    return RHSTy;
4110  }
4111
4112  // All objective-c pointer type analysis is done here.
4113  QualType compositeType = FindCompositeObjCPointerType(LHS, RHS,
4114                                                        QuestionLoc);
4115  if (!compositeType.isNull())
4116    return compositeType;
4117
4118
4119  // Handle block pointer types.
4120  if (LHSTy->isBlockPointerType() || RHSTy->isBlockPointerType()) {
4121    if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {
4122      if (LHSTy->isVoidPointerType() || RHSTy->isVoidPointerType()) {
4123        QualType destType = Context.getPointerType(Context.VoidTy);
4124        ImpCastExprToType(LHS, destType, CastExpr::CK_BitCast);
4125        ImpCastExprToType(RHS, destType, CastExpr::CK_BitCast);
4126        return destType;
4127      }
4128      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
4129      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4130      return QualType();
4131    }
4132    // We have 2 block pointer types.
4133    if (Context.getCanonicalType(LHSTy) == Context.getCanonicalType(RHSTy)) {
4134      // Two identical block pointer types are always compatible.
4135      return LHSTy;
4136    }
4137    // The block pointer types aren't identical, continue checking.
4138    QualType lhptee = LHSTy->getAs<BlockPointerType>()->getPointeeType();
4139    QualType rhptee = RHSTy->getAs<BlockPointerType>()->getPointeeType();
4140
4141    if (!Context.typesAreCompatible(lhptee.getUnqualifiedType(),
4142                                    rhptee.getUnqualifiedType())) {
4143      Diag(QuestionLoc, diag::warn_typecheck_cond_incompatible_pointers)
4144      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4145      // In this situation, we assume void* type. No especially good
4146      // reason, but this is what gcc does, and we do have to pick
4147      // to get a consistent AST.
4148      QualType incompatTy = Context.getPointerType(Context.VoidTy);
4149      ImpCastExprToType(LHS, incompatTy, CastExpr::CK_BitCast);
4150      ImpCastExprToType(RHS, incompatTy, CastExpr::CK_BitCast);
4151      return incompatTy;
4152    }
4153    // The block pointer types are compatible.
4154    ImpCastExprToType(LHS, LHSTy, CastExpr::CK_BitCast);
4155    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4156    return LHSTy;
4157  }
4158
4159  // Check constraints for C object pointers types (C99 6.5.15p3,6).
4160  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {
4161    // get the "pointed to" types
4162    QualType lhptee = LHSTy->getAs<PointerType>()->getPointeeType();
4163    QualType rhptee = RHSTy->getAs<PointerType>()->getPointeeType();
4164
4165    // ignore qualifiers on void (C99 6.5.15p3, clause 6)
4166    if (lhptee->isVoidType() && rhptee->isIncompleteOrObjectType()) {
4167      // Figure out necessary qualifiers (C99 6.5.15p6)
4168      QualType destPointee
4169        = Context.getQualifiedType(lhptee, rhptee.getQualifiers());
4170      QualType destType = Context.getPointerType(destPointee);
4171      // Add qualifiers if necessary.
4172      ImpCastExprToType(LHS, destType, CastExpr::CK_NoOp);
4173      // Promote to void*.
4174      ImpCastExprToType(RHS, destType, CastExpr::CK_BitCast);
4175      return destType;
4176    }
4177    if (rhptee->isVoidType() && lhptee->isIncompleteOrObjectType()) {
4178      QualType destPointee
4179        = Context.getQualifiedType(rhptee, lhptee.getQualifiers());
4180      QualType destType = Context.getPointerType(destPointee);
4181      // Add qualifiers if necessary.
4182      ImpCastExprToType(RHS, destType, CastExpr::CK_NoOp);
4183      // Promote to void*.
4184      ImpCastExprToType(LHS, destType, CastExpr::CK_BitCast);
4185      return destType;
4186    }
4187
4188    if (Context.getCanonicalType(LHSTy) == Context.getCanonicalType(RHSTy)) {
4189      // Two identical pointer types are always compatible.
4190      return LHSTy;
4191    }
4192    if (!Context.typesAreCompatible(lhptee.getUnqualifiedType(),
4193                                    rhptee.getUnqualifiedType())) {
4194      Diag(QuestionLoc, diag::warn_typecheck_cond_incompatible_pointers)
4195        << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4196      // In this situation, we assume void* type. No especially good
4197      // reason, but this is what gcc does, and we do have to pick
4198      // to get a consistent AST.
4199      QualType incompatTy = Context.getPointerType(Context.VoidTy);
4200      ImpCastExprToType(LHS, incompatTy, CastExpr::CK_BitCast);
4201      ImpCastExprToType(RHS, incompatTy, CastExpr::CK_BitCast);
4202      return incompatTy;
4203    }
4204    // The pointer types are compatible.
4205    // C99 6.5.15p6: If both operands are pointers to compatible types *or* to
4206    // differently qualified versions of compatible types, the result type is
4207    // a pointer to an appropriately qualified version of the *composite*
4208    // type.
4209    // FIXME: Need to calculate the composite type.
4210    // FIXME: Need to add qualifiers
4211    ImpCastExprToType(LHS, LHSTy, CastExpr::CK_BitCast);
4212    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4213    return LHSTy;
4214  }
4215
4216  // GCC compatibility: soften pointer/integer mismatch.
4217  if (RHSTy->isPointerType() && LHSTy->isIntegerType()) {
4218    Diag(QuestionLoc, diag::warn_typecheck_cond_pointer_integer_mismatch)
4219      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4220    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_IntegralToPointer);
4221    return RHSTy;
4222  }
4223  if (LHSTy->isPointerType() && RHSTy->isIntegerType()) {
4224    Diag(QuestionLoc, diag::warn_typecheck_cond_pointer_integer_mismatch)
4225      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4226    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_IntegralToPointer);
4227    return LHSTy;
4228  }
4229
4230  // Otherwise, the operands are not compatible.
4231  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
4232    << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4233  return QualType();
4234}
4235
4236/// FindCompositeObjCPointerType - Helper method to find composite type of
4237/// two objective-c pointer types of the two input expressions.
4238QualType Sema::FindCompositeObjCPointerType(Expr *&LHS, Expr *&RHS,
4239                                        SourceLocation QuestionLoc) {
4240  QualType LHSTy = LHS->getType();
4241  QualType RHSTy = RHS->getType();
4242
4243  // Handle things like Class and struct objc_class*.  Here we case the result
4244  // to the pseudo-builtin, because that will be implicitly cast back to the
4245  // redefinition type if an attempt is made to access its fields.
4246  if (LHSTy->isObjCClassType() &&
4247      (RHSTy.getDesugaredType() == Context.ObjCClassRedefinitionType)) {
4248    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4249    return LHSTy;
4250  }
4251  if (RHSTy->isObjCClassType() &&
4252      (LHSTy.getDesugaredType() == Context.ObjCClassRedefinitionType)) {
4253    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_BitCast);
4254    return RHSTy;
4255  }
4256  // And the same for struct objc_object* / id
4257  if (LHSTy->isObjCIdType() &&
4258      (RHSTy.getDesugaredType() == Context.ObjCIdRedefinitionType)) {
4259    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4260    return LHSTy;
4261  }
4262  if (RHSTy->isObjCIdType() &&
4263      (LHSTy.getDesugaredType() == Context.ObjCIdRedefinitionType)) {
4264    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_BitCast);
4265    return RHSTy;
4266  }
4267  // And the same for struct objc_selector* / SEL
4268  if (Context.isObjCSelType(LHSTy) &&
4269      (RHSTy.getDesugaredType() == Context.ObjCSelRedefinitionType)) {
4270    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4271    return LHSTy;
4272  }
4273  if (Context.isObjCSelType(RHSTy) &&
4274      (LHSTy.getDesugaredType() == Context.ObjCSelRedefinitionType)) {
4275    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_BitCast);
4276    return RHSTy;
4277  }
4278  // Check constraints for Objective-C object pointers types.
4279  if (LHSTy->isObjCObjectPointerType() && RHSTy->isObjCObjectPointerType()) {
4280
4281    if (Context.getCanonicalType(LHSTy) == Context.getCanonicalType(RHSTy)) {
4282      // Two identical object pointer types are always compatible.
4283      return LHSTy;
4284    }
4285    const ObjCObjectPointerType *LHSOPT = LHSTy->getAs<ObjCObjectPointerType>();
4286    const ObjCObjectPointerType *RHSOPT = RHSTy->getAs<ObjCObjectPointerType>();
4287    QualType compositeType = LHSTy;
4288
4289    // If both operands are interfaces and either operand can be
4290    // assigned to the other, use that type as the composite
4291    // type. This allows
4292    //   xxx ? (A*) a : (B*) b
4293    // where B is a subclass of A.
4294    //
4295    // Additionally, as for assignment, if either type is 'id'
4296    // allow silent coercion. Finally, if the types are
4297    // incompatible then make sure to use 'id' as the composite
4298    // type so the result is acceptable for sending messages to.
4299
4300    // FIXME: Consider unifying with 'areComparableObjCPointerTypes'.
4301    // It could return the composite type.
4302    if (Context.canAssignObjCInterfaces(LHSOPT, RHSOPT)) {
4303      compositeType = RHSOPT->isObjCBuiltinType() ? RHSTy : LHSTy;
4304    } else if (Context.canAssignObjCInterfaces(RHSOPT, LHSOPT)) {
4305      compositeType = LHSOPT->isObjCBuiltinType() ? LHSTy : RHSTy;
4306    } else if ((LHSTy->isObjCQualifiedIdType() ||
4307                RHSTy->isObjCQualifiedIdType()) &&
4308               Context.ObjCQualifiedIdTypesAreCompatible(LHSTy, RHSTy, true)) {
4309      // Need to handle "id<xx>" explicitly.
4310      // GCC allows qualified id and any Objective-C type to devolve to
4311      // id. Currently localizing to here until clear this should be
4312      // part of ObjCQualifiedIdTypesAreCompatible.
4313      compositeType = Context.getObjCIdType();
4314    } else if (LHSTy->isObjCIdType() || RHSTy->isObjCIdType()) {
4315      compositeType = Context.getObjCIdType();
4316    } else if (!(compositeType =
4317                 Context.areCommonBaseCompatible(LHSOPT, RHSOPT)).isNull())
4318      ;
4319    else {
4320      Diag(QuestionLoc, diag::ext_typecheck_cond_incompatible_operands)
4321      << LHSTy << RHSTy
4322      << LHS->getSourceRange() << RHS->getSourceRange();
4323      QualType incompatTy = Context.getObjCIdType();
4324      ImpCastExprToType(LHS, incompatTy, CastExpr::CK_BitCast);
4325      ImpCastExprToType(RHS, incompatTy, CastExpr::CK_BitCast);
4326      return incompatTy;
4327    }
4328    // The object pointer types are compatible.
4329    ImpCastExprToType(LHS, compositeType, CastExpr::CK_BitCast);
4330    ImpCastExprToType(RHS, compositeType, CastExpr::CK_BitCast);
4331    return compositeType;
4332  }
4333  // Check Objective-C object pointer types and 'void *'
4334  if (LHSTy->isVoidPointerType() && RHSTy->isObjCObjectPointerType()) {
4335    QualType lhptee = LHSTy->getAs<PointerType>()->getPointeeType();
4336    QualType rhptee = RHSTy->getAs<ObjCObjectPointerType>()->getPointeeType();
4337    QualType destPointee
4338    = Context.getQualifiedType(lhptee, rhptee.getQualifiers());
4339    QualType destType = Context.getPointerType(destPointee);
4340    // Add qualifiers if necessary.
4341    ImpCastExprToType(LHS, destType, CastExpr::CK_NoOp);
4342    // Promote to void*.
4343    ImpCastExprToType(RHS, destType, CastExpr::CK_BitCast);
4344    return destType;
4345  }
4346  if (LHSTy->isObjCObjectPointerType() && RHSTy->isVoidPointerType()) {
4347    QualType lhptee = LHSTy->getAs<ObjCObjectPointerType>()->getPointeeType();
4348    QualType rhptee = RHSTy->getAs<PointerType>()->getPointeeType();
4349    QualType destPointee
4350    = Context.getQualifiedType(rhptee, lhptee.getQualifiers());
4351    QualType destType = Context.getPointerType(destPointee);
4352    // Add qualifiers if necessary.
4353    ImpCastExprToType(RHS, destType, CastExpr::CK_NoOp);
4354    // Promote to void*.
4355    ImpCastExprToType(LHS, destType, CastExpr::CK_BitCast);
4356    return destType;
4357  }
4358  return QualType();
4359}
4360
4361/// ActOnConditionalOp - Parse a ?: operation.  Note that 'LHS' may be null
4362/// in the case of a the GNU conditional expr extension.
4363Action::OwningExprResult Sema::ActOnConditionalOp(SourceLocation QuestionLoc,
4364                                                  SourceLocation ColonLoc,
4365                                                  ExprArg Cond, ExprArg LHS,
4366                                                  ExprArg RHS) {
4367  Expr *CondExpr = (Expr *) Cond.get();
4368  Expr *LHSExpr = (Expr *) LHS.get(), *RHSExpr = (Expr *) RHS.get();
4369
4370  // If this is the gnu "x ?: y" extension, analyze the types as though the LHS
4371  // was the condition.
4372  bool isLHSNull = LHSExpr == 0;
4373  if (isLHSNull)
4374    LHSExpr = CondExpr;
4375
4376  QualType result = CheckConditionalOperands(CondExpr, LHSExpr,
4377                                             RHSExpr, QuestionLoc);
4378  if (result.isNull())
4379    return ExprError();
4380
4381  Cond.release();
4382  LHS.release();
4383  RHS.release();
4384  return Owned(new (Context) ConditionalOperator(CondExpr, QuestionLoc,
4385                                                 isLHSNull ? 0 : LHSExpr,
4386                                                 ColonLoc, RHSExpr, result));
4387}
4388
4389// CheckPointerTypesForAssignment - This is a very tricky routine (despite
4390// being closely modeled after the C99 spec:-). The odd characteristic of this
4391// routine is it effectively iqnores the qualifiers on the top level pointee.
4392// This circumvents the usual type rules specified in 6.2.7p1 & 6.7.5.[1-3].
4393// FIXME: add a couple examples in this comment.
4394Sema::AssignConvertType
4395Sema::CheckPointerTypesForAssignment(QualType lhsType, QualType rhsType) {
4396  QualType lhptee, rhptee;
4397
4398  if ((lhsType->isObjCClassType() &&
4399       (rhsType.getDesugaredType() == Context.ObjCClassRedefinitionType)) ||
4400     (rhsType->isObjCClassType() &&
4401       (lhsType.getDesugaredType() == Context.ObjCClassRedefinitionType))) {
4402      return Compatible;
4403  }
4404
4405  // get the "pointed to" type (ignoring qualifiers at the top level)
4406  lhptee = lhsType->getAs<PointerType>()->getPointeeType();
4407  rhptee = rhsType->getAs<PointerType>()->getPointeeType();
4408
4409  // make sure we operate on the canonical type
4410  lhptee = Context.getCanonicalType(lhptee);
4411  rhptee = Context.getCanonicalType(rhptee);
4412
4413  AssignConvertType ConvTy = Compatible;
4414
4415  // C99 6.5.16.1p1: This following citation is common to constraints
4416  // 3 & 4 (below). ...and the type *pointed to* by the left has all the
4417  // qualifiers of the type *pointed to* by the right;
4418  // FIXME: Handle ExtQualType
4419  if (!lhptee.isAtLeastAsQualifiedAs(rhptee))
4420    ConvTy = CompatiblePointerDiscardsQualifiers;
4421
4422  // C99 6.5.16.1p1 (constraint 4): If one operand is a pointer to an object or
4423  // incomplete type and the other is a pointer to a qualified or unqualified
4424  // version of void...
4425  if (lhptee->isVoidType()) {
4426    if (rhptee->isIncompleteOrObjectType())
4427      return ConvTy;
4428
4429    // As an extension, we allow cast to/from void* to function pointer.
4430    assert(rhptee->isFunctionType());
4431    return FunctionVoidPointer;
4432  }
4433
4434  if (rhptee->isVoidType()) {
4435    if (lhptee->isIncompleteOrObjectType())
4436      return ConvTy;
4437
4438    // As an extension, we allow cast to/from void* to function pointer.
4439    assert(lhptee->isFunctionType());
4440    return FunctionVoidPointer;
4441  }
4442  // C99 6.5.16.1p1 (constraint 3): both operands are pointers to qualified or
4443  // unqualified versions of compatible types, ...
4444  lhptee = lhptee.getUnqualifiedType();
4445  rhptee = rhptee.getUnqualifiedType();
4446  if (!Context.typesAreCompatible(lhptee, rhptee)) {
4447    // Check if the pointee types are compatible ignoring the sign.
4448    // We explicitly check for char so that we catch "char" vs
4449    // "unsigned char" on systems where "char" is unsigned.
4450    if (lhptee->isCharType())
4451      lhptee = Context.UnsignedCharTy;
4452    else if (lhptee->isSignedIntegerType())
4453      lhptee = Context.getCorrespondingUnsignedType(lhptee);
4454
4455    if (rhptee->isCharType())
4456      rhptee = Context.UnsignedCharTy;
4457    else if (rhptee->isSignedIntegerType())
4458      rhptee = Context.getCorrespondingUnsignedType(rhptee);
4459
4460    if (lhptee == rhptee) {
4461      // Types are compatible ignoring the sign. Qualifier incompatibility
4462      // takes priority over sign incompatibility because the sign
4463      // warning can be disabled.
4464      if (ConvTy != Compatible)
4465        return ConvTy;
4466      return IncompatiblePointerSign;
4467    }
4468
4469    // If we are a multi-level pointer, it's possible that our issue is simply
4470    // one of qualification - e.g. char ** -> const char ** is not allowed. If
4471    // the eventual target type is the same and the pointers have the same
4472    // level of indirection, this must be the issue.
4473    if (lhptee->isPointerType() && rhptee->isPointerType()) {
4474      do {
4475        lhptee = lhptee->getAs<PointerType>()->getPointeeType();
4476        rhptee = rhptee->getAs<PointerType>()->getPointeeType();
4477
4478        lhptee = Context.getCanonicalType(lhptee);
4479        rhptee = Context.getCanonicalType(rhptee);
4480      } while (lhptee->isPointerType() && rhptee->isPointerType());
4481
4482      if (Context.hasSameUnqualifiedType(lhptee, rhptee))
4483        return IncompatibleNestedPointerQualifiers;
4484    }
4485
4486    // General pointer incompatibility takes priority over qualifiers.
4487    return IncompatiblePointer;
4488  }
4489  return ConvTy;
4490}
4491
4492/// CheckBlockPointerTypesForAssignment - This routine determines whether two
4493/// block pointer types are compatible or whether a block and normal pointer
4494/// are compatible. It is more restrict than comparing two function pointer
4495// types.
4496Sema::AssignConvertType
4497Sema::CheckBlockPointerTypesForAssignment(QualType lhsType,
4498                                          QualType rhsType) {
4499  QualType lhptee, rhptee;
4500
4501  // get the "pointed to" type (ignoring qualifiers at the top level)
4502  lhptee = lhsType->getAs<BlockPointerType>()->getPointeeType();
4503  rhptee = rhsType->getAs<BlockPointerType>()->getPointeeType();
4504
4505  // make sure we operate on the canonical type
4506  lhptee = Context.getCanonicalType(lhptee);
4507  rhptee = Context.getCanonicalType(rhptee);
4508
4509  AssignConvertType ConvTy = Compatible;
4510
4511  // For blocks we enforce that qualifiers are identical.
4512  if (lhptee.getLocalCVRQualifiers() != rhptee.getLocalCVRQualifiers())
4513    ConvTy = CompatiblePointerDiscardsQualifiers;
4514
4515  if (!getLangOptions().CPlusPlus) {
4516    if (!Context.typesAreBlockPointerCompatible(lhsType, rhsType))
4517      return IncompatibleBlockPointer;
4518  }
4519  else if (!Context.typesAreCompatible(lhptee, rhptee))
4520    return IncompatibleBlockPointer;
4521  return ConvTy;
4522}
4523
4524/// CheckObjCPointerTypesForAssignment - Compares two objective-c pointer types
4525/// for assignment compatibility.
4526Sema::AssignConvertType
4527Sema::CheckObjCPointerTypesForAssignment(QualType lhsType, QualType rhsType) {
4528  if (lhsType->isObjCBuiltinType()) {
4529    // Class is not compatible with ObjC object pointers.
4530    if (lhsType->isObjCClassType() && !rhsType->isObjCBuiltinType() &&
4531        !rhsType->isObjCQualifiedClassType())
4532      return IncompatiblePointer;
4533    return Compatible;
4534  }
4535  if (rhsType->isObjCBuiltinType()) {
4536    // Class is not compatible with ObjC object pointers.
4537    if (rhsType->isObjCClassType() && !lhsType->isObjCBuiltinType() &&
4538        !lhsType->isObjCQualifiedClassType())
4539      return IncompatiblePointer;
4540    return Compatible;
4541  }
4542  QualType lhptee =
4543  lhsType->getAs<ObjCObjectPointerType>()->getPointeeType();
4544  QualType rhptee =
4545  rhsType->getAs<ObjCObjectPointerType>()->getPointeeType();
4546  // make sure we operate on the canonical type
4547  lhptee = Context.getCanonicalType(lhptee);
4548  rhptee = Context.getCanonicalType(rhptee);
4549  if (!lhptee.isAtLeastAsQualifiedAs(rhptee))
4550    return CompatiblePointerDiscardsQualifiers;
4551
4552  if (Context.typesAreCompatible(lhsType, rhsType))
4553    return Compatible;
4554  if (lhsType->isObjCQualifiedIdType() || rhsType->isObjCQualifiedIdType())
4555    return IncompatibleObjCQualifiedId;
4556  return IncompatiblePointer;
4557}
4558
4559/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently
4560/// has code to accommodate several GCC extensions when type checking
4561/// pointers. Here are some objectionable examples that GCC considers warnings:
4562///
4563///  int a, *pint;
4564///  short *pshort;
4565///  struct foo *pfoo;
4566///
4567///  pint = pshort; // warning: assignment from incompatible pointer type
4568///  a = pint; // warning: assignment makes integer from pointer without a cast
4569///  pint = a; // warning: assignment makes pointer from integer without a cast
4570///  pint = pfoo; // warning: assignment from incompatible pointer type
4571///
4572/// As a result, the code for dealing with pointers is more complex than the
4573/// C99 spec dictates.
4574///
4575Sema::AssignConvertType
4576Sema::CheckAssignmentConstraints(QualType lhsType, QualType rhsType) {
4577  // Get canonical types.  We're not formatting these types, just comparing
4578  // them.
4579  lhsType = Context.getCanonicalType(lhsType).getUnqualifiedType();
4580  rhsType = Context.getCanonicalType(rhsType).getUnqualifiedType();
4581
4582  if (lhsType == rhsType)
4583    return Compatible; // Common case: fast path an exact match.
4584
4585  if ((lhsType->isObjCClassType() &&
4586       (rhsType.getDesugaredType() == Context.ObjCClassRedefinitionType)) ||
4587     (rhsType->isObjCClassType() &&
4588       (lhsType.getDesugaredType() == Context.ObjCClassRedefinitionType))) {
4589      return Compatible;
4590  }
4591
4592  // If the left-hand side is a reference type, then we are in a
4593  // (rare!) case where we've allowed the use of references in C,
4594  // e.g., as a parameter type in a built-in function. In this case,
4595  // just make sure that the type referenced is compatible with the
4596  // right-hand side type. The caller is responsible for adjusting
4597  // lhsType so that the resulting expression does not have reference
4598  // type.
4599  if (const ReferenceType *lhsTypeRef = lhsType->getAs<ReferenceType>()) {
4600    if (Context.typesAreCompatible(lhsTypeRef->getPointeeType(), rhsType))
4601      return Compatible;
4602    return Incompatible;
4603  }
4604  // Allow scalar to ExtVector assignments, and assignments of an ExtVector type
4605  // to the same ExtVector type.
4606  if (lhsType->isExtVectorType()) {
4607    if (rhsType->isExtVectorType())
4608      return lhsType == rhsType ? Compatible : Incompatible;
4609    if (!rhsType->isVectorType() && rhsType->isArithmeticType())
4610      return Compatible;
4611  }
4612
4613  if (lhsType->isVectorType() || rhsType->isVectorType()) {
4614    // If we are allowing lax vector conversions, and LHS and RHS are both
4615    // vectors, the total size only needs to be the same. This is a bitcast;
4616    // no bits are changed but the result type is different.
4617    if (getLangOptions().LaxVectorConversions &&
4618        lhsType->isVectorType() && rhsType->isVectorType()) {
4619      if (Context.getTypeSize(lhsType) == Context.getTypeSize(rhsType))
4620        return IncompatibleVectors;
4621    }
4622    return Incompatible;
4623  }
4624
4625  if (lhsType->isArithmeticType() && rhsType->isArithmeticType())
4626    return Compatible;
4627
4628  if (isa<PointerType>(lhsType)) {
4629    if (rhsType->isIntegerType())
4630      return IntToPointer;
4631
4632    if (isa<PointerType>(rhsType))
4633      return CheckPointerTypesForAssignment(lhsType, rhsType);
4634
4635    // In general, C pointers are not compatible with ObjC object pointers.
4636    if (isa<ObjCObjectPointerType>(rhsType)) {
4637      if (lhsType->isVoidPointerType()) // an exception to the rule.
4638        return Compatible;
4639      return IncompatiblePointer;
4640    }
4641    if (rhsType->getAs<BlockPointerType>()) {
4642      if (lhsType->getAs<PointerType>()->getPointeeType()->isVoidType())
4643        return Compatible;
4644
4645      // Treat block pointers as objects.
4646      if (getLangOptions().ObjC1 && lhsType->isObjCIdType())
4647        return Compatible;
4648    }
4649    return Incompatible;
4650  }
4651
4652  if (isa<BlockPointerType>(lhsType)) {
4653    if (rhsType->isIntegerType())
4654      return IntToBlockPointer;
4655
4656    // Treat block pointers as objects.
4657    if (getLangOptions().ObjC1 && rhsType->isObjCIdType())
4658      return Compatible;
4659
4660    if (rhsType->isBlockPointerType())
4661      return CheckBlockPointerTypesForAssignment(lhsType, rhsType);
4662
4663    if (const PointerType *RHSPT = rhsType->getAs<PointerType>()) {
4664      if (RHSPT->getPointeeType()->isVoidType())
4665        return Compatible;
4666    }
4667    return Incompatible;
4668  }
4669
4670  if (isa<ObjCObjectPointerType>(lhsType)) {
4671    if (rhsType->isIntegerType())
4672      return IntToPointer;
4673
4674    // In general, C pointers are not compatible with ObjC object pointers.
4675    if (isa<PointerType>(rhsType)) {
4676      if (rhsType->isVoidPointerType()) // an exception to the rule.
4677        return Compatible;
4678      return IncompatiblePointer;
4679    }
4680    if (rhsType->isObjCObjectPointerType()) {
4681      return CheckObjCPointerTypesForAssignment(lhsType, rhsType);
4682    }
4683    if (const PointerType *RHSPT = rhsType->getAs<PointerType>()) {
4684      if (RHSPT->getPointeeType()->isVoidType())
4685        return Compatible;
4686    }
4687    // Treat block pointers as objects.
4688    if (rhsType->isBlockPointerType())
4689      return Compatible;
4690    return Incompatible;
4691  }
4692  if (isa<PointerType>(rhsType)) {
4693    // C99 6.5.16.1p1: the left operand is _Bool and the right is a pointer.
4694    if (lhsType == Context.BoolTy)
4695      return Compatible;
4696
4697    if (lhsType->isIntegerType())
4698      return PointerToInt;
4699
4700    if (isa<PointerType>(lhsType))
4701      return CheckPointerTypesForAssignment(lhsType, rhsType);
4702
4703    if (isa<BlockPointerType>(lhsType) &&
4704        rhsType->getAs<PointerType>()->getPointeeType()->isVoidType())
4705      return Compatible;
4706    return Incompatible;
4707  }
4708  if (isa<ObjCObjectPointerType>(rhsType)) {
4709    // C99 6.5.16.1p1: the left operand is _Bool and the right is a pointer.
4710    if (lhsType == Context.BoolTy)
4711      return Compatible;
4712
4713    if (lhsType->isIntegerType())
4714      return PointerToInt;
4715
4716    // In general, C pointers are not compatible with ObjC object pointers.
4717    if (isa<PointerType>(lhsType)) {
4718      if (lhsType->isVoidPointerType()) // an exception to the rule.
4719        return Compatible;
4720      return IncompatiblePointer;
4721    }
4722    if (isa<BlockPointerType>(lhsType) &&
4723        rhsType->getAs<PointerType>()->getPointeeType()->isVoidType())
4724      return Compatible;
4725    return Incompatible;
4726  }
4727
4728  if (isa<TagType>(lhsType) && isa<TagType>(rhsType)) {
4729    if (Context.typesAreCompatible(lhsType, rhsType))
4730      return Compatible;
4731  }
4732  return Incompatible;
4733}
4734
4735/// \brief Constructs a transparent union from an expression that is
4736/// used to initialize the transparent union.
4737static void ConstructTransparentUnion(ASTContext &C, Expr *&E,
4738                                      QualType UnionType, FieldDecl *Field) {
4739  // Build an initializer list that designates the appropriate member
4740  // of the transparent union.
4741  InitListExpr *Initializer = new (C) InitListExpr(C, SourceLocation(),
4742                                                   &E, 1,
4743                                                   SourceLocation());
4744  Initializer->setType(UnionType);
4745  Initializer->setInitializedFieldInUnion(Field);
4746
4747  // Build a compound literal constructing a value of the transparent
4748  // union type from this initializer list.
4749  TypeSourceInfo *unionTInfo = C.getTrivialTypeSourceInfo(UnionType);
4750  E = new (C) CompoundLiteralExpr(SourceLocation(), unionTInfo, UnionType,
4751                                  Initializer, false);
4752}
4753
4754Sema::AssignConvertType
4755Sema::CheckTransparentUnionArgumentConstraints(QualType ArgType, Expr *&rExpr) {
4756  QualType FromType = rExpr->getType();
4757
4758  // If the ArgType is a Union type, we want to handle a potential
4759  // transparent_union GCC extension.
4760  const RecordType *UT = ArgType->getAsUnionType();
4761  if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
4762    return Incompatible;
4763
4764  // The field to initialize within the transparent union.
4765  RecordDecl *UD = UT->getDecl();
4766  FieldDecl *InitField = 0;
4767  // It's compatible if the expression matches any of the fields.
4768  for (RecordDecl::field_iterator it = UD->field_begin(),
4769         itend = UD->field_end();
4770       it != itend; ++it) {
4771    if (it->getType()->isPointerType()) {
4772      // If the transparent union contains a pointer type, we allow:
4773      // 1) void pointer
4774      // 2) null pointer constant
4775      if (FromType->isPointerType())
4776        if (FromType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
4777          ImpCastExprToType(rExpr, it->getType(), CastExpr::CK_BitCast);
4778          InitField = *it;
4779          break;
4780        }
4781
4782      if (rExpr->isNullPointerConstant(Context,
4783                                       Expr::NPC_ValueDependentIsNull)) {
4784        ImpCastExprToType(rExpr, it->getType(), CastExpr::CK_IntegralToPointer);
4785        InitField = *it;
4786        break;
4787      }
4788    }
4789
4790    if (CheckAssignmentConstraints(it->getType(), rExpr->getType())
4791          == Compatible) {
4792      InitField = *it;
4793      break;
4794    }
4795  }
4796
4797  if (!InitField)
4798    return Incompatible;
4799
4800  ConstructTransparentUnion(Context, rExpr, ArgType, InitField);
4801  return Compatible;
4802}
4803
4804Sema::AssignConvertType
4805Sema::CheckSingleAssignmentConstraints(QualType lhsType, Expr *&rExpr) {
4806  if (getLangOptions().CPlusPlus) {
4807    if (!lhsType->isRecordType()) {
4808      // C++ 5.17p3: If the left operand is not of class type, the
4809      // expression is implicitly converted (C++ 4) to the
4810      // cv-unqualified type of the left operand.
4811      if (PerformImplicitConversion(rExpr, lhsType.getUnqualifiedType(),
4812                                    AA_Assigning))
4813        return Incompatible;
4814      return Compatible;
4815    }
4816
4817    // FIXME: Currently, we fall through and treat C++ classes like C
4818    // structures.
4819  }
4820
4821  // C99 6.5.16.1p1: the left operand is a pointer and the right is
4822  // a null pointer constant.
4823  if ((lhsType->isPointerType() ||
4824       lhsType->isObjCObjectPointerType() ||
4825       lhsType->isBlockPointerType())
4826      && rExpr->isNullPointerConstant(Context,
4827                                      Expr::NPC_ValueDependentIsNull)) {
4828    ImpCastExprToType(rExpr, lhsType, CastExpr::CK_Unknown);
4829    return Compatible;
4830  }
4831
4832  // This check seems unnatural, however it is necessary to ensure the proper
4833  // conversion of functions/arrays. If the conversion were done for all
4834  // DeclExpr's (created by ActOnIdExpression), it would mess up the unary
4835  // expressions that surpress this implicit conversion (&, sizeof).
4836  //
4837  // Suppress this for references: C++ 8.5.3p5.
4838  if (!lhsType->isReferenceType())
4839    DefaultFunctionArrayLvalueConversion(rExpr);
4840
4841  Sema::AssignConvertType result =
4842    CheckAssignmentConstraints(lhsType, rExpr->getType());
4843
4844  // C99 6.5.16.1p2: The value of the right operand is converted to the
4845  // type of the assignment expression.
4846  // CheckAssignmentConstraints allows the left-hand side to be a reference,
4847  // so that we can use references in built-in functions even in C.
4848  // The getNonReferenceType() call makes sure that the resulting expression
4849  // does not have reference type.
4850  if (result != Incompatible && rExpr->getType() != lhsType)
4851    ImpCastExprToType(rExpr, lhsType.getNonReferenceType(),
4852                      CastExpr::CK_Unknown);
4853  return result;
4854}
4855
4856QualType Sema::InvalidOperands(SourceLocation Loc, Expr *&lex, Expr *&rex) {
4857  Diag(Loc, diag::err_typecheck_invalid_operands)
4858    << lex->getType() << rex->getType()
4859    << lex->getSourceRange() << rex->getSourceRange();
4860  return QualType();
4861}
4862
4863QualType Sema::CheckVectorOperands(SourceLocation Loc, Expr *&lex, Expr *&rex) {
4864  // For conversion purposes, we ignore any qualifiers.
4865  // For example, "const float" and "float" are equivalent.
4866  QualType lhsType =
4867    Context.getCanonicalType(lex->getType()).getUnqualifiedType();
4868  QualType rhsType =
4869    Context.getCanonicalType(rex->getType()).getUnqualifiedType();
4870
4871  // If the vector types are identical, return.
4872  if (lhsType == rhsType)
4873    return lhsType;
4874
4875  // Handle the case of a vector & extvector type of the same size and element
4876  // type.  It would be nice if we only had one vector type someday.
4877  if (getLangOptions().LaxVectorConversions) {
4878    // FIXME: Should we warn here?
4879    if (const VectorType *LV = lhsType->getAs<VectorType>()) {
4880      if (const VectorType *RV = rhsType->getAs<VectorType>())
4881        if (LV->getElementType() == RV->getElementType() &&
4882            LV->getNumElements() == RV->getNumElements()) {
4883          return lhsType->isExtVectorType() ? lhsType : rhsType;
4884        }
4885    }
4886  }
4887
4888  // Canonicalize the ExtVector to the LHS, remember if we swapped so we can
4889  // swap back (so that we don't reverse the inputs to a subtract, for instance.
4890  bool swapped = false;
4891  if (rhsType->isExtVectorType()) {
4892    swapped = true;
4893    std::swap(rex, lex);
4894    std::swap(rhsType, lhsType);
4895  }
4896
4897  // Handle the case of an ext vector and scalar.
4898  if (const ExtVectorType *LV = lhsType->getAs<ExtVectorType>()) {
4899    QualType EltTy = LV->getElementType();
4900    if (EltTy->isIntegralType() && rhsType->isIntegralType()) {
4901      if (Context.getIntegerTypeOrder(EltTy, rhsType) >= 0) {
4902        ImpCastExprToType(rex, lhsType, CastExpr::CK_IntegralCast);
4903        if (swapped) std::swap(rex, lex);
4904        return lhsType;
4905      }
4906    }
4907    if (EltTy->isRealFloatingType() && rhsType->isScalarType() &&
4908        rhsType->isRealFloatingType()) {
4909      if (Context.getFloatingTypeOrder(EltTy, rhsType) >= 0) {
4910        ImpCastExprToType(rex, lhsType, CastExpr::CK_FloatingCast);
4911        if (swapped) std::swap(rex, lex);
4912        return lhsType;
4913      }
4914    }
4915  }
4916
4917  // Vectors of different size or scalar and non-ext-vector are errors.
4918  Diag(Loc, diag::err_typecheck_vector_not_convertable)
4919    << lex->getType() << rex->getType()
4920    << lex->getSourceRange() << rex->getSourceRange();
4921  return QualType();
4922}
4923
4924QualType Sema::CheckMultiplyDivideOperands(
4925  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isCompAssign, bool isDiv) {
4926  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
4927    return CheckVectorOperands(Loc, lex, rex);
4928
4929  QualType compType = UsualArithmeticConversions(lex, rex, isCompAssign);
4930
4931  if (!lex->getType()->isArithmeticType() ||
4932      !rex->getType()->isArithmeticType())
4933    return InvalidOperands(Loc, lex, rex);
4934
4935  // Check for division by zero.
4936  if (isDiv &&
4937      rex->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull))
4938    DiagRuntimeBehavior(Loc, PDiag(diag::warn_division_by_zero)
4939                                     << rex->getSourceRange());
4940
4941  return compType;
4942}
4943
4944QualType Sema::CheckRemainderOperands(
4945  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isCompAssign) {
4946  if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) {
4947    if (lex->getType()->isIntegerType() && rex->getType()->isIntegerType())
4948      return CheckVectorOperands(Loc, lex, rex);
4949    return InvalidOperands(Loc, lex, rex);
4950  }
4951
4952  QualType compType = UsualArithmeticConversions(lex, rex, isCompAssign);
4953
4954  if (!lex->getType()->isIntegerType() || !rex->getType()->isIntegerType())
4955    return InvalidOperands(Loc, lex, rex);
4956
4957  // Check for remainder by zero.
4958  if (rex->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull))
4959    DiagRuntimeBehavior(Loc, PDiag(diag::warn_remainder_by_zero)
4960                                 << rex->getSourceRange());
4961
4962  return compType;
4963}
4964
4965QualType Sema::CheckAdditionOperands( // C99 6.5.6
4966  Expr *&lex, Expr *&rex, SourceLocation Loc, QualType* CompLHSTy) {
4967  if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) {
4968    QualType compType = CheckVectorOperands(Loc, lex, rex);
4969    if (CompLHSTy) *CompLHSTy = compType;
4970    return compType;
4971  }
4972
4973  QualType compType = UsualArithmeticConversions(lex, rex, CompLHSTy);
4974
4975  // handle the common case first (both operands are arithmetic).
4976  if (lex->getType()->isArithmeticType() &&
4977      rex->getType()->isArithmeticType()) {
4978    if (CompLHSTy) *CompLHSTy = compType;
4979    return compType;
4980  }
4981
4982  // Put any potential pointer into PExp
4983  Expr* PExp = lex, *IExp = rex;
4984  if (IExp->getType()->isAnyPointerType())
4985    std::swap(PExp, IExp);
4986
4987  if (PExp->getType()->isAnyPointerType()) {
4988
4989    if (IExp->getType()->isIntegerType()) {
4990      QualType PointeeTy = PExp->getType()->getPointeeType();
4991
4992      // Check for arithmetic on pointers to incomplete types.
4993      if (PointeeTy->isVoidType()) {
4994        if (getLangOptions().CPlusPlus) {
4995          Diag(Loc, diag::err_typecheck_pointer_arith_void_type)
4996            << lex->getSourceRange() << rex->getSourceRange();
4997          return QualType();
4998        }
4999
5000        // GNU extension: arithmetic on pointer to void
5001        Diag(Loc, diag::ext_gnu_void_ptr)
5002          << lex->getSourceRange() << rex->getSourceRange();
5003      } else if (PointeeTy->isFunctionType()) {
5004        if (getLangOptions().CPlusPlus) {
5005          Diag(Loc, diag::err_typecheck_pointer_arith_function_type)
5006            << lex->getType() << lex->getSourceRange();
5007          return QualType();
5008        }
5009
5010        // GNU extension: arithmetic on pointer to function
5011        Diag(Loc, diag::ext_gnu_ptr_func_arith)
5012          << lex->getType() << lex->getSourceRange();
5013      } else {
5014        // Check if we require a complete type.
5015        if (((PExp->getType()->isPointerType() &&
5016              !PExp->getType()->isDependentType()) ||
5017              PExp->getType()->isObjCObjectPointerType()) &&
5018             RequireCompleteType(Loc, PointeeTy,
5019                           PDiag(diag::err_typecheck_arithmetic_incomplete_type)
5020                             << PExp->getSourceRange()
5021                             << PExp->getType()))
5022          return QualType();
5023      }
5024      // Diagnose bad cases where we step over interface counts.
5025      if (PointeeTy->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
5026        Diag(Loc, diag::err_arithmetic_nonfragile_interface)
5027          << PointeeTy << PExp->getSourceRange();
5028        return QualType();
5029      }
5030
5031      if (CompLHSTy) {
5032        QualType LHSTy = Context.isPromotableBitField(lex);
5033        if (LHSTy.isNull()) {
5034          LHSTy = lex->getType();
5035          if (LHSTy->isPromotableIntegerType())
5036            LHSTy = Context.getPromotedIntegerType(LHSTy);
5037        }
5038        *CompLHSTy = LHSTy;
5039      }
5040      return PExp->getType();
5041    }
5042  }
5043
5044  return InvalidOperands(Loc, lex, rex);
5045}
5046
5047// C99 6.5.6
5048QualType Sema::CheckSubtractionOperands(Expr *&lex, Expr *&rex,
5049                                        SourceLocation Loc, QualType* CompLHSTy) {
5050  if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) {
5051    QualType compType = CheckVectorOperands(Loc, lex, rex);
5052    if (CompLHSTy) *CompLHSTy = compType;
5053    return compType;
5054  }
5055
5056  QualType compType = UsualArithmeticConversions(lex, rex, CompLHSTy);
5057
5058  // Enforce type constraints: C99 6.5.6p3.
5059
5060  // Handle the common case first (both operands are arithmetic).
5061  if (lex->getType()->isArithmeticType()
5062      && rex->getType()->isArithmeticType()) {
5063    if (CompLHSTy) *CompLHSTy = compType;
5064    return compType;
5065  }
5066
5067  // Either ptr - int   or   ptr - ptr.
5068  if (lex->getType()->isAnyPointerType()) {
5069    QualType lpointee = lex->getType()->getPointeeType();
5070
5071    // The LHS must be an completely-defined object type.
5072
5073    bool ComplainAboutVoid = false;
5074    Expr *ComplainAboutFunc = 0;
5075    if (lpointee->isVoidType()) {
5076      if (getLangOptions().CPlusPlus) {
5077        Diag(Loc, diag::err_typecheck_pointer_arith_void_type)
5078          << lex->getSourceRange() << rex->getSourceRange();
5079        return QualType();
5080      }
5081
5082      // GNU C extension: arithmetic on pointer to void
5083      ComplainAboutVoid = true;
5084    } else if (lpointee->isFunctionType()) {
5085      if (getLangOptions().CPlusPlus) {
5086        Diag(Loc, diag::err_typecheck_pointer_arith_function_type)
5087          << lex->getType() << lex->getSourceRange();
5088        return QualType();
5089      }
5090
5091      // GNU C extension: arithmetic on pointer to function
5092      ComplainAboutFunc = lex;
5093    } else if (!lpointee->isDependentType() &&
5094               RequireCompleteType(Loc, lpointee,
5095                                   PDiag(diag::err_typecheck_sub_ptr_object)
5096                                     << lex->getSourceRange()
5097                                     << lex->getType()))
5098      return QualType();
5099
5100    // Diagnose bad cases where we step over interface counts.
5101    if (lpointee->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
5102      Diag(Loc, diag::err_arithmetic_nonfragile_interface)
5103        << lpointee << lex->getSourceRange();
5104      return QualType();
5105    }
5106
5107    // The result type of a pointer-int computation is the pointer type.
5108    if (rex->getType()->isIntegerType()) {
5109      if (ComplainAboutVoid)
5110        Diag(Loc, diag::ext_gnu_void_ptr)
5111          << lex->getSourceRange() << rex->getSourceRange();
5112      if (ComplainAboutFunc)
5113        Diag(Loc, diag::ext_gnu_ptr_func_arith)
5114          << ComplainAboutFunc->getType()
5115          << ComplainAboutFunc->getSourceRange();
5116
5117      if (CompLHSTy) *CompLHSTy = lex->getType();
5118      return lex->getType();
5119    }
5120
5121    // Handle pointer-pointer subtractions.
5122    if (const PointerType *RHSPTy = rex->getType()->getAs<PointerType>()) {
5123      QualType rpointee = RHSPTy->getPointeeType();
5124
5125      // RHS must be a completely-type object type.
5126      // Handle the GNU void* extension.
5127      if (rpointee->isVoidType()) {
5128        if (getLangOptions().CPlusPlus) {
5129          Diag(Loc, diag::err_typecheck_pointer_arith_void_type)
5130            << lex->getSourceRange() << rex->getSourceRange();
5131          return QualType();
5132        }
5133
5134        ComplainAboutVoid = true;
5135      } else if (rpointee->isFunctionType()) {
5136        if (getLangOptions().CPlusPlus) {
5137          Diag(Loc, diag::err_typecheck_pointer_arith_function_type)
5138            << rex->getType() << rex->getSourceRange();
5139          return QualType();
5140        }
5141
5142        // GNU extension: arithmetic on pointer to function
5143        if (!ComplainAboutFunc)
5144          ComplainAboutFunc = rex;
5145      } else if (!rpointee->isDependentType() &&
5146                 RequireCompleteType(Loc, rpointee,
5147                                     PDiag(diag::err_typecheck_sub_ptr_object)
5148                                       << rex->getSourceRange()
5149                                       << rex->getType()))
5150        return QualType();
5151
5152      if (getLangOptions().CPlusPlus) {
5153        // Pointee types must be the same: C++ [expr.add]
5154        if (!Context.hasSameUnqualifiedType(lpointee, rpointee)) {
5155          Diag(Loc, diag::err_typecheck_sub_ptr_compatible)
5156            << lex->getType() << rex->getType()
5157            << lex->getSourceRange() << rex->getSourceRange();
5158          return QualType();
5159        }
5160      } else {
5161        // Pointee types must be compatible C99 6.5.6p3
5162        if (!Context.typesAreCompatible(
5163                Context.getCanonicalType(lpointee).getUnqualifiedType(),
5164                Context.getCanonicalType(rpointee).getUnqualifiedType())) {
5165          Diag(Loc, diag::err_typecheck_sub_ptr_compatible)
5166            << lex->getType() << rex->getType()
5167            << lex->getSourceRange() << rex->getSourceRange();
5168          return QualType();
5169        }
5170      }
5171
5172      if (ComplainAboutVoid)
5173        Diag(Loc, diag::ext_gnu_void_ptr)
5174          << lex->getSourceRange() << rex->getSourceRange();
5175      if (ComplainAboutFunc)
5176        Diag(Loc, diag::ext_gnu_ptr_func_arith)
5177          << ComplainAboutFunc->getType()
5178          << ComplainAboutFunc->getSourceRange();
5179
5180      if (CompLHSTy) *CompLHSTy = lex->getType();
5181      return Context.getPointerDiffType();
5182    }
5183  }
5184
5185  return InvalidOperands(Loc, lex, rex);
5186}
5187
5188// C99 6.5.7
5189QualType Sema::CheckShiftOperands(Expr *&lex, Expr *&rex, SourceLocation Loc,
5190                                  bool isCompAssign) {
5191  // C99 6.5.7p2: Each of the operands shall have integer type.
5192  if (!lex->getType()->isIntegerType() || !rex->getType()->isIntegerType())
5193    return InvalidOperands(Loc, lex, rex);
5194
5195  // Vector shifts promote their scalar inputs to vector type.
5196  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
5197    return CheckVectorOperands(Loc, lex, rex);
5198
5199  // Shifts don't perform usual arithmetic conversions, they just do integer
5200  // promotions on each operand. C99 6.5.7p3
5201  QualType LHSTy = Context.isPromotableBitField(lex);
5202  if (LHSTy.isNull()) {
5203    LHSTy = lex->getType();
5204    if (LHSTy->isPromotableIntegerType())
5205      LHSTy = Context.getPromotedIntegerType(LHSTy);
5206  }
5207  if (!isCompAssign)
5208    ImpCastExprToType(lex, LHSTy, CastExpr::CK_IntegralCast);
5209
5210  UsualUnaryConversions(rex);
5211
5212  // Sanity-check shift operands
5213  llvm::APSInt Right;
5214  // Check right/shifter operand
5215  if (!rex->isValueDependent() &&
5216      rex->isIntegerConstantExpr(Right, Context)) {
5217    if (Right.isNegative())
5218      Diag(Loc, diag::warn_shift_negative) << rex->getSourceRange();
5219    else {
5220      llvm::APInt LeftBits(Right.getBitWidth(),
5221                          Context.getTypeSize(lex->getType()));
5222      if (Right.uge(LeftBits))
5223        Diag(Loc, diag::warn_shift_gt_typewidth) << rex->getSourceRange();
5224    }
5225  }
5226
5227  // "The type of the result is that of the promoted left operand."
5228  return LHSTy;
5229}
5230
5231// C99 6.5.8, C++ [expr.rel]
5232QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc,
5233                                    unsigned OpaqueOpc, bool isRelational) {
5234  BinaryOperator::Opcode Opc = (BinaryOperator::Opcode)OpaqueOpc;
5235
5236  // Handle vector comparisons separately.
5237  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
5238    return CheckVectorCompareOperands(lex, rex, Loc, isRelational);
5239
5240  CheckSignCompare(lex, rex, Loc, &Opc);
5241
5242  // C99 6.5.8p3 / C99 6.5.9p4
5243  if (lex->getType()->isArithmeticType() && rex->getType()->isArithmeticType())
5244    UsualArithmeticConversions(lex, rex);
5245  else {
5246    UsualUnaryConversions(lex);
5247    UsualUnaryConversions(rex);
5248  }
5249  QualType lType = lex->getType();
5250  QualType rType = rex->getType();
5251
5252  if (!lType->isFloatingType()
5253      && !(lType->isBlockPointerType() && isRelational)) {
5254    // For non-floating point types, check for self-comparisons of the form
5255    // x == x, x != x, x < x, etc.  These always evaluate to a constant, and
5256    // often indicate logic errors in the program.
5257    // NOTE: Don't warn about comparisons of enum constants. These can arise
5258    //  from macro expansions, and are usually quite deliberate.
5259    Expr *LHSStripped = lex->IgnoreParens();
5260    Expr *RHSStripped = rex->IgnoreParens();
5261    if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(LHSStripped))
5262      if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(RHSStripped))
5263        if (DRL->getDecl() == DRR->getDecl() &&
5264            !isa<EnumConstantDecl>(DRL->getDecl()))
5265          DiagRuntimeBehavior(Loc, PDiag(diag::warn_selfcomparison));
5266
5267    if (isa<CastExpr>(LHSStripped))
5268      LHSStripped = LHSStripped->IgnoreParenCasts();
5269    if (isa<CastExpr>(RHSStripped))
5270      RHSStripped = RHSStripped->IgnoreParenCasts();
5271
5272    // Warn about comparisons against a string constant (unless the other
5273    // operand is null), the user probably wants strcmp.
5274    Expr *literalString = 0;
5275    Expr *literalStringStripped = 0;
5276    if ((isa<StringLiteral>(LHSStripped) || isa<ObjCEncodeExpr>(LHSStripped)) &&
5277        !RHSStripped->isNullPointerConstant(Context,
5278                                            Expr::NPC_ValueDependentIsNull)) {
5279      literalString = lex;
5280      literalStringStripped = LHSStripped;
5281    } else if ((isa<StringLiteral>(RHSStripped) ||
5282                isa<ObjCEncodeExpr>(RHSStripped)) &&
5283               !LHSStripped->isNullPointerConstant(Context,
5284                                            Expr::NPC_ValueDependentIsNull)) {
5285      literalString = rex;
5286      literalStringStripped = RHSStripped;
5287    }
5288
5289    if (literalString) {
5290      std::string resultComparison;
5291      switch (Opc) {
5292      case BinaryOperator::LT: resultComparison = ") < 0"; break;
5293      case BinaryOperator::GT: resultComparison = ") > 0"; break;
5294      case BinaryOperator::LE: resultComparison = ") <= 0"; break;
5295      case BinaryOperator::GE: resultComparison = ") >= 0"; break;
5296      case BinaryOperator::EQ: resultComparison = ") == 0"; break;
5297      case BinaryOperator::NE: resultComparison = ") != 0"; break;
5298      default: assert(false && "Invalid comparison operator");
5299      }
5300
5301      DiagRuntimeBehavior(Loc,
5302        PDiag(diag::warn_stringcompare)
5303          << isa<ObjCEncodeExpr>(literalStringStripped)
5304          << literalString->getSourceRange());
5305    }
5306  }
5307
5308  // The result of comparisons is 'bool' in C++, 'int' in C.
5309  QualType ResultTy = getLangOptions().CPlusPlus ? Context.BoolTy:Context.IntTy;
5310
5311  if (isRelational) {
5312    if (lType->isRealType() && rType->isRealType())
5313      return ResultTy;
5314  } else {
5315    // Check for comparisons of floating point operands using != and ==.
5316    if (lType->isFloatingType() && rType->isFloatingType())
5317      CheckFloatComparison(Loc,lex,rex);
5318
5319    if (lType->isArithmeticType() && rType->isArithmeticType())
5320      return ResultTy;
5321  }
5322
5323  bool LHSIsNull = lex->isNullPointerConstant(Context,
5324                                              Expr::NPC_ValueDependentIsNull);
5325  bool RHSIsNull = rex->isNullPointerConstant(Context,
5326                                              Expr::NPC_ValueDependentIsNull);
5327
5328  // All of the following pointer related warnings are GCC extensions, except
5329  // when handling null pointer constants. One day, we can consider making them
5330  // errors (when -pedantic-errors is enabled).
5331  if (lType->isPointerType() && rType->isPointerType()) { // C99 6.5.8p2
5332    QualType LCanPointeeTy =
5333      Context.getCanonicalType(lType->getAs<PointerType>()->getPointeeType());
5334    QualType RCanPointeeTy =
5335      Context.getCanonicalType(rType->getAs<PointerType>()->getPointeeType());
5336
5337    if (getLangOptions().CPlusPlus) {
5338      if (LCanPointeeTy == RCanPointeeTy)
5339        return ResultTy;
5340      if (!isRelational &&
5341          (LCanPointeeTy->isVoidType() || RCanPointeeTy->isVoidType())) {
5342        // Valid unless comparison between non-null pointer and function pointer
5343        // This is a gcc extension compatibility comparison.
5344        if ((LCanPointeeTy->isFunctionType() || RCanPointeeTy->isFunctionType())
5345            && !LHSIsNull && !RHSIsNull) {
5346          Diag(Loc, diag::ext_typecheck_comparison_of_fptr_to_void)
5347            << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5348          ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5349          return ResultTy;
5350        }
5351      }
5352      // C++ [expr.rel]p2:
5353      //   [...] Pointer conversions (4.10) and qualification
5354      //   conversions (4.4) are performed on pointer operands (or on
5355      //   a pointer operand and a null pointer constant) to bring
5356      //   them to their composite pointer type. [...]
5357      //
5358      // C++ [expr.eq]p1 uses the same notion for (in)equality
5359      // comparisons of pointers.
5360      bool NonStandardCompositeType = false;
5361      QualType T = FindCompositePointerType(Loc, lex, rex,
5362                              isSFINAEContext()? 0 : &NonStandardCompositeType);
5363      if (T.isNull()) {
5364        Diag(Loc, diag::err_typecheck_comparison_of_distinct_pointers)
5365          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5366        return QualType();
5367      } else if (NonStandardCompositeType) {
5368        Diag(Loc,
5369             diag::ext_typecheck_comparison_of_distinct_pointers_nonstandard)
5370          << lType << rType << T
5371          << lex->getSourceRange() << rex->getSourceRange();
5372      }
5373
5374      ImpCastExprToType(lex, T, CastExpr::CK_BitCast);
5375      ImpCastExprToType(rex, T, CastExpr::CK_BitCast);
5376      return ResultTy;
5377    }
5378    // C99 6.5.9p2 and C99 6.5.8p2
5379    if (Context.typesAreCompatible(LCanPointeeTy.getUnqualifiedType(),
5380                                   RCanPointeeTy.getUnqualifiedType())) {
5381      // Valid unless a relational comparison of function pointers
5382      if (isRelational && LCanPointeeTy->isFunctionType()) {
5383        Diag(Loc, diag::ext_typecheck_ordered_comparison_of_function_pointers)
5384          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5385      }
5386    } else if (!isRelational &&
5387               (LCanPointeeTy->isVoidType() || RCanPointeeTy->isVoidType())) {
5388      // Valid unless comparison between non-null pointer and function pointer
5389      if ((LCanPointeeTy->isFunctionType() || RCanPointeeTy->isFunctionType())
5390          && !LHSIsNull && !RHSIsNull) {
5391        Diag(Loc, diag::ext_typecheck_comparison_of_fptr_to_void)
5392          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5393      }
5394    } else {
5395      // Invalid
5396      Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
5397        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5398    }
5399    if (LCanPointeeTy != RCanPointeeTy)
5400      ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5401    return ResultTy;
5402  }
5403
5404  if (getLangOptions().CPlusPlus) {
5405    // Comparison of pointers with null pointer constants and equality
5406    // comparisons of member pointers to null pointer constants.
5407    if (RHSIsNull &&
5408        (lType->isPointerType() ||
5409         (!isRelational && lType->isMemberPointerType()))) {
5410      ImpCastExprToType(rex, lType, CastExpr::CK_NullToMemberPointer);
5411      return ResultTy;
5412    }
5413    if (LHSIsNull &&
5414        (rType->isPointerType() ||
5415         (!isRelational && rType->isMemberPointerType()))) {
5416      ImpCastExprToType(lex, rType, CastExpr::CK_NullToMemberPointer);
5417      return ResultTy;
5418    }
5419
5420    // Comparison of member pointers.
5421    if (!isRelational &&
5422        lType->isMemberPointerType() && rType->isMemberPointerType()) {
5423      // C++ [expr.eq]p2:
5424      //   In addition, pointers to members can be compared, or a pointer to
5425      //   member and a null pointer constant. Pointer to member conversions
5426      //   (4.11) and qualification conversions (4.4) are performed to bring
5427      //   them to a common type. If one operand is a null pointer constant,
5428      //   the common type is the type of the other operand. Otherwise, the
5429      //   common type is a pointer to member type similar (4.4) to the type
5430      //   of one of the operands, with a cv-qualification signature (4.4)
5431      //   that is the union of the cv-qualification signatures of the operand
5432      //   types.
5433      bool NonStandardCompositeType = false;
5434      QualType T = FindCompositePointerType(Loc, lex, rex,
5435                              isSFINAEContext()? 0 : &NonStandardCompositeType);
5436      if (T.isNull()) {
5437        Diag(Loc, diag::err_typecheck_comparison_of_distinct_pointers)
5438          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5439        return QualType();
5440      } else if (NonStandardCompositeType) {
5441        Diag(Loc,
5442             diag::ext_typecheck_comparison_of_distinct_pointers_nonstandard)
5443          << lType << rType << T
5444          << lex->getSourceRange() << rex->getSourceRange();
5445      }
5446
5447      ImpCastExprToType(lex, T, CastExpr::CK_BitCast);
5448      ImpCastExprToType(rex, T, CastExpr::CK_BitCast);
5449      return ResultTy;
5450    }
5451
5452    // Comparison of nullptr_t with itself.
5453    if (lType->isNullPtrType() && rType->isNullPtrType())
5454      return ResultTy;
5455  }
5456
5457  // Handle block pointer types.
5458  if (!isRelational && lType->isBlockPointerType() && rType->isBlockPointerType()) {
5459    QualType lpointee = lType->getAs<BlockPointerType>()->getPointeeType();
5460    QualType rpointee = rType->getAs<BlockPointerType>()->getPointeeType();
5461
5462    if (!LHSIsNull && !RHSIsNull &&
5463        !Context.typesAreCompatible(lpointee, rpointee)) {
5464      Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks)
5465        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5466    }
5467    ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5468    return ResultTy;
5469  }
5470  // Allow block pointers to be compared with null pointer constants.
5471  if (!isRelational
5472      && ((lType->isBlockPointerType() && rType->isPointerType())
5473          || (lType->isPointerType() && rType->isBlockPointerType()))) {
5474    if (!LHSIsNull && !RHSIsNull) {
5475      if (!((rType->isPointerType() && rType->getAs<PointerType>()
5476             ->getPointeeType()->isVoidType())
5477            || (lType->isPointerType() && lType->getAs<PointerType>()
5478                ->getPointeeType()->isVoidType())))
5479        Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks)
5480          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5481    }
5482    ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5483    return ResultTy;
5484  }
5485
5486  if ((lType->isObjCObjectPointerType() || rType->isObjCObjectPointerType())) {
5487    if (lType->isPointerType() || rType->isPointerType()) {
5488      const PointerType *LPT = lType->getAs<PointerType>();
5489      const PointerType *RPT = rType->getAs<PointerType>();
5490      bool LPtrToVoid = LPT ?
5491        Context.getCanonicalType(LPT->getPointeeType())->isVoidType() : false;
5492      bool RPtrToVoid = RPT ?
5493        Context.getCanonicalType(RPT->getPointeeType())->isVoidType() : false;
5494
5495      if (!LPtrToVoid && !RPtrToVoid &&
5496          !Context.typesAreCompatible(lType, rType)) {
5497        Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
5498          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5499      }
5500      ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5501      return ResultTy;
5502    }
5503    if (lType->isObjCObjectPointerType() && rType->isObjCObjectPointerType()) {
5504      if (!Context.areComparableObjCPointerTypes(lType, rType))
5505        Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
5506          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5507      ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5508      return ResultTy;
5509    }
5510  }
5511  if (lType->isAnyPointerType() && rType->isIntegerType()) {
5512    unsigned DiagID = 0;
5513    if (RHSIsNull) {
5514      if (isRelational)
5515        DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;
5516    } else if (isRelational)
5517      DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_integer;
5518    else
5519      DiagID = diag::ext_typecheck_comparison_of_pointer_integer;
5520
5521    if (DiagID) {
5522      Diag(Loc, DiagID)
5523        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5524    }
5525    ImpCastExprToType(rex, lType, CastExpr::CK_IntegralToPointer);
5526    return ResultTy;
5527  }
5528  if (lType->isIntegerType() && rType->isAnyPointerType()) {
5529    unsigned DiagID = 0;
5530    if (LHSIsNull) {
5531      if (isRelational)
5532        DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;
5533    } else if (isRelational)
5534      DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_integer;
5535    else
5536      DiagID = diag::ext_typecheck_comparison_of_pointer_integer;
5537
5538    if (DiagID) {
5539      Diag(Loc, DiagID)
5540        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5541    }
5542    ImpCastExprToType(lex, rType, CastExpr::CK_IntegralToPointer);
5543    return ResultTy;
5544  }
5545  // Handle block pointers.
5546  if (!isRelational && RHSIsNull
5547      && lType->isBlockPointerType() && rType->isIntegerType()) {
5548    ImpCastExprToType(rex, lType, CastExpr::CK_IntegralToPointer);
5549    return ResultTy;
5550  }
5551  if (!isRelational && LHSIsNull
5552      && lType->isIntegerType() && rType->isBlockPointerType()) {
5553    ImpCastExprToType(lex, rType, CastExpr::CK_IntegralToPointer);
5554    return ResultTy;
5555  }
5556  return InvalidOperands(Loc, lex, rex);
5557}
5558
5559/// CheckVectorCompareOperands - vector comparisons are a clang extension that
5560/// operates on extended vector types.  Instead of producing an IntTy result,
5561/// like a scalar comparison, a vector comparison produces a vector of integer
5562/// types.
5563QualType Sema::CheckVectorCompareOperands(Expr *&lex, Expr *&rex,
5564                                          SourceLocation Loc,
5565                                          bool isRelational) {
5566  // Check to make sure we're operating on vectors of the same type and width,
5567  // Allowing one side to be a scalar of element type.
5568  QualType vType = CheckVectorOperands(Loc, lex, rex);
5569  if (vType.isNull())
5570    return vType;
5571
5572  QualType lType = lex->getType();
5573  QualType rType = rex->getType();
5574
5575  // For non-floating point types, check for self-comparisons of the form
5576  // x == x, x != x, x < x, etc.  These always evaluate to a constant, and
5577  // often indicate logic errors in the program.
5578  if (!lType->isFloatingType()) {
5579    if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(lex->IgnoreParens()))
5580      if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(rex->IgnoreParens()))
5581        if (DRL->getDecl() == DRR->getDecl())
5582          DiagRuntimeBehavior(Loc, PDiag(diag::warn_selfcomparison));
5583  }
5584
5585  // Check for comparisons of floating point operands using != and ==.
5586  if (!isRelational && lType->isFloatingType()) {
5587    assert (rType->isFloatingType());
5588    CheckFloatComparison(Loc,lex,rex);
5589  }
5590
5591  // Return the type for the comparison, which is the same as vector type for
5592  // integer vectors, or an integer type of identical size and number of
5593  // elements for floating point vectors.
5594  if (lType->isIntegerType())
5595    return lType;
5596
5597  const VectorType *VTy = lType->getAs<VectorType>();
5598  unsigned TypeSize = Context.getTypeSize(VTy->getElementType());
5599  if (TypeSize == Context.getTypeSize(Context.IntTy))
5600    return Context.getExtVectorType(Context.IntTy, VTy->getNumElements());
5601  if (TypeSize == Context.getTypeSize(Context.LongTy))
5602    return Context.getExtVectorType(Context.LongTy, VTy->getNumElements());
5603
5604  assert(TypeSize == Context.getTypeSize(Context.LongLongTy) &&
5605         "Unhandled vector element size in vector compare");
5606  return Context.getExtVectorType(Context.LongLongTy, VTy->getNumElements());
5607}
5608
5609inline QualType Sema::CheckBitwiseOperands(
5610  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isCompAssign) {
5611  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
5612    return CheckVectorOperands(Loc, lex, rex);
5613
5614  QualType compType = UsualArithmeticConversions(lex, rex, isCompAssign);
5615
5616  if (lex->getType()->isIntegerType() && rex->getType()->isIntegerType())
5617    return compType;
5618  return InvalidOperands(Loc, lex, rex);
5619}
5620
5621inline QualType Sema::CheckLogicalOperands( // C99 6.5.[13,14]
5622  Expr *&lex, Expr *&rex, SourceLocation Loc) {
5623  if (!Context.getLangOptions().CPlusPlus) {
5624    UsualUnaryConversions(lex);
5625    UsualUnaryConversions(rex);
5626
5627    if (!lex->getType()->isScalarType() || !rex->getType()->isScalarType())
5628      return InvalidOperands(Loc, lex, rex);
5629
5630    return Context.IntTy;
5631  }
5632
5633  // C++ [expr.log.and]p1
5634  // C++ [expr.log.or]p1
5635  // The operands are both implicitly converted to type bool (clause 4).
5636  StandardConversionSequence LHS;
5637  if (!IsStandardConversion(lex, Context.BoolTy,
5638                            /*InOverloadResolution=*/false, LHS))
5639    return InvalidOperands(Loc, lex, rex);
5640
5641  if (PerformImplicitConversion(lex, Context.BoolTy, LHS,
5642                                AA_Passing, /*IgnoreBaseAccess=*/false))
5643    return InvalidOperands(Loc, lex, rex);
5644
5645  StandardConversionSequence RHS;
5646  if (!IsStandardConversion(rex, Context.BoolTy,
5647                            /*InOverloadResolution=*/false, RHS))
5648    return InvalidOperands(Loc, lex, rex);
5649
5650  if (PerformImplicitConversion(rex, Context.BoolTy, RHS,
5651                                AA_Passing, /*IgnoreBaseAccess=*/false))
5652    return InvalidOperands(Loc, lex, rex);
5653
5654  // C++ [expr.log.and]p2
5655  // C++ [expr.log.or]p2
5656  // The result is a bool.
5657  return Context.BoolTy;
5658}
5659
5660/// IsReadonlyProperty - Verify that otherwise a valid l-value expression
5661/// is a read-only property; return true if so. A readonly property expression
5662/// depends on various declarations and thus must be treated specially.
5663///
5664static bool IsReadonlyProperty(Expr *E, Sema &S) {
5665  if (E->getStmtClass() == Expr::ObjCPropertyRefExprClass) {
5666    const ObjCPropertyRefExpr* PropExpr = cast<ObjCPropertyRefExpr>(E);
5667    if (ObjCPropertyDecl *PDecl = PropExpr->getProperty()) {
5668      QualType BaseType = PropExpr->getBase()->getType();
5669      if (const ObjCObjectPointerType *OPT =
5670            BaseType->getAsObjCInterfacePointerType())
5671        if (ObjCInterfaceDecl *IFace = OPT->getInterfaceDecl())
5672          if (S.isPropertyReadonly(PDecl, IFace))
5673            return true;
5674    }
5675  }
5676  return false;
5677}
5678
5679/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,
5680/// emit an error and return true.  If so, return false.
5681static bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {
5682  SourceLocation OrigLoc = Loc;
5683  Expr::isModifiableLvalueResult IsLV = E->isModifiableLvalue(S.Context,
5684                                                              &Loc);
5685  if (IsLV == Expr::MLV_Valid && IsReadonlyProperty(E, S))
5686    IsLV = Expr::MLV_ReadonlyProperty;
5687  if (IsLV == Expr::MLV_Valid)
5688    return false;
5689
5690  unsigned Diag = 0;
5691  bool NeedType = false;
5692  switch (IsLV) { // C99 6.5.16p2
5693  case Expr::MLV_ConstQualified: Diag = diag::err_typecheck_assign_const; break;
5694  case Expr::MLV_ArrayType:
5695    Diag = diag::err_typecheck_array_not_modifiable_lvalue;
5696    NeedType = true;
5697    break;
5698  case Expr::MLV_NotObjectType:
5699    Diag = diag::err_typecheck_non_object_not_modifiable_lvalue;
5700    NeedType = true;
5701    break;
5702  case Expr::MLV_LValueCast:
5703    Diag = diag::err_typecheck_lvalue_casts_not_supported;
5704    break;
5705  case Expr::MLV_Valid:
5706    llvm_unreachable("did not take early return for MLV_Valid");
5707  case Expr::MLV_InvalidExpression:
5708  case Expr::MLV_MemberFunction:
5709  case Expr::MLV_ClassTemporary:
5710    Diag = diag::err_typecheck_expression_not_modifiable_lvalue;
5711    break;
5712  case Expr::MLV_IncompleteType:
5713  case Expr::MLV_IncompleteVoidType:
5714    return S.RequireCompleteType(Loc, E->getType(),
5715              S.PDiag(diag::err_typecheck_incomplete_type_not_modifiable_lvalue)
5716                  << E->getSourceRange());
5717  case Expr::MLV_DuplicateVectorComponents:
5718    Diag = diag::err_typecheck_duplicate_vector_components_not_mlvalue;
5719    break;
5720  case Expr::MLV_NotBlockQualified:
5721    Diag = diag::err_block_decl_ref_not_modifiable_lvalue;
5722    break;
5723  case Expr::MLV_ReadonlyProperty:
5724    Diag = diag::error_readonly_property_assignment;
5725    break;
5726  case Expr::MLV_NoSetterProperty:
5727    Diag = diag::error_nosetter_property_assignment;
5728    break;
5729  case Expr::MLV_SubObjCPropertySetting:
5730    Diag = diag::error_no_subobject_property_setting;
5731    break;
5732  }
5733
5734  SourceRange Assign;
5735  if (Loc != OrigLoc)
5736    Assign = SourceRange(OrigLoc, OrigLoc);
5737  if (NeedType)
5738    S.Diag(Loc, Diag) << E->getType() << E->getSourceRange() << Assign;
5739  else
5740    S.Diag(Loc, Diag) << E->getSourceRange() << Assign;
5741  return true;
5742}
5743
5744
5745
5746// C99 6.5.16.1
5747QualType Sema::CheckAssignmentOperands(Expr *LHS, Expr *&RHS,
5748                                       SourceLocation Loc,
5749                                       QualType CompoundType) {
5750  // Verify that LHS is a modifiable lvalue, and emit error if not.
5751  if (CheckForModifiableLvalue(LHS, Loc, *this))
5752    return QualType();
5753
5754  QualType LHSType = LHS->getType();
5755  QualType RHSType = CompoundType.isNull() ? RHS->getType() : CompoundType;
5756
5757  AssignConvertType ConvTy;
5758  if (CompoundType.isNull()) {
5759    // Simple assignment "x = y".
5760    ConvTy = CheckSingleAssignmentConstraints(LHSType, RHS);
5761    // Special case of NSObject attributes on c-style pointer types.
5762    if (ConvTy == IncompatiblePointer &&
5763        ((Context.isObjCNSObjectType(LHSType) &&
5764          RHSType->isObjCObjectPointerType()) ||
5765         (Context.isObjCNSObjectType(RHSType) &&
5766          LHSType->isObjCObjectPointerType())))
5767      ConvTy = Compatible;
5768
5769    // If the RHS is a unary plus or minus, check to see if they = and + are
5770    // right next to each other.  If so, the user may have typo'd "x =+ 4"
5771    // instead of "x += 4".
5772    Expr *RHSCheck = RHS;
5773    if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(RHSCheck))
5774      RHSCheck = ICE->getSubExpr();
5775    if (UnaryOperator *UO = dyn_cast<UnaryOperator>(RHSCheck)) {
5776      if ((UO->getOpcode() == UnaryOperator::Plus ||
5777           UO->getOpcode() == UnaryOperator::Minus) &&
5778          Loc.isFileID() && UO->getOperatorLoc().isFileID() &&
5779          // Only if the two operators are exactly adjacent.
5780          Loc.getFileLocWithOffset(1) == UO->getOperatorLoc() &&
5781          // And there is a space or other character before the subexpr of the
5782          // unary +/-.  We don't want to warn on "x=-1".
5783          Loc.getFileLocWithOffset(2) != UO->getSubExpr()->getLocStart() &&
5784          UO->getSubExpr()->getLocStart().isFileID()) {
5785        Diag(Loc, diag::warn_not_compound_assign)
5786          << (UO->getOpcode() == UnaryOperator::Plus ? "+" : "-")
5787          << SourceRange(UO->getOperatorLoc(), UO->getOperatorLoc());
5788      }
5789    }
5790  } else {
5791    // Compound assignment "x += y"
5792    ConvTy = CheckAssignmentConstraints(LHSType, RHSType);
5793  }
5794
5795  if (DiagnoseAssignmentResult(ConvTy, Loc, LHSType, RHSType,
5796                               RHS, AA_Assigning))
5797    return QualType();
5798
5799  // C99 6.5.16p3: The type of an assignment expression is the type of the
5800  // left operand unless the left operand has qualified type, in which case
5801  // it is the unqualified version of the type of the left operand.
5802  // C99 6.5.16.1p2: In simple assignment, the value of the right operand
5803  // is converted to the type of the assignment expression (above).
5804  // C++ 5.17p1: the type of the assignment expression is that of its left
5805  // operand.
5806  return LHSType.getUnqualifiedType();
5807}
5808
5809// C99 6.5.17
5810QualType Sema::CheckCommaOperands(Expr *LHS, Expr *&RHS, SourceLocation Loc) {
5811  // Comma performs lvalue conversion (C99 6.3.2.1), but not unary conversions.
5812  // C++ does not perform this conversion (C++ [expr.comma]p1).
5813  if (!getLangOptions().CPlusPlus)
5814    DefaultFunctionArrayLvalueConversion(RHS);
5815
5816  // FIXME: Check that RHS type is complete in C mode (it's legal for it to be
5817  // incomplete in C++).
5818
5819  return RHS->getType();
5820}
5821
5822/// CheckIncrementDecrementOperand - unlike most "Check" methods, this routine
5823/// doesn't need to call UsualUnaryConversions or UsualArithmeticConversions.
5824QualType Sema::CheckIncrementDecrementOperand(Expr *Op, SourceLocation OpLoc,
5825                                              bool isInc) {
5826  if (Op->isTypeDependent())
5827    return Context.DependentTy;
5828
5829  QualType ResType = Op->getType();
5830  assert(!ResType.isNull() && "no type for increment/decrement expression");
5831
5832  if (getLangOptions().CPlusPlus && ResType->isBooleanType()) {
5833    // Decrement of bool is not allowed.
5834    if (!isInc) {
5835      Diag(OpLoc, diag::err_decrement_bool) << Op->getSourceRange();
5836      return QualType();
5837    }
5838    // Increment of bool sets it to true, but is deprecated.
5839    Diag(OpLoc, diag::warn_increment_bool) << Op->getSourceRange();
5840  } else if (ResType->isRealType()) {
5841    // OK!
5842  } else if (ResType->isAnyPointerType()) {
5843    QualType PointeeTy = ResType->getPointeeType();
5844
5845    // C99 6.5.2.4p2, 6.5.6p2
5846    if (PointeeTy->isVoidType()) {
5847      if (getLangOptions().CPlusPlus) {
5848        Diag(OpLoc, diag::err_typecheck_pointer_arith_void_type)
5849          << Op->getSourceRange();
5850        return QualType();
5851      }
5852
5853      // Pointer to void is a GNU extension in C.
5854      Diag(OpLoc, diag::ext_gnu_void_ptr) << Op->getSourceRange();
5855    } else if (PointeeTy->isFunctionType()) {
5856      if (getLangOptions().CPlusPlus) {
5857        Diag(OpLoc, diag::err_typecheck_pointer_arith_function_type)
5858          << Op->getType() << Op->getSourceRange();
5859        return QualType();
5860      }
5861
5862      Diag(OpLoc, diag::ext_gnu_ptr_func_arith)
5863        << ResType << Op->getSourceRange();
5864    } else if (RequireCompleteType(OpLoc, PointeeTy,
5865                           PDiag(diag::err_typecheck_arithmetic_incomplete_type)
5866                             << Op->getSourceRange()
5867                             << ResType))
5868      return QualType();
5869    // Diagnose bad cases where we step over interface counts.
5870    else if (PointeeTy->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
5871      Diag(OpLoc, diag::err_arithmetic_nonfragile_interface)
5872        << PointeeTy << Op->getSourceRange();
5873      return QualType();
5874    }
5875  } else if (ResType->isAnyComplexType()) {
5876    // C99 does not support ++/-- on complex types, we allow as an extension.
5877    Diag(OpLoc, diag::ext_integer_increment_complex)
5878      << ResType << Op->getSourceRange();
5879  } else {
5880    Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement)
5881      << ResType << int(isInc) << Op->getSourceRange();
5882    return QualType();
5883  }
5884  // At this point, we know we have a real, complex or pointer type.
5885  // Now make sure the operand is a modifiable lvalue.
5886  if (CheckForModifiableLvalue(Op, OpLoc, *this))
5887    return QualType();
5888  return ResType;
5889}
5890
5891/// getPrimaryDecl - Helper function for CheckAddressOfOperand().
5892/// This routine allows us to typecheck complex/recursive expressions
5893/// where the declaration is needed for type checking. We only need to
5894/// handle cases when the expression references a function designator
5895/// or is an lvalue. Here are some examples:
5896///  - &(x) => x
5897///  - &*****f => f for f a function designator.
5898///  - &s.xx => s
5899///  - &s.zz[1].yy -> s, if zz is an array
5900///  - *(x + 1) -> x, if x is an array
5901///  - &"123"[2] -> 0
5902///  - & __real__ x -> x
5903static NamedDecl *getPrimaryDecl(Expr *E) {
5904  switch (E->getStmtClass()) {
5905  case Stmt::DeclRefExprClass:
5906    return cast<DeclRefExpr>(E)->getDecl();
5907  case Stmt::MemberExprClass:
5908    // If this is an arrow operator, the address is an offset from
5909    // the base's value, so the object the base refers to is
5910    // irrelevant.
5911    if (cast<MemberExpr>(E)->isArrow())
5912      return 0;
5913    // Otherwise, the expression refers to a part of the base
5914    return getPrimaryDecl(cast<MemberExpr>(E)->getBase());
5915  case Stmt::ArraySubscriptExprClass: {
5916    // FIXME: This code shouldn't be necessary!  We should catch the implicit
5917    // promotion of register arrays earlier.
5918    Expr* Base = cast<ArraySubscriptExpr>(E)->getBase();
5919    if (ImplicitCastExpr* ICE = dyn_cast<ImplicitCastExpr>(Base)) {
5920      if (ICE->getSubExpr()->getType()->isArrayType())
5921        return getPrimaryDecl(ICE->getSubExpr());
5922    }
5923    return 0;
5924  }
5925  case Stmt::UnaryOperatorClass: {
5926    UnaryOperator *UO = cast<UnaryOperator>(E);
5927
5928    switch(UO->getOpcode()) {
5929    case UnaryOperator::Real:
5930    case UnaryOperator::Imag:
5931    case UnaryOperator::Extension:
5932      return getPrimaryDecl(UO->getSubExpr());
5933    default:
5934      return 0;
5935    }
5936  }
5937  case Stmt::ParenExprClass:
5938    return getPrimaryDecl(cast<ParenExpr>(E)->getSubExpr());
5939  case Stmt::ImplicitCastExprClass:
5940    // If the result of an implicit cast is an l-value, we care about
5941    // the sub-expression; otherwise, the result here doesn't matter.
5942    return getPrimaryDecl(cast<ImplicitCastExpr>(E)->getSubExpr());
5943  default:
5944    return 0;
5945  }
5946}
5947
5948/// CheckAddressOfOperand - The operand of & must be either a function
5949/// designator or an lvalue designating an object. If it is an lvalue, the
5950/// object cannot be declared with storage class register or be a bit field.
5951/// Note: The usual conversions are *not* applied to the operand of the &
5952/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.
5953/// In C++, the operand might be an overloaded function name, in which case
5954/// we allow the '&' but retain the overloaded-function type.
5955QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) {
5956  // Make sure to ignore parentheses in subsequent checks
5957  op = op->IgnoreParens();
5958
5959  if (op->isTypeDependent())
5960    return Context.DependentTy;
5961
5962  if (getLangOptions().C99) {
5963    // Implement C99-only parts of addressof rules.
5964    if (UnaryOperator* uOp = dyn_cast<UnaryOperator>(op)) {
5965      if (uOp->getOpcode() == UnaryOperator::Deref)
5966        // Per C99 6.5.3.2, the address of a deref always returns a valid result
5967        // (assuming the deref expression is valid).
5968        return uOp->getSubExpr()->getType();
5969    }
5970    // Technically, there should be a check for array subscript
5971    // expressions here, but the result of one is always an lvalue anyway.
5972  }
5973  NamedDecl *dcl = getPrimaryDecl(op);
5974  Expr::isLvalueResult lval = op->isLvalue(Context);
5975
5976  MemberExpr *ME = dyn_cast<MemberExpr>(op);
5977  if (lval == Expr::LV_MemberFunction && ME &&
5978      isa<CXXMethodDecl>(ME->getMemberDecl())) {
5979    ValueDecl *dcl = cast<MemberExpr>(op)->getMemberDecl();
5980    // &f where f is a member of the current object, or &o.f, or &p->f
5981    // All these are not allowed, and we need to catch them before the dcl
5982    // branch of the if, below.
5983    Diag(OpLoc, diag::err_unqualified_pointer_member_function)
5984        << dcl;
5985    // FIXME: Improve this diagnostic and provide a fixit.
5986
5987    // Now recover by acting as if the function had been accessed qualified.
5988    return Context.getMemberPointerType(op->getType(),
5989                Context.getTypeDeclType(cast<RecordDecl>(dcl->getDeclContext()))
5990                       .getTypePtr());
5991  } else if (lval == Expr::LV_ClassTemporary) {
5992    Diag(OpLoc, isSFINAEContext()? diag::err_typecheck_addrof_class_temporary
5993                                 : diag::ext_typecheck_addrof_class_temporary)
5994      << op->getType() << op->getSourceRange();
5995    if (isSFINAEContext())
5996      return QualType();
5997  } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {
5998    // C99 6.5.3.2p1
5999    // The operand must be either an l-value or a function designator
6000    if (!op->getType()->isFunctionType()) {
6001      // FIXME: emit more specific diag...
6002      Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof)
6003        << op->getSourceRange();
6004      return QualType();
6005    }
6006  } else if (op->getBitField()) { // C99 6.5.3.2p1
6007    // The operand cannot be a bit-field
6008    Diag(OpLoc, diag::err_typecheck_address_of)
6009      << "bit-field" << op->getSourceRange();
6010        return QualType();
6011  } else if (op->refersToVectorElement()) {
6012    // The operand cannot be an element of a vector
6013    Diag(OpLoc, diag::err_typecheck_address_of)
6014      << "vector element" << op->getSourceRange();
6015    return QualType();
6016  } else if (isa<ObjCPropertyRefExpr>(op)) {
6017    // cannot take address of a property expression.
6018    Diag(OpLoc, diag::err_typecheck_address_of)
6019      << "property expression" << op->getSourceRange();
6020    return QualType();
6021  } else if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(op)) {
6022    // FIXME: Can LHS ever be null here?
6023    if (!CheckAddressOfOperand(CO->getTrueExpr(), OpLoc).isNull())
6024      return CheckAddressOfOperand(CO->getFalseExpr(), OpLoc);
6025  } else if (isa<UnresolvedLookupExpr>(op)) {
6026    return Context.OverloadTy;
6027  } else if (dcl) { // C99 6.5.3.2p1
6028    // We have an lvalue with a decl. Make sure the decl is not declared
6029    // with the register storage-class specifier.
6030    if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) {
6031      if (vd->getStorageClass() == VarDecl::Register) {
6032        Diag(OpLoc, diag::err_typecheck_address_of)
6033          << "register variable" << op->getSourceRange();
6034        return QualType();
6035      }
6036    } else if (isa<FunctionTemplateDecl>(dcl)) {
6037      return Context.OverloadTy;
6038    } else if (FieldDecl *FD = dyn_cast<FieldDecl>(dcl)) {
6039      // Okay: we can take the address of a field.
6040      // Could be a pointer to member, though, if there is an explicit
6041      // scope qualifier for the class.
6042      if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier()) {
6043        DeclContext *Ctx = dcl->getDeclContext();
6044        if (Ctx && Ctx->isRecord()) {
6045          if (FD->getType()->isReferenceType()) {
6046            Diag(OpLoc,
6047                 diag::err_cannot_form_pointer_to_member_of_reference_type)
6048              << FD->getDeclName() << FD->getType();
6049            return QualType();
6050          }
6051
6052          return Context.getMemberPointerType(op->getType(),
6053                Context.getTypeDeclType(cast<RecordDecl>(Ctx)).getTypePtr());
6054        }
6055      }
6056    } else if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(dcl)) {
6057      // Okay: we can take the address of a function.
6058      // As above.
6059      if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier() &&
6060          MD->isInstance())
6061        return Context.getMemberPointerType(op->getType(),
6062              Context.getTypeDeclType(MD->getParent()).getTypePtr());
6063    } else if (!isa<FunctionDecl>(dcl))
6064      assert(0 && "Unknown/unexpected decl type");
6065  }
6066
6067  if (lval == Expr::LV_IncompleteVoidType) {
6068    // Taking the address of a void variable is technically illegal, but we
6069    // allow it in cases which are otherwise valid.
6070    // Example: "extern void x; void* y = &x;".
6071    Diag(OpLoc, diag::ext_typecheck_addrof_void) << op->getSourceRange();
6072  }
6073
6074  // If the operand has type "type", the result has type "pointer to type".
6075  return Context.getPointerType(op->getType());
6076}
6077
6078QualType Sema::CheckIndirectionOperand(Expr *Op, SourceLocation OpLoc) {
6079  if (Op->isTypeDependent())
6080    return Context.DependentTy;
6081
6082  UsualUnaryConversions(Op);
6083  QualType Ty = Op->getType();
6084
6085  // Note that per both C89 and C99, this is always legal, even if ptype is an
6086  // incomplete type or void.  It would be possible to warn about dereferencing
6087  // a void pointer, but it's completely well-defined, and such a warning is
6088  // unlikely to catch any mistakes.
6089  if (const PointerType *PT = Ty->getAs<PointerType>())
6090    return PT->getPointeeType();
6091
6092  if (const ObjCObjectPointerType *OPT = Ty->getAs<ObjCObjectPointerType>())
6093    return OPT->getPointeeType();
6094
6095  Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer)
6096    << Ty << Op->getSourceRange();
6097  return QualType();
6098}
6099
6100static inline BinaryOperator::Opcode ConvertTokenKindToBinaryOpcode(
6101  tok::TokenKind Kind) {
6102  BinaryOperator::Opcode Opc;
6103  switch (Kind) {
6104  default: assert(0 && "Unknown binop!");
6105  case tok::periodstar:           Opc = BinaryOperator::PtrMemD; break;
6106  case tok::arrowstar:            Opc = BinaryOperator::PtrMemI; break;
6107  case tok::star:                 Opc = BinaryOperator::Mul; break;
6108  case tok::slash:                Opc = BinaryOperator::Div; break;
6109  case tok::percent:              Opc = BinaryOperator::Rem; break;
6110  case tok::plus:                 Opc = BinaryOperator::Add; break;
6111  case tok::minus:                Opc = BinaryOperator::Sub; break;
6112  case tok::lessless:             Opc = BinaryOperator::Shl; break;
6113  case tok::greatergreater:       Opc = BinaryOperator::Shr; break;
6114  case tok::lessequal:            Opc = BinaryOperator::LE; break;
6115  case tok::less:                 Opc = BinaryOperator::LT; break;
6116  case tok::greaterequal:         Opc = BinaryOperator::GE; break;
6117  case tok::greater:              Opc = BinaryOperator::GT; break;
6118  case tok::exclaimequal:         Opc = BinaryOperator::NE; break;
6119  case tok::equalequal:           Opc = BinaryOperator::EQ; break;
6120  case tok::amp:                  Opc = BinaryOperator::And; break;
6121  case tok::caret:                Opc = BinaryOperator::Xor; break;
6122  case tok::pipe:                 Opc = BinaryOperator::Or; break;
6123  case tok::ampamp:               Opc = BinaryOperator::LAnd; break;
6124  case tok::pipepipe:             Opc = BinaryOperator::LOr; break;
6125  case tok::equal:                Opc = BinaryOperator::Assign; break;
6126  case tok::starequal:            Opc = BinaryOperator::MulAssign; break;
6127  case tok::slashequal:           Opc = BinaryOperator::DivAssign; break;
6128  case tok::percentequal:         Opc = BinaryOperator::RemAssign; break;
6129  case tok::plusequal:            Opc = BinaryOperator::AddAssign; break;
6130  case tok::minusequal:           Opc = BinaryOperator::SubAssign; break;
6131  case tok::lesslessequal:        Opc = BinaryOperator::ShlAssign; break;
6132  case tok::greatergreaterequal:  Opc = BinaryOperator::ShrAssign; break;
6133  case tok::ampequal:             Opc = BinaryOperator::AndAssign; break;
6134  case tok::caretequal:           Opc = BinaryOperator::XorAssign; break;
6135  case tok::pipeequal:            Opc = BinaryOperator::OrAssign; break;
6136  case tok::comma:                Opc = BinaryOperator::Comma; break;
6137  }
6138  return Opc;
6139}
6140
6141static inline UnaryOperator::Opcode ConvertTokenKindToUnaryOpcode(
6142  tok::TokenKind Kind) {
6143  UnaryOperator::Opcode Opc;
6144  switch (Kind) {
6145  default: assert(0 && "Unknown unary op!");
6146  case tok::plusplus:     Opc = UnaryOperator::PreInc; break;
6147  case tok::minusminus:   Opc = UnaryOperator::PreDec; break;
6148  case tok::amp:          Opc = UnaryOperator::AddrOf; break;
6149  case tok::star:         Opc = UnaryOperator::Deref; break;
6150  case tok::plus:         Opc = UnaryOperator::Plus; break;
6151  case tok::minus:        Opc = UnaryOperator::Minus; break;
6152  case tok::tilde:        Opc = UnaryOperator::Not; break;
6153  case tok::exclaim:      Opc = UnaryOperator::LNot; break;
6154  case tok::kw___real:    Opc = UnaryOperator::Real; break;
6155  case tok::kw___imag:    Opc = UnaryOperator::Imag; break;
6156  case tok::kw___extension__: Opc = UnaryOperator::Extension; break;
6157  }
6158  return Opc;
6159}
6160
6161/// CreateBuiltinBinOp - Creates a new built-in binary operation with
6162/// operator @p Opc at location @c TokLoc. This routine only supports
6163/// built-in operations; ActOnBinOp handles overloaded operators.
6164Action::OwningExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc,
6165                                                  unsigned Op,
6166                                                  Expr *lhs, Expr *rhs) {
6167  QualType ResultTy;     // Result type of the binary operator.
6168  BinaryOperator::Opcode Opc = (BinaryOperator::Opcode)Op;
6169  // The following two variables are used for compound assignment operators
6170  QualType CompLHSTy;    // Type of LHS after promotions for computation
6171  QualType CompResultTy; // Type of computation result
6172
6173  switch (Opc) {
6174  case BinaryOperator::Assign:
6175    ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, QualType());
6176    break;
6177  case BinaryOperator::PtrMemD:
6178  case BinaryOperator::PtrMemI:
6179    ResultTy = CheckPointerToMemberOperands(lhs, rhs, OpLoc,
6180                                            Opc == BinaryOperator::PtrMemI);
6181    break;
6182  case BinaryOperator::Mul:
6183  case BinaryOperator::Div:
6184    ResultTy = CheckMultiplyDivideOperands(lhs, rhs, OpLoc, false,
6185                                           Opc == BinaryOperator::Div);
6186    break;
6187  case BinaryOperator::Rem:
6188    ResultTy = CheckRemainderOperands(lhs, rhs, OpLoc);
6189    break;
6190  case BinaryOperator::Add:
6191    ResultTy = CheckAdditionOperands(lhs, rhs, OpLoc);
6192    break;
6193  case BinaryOperator::Sub:
6194    ResultTy = CheckSubtractionOperands(lhs, rhs, OpLoc);
6195    break;
6196  case BinaryOperator::Shl:
6197  case BinaryOperator::Shr:
6198    ResultTy = CheckShiftOperands(lhs, rhs, OpLoc);
6199    break;
6200  case BinaryOperator::LE:
6201  case BinaryOperator::LT:
6202  case BinaryOperator::GE:
6203  case BinaryOperator::GT:
6204    ResultTy = CheckCompareOperands(lhs, rhs, OpLoc, Opc, true);
6205    break;
6206  case BinaryOperator::EQ:
6207  case BinaryOperator::NE:
6208    ResultTy = CheckCompareOperands(lhs, rhs, OpLoc, Opc, false);
6209    break;
6210  case BinaryOperator::And:
6211  case BinaryOperator::Xor:
6212  case BinaryOperator::Or:
6213    ResultTy = CheckBitwiseOperands(lhs, rhs, OpLoc);
6214    break;
6215  case BinaryOperator::LAnd:
6216  case BinaryOperator::LOr:
6217    ResultTy = CheckLogicalOperands(lhs, rhs, OpLoc);
6218    break;
6219  case BinaryOperator::MulAssign:
6220  case BinaryOperator::DivAssign:
6221    CompResultTy = CheckMultiplyDivideOperands(lhs, rhs, OpLoc, true,
6222                                              Opc == BinaryOperator::DivAssign);
6223    CompLHSTy = CompResultTy;
6224    if (!CompResultTy.isNull())
6225      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6226    break;
6227  case BinaryOperator::RemAssign:
6228    CompResultTy = CheckRemainderOperands(lhs, rhs, OpLoc, true);
6229    CompLHSTy = CompResultTy;
6230    if (!CompResultTy.isNull())
6231      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6232    break;
6233  case BinaryOperator::AddAssign:
6234    CompResultTy = CheckAdditionOperands(lhs, rhs, OpLoc, &CompLHSTy);
6235    if (!CompResultTy.isNull())
6236      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6237    break;
6238  case BinaryOperator::SubAssign:
6239    CompResultTy = CheckSubtractionOperands(lhs, rhs, OpLoc, &CompLHSTy);
6240    if (!CompResultTy.isNull())
6241      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6242    break;
6243  case BinaryOperator::ShlAssign:
6244  case BinaryOperator::ShrAssign:
6245    CompResultTy = CheckShiftOperands(lhs, rhs, OpLoc, true);
6246    CompLHSTy = CompResultTy;
6247    if (!CompResultTy.isNull())
6248      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6249    break;
6250  case BinaryOperator::AndAssign:
6251  case BinaryOperator::XorAssign:
6252  case BinaryOperator::OrAssign:
6253    CompResultTy = CheckBitwiseOperands(lhs, rhs, OpLoc, true);
6254    CompLHSTy = CompResultTy;
6255    if (!CompResultTy.isNull())
6256      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6257    break;
6258  case BinaryOperator::Comma:
6259    ResultTy = CheckCommaOperands(lhs, rhs, OpLoc);
6260    break;
6261  }
6262  if (ResultTy.isNull())
6263    return ExprError();
6264  if (CompResultTy.isNull())
6265    return Owned(new (Context) BinaryOperator(lhs, rhs, Opc, ResultTy, OpLoc));
6266  else
6267    return Owned(new (Context) CompoundAssignOperator(lhs, rhs, Opc, ResultTy,
6268                                                      CompLHSTy, CompResultTy,
6269                                                      OpLoc));
6270}
6271
6272/// SuggestParentheses - Emit a diagnostic together with a fixit hint that wraps
6273/// ParenRange in parentheses.
6274static void SuggestParentheses(Sema &Self, SourceLocation Loc,
6275                               const PartialDiagnostic &PD,
6276                               const PartialDiagnostic &FirstNote,
6277                               SourceRange FirstParenRange,
6278                               const PartialDiagnostic &SecondNote,
6279                               SourceRange SecondParenRange) {
6280  Self.Diag(Loc, PD);
6281
6282  if (!FirstNote.getDiagID())
6283    return;
6284
6285  SourceLocation EndLoc = Self.PP.getLocForEndOfToken(FirstParenRange.getEnd());
6286  if (!FirstParenRange.getEnd().isFileID() || EndLoc.isInvalid()) {
6287    // We can't display the parentheses, so just return.
6288    return;
6289  }
6290
6291  Self.Diag(Loc, FirstNote)
6292    << FixItHint::CreateInsertion(FirstParenRange.getBegin(), "(")
6293    << FixItHint::CreateInsertion(EndLoc, ")");
6294
6295  if (!SecondNote.getDiagID())
6296    return;
6297
6298  EndLoc = Self.PP.getLocForEndOfToken(SecondParenRange.getEnd());
6299  if (!SecondParenRange.getEnd().isFileID() || EndLoc.isInvalid()) {
6300    // We can't display the parentheses, so just dig the
6301    // warning/error and return.
6302    Self.Diag(Loc, SecondNote);
6303    return;
6304  }
6305
6306  Self.Diag(Loc, SecondNote)
6307    << FixItHint::CreateInsertion(SecondParenRange.getBegin(), "(")
6308    << FixItHint::CreateInsertion(EndLoc, ")");
6309}
6310
6311/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison
6312/// operators are mixed in a way that suggests that the programmer forgot that
6313/// comparison operators have higher precedence. The most typical example of
6314/// such code is "flags & 0x0020 != 0", which is equivalent to "flags & 1".
6315static void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperator::Opcode Opc,
6316                                      SourceLocation OpLoc,Expr *lhs,Expr *rhs){
6317  typedef BinaryOperator BinOp;
6318  BinOp::Opcode lhsopc = static_cast<BinOp::Opcode>(-1),
6319                rhsopc = static_cast<BinOp::Opcode>(-1);
6320  if (BinOp *BO = dyn_cast<BinOp>(lhs))
6321    lhsopc = BO->getOpcode();
6322  if (BinOp *BO = dyn_cast<BinOp>(rhs))
6323    rhsopc = BO->getOpcode();
6324
6325  // Subs are not binary operators.
6326  if (lhsopc == -1 && rhsopc == -1)
6327    return;
6328
6329  // Bitwise operations are sometimes used as eager logical ops.
6330  // Don't diagnose this.
6331  if ((BinOp::isComparisonOp(lhsopc) || BinOp::isBitwiseOp(lhsopc)) &&
6332      (BinOp::isComparisonOp(rhsopc) || BinOp::isBitwiseOp(rhsopc)))
6333    return;
6334
6335  if (BinOp::isComparisonOp(lhsopc))
6336    SuggestParentheses(Self, OpLoc,
6337      Self.PDiag(diag::warn_precedence_bitwise_rel)
6338          << SourceRange(lhs->getLocStart(), OpLoc)
6339          << BinOp::getOpcodeStr(Opc) << BinOp::getOpcodeStr(lhsopc),
6340      Self.PDiag(diag::note_precedence_bitwise_first)
6341          << BinOp::getOpcodeStr(Opc),
6342      SourceRange(cast<BinOp>(lhs)->getRHS()->getLocStart(), rhs->getLocEnd()),
6343      Self.PDiag(diag::note_precedence_bitwise_silence)
6344          << BinOp::getOpcodeStr(lhsopc),
6345                       lhs->getSourceRange());
6346  else if (BinOp::isComparisonOp(rhsopc))
6347    SuggestParentheses(Self, OpLoc,
6348      Self.PDiag(diag::warn_precedence_bitwise_rel)
6349          << SourceRange(OpLoc, rhs->getLocEnd())
6350          << BinOp::getOpcodeStr(Opc) << BinOp::getOpcodeStr(rhsopc),
6351      Self.PDiag(diag::note_precedence_bitwise_first)
6352        << BinOp::getOpcodeStr(Opc),
6353      SourceRange(lhs->getLocEnd(), cast<BinOp>(rhs)->getLHS()->getLocStart()),
6354      Self.PDiag(diag::note_precedence_bitwise_silence)
6355        << BinOp::getOpcodeStr(rhsopc),
6356                       rhs->getSourceRange());
6357}
6358
6359/// DiagnoseBinOpPrecedence - Emit warnings for expressions with tricky
6360/// precedence. This currently diagnoses only "arg1 'bitwise' arg2 'eq' arg3".
6361/// But it could also warn about arg1 && arg2 || arg3, as GCC 4.3+ does.
6362static void DiagnoseBinOpPrecedence(Sema &Self, BinaryOperator::Opcode Opc,
6363                                    SourceLocation OpLoc, Expr *lhs, Expr *rhs){
6364  if (BinaryOperator::isBitwiseOp(Opc))
6365    DiagnoseBitwisePrecedence(Self, Opc, OpLoc, lhs, rhs);
6366}
6367
6368// Binary Operators.  'Tok' is the token for the operator.
6369Action::OwningExprResult Sema::ActOnBinOp(Scope *S, SourceLocation TokLoc,
6370                                          tok::TokenKind Kind,
6371                                          ExprArg LHS, ExprArg RHS) {
6372  BinaryOperator::Opcode Opc = ConvertTokenKindToBinaryOpcode(Kind);
6373  Expr *lhs = LHS.takeAs<Expr>(), *rhs = RHS.takeAs<Expr>();
6374
6375  assert((lhs != 0) && "ActOnBinOp(): missing left expression");
6376  assert((rhs != 0) && "ActOnBinOp(): missing right expression");
6377
6378  // Emit warnings for tricky precedence issues, e.g. "bitfield & 0x4 == 0"
6379  DiagnoseBinOpPrecedence(*this, Opc, TokLoc, lhs, rhs);
6380
6381  return BuildBinOp(S, TokLoc, Opc, lhs, rhs);
6382}
6383
6384Action::OwningExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc,
6385                                          BinaryOperator::Opcode Opc,
6386                                          Expr *lhs, Expr *rhs) {
6387  if (getLangOptions().CPlusPlus &&
6388      (lhs->getType()->isOverloadableType() ||
6389       rhs->getType()->isOverloadableType())) {
6390    // Find all of the overloaded operators visible from this
6391    // point. We perform both an operator-name lookup from the local
6392    // scope and an argument-dependent lookup based on the types of
6393    // the arguments.
6394    UnresolvedSet<16> Functions;
6395    OverloadedOperatorKind OverOp = BinaryOperator::getOverloadedOperator(Opc);
6396    if (S && OverOp != OO_None)
6397      LookupOverloadedOperatorName(OverOp, S, lhs->getType(), rhs->getType(),
6398                                   Functions);
6399
6400    // Build the (potentially-overloaded, potentially-dependent)
6401    // binary operation.
6402    return CreateOverloadedBinOp(OpLoc, Opc, Functions, lhs, rhs);
6403  }
6404
6405  // Build a built-in binary operation.
6406  return CreateBuiltinBinOp(OpLoc, Opc, lhs, rhs);
6407}
6408
6409Action::OwningExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc,
6410                                                    unsigned OpcIn,
6411                                                    ExprArg InputArg) {
6412  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
6413
6414  // FIXME: Input is modified below, but InputArg is not updated appropriately.
6415  Expr *Input = (Expr *)InputArg.get();
6416  QualType resultType;
6417  switch (Opc) {
6418  case UnaryOperator::OffsetOf:
6419    assert(false && "Invalid unary operator");
6420    break;
6421
6422  case UnaryOperator::PreInc:
6423  case UnaryOperator::PreDec:
6424  case UnaryOperator::PostInc:
6425  case UnaryOperator::PostDec:
6426    resultType = CheckIncrementDecrementOperand(Input, OpLoc,
6427                                                Opc == UnaryOperator::PreInc ||
6428                                                Opc == UnaryOperator::PostInc);
6429    break;
6430  case UnaryOperator::AddrOf:
6431    resultType = CheckAddressOfOperand(Input, OpLoc);
6432    break;
6433  case UnaryOperator::Deref:
6434    DefaultFunctionArrayLvalueConversion(Input);
6435    resultType = CheckIndirectionOperand(Input, OpLoc);
6436    break;
6437  case UnaryOperator::Plus:
6438  case UnaryOperator::Minus:
6439    UsualUnaryConversions(Input);
6440    resultType = Input->getType();
6441    if (resultType->isDependentType())
6442      break;
6443    if (resultType->isArithmeticType()) // C99 6.5.3.3p1
6444      break;
6445    else if (getLangOptions().CPlusPlus && // C++ [expr.unary.op]p6-7
6446             resultType->isEnumeralType())
6447      break;
6448    else if (getLangOptions().CPlusPlus && // C++ [expr.unary.op]p6
6449             Opc == UnaryOperator::Plus &&
6450             resultType->isPointerType())
6451      break;
6452
6453    return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr)
6454      << resultType << Input->getSourceRange());
6455  case UnaryOperator::Not: // bitwise complement
6456    UsualUnaryConversions(Input);
6457    resultType = Input->getType();
6458    if (resultType->isDependentType())
6459      break;
6460    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.
6461    if (resultType->isComplexType() || resultType->isComplexIntegerType())
6462      // C99 does not support '~' for complex conjugation.
6463      Diag(OpLoc, diag::ext_integer_complement_complex)
6464        << resultType << Input->getSourceRange();
6465    else if (!resultType->isIntegerType())
6466      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr)
6467        << resultType << Input->getSourceRange());
6468    break;
6469  case UnaryOperator::LNot: // logical negation
6470    // Unlike +/-/~, integer promotions aren't done here (C99 6.5.3.3p5).
6471    DefaultFunctionArrayLvalueConversion(Input);
6472    resultType = Input->getType();
6473    if (resultType->isDependentType())
6474      break;
6475    if (!resultType->isScalarType()) // C99 6.5.3.3p1
6476      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr)
6477        << resultType << Input->getSourceRange());
6478    // LNot always has type int. C99 6.5.3.3p5.
6479    // In C++, it's bool. C++ 5.3.1p8
6480    resultType = getLangOptions().CPlusPlus ? Context.BoolTy : Context.IntTy;
6481    break;
6482  case UnaryOperator::Real:
6483  case UnaryOperator::Imag:
6484    resultType = CheckRealImagOperand(Input, OpLoc, Opc == UnaryOperator::Real);
6485    break;
6486  case UnaryOperator::Extension:
6487    resultType = Input->getType();
6488    break;
6489  }
6490  if (resultType.isNull())
6491    return ExprError();
6492
6493  InputArg.release();
6494  return Owned(new (Context) UnaryOperator(Input, Opc, resultType, OpLoc));
6495}
6496
6497Action::OwningExprResult Sema::BuildUnaryOp(Scope *S, SourceLocation OpLoc,
6498                                            UnaryOperator::Opcode Opc,
6499                                            ExprArg input) {
6500  Expr *Input = (Expr*)input.get();
6501  if (getLangOptions().CPlusPlus && Input->getType()->isOverloadableType() &&
6502      Opc != UnaryOperator::Extension) {
6503    // Find all of the overloaded operators visible from this
6504    // point. We perform both an operator-name lookup from the local
6505    // scope and an argument-dependent lookup based on the types of
6506    // the arguments.
6507    UnresolvedSet<16> Functions;
6508    OverloadedOperatorKind OverOp = UnaryOperator::getOverloadedOperator(Opc);
6509    if (S && OverOp != OO_None)
6510      LookupOverloadedOperatorName(OverOp, S, Input->getType(), QualType(),
6511                                   Functions);
6512
6513    return CreateOverloadedUnaryOp(OpLoc, Opc, Functions, move(input));
6514  }
6515
6516  return CreateBuiltinUnaryOp(OpLoc, Opc, move(input));
6517}
6518
6519// Unary Operators.  'Tok' is the token for the operator.
6520Action::OwningExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc,
6521                                            tok::TokenKind Op, ExprArg input) {
6522  return BuildUnaryOp(S, OpLoc, ConvertTokenKindToUnaryOpcode(Op), move(input));
6523}
6524
6525/// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo".
6526Sema::OwningExprResult Sema::ActOnAddrLabel(SourceLocation OpLoc,
6527                                            SourceLocation LabLoc,
6528                                            IdentifierInfo *LabelII) {
6529  // Look up the record for this label identifier.
6530  LabelStmt *&LabelDecl = getLabelMap()[LabelII];
6531
6532  // If we haven't seen this label yet, create a forward reference. It
6533  // will be validated and/or cleaned up in ActOnFinishFunctionBody.
6534  if (LabelDecl == 0)
6535    LabelDecl = new (Context) LabelStmt(LabLoc, LabelII, 0);
6536
6537  // Create the AST node.  The address of a label always has type 'void*'.
6538  return Owned(new (Context) AddrLabelExpr(OpLoc, LabLoc, LabelDecl,
6539                                       Context.getPointerType(Context.VoidTy)));
6540}
6541
6542Sema::OwningExprResult
6543Sema::ActOnStmtExpr(SourceLocation LPLoc, StmtArg substmt,
6544                    SourceLocation RPLoc) { // "({..})"
6545  Stmt *SubStmt = static_cast<Stmt*>(substmt.get());
6546  assert(SubStmt && isa<CompoundStmt>(SubStmt) && "Invalid action invocation!");
6547  CompoundStmt *Compound = cast<CompoundStmt>(SubStmt);
6548
6549  bool isFileScope
6550    = (getCurFunctionOrMethodDecl() == 0) && (getCurBlock() == 0);
6551  if (isFileScope)
6552    return ExprError(Diag(LPLoc, diag::err_stmtexpr_file_scope));
6553
6554  // FIXME: there are a variety of strange constraints to enforce here, for
6555  // example, it is not possible to goto into a stmt expression apparently.
6556  // More semantic analysis is needed.
6557
6558  // If there are sub stmts in the compound stmt, take the type of the last one
6559  // as the type of the stmtexpr.
6560  QualType Ty = Context.VoidTy;
6561
6562  if (!Compound->body_empty()) {
6563    Stmt *LastStmt = Compound->body_back();
6564    // If LastStmt is a label, skip down through into the body.
6565    while (LabelStmt *Label = dyn_cast<LabelStmt>(LastStmt))
6566      LastStmt = Label->getSubStmt();
6567
6568    if (Expr *LastExpr = dyn_cast<Expr>(LastStmt))
6569      Ty = LastExpr->getType();
6570  }
6571
6572  // FIXME: Check that expression type is complete/non-abstract; statement
6573  // expressions are not lvalues.
6574
6575  substmt.release();
6576  return Owned(new (Context) StmtExpr(Compound, Ty, LPLoc, RPLoc));
6577}
6578
6579Sema::OwningExprResult Sema::ActOnBuiltinOffsetOf(Scope *S,
6580                                                  SourceLocation BuiltinLoc,
6581                                                  SourceLocation TypeLoc,
6582                                                  TypeTy *argty,
6583                                                  OffsetOfComponent *CompPtr,
6584                                                  unsigned NumComponents,
6585                                                  SourceLocation RPLoc) {
6586  // FIXME: This function leaks all expressions in the offset components on
6587  // error.
6588  // FIXME: Preserve type source info.
6589  QualType ArgTy = GetTypeFromParser(argty);
6590  assert(!ArgTy.isNull() && "Missing type argument!");
6591
6592  bool Dependent = ArgTy->isDependentType();
6593
6594  // We must have at least one component that refers to the type, and the first
6595  // one is known to be a field designator.  Verify that the ArgTy represents
6596  // a struct/union/class.
6597  if (!Dependent && !ArgTy->isRecordType())
6598    return ExprError(Diag(TypeLoc, diag::err_offsetof_record_type) << ArgTy);
6599
6600  // FIXME: Type must be complete per C99 7.17p3 because a declaring a variable
6601  // with an incomplete type would be illegal.
6602
6603  // Otherwise, create a null pointer as the base, and iteratively process
6604  // the offsetof designators.
6605  QualType ArgTyPtr = Context.getPointerType(ArgTy);
6606  Expr* Res = new (Context) ImplicitValueInitExpr(ArgTyPtr);
6607  Res = new (Context) UnaryOperator(Res, UnaryOperator::Deref,
6608                                    ArgTy, SourceLocation());
6609
6610  // offsetof with non-identifier designators (e.g. "offsetof(x, a.b[c])") are a
6611  // GCC extension, diagnose them.
6612  // FIXME: This diagnostic isn't actually visible because the location is in
6613  // a system header!
6614  if (NumComponents != 1)
6615    Diag(BuiltinLoc, diag::ext_offsetof_extended_field_designator)
6616      << SourceRange(CompPtr[1].LocStart, CompPtr[NumComponents-1].LocEnd);
6617
6618  if (!Dependent) {
6619    bool DidWarnAboutNonPOD = false;
6620
6621    if (RequireCompleteType(TypeLoc, Res->getType(),
6622                            diag::err_offsetof_incomplete_type))
6623      return ExprError();
6624
6625    // FIXME: Dependent case loses a lot of information here. And probably
6626    // leaks like a sieve.
6627    for (unsigned i = 0; i != NumComponents; ++i) {
6628      const OffsetOfComponent &OC = CompPtr[i];
6629      if (OC.isBrackets) {
6630        // Offset of an array sub-field.  TODO: Should we allow vector elements?
6631        const ArrayType *AT = Context.getAsArrayType(Res->getType());
6632        if (!AT) {
6633          Res->Destroy(Context);
6634          return ExprError(Diag(OC.LocEnd, diag::err_offsetof_array_type)
6635            << Res->getType());
6636        }
6637
6638        // FIXME: C++: Verify that operator[] isn't overloaded.
6639
6640        // Promote the array so it looks more like a normal array subscript
6641        // expression.
6642        DefaultFunctionArrayLvalueConversion(Res);
6643
6644        // C99 6.5.2.1p1
6645        Expr *Idx = static_cast<Expr*>(OC.U.E);
6646        // FIXME: Leaks Res
6647        if (!Idx->isTypeDependent() && !Idx->getType()->isIntegerType())
6648          return ExprError(Diag(Idx->getLocStart(),
6649                                diag::err_typecheck_subscript_not_integer)
6650            << Idx->getSourceRange());
6651
6652        Res = new (Context) ArraySubscriptExpr(Res, Idx, AT->getElementType(),
6653                                               OC.LocEnd);
6654        continue;
6655      }
6656
6657      const RecordType *RC = Res->getType()->getAs<RecordType>();
6658      if (!RC) {
6659        Res->Destroy(Context);
6660        return ExprError(Diag(OC.LocEnd, diag::err_offsetof_record_type)
6661          << Res->getType());
6662      }
6663
6664      // Get the decl corresponding to this.
6665      RecordDecl *RD = RC->getDecl();
6666      if (CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD)) {
6667        if (!CRD->isPOD() && !DidWarnAboutNonPOD &&
6668            DiagRuntimeBehavior(BuiltinLoc,
6669                                PDiag(diag::warn_offsetof_non_pod_type)
6670                                  << SourceRange(CompPtr[0].LocStart, OC.LocEnd)
6671                                  << Res->getType()))
6672          DidWarnAboutNonPOD = true;
6673      }
6674
6675      LookupResult R(*this, OC.U.IdentInfo, OC.LocStart, LookupMemberName);
6676      LookupQualifiedName(R, RD);
6677
6678      FieldDecl *MemberDecl = R.getAsSingle<FieldDecl>();
6679      // FIXME: Leaks Res
6680      if (!MemberDecl)
6681        return ExprError(Diag(BuiltinLoc, diag::err_no_member)
6682         << OC.U.IdentInfo << RD << SourceRange(OC.LocStart, OC.LocEnd));
6683
6684      // FIXME: C++: Verify that MemberDecl isn't a static field.
6685      // FIXME: Verify that MemberDecl isn't a bitfield.
6686      if (cast<RecordDecl>(MemberDecl->getDeclContext())->isAnonymousStructOrUnion()) {
6687        Res = BuildAnonymousStructUnionMemberReference(
6688            OC.LocEnd, MemberDecl, Res, OC.LocEnd).takeAs<Expr>();
6689      } else {
6690        PerformObjectMemberConversion(Res, /*Qualifier=*/0,
6691                                      *R.begin(), MemberDecl);
6692        // MemberDecl->getType() doesn't get the right qualifiers, but it
6693        // doesn't matter here.
6694        Res = new (Context) MemberExpr(Res, false, MemberDecl, OC.LocEnd,
6695                MemberDecl->getType().getNonReferenceType());
6696      }
6697    }
6698  }
6699
6700  return Owned(new (Context) UnaryOperator(Res, UnaryOperator::OffsetOf,
6701                                           Context.getSizeType(), BuiltinLoc));
6702}
6703
6704
6705Sema::OwningExprResult Sema::ActOnTypesCompatibleExpr(SourceLocation BuiltinLoc,
6706                                                      TypeTy *arg1,TypeTy *arg2,
6707                                                      SourceLocation RPLoc) {
6708  // FIXME: Preserve type source info.
6709  QualType argT1 = GetTypeFromParser(arg1);
6710  QualType argT2 = GetTypeFromParser(arg2);
6711
6712  assert((!argT1.isNull() && !argT2.isNull()) && "Missing type argument(s)");
6713
6714  if (getLangOptions().CPlusPlus) {
6715    Diag(BuiltinLoc, diag::err_types_compatible_p_in_cplusplus)
6716      << SourceRange(BuiltinLoc, RPLoc);
6717    return ExprError();
6718  }
6719
6720  return Owned(new (Context) TypesCompatibleExpr(Context.IntTy, BuiltinLoc,
6721                                                 argT1, argT2, RPLoc));
6722}
6723
6724Sema::OwningExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc,
6725                                             ExprArg cond,
6726                                             ExprArg expr1, ExprArg expr2,
6727                                             SourceLocation RPLoc) {
6728  Expr *CondExpr = static_cast<Expr*>(cond.get());
6729  Expr *LHSExpr = static_cast<Expr*>(expr1.get());
6730  Expr *RHSExpr = static_cast<Expr*>(expr2.get());
6731
6732  assert((CondExpr && LHSExpr && RHSExpr) && "Missing type argument(s)");
6733
6734  QualType resType;
6735  bool ValueDependent = false;
6736  if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) {
6737    resType = Context.DependentTy;
6738    ValueDependent = true;
6739  } else {
6740    // The conditional expression is required to be a constant expression.
6741    llvm::APSInt condEval(32);
6742    SourceLocation ExpLoc;
6743    if (!CondExpr->isIntegerConstantExpr(condEval, Context, &ExpLoc))
6744      return ExprError(Diag(ExpLoc,
6745                       diag::err_typecheck_choose_expr_requires_constant)
6746        << CondExpr->getSourceRange());
6747
6748    // If the condition is > zero, then the AST type is the same as the LSHExpr.
6749    resType = condEval.getZExtValue() ? LHSExpr->getType() : RHSExpr->getType();
6750    ValueDependent = condEval.getZExtValue() ? LHSExpr->isValueDependent()
6751                                             : RHSExpr->isValueDependent();
6752  }
6753
6754  cond.release(); expr1.release(); expr2.release();
6755  return Owned(new (Context) ChooseExpr(BuiltinLoc, CondExpr, LHSExpr, RHSExpr,
6756                                        resType, RPLoc,
6757                                        resType->isDependentType(),
6758                                        ValueDependent));
6759}
6760
6761//===----------------------------------------------------------------------===//
6762// Clang Extensions.
6763//===----------------------------------------------------------------------===//
6764
6765/// ActOnBlockStart - This callback is invoked when a block literal is started.
6766void Sema::ActOnBlockStart(SourceLocation CaretLoc, Scope *BlockScope) {
6767  BlockDecl *Block = BlockDecl::Create(Context, CurContext, CaretLoc);
6768  PushBlockScope(BlockScope, Block);
6769  CurContext->addDecl(Block);
6770  PushDeclContext(BlockScope, Block);
6771}
6772
6773void Sema::ActOnBlockArguments(Declarator &ParamInfo, Scope *CurScope) {
6774  assert(ParamInfo.getIdentifier()==0 && "block-id should have no identifier!");
6775  BlockScopeInfo *CurBlock = getCurBlock();
6776
6777  if (ParamInfo.getNumTypeObjects() == 0
6778      || ParamInfo.getTypeObject(0).Kind != DeclaratorChunk::Function) {
6779    ProcessDeclAttributes(CurScope, CurBlock->TheDecl, ParamInfo);
6780    QualType T = GetTypeForDeclarator(ParamInfo, CurScope);
6781
6782    if (T->isArrayType()) {
6783      Diag(ParamInfo.getSourceRange().getBegin(),
6784           diag::err_block_returns_array);
6785      return;
6786    }
6787
6788    // The parameter list is optional, if there was none, assume ().
6789    if (!T->isFunctionType())
6790      T = Context.getFunctionType(T, 0, 0, false, 0, false, false, 0, 0,
6791                                  FunctionType::ExtInfo());
6792
6793    CurBlock->hasPrototype = true;
6794    CurBlock->isVariadic = false;
6795    // Check for a valid sentinel attribute on this block.
6796    if (CurBlock->TheDecl->getAttr<SentinelAttr>()) {
6797      Diag(ParamInfo.getAttributes()->getLoc(),
6798           diag::warn_attribute_sentinel_not_variadic) << 1;
6799      // FIXME: remove the attribute.
6800    }
6801    QualType RetTy = T.getTypePtr()->getAs<FunctionType>()->getResultType();
6802
6803    // Do not allow returning a objc interface by-value.
6804    if (RetTy->isObjCInterfaceType()) {
6805      Diag(ParamInfo.getSourceRange().getBegin(),
6806           diag::err_object_cannot_be_passed_returned_by_value) << 0 << RetTy;
6807      return;
6808    }
6809
6810    CurBlock->ReturnType = RetTy;
6811    return;
6812  }
6813
6814  // Analyze arguments to block.
6815  assert(ParamInfo.getTypeObject(0).Kind == DeclaratorChunk::Function &&
6816         "Not a function declarator!");
6817  DeclaratorChunk::FunctionTypeInfo &FTI = ParamInfo.getTypeObject(0).Fun;
6818
6819  CurBlock->hasPrototype = FTI.hasPrototype;
6820  CurBlock->isVariadic = true;
6821
6822  // Check for C99 6.7.5.3p10 - foo(void) is a non-varargs function that takes
6823  // no arguments, not a function that takes a single void argument.
6824  if (FTI.hasPrototype &&
6825      FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
6826     (!FTI.ArgInfo[0].Param.getAs<ParmVarDecl>()->getType().getCVRQualifiers()&&
6827        FTI.ArgInfo[0].Param.getAs<ParmVarDecl>()->getType()->isVoidType())) {
6828    // empty arg list, don't push any params.
6829    CurBlock->isVariadic = false;
6830  } else if (FTI.hasPrototype) {
6831    for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i) {
6832      ParmVarDecl *Param = FTI.ArgInfo[i].Param.getAs<ParmVarDecl>();
6833      if (Param->getIdentifier() == 0 &&
6834          !Param->isImplicit() &&
6835          !Param->isInvalidDecl() &&
6836          !getLangOptions().CPlusPlus)
6837        Diag(Param->getLocation(), diag::err_parameter_name_omitted);
6838      CurBlock->Params.push_back(Param);
6839    }
6840    CurBlock->isVariadic = FTI.isVariadic;
6841  }
6842  CurBlock->TheDecl->setParams(CurBlock->Params.data(),
6843                               CurBlock->Params.size());
6844  CurBlock->TheDecl->setIsVariadic(CurBlock->isVariadic);
6845  ProcessDeclAttributes(CurScope, CurBlock->TheDecl, ParamInfo);
6846
6847  bool ShouldCheckShadow =
6848    Diags.getDiagnosticLevel(diag::warn_decl_shadow) != Diagnostic::Ignored;
6849
6850  for (BlockDecl::param_iterator AI = CurBlock->TheDecl->param_begin(),
6851         E = CurBlock->TheDecl->param_end(); AI != E; ++AI) {
6852    (*AI)->setOwningFunction(CurBlock->TheDecl);
6853
6854    // If this has an identifier, add it to the scope stack.
6855    if ((*AI)->getIdentifier()) {
6856      if (ShouldCheckShadow)
6857        CheckShadow(CurBlock->TheScope, *AI);
6858
6859      PushOnScopeChains(*AI, CurBlock->TheScope);
6860    }
6861  }
6862
6863  // Check for a valid sentinel attribute on this block.
6864  if (!CurBlock->isVariadic &&
6865      CurBlock->TheDecl->getAttr<SentinelAttr>()) {
6866    Diag(ParamInfo.getAttributes()->getLoc(),
6867         diag::warn_attribute_sentinel_not_variadic) << 1;
6868    // FIXME: remove the attribute.
6869  }
6870
6871  // Analyze the return type.
6872  QualType T = GetTypeForDeclarator(ParamInfo, CurScope);
6873  QualType RetTy = T->getAs<FunctionType>()->getResultType();
6874
6875  // Do not allow returning a objc interface by-value.
6876  if (RetTy->isObjCInterfaceType()) {
6877    Diag(ParamInfo.getSourceRange().getBegin(),
6878         diag::err_object_cannot_be_passed_returned_by_value) << 0 << RetTy;
6879  } else if (!RetTy->isDependentType())
6880    CurBlock->ReturnType = RetTy;
6881}
6882
6883/// ActOnBlockError - If there is an error parsing a block, this callback
6884/// is invoked to pop the information about the block from the action impl.
6885void Sema::ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope) {
6886  // Pop off CurBlock, handle nested blocks.
6887  PopDeclContext();
6888  PopFunctionOrBlockScope();
6889  // FIXME: Delete the ParmVarDecl objects as well???
6890}
6891
6892/// ActOnBlockStmtExpr - This is called when the body of a block statement
6893/// literal was successfully completed.  ^(int x){...}
6894Sema::OwningExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc,
6895                                                StmtArg body, Scope *CurScope) {
6896  // If blocks are disabled, emit an error.
6897  if (!LangOpts.Blocks)
6898    Diag(CaretLoc, diag::err_blocks_disable);
6899
6900  BlockScopeInfo *BSI = cast<BlockScopeInfo>(FunctionScopes.back());
6901
6902  PopDeclContext();
6903
6904  QualType RetTy = Context.VoidTy;
6905  if (!BSI->ReturnType.isNull())
6906    RetTy = BSI->ReturnType;
6907
6908  llvm::SmallVector<QualType, 8> ArgTypes;
6909  for (unsigned i = 0, e = BSI->Params.size(); i != e; ++i)
6910    ArgTypes.push_back(BSI->Params[i]->getType());
6911
6912  bool NoReturn = BSI->TheDecl->getAttr<NoReturnAttr>();
6913  QualType BlockTy;
6914  if (!BSI->hasPrototype)
6915    BlockTy = Context.getFunctionType(RetTy, 0, 0, false, 0, false, false, 0, 0,
6916                                FunctionType::ExtInfo(NoReturn, 0, CC_Default));
6917  else
6918    BlockTy = Context.getFunctionType(RetTy, ArgTypes.data(), ArgTypes.size(),
6919                                      BSI->isVariadic, 0, false, false, 0, 0,
6920                                FunctionType::ExtInfo(NoReturn, 0, CC_Default));
6921
6922  // FIXME: Check that return/parameter types are complete/non-abstract
6923  DiagnoseUnusedParameters(BSI->Params.begin(), BSI->Params.end());
6924  BlockTy = Context.getBlockPointerType(BlockTy);
6925
6926  // If needed, diagnose invalid gotos and switches in the block.
6927  if (FunctionNeedsScopeChecking() && !hasAnyErrorsInThisFunction())
6928    DiagnoseInvalidJumps(static_cast<CompoundStmt*>(body.get()));
6929
6930  BSI->TheDecl->setBody(body.takeAs<CompoundStmt>());
6931
6932  bool Good = true;
6933  // Check goto/label use.
6934  for (llvm::DenseMap<IdentifierInfo*, LabelStmt*>::iterator
6935         I = BSI->LabelMap.begin(), E = BSI->LabelMap.end(); I != E; ++I) {
6936    LabelStmt *L = I->second;
6937
6938    // Verify that we have no forward references left.  If so, there was a goto
6939    // or address of a label taken, but no definition of it.
6940    if (L->getSubStmt() != 0)
6941      continue;
6942
6943    // Emit error.
6944    Diag(L->getIdentLoc(), diag::err_undeclared_label_use) << L->getName();
6945    Good = false;
6946  }
6947  if (!Good) {
6948    PopFunctionOrBlockScope();
6949    return ExprError();
6950  }
6951
6952  // Issue any analysis-based warnings.
6953  const sema::AnalysisBasedWarnings::Policy &WP =
6954    AnalysisWarnings.getDefaultPolicy();
6955  AnalysisWarnings.IssueWarnings(WP, BSI->TheDecl, BlockTy);
6956
6957  Expr *Result = new (Context) BlockExpr(BSI->TheDecl, BlockTy,
6958                                         BSI->hasBlockDeclRefExprs);
6959  PopFunctionOrBlockScope();
6960  return Owned(Result);
6961}
6962
6963Sema::OwningExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc,
6964                                        ExprArg expr, TypeTy *type,
6965                                        SourceLocation RPLoc) {
6966  QualType T = GetTypeFromParser(type);
6967  Expr *E = static_cast<Expr*>(expr.get());
6968  Expr *OrigExpr = E;
6969
6970  InitBuiltinVaListType();
6971
6972  // Get the va_list type
6973  QualType VaListType = Context.getBuiltinVaListType();
6974  if (VaListType->isArrayType()) {
6975    // Deal with implicit array decay; for example, on x86-64,
6976    // va_list is an array, but it's supposed to decay to
6977    // a pointer for va_arg.
6978    VaListType = Context.getArrayDecayedType(VaListType);
6979    // Make sure the input expression also decays appropriately.
6980    UsualUnaryConversions(E);
6981  } else {
6982    // Otherwise, the va_list argument must be an l-value because
6983    // it is modified by va_arg.
6984    if (!E->isTypeDependent() &&
6985        CheckForModifiableLvalue(E, BuiltinLoc, *this))
6986      return ExprError();
6987  }
6988
6989  if (!E->isTypeDependent() &&
6990      !Context.hasSameType(VaListType, E->getType())) {
6991    return ExprError(Diag(E->getLocStart(),
6992                         diag::err_first_argument_to_va_arg_not_of_type_va_list)
6993      << OrigExpr->getType() << E->getSourceRange());
6994  }
6995
6996  // FIXME: Check that type is complete/non-abstract
6997  // FIXME: Warn if a non-POD type is passed in.
6998
6999  expr.release();
7000  return Owned(new (Context) VAArgExpr(BuiltinLoc, E, T.getNonReferenceType(),
7001                                       RPLoc));
7002}
7003
7004Sema::OwningExprResult Sema::ActOnGNUNullExpr(SourceLocation TokenLoc) {
7005  // The type of __null will be int or long, depending on the size of
7006  // pointers on the target.
7007  QualType Ty;
7008  if (Context.Target.getPointerWidth(0) == Context.Target.getIntWidth())
7009    Ty = Context.IntTy;
7010  else
7011    Ty = Context.LongTy;
7012
7013  return Owned(new (Context) GNUNullExpr(Ty, TokenLoc));
7014}
7015
7016static void MakeObjCStringLiteralFixItHint(Sema& SemaRef, QualType DstType,
7017                                           Expr *SrcExpr, FixItHint &Hint) {
7018  if (!SemaRef.getLangOptions().ObjC1)
7019    return;
7020
7021  const ObjCObjectPointerType *PT = DstType->getAs<ObjCObjectPointerType>();
7022  if (!PT)
7023    return;
7024
7025  // Check if the destination is of type 'id'.
7026  if (!PT->isObjCIdType()) {
7027    // Check if the destination is the 'NSString' interface.
7028    const ObjCInterfaceDecl *ID = PT->getInterfaceDecl();
7029    if (!ID || !ID->getIdentifier()->isStr("NSString"))
7030      return;
7031  }
7032
7033  // Strip off any parens and casts.
7034  StringLiteral *SL = dyn_cast<StringLiteral>(SrcExpr->IgnoreParenCasts());
7035  if (!SL || SL->isWide())
7036    return;
7037
7038  Hint = FixItHint::CreateInsertion(SL->getLocStart(), "@");
7039}
7040
7041bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
7042                                    SourceLocation Loc,
7043                                    QualType DstType, QualType SrcType,
7044                                    Expr *SrcExpr, AssignmentAction Action,
7045                                    bool *Complained) {
7046  if (Complained)
7047    *Complained = false;
7048
7049  // Decode the result (notice that AST's are still created for extensions).
7050  bool isInvalid = false;
7051  unsigned DiagKind;
7052  FixItHint Hint;
7053
7054  switch (ConvTy) {
7055  default: assert(0 && "Unknown conversion type");
7056  case Compatible: return false;
7057  case PointerToInt:
7058    DiagKind = diag::ext_typecheck_convert_pointer_int;
7059    break;
7060  case IntToPointer:
7061    DiagKind = diag::ext_typecheck_convert_int_pointer;
7062    break;
7063  case IncompatiblePointer:
7064    MakeObjCStringLiteralFixItHint(*this, DstType, SrcExpr, Hint);
7065    DiagKind = diag::ext_typecheck_convert_incompatible_pointer;
7066    break;
7067  case IncompatiblePointerSign:
7068    DiagKind = diag::ext_typecheck_convert_incompatible_pointer_sign;
7069    break;
7070  case FunctionVoidPointer:
7071    DiagKind = diag::ext_typecheck_convert_pointer_void_func;
7072    break;
7073  case CompatiblePointerDiscardsQualifiers:
7074    // If the qualifiers lost were because we were applying the
7075    // (deprecated) C++ conversion from a string literal to a char*
7076    // (or wchar_t*), then there was no error (C++ 4.2p2).  FIXME:
7077    // Ideally, this check would be performed in
7078    // CheckPointerTypesForAssignment. However, that would require a
7079    // bit of refactoring (so that the second argument is an
7080    // expression, rather than a type), which should be done as part
7081    // of a larger effort to fix CheckPointerTypesForAssignment for
7082    // C++ semantics.
7083    if (getLangOptions().CPlusPlus &&
7084        IsStringLiteralToNonConstPointerConversion(SrcExpr, DstType))
7085      return false;
7086    DiagKind = diag::ext_typecheck_convert_discards_qualifiers;
7087    break;
7088  case IncompatibleNestedPointerQualifiers:
7089    DiagKind = diag::ext_nested_pointer_qualifier_mismatch;
7090    break;
7091  case IntToBlockPointer:
7092    DiagKind = diag::err_int_to_block_pointer;
7093    break;
7094  case IncompatibleBlockPointer:
7095    DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;
7096    break;
7097  case IncompatibleObjCQualifiedId:
7098    // FIXME: Diagnose the problem in ObjCQualifiedIdTypesAreCompatible, since
7099    // it can give a more specific diagnostic.
7100    DiagKind = diag::warn_incompatible_qualified_id;
7101    break;
7102  case IncompatibleVectors:
7103    DiagKind = diag::warn_incompatible_vectors;
7104    break;
7105  case Incompatible:
7106    DiagKind = diag::err_typecheck_convert_incompatible;
7107    isInvalid = true;
7108    break;
7109  }
7110
7111  QualType FirstType, SecondType;
7112  switch (Action) {
7113  case AA_Assigning:
7114  case AA_Initializing:
7115    // The destination type comes first.
7116    FirstType = DstType;
7117    SecondType = SrcType;
7118    break;
7119
7120  case AA_Returning:
7121  case AA_Passing:
7122  case AA_Converting:
7123  case AA_Sending:
7124  case AA_Casting:
7125    // The source type comes first.
7126    FirstType = SrcType;
7127    SecondType = DstType;
7128    break;
7129  }
7130
7131  Diag(Loc, DiagKind) << FirstType << SecondType << Action
7132    << SrcExpr->getSourceRange() << Hint;
7133  if (Complained)
7134    *Complained = true;
7135  return isInvalid;
7136}
7137
7138bool Sema::VerifyIntegerConstantExpression(const Expr *E, llvm::APSInt *Result){
7139  llvm::APSInt ICEResult;
7140  if (E->isIntegerConstantExpr(ICEResult, Context)) {
7141    if (Result)
7142      *Result = ICEResult;
7143    return false;
7144  }
7145
7146  Expr::EvalResult EvalResult;
7147
7148  if (!E->Evaluate(EvalResult, Context) || !EvalResult.Val.isInt() ||
7149      EvalResult.HasSideEffects) {
7150    Diag(E->getExprLoc(), diag::err_expr_not_ice) << E->getSourceRange();
7151
7152    if (EvalResult.Diag) {
7153      // We only show the note if it's not the usual "invalid subexpression"
7154      // or if it's actually in a subexpression.
7155      if (EvalResult.Diag != diag::note_invalid_subexpr_in_ice ||
7156          E->IgnoreParens() != EvalResult.DiagExpr->IgnoreParens())
7157        Diag(EvalResult.DiagLoc, EvalResult.Diag);
7158    }
7159
7160    return true;
7161  }
7162
7163  Diag(E->getExprLoc(), diag::ext_expr_not_ice) <<
7164    E->getSourceRange();
7165
7166  if (EvalResult.Diag &&
7167      Diags.getDiagnosticLevel(diag::ext_expr_not_ice) != Diagnostic::Ignored)
7168    Diag(EvalResult.DiagLoc, EvalResult.Diag);
7169
7170  if (Result)
7171    *Result = EvalResult.Val.getInt();
7172  return false;
7173}
7174
7175void
7176Sema::PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext) {
7177  ExprEvalContexts.push_back(
7178        ExpressionEvaluationContextRecord(NewContext, ExprTemporaries.size()));
7179}
7180
7181void
7182Sema::PopExpressionEvaluationContext() {
7183  // Pop the current expression evaluation context off the stack.
7184  ExpressionEvaluationContextRecord Rec = ExprEvalContexts.back();
7185  ExprEvalContexts.pop_back();
7186
7187  if (Rec.Context == PotentiallyPotentiallyEvaluated) {
7188    if (Rec.PotentiallyReferenced) {
7189      // Mark any remaining declarations in the current position of the stack
7190      // as "referenced". If they were not meant to be referenced, semantic
7191      // analysis would have eliminated them (e.g., in ActOnCXXTypeId).
7192      for (PotentiallyReferencedDecls::iterator
7193             I = Rec.PotentiallyReferenced->begin(),
7194             IEnd = Rec.PotentiallyReferenced->end();
7195           I != IEnd; ++I)
7196        MarkDeclarationReferenced(I->first, I->second);
7197    }
7198
7199    if (Rec.PotentiallyDiagnosed) {
7200      // Emit any pending diagnostics.
7201      for (PotentiallyEmittedDiagnostics::iterator
7202                I = Rec.PotentiallyDiagnosed->begin(),
7203             IEnd = Rec.PotentiallyDiagnosed->end();
7204           I != IEnd; ++I)
7205        Diag(I->first, I->second);
7206    }
7207  }
7208
7209  // When are coming out of an unevaluated context, clear out any
7210  // temporaries that we may have created as part of the evaluation of
7211  // the expression in that context: they aren't relevant because they
7212  // will never be constructed.
7213  if (Rec.Context == Unevaluated &&
7214      ExprTemporaries.size() > Rec.NumTemporaries)
7215    ExprTemporaries.erase(ExprTemporaries.begin() + Rec.NumTemporaries,
7216                          ExprTemporaries.end());
7217
7218  // Destroy the popped expression evaluation record.
7219  Rec.Destroy();
7220}
7221
7222/// \brief Note that the given declaration was referenced in the source code.
7223///
7224/// This routine should be invoke whenever a given declaration is referenced
7225/// in the source code, and where that reference occurred. If this declaration
7226/// reference means that the the declaration is used (C++ [basic.def.odr]p2,
7227/// C99 6.9p3), then the declaration will be marked as used.
7228///
7229/// \param Loc the location where the declaration was referenced.
7230///
7231/// \param D the declaration that has been referenced by the source code.
7232void Sema::MarkDeclarationReferenced(SourceLocation Loc, Decl *D) {
7233  assert(D && "No declaration?");
7234
7235  if (D->isUsed())
7236    return;
7237
7238  // Mark a parameter or variable declaration "used", regardless of whether we're in a
7239  // template or not. The reason for this is that unevaluated expressions
7240  // (e.g. (void)sizeof()) constitute a use for warning purposes (-Wunused-variables and
7241  // -Wunused-parameters)
7242  if (isa<ParmVarDecl>(D) ||
7243      (isa<VarDecl>(D) && D->getDeclContext()->isFunctionOrMethod())) {
7244    D->setUsed(true);
7245    return;
7246  }
7247
7248  if (!isa<VarDecl>(D) && !isa<FunctionDecl>(D))
7249    return;
7250
7251  // Do not mark anything as "used" within a dependent context; wait for
7252  // an instantiation.
7253  if (CurContext->isDependentContext())
7254    return;
7255
7256  switch (ExprEvalContexts.back().Context) {
7257    case Unevaluated:
7258      // We are in an expression that is not potentially evaluated; do nothing.
7259      return;
7260
7261    case PotentiallyEvaluated:
7262      // We are in a potentially-evaluated expression, so this declaration is
7263      // "used"; handle this below.
7264      break;
7265
7266    case PotentiallyPotentiallyEvaluated:
7267      // We are in an expression that may be potentially evaluated; queue this
7268      // declaration reference until we know whether the expression is
7269      // potentially evaluated.
7270      ExprEvalContexts.back().addReferencedDecl(Loc, D);
7271      return;
7272  }
7273
7274  // Note that this declaration has been used.
7275  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
7276    unsigned TypeQuals;
7277    if (Constructor->isImplicit() && Constructor->isDefaultConstructor()) {
7278        if (!Constructor->isUsed())
7279          DefineImplicitDefaultConstructor(Loc, Constructor);
7280    } else if (Constructor->isImplicit() &&
7281               Constructor->isCopyConstructor(TypeQuals)) {
7282      if (!Constructor->isUsed())
7283        DefineImplicitCopyConstructor(Loc, Constructor, TypeQuals);
7284    }
7285
7286    MaybeMarkVirtualMembersReferenced(Loc, Constructor);
7287  } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(D)) {
7288    if (Destructor->isImplicit() && !Destructor->isUsed())
7289      DefineImplicitDestructor(Loc, Destructor);
7290
7291  } else if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(D)) {
7292    if (MethodDecl->isImplicit() && MethodDecl->isOverloadedOperator() &&
7293        MethodDecl->getOverloadedOperator() == OO_Equal) {
7294      if (!MethodDecl->isUsed())
7295        DefineImplicitOverloadedAssign(Loc, MethodDecl);
7296    }
7297  }
7298  if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
7299    // Implicit instantiation of function templates and member functions of
7300    // class templates.
7301    if (!Function->getBody() && Function->isImplicitlyInstantiable()) {
7302      bool AlreadyInstantiated = false;
7303      if (FunctionTemplateSpecializationInfo *SpecInfo
7304                                = Function->getTemplateSpecializationInfo()) {
7305        if (SpecInfo->getPointOfInstantiation().isInvalid())
7306          SpecInfo->setPointOfInstantiation(Loc);
7307        else if (SpecInfo->getTemplateSpecializationKind()
7308                   == TSK_ImplicitInstantiation)
7309          AlreadyInstantiated = true;
7310      } else if (MemberSpecializationInfo *MSInfo
7311                                  = Function->getMemberSpecializationInfo()) {
7312        if (MSInfo->getPointOfInstantiation().isInvalid())
7313          MSInfo->setPointOfInstantiation(Loc);
7314        else if (MSInfo->getTemplateSpecializationKind()
7315                   == TSK_ImplicitInstantiation)
7316          AlreadyInstantiated = true;
7317      }
7318
7319      if (!AlreadyInstantiated) {
7320        if (isa<CXXRecordDecl>(Function->getDeclContext()) &&
7321            cast<CXXRecordDecl>(Function->getDeclContext())->isLocalClass())
7322          PendingLocalImplicitInstantiations.push_back(std::make_pair(Function,
7323                                                                      Loc));
7324        else
7325          PendingImplicitInstantiations.push_back(std::make_pair(Function,
7326                                                                 Loc));
7327      }
7328    }
7329
7330    // FIXME: keep track of references to static functions
7331    Function->setUsed(true);
7332
7333    return;
7334  }
7335
7336  if (VarDecl *Var = dyn_cast<VarDecl>(D)) {
7337    // Implicit instantiation of static data members of class templates.
7338    if (Var->isStaticDataMember() &&
7339        Var->getInstantiatedFromStaticDataMember()) {
7340      MemberSpecializationInfo *MSInfo = Var->getMemberSpecializationInfo();
7341      assert(MSInfo && "Missing member specialization information?");
7342      if (MSInfo->getPointOfInstantiation().isInvalid() &&
7343          MSInfo->getTemplateSpecializationKind()== TSK_ImplicitInstantiation) {
7344        MSInfo->setPointOfInstantiation(Loc);
7345        PendingImplicitInstantiations.push_back(std::make_pair(Var, Loc));
7346      }
7347    }
7348
7349    // FIXME: keep track of references to static data?
7350
7351    D->setUsed(true);
7352    return;
7353  }
7354}
7355
7356/// \brief Emit a diagnostic that describes an effect on the run-time behavior
7357/// of the program being compiled.
7358///
7359/// This routine emits the given diagnostic when the code currently being
7360/// type-checked is "potentially evaluated", meaning that there is a
7361/// possibility that the code will actually be executable. Code in sizeof()
7362/// expressions, code used only during overload resolution, etc., are not
7363/// potentially evaluated. This routine will suppress such diagnostics or,
7364/// in the absolutely nutty case of potentially potentially evaluated
7365/// expressions (C++ typeid), queue the diagnostic to potentially emit it
7366/// later.
7367///
7368/// This routine should be used for all diagnostics that describe the run-time
7369/// behavior of a program, such as passing a non-POD value through an ellipsis.
7370/// Failure to do so will likely result in spurious diagnostics or failures
7371/// during overload resolution or within sizeof/alignof/typeof/typeid.
7372bool Sema::DiagRuntimeBehavior(SourceLocation Loc,
7373                               const PartialDiagnostic &PD) {
7374  switch (ExprEvalContexts.back().Context ) {
7375  case Unevaluated:
7376    // The argument will never be evaluated, so don't complain.
7377    break;
7378
7379  case PotentiallyEvaluated:
7380    Diag(Loc, PD);
7381    return true;
7382
7383  case PotentiallyPotentiallyEvaluated:
7384    ExprEvalContexts.back().addDiagnostic(Loc, PD);
7385    break;
7386  }
7387
7388  return false;
7389}
7390
7391bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc,
7392                               CallExpr *CE, FunctionDecl *FD) {
7393  if (ReturnType->isVoidType() || !ReturnType->isIncompleteType())
7394    return false;
7395
7396  PartialDiagnostic Note =
7397    FD ? PDiag(diag::note_function_with_incomplete_return_type_declared_here)
7398    << FD->getDeclName() : PDiag();
7399  SourceLocation NoteLoc = FD ? FD->getLocation() : SourceLocation();
7400
7401  if (RequireCompleteType(Loc, ReturnType,
7402                          FD ?
7403                          PDiag(diag::err_call_function_incomplete_return)
7404                            << CE->getSourceRange() << FD->getDeclName() :
7405                          PDiag(diag::err_call_incomplete_return)
7406                            << CE->getSourceRange(),
7407                          std::make_pair(NoteLoc, Note)))
7408    return true;
7409
7410  return false;
7411}
7412
7413// Diagnose the common s/=/==/ typo.  Note that adding parentheses
7414// will prevent this condition from triggering, which is what we want.
7415void Sema::DiagnoseAssignmentAsCondition(Expr *E) {
7416  SourceLocation Loc;
7417
7418  unsigned diagnostic = diag::warn_condition_is_assignment;
7419
7420  if (isa<BinaryOperator>(E)) {
7421    BinaryOperator *Op = cast<BinaryOperator>(E);
7422    if (Op->getOpcode() != BinaryOperator::Assign)
7423      return;
7424
7425    // Greylist some idioms by putting them into a warning subcategory.
7426    if (ObjCMessageExpr *ME
7427          = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {
7428      Selector Sel = ME->getSelector();
7429
7430      // self = [<foo> init...]
7431      if (isSelfExpr(Op->getLHS())
7432          && Sel.getIdentifierInfoForSlot(0)->getName().startswith("init"))
7433        diagnostic = diag::warn_condition_is_idiomatic_assignment;
7434
7435      // <foo> = [<bar> nextObject]
7436      else if (Sel.isUnarySelector() &&
7437               Sel.getIdentifierInfoForSlot(0)->getName() == "nextObject")
7438        diagnostic = diag::warn_condition_is_idiomatic_assignment;
7439    }
7440
7441    Loc = Op->getOperatorLoc();
7442  } else if (isa<CXXOperatorCallExpr>(E)) {
7443    CXXOperatorCallExpr *Op = cast<CXXOperatorCallExpr>(E);
7444    if (Op->getOperator() != OO_Equal)
7445      return;
7446
7447    Loc = Op->getOperatorLoc();
7448  } else {
7449    // Not an assignment.
7450    return;
7451  }
7452
7453  SourceLocation Open = E->getSourceRange().getBegin();
7454  SourceLocation Close = PP.getLocForEndOfToken(E->getSourceRange().getEnd());
7455
7456  Diag(Loc, diagnostic) << E->getSourceRange();
7457  Diag(Loc, diag::note_condition_assign_to_comparison)
7458    << FixItHint::CreateReplacement(Loc, "==");
7459  Diag(Loc, diag::note_condition_assign_silence)
7460    << FixItHint::CreateInsertion(Open, "(")
7461    << FixItHint::CreateInsertion(Close, ")");
7462}
7463
7464bool Sema::CheckBooleanCondition(Expr *&E, SourceLocation Loc) {
7465  DiagnoseAssignmentAsCondition(E);
7466
7467  if (!E->isTypeDependent()) {
7468    DefaultFunctionArrayLvalueConversion(E);
7469
7470    QualType T = E->getType();
7471
7472    if (getLangOptions().CPlusPlus) {
7473      if (CheckCXXBooleanCondition(E)) // C++ 6.4p4
7474        return true;
7475    } else if (!T->isScalarType()) { // C99 6.8.4.1p1
7476      Diag(Loc, diag::err_typecheck_statement_requires_scalar)
7477        << T << E->getSourceRange();
7478      return true;
7479    }
7480  }
7481
7482  return false;
7483}
7484