SemaExpr.cpp revision a0494768db49126986e425913f6ad77f9e3dfdce
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  // FIXME: Initialize base path!
3961  CXXBaseSpecifierArray BasePath;
3962  if (CheckCastTypes(SourceRange(LParenLoc, RParenLoc), Ty->getType(), castExpr,
3963                     Kind))
3964    return ExprError();
3965
3966  Op.release();
3967  return Owned(new (Context) CStyleCastExpr(Ty->getType().getNonReferenceType(),
3968                                            Kind, castExpr, BasePath, Ty,
3969                                            LParenLoc, RParenLoc));
3970}
3971
3972/// This is not an AltiVec-style cast, so turn the ParenListExpr into a sequence
3973/// of comma binary operators.
3974Action::OwningExprResult
3975Sema::MaybeConvertParenListExprToParenExpr(Scope *S, ExprArg EA) {
3976  Expr *expr = EA.takeAs<Expr>();
3977  ParenListExpr *E = dyn_cast<ParenListExpr>(expr);
3978  if (!E)
3979    return Owned(expr);
3980
3981  OwningExprResult Result(*this, E->getExpr(0));
3982
3983  for (unsigned i = 1, e = E->getNumExprs(); i != e && !Result.isInvalid(); ++i)
3984    Result = ActOnBinOp(S, E->getExprLoc(), tok::comma, move(Result),
3985                        Owned(E->getExpr(i)));
3986
3987  return ActOnParenExpr(E->getLParenLoc(), E->getRParenLoc(), move(Result));
3988}
3989
3990Action::OwningExprResult
3991Sema::ActOnCastOfParenListExpr(Scope *S, SourceLocation LParenLoc,
3992                               SourceLocation RParenLoc, ExprArg Op,
3993                               TypeSourceInfo *TInfo) {
3994  ParenListExpr *PE = (ParenListExpr *)Op.get();
3995  QualType Ty = TInfo->getType();
3996
3997  // If this is an altivec initializer, '(' type ')' '(' init, ..., init ')'
3998  // then handle it as such.
3999  if (getLangOptions().AltiVec && Ty->isVectorType()) {
4000    if (PE->getNumExprs() == 0) {
4001      Diag(PE->getExprLoc(), diag::err_altivec_empty_initializer);
4002      return ExprError();
4003    }
4004
4005    llvm::SmallVector<Expr *, 8> initExprs;
4006    for (unsigned i = 0, e = PE->getNumExprs(); i != e; ++i)
4007      initExprs.push_back(PE->getExpr(i));
4008
4009    // FIXME: This means that pretty-printing the final AST will produce curly
4010    // braces instead of the original commas.
4011    Op.release();
4012    InitListExpr *E = new (Context) InitListExpr(Context, LParenLoc,
4013                                                 &initExprs[0],
4014                                                 initExprs.size(), RParenLoc);
4015    E->setType(Ty);
4016    return BuildCompoundLiteralExpr(LParenLoc, TInfo, RParenLoc, Owned(E));
4017  } else {
4018    // This is not an AltiVec-style cast, so turn the ParenListExpr into a
4019    // sequence of BinOp comma operators.
4020    Op = MaybeConvertParenListExprToParenExpr(S, move(Op));
4021    return BuildCStyleCastExpr(LParenLoc, TInfo, RParenLoc, move(Op));
4022  }
4023}
4024
4025Action::OwningExprResult Sema::ActOnParenOrParenListExpr(SourceLocation L,
4026                                                  SourceLocation R,
4027                                                  MultiExprArg Val,
4028                                                  TypeTy *TypeOfCast) {
4029  unsigned nexprs = Val.size();
4030  Expr **exprs = reinterpret_cast<Expr**>(Val.release());
4031  assert((exprs != 0) && "ActOnParenOrParenListExpr() missing expr list");
4032  Expr *expr;
4033  if (nexprs == 1 && TypeOfCast && !TypeIsVectorType(TypeOfCast))
4034    expr = new (Context) ParenExpr(L, R, exprs[0]);
4035  else
4036    expr = new (Context) ParenListExpr(Context, L, exprs, nexprs, R);
4037  return Owned(expr);
4038}
4039
4040/// Note that lhs is not null here, even if this is the gnu "x ?: y" extension.
4041/// In that case, lhs = cond.
4042/// C99 6.5.15
4043QualType Sema::CheckConditionalOperands(Expr *&Cond, Expr *&LHS, Expr *&RHS,
4044                                        SourceLocation QuestionLoc) {
4045  // C++ is sufficiently different to merit its own checker.
4046  if (getLangOptions().CPlusPlus)
4047    return CXXCheckConditionalOperands(Cond, LHS, RHS, QuestionLoc);
4048
4049  CheckSignCompare(LHS, RHS, QuestionLoc);
4050
4051  UsualUnaryConversions(Cond);
4052  UsualUnaryConversions(LHS);
4053  UsualUnaryConversions(RHS);
4054  QualType CondTy = Cond->getType();
4055  QualType LHSTy = LHS->getType();
4056  QualType RHSTy = RHS->getType();
4057
4058  // first, check the condition.
4059  if (!CondTy->isScalarType()) { // C99 6.5.15p2
4060    Diag(Cond->getLocStart(), diag::err_typecheck_cond_expect_scalar)
4061      << CondTy;
4062    return QualType();
4063  }
4064
4065  // Now check the two expressions.
4066  if (LHSTy->isVectorType() || RHSTy->isVectorType())
4067    return CheckVectorOperands(QuestionLoc, LHS, RHS);
4068
4069  // If both operands have arithmetic type, do the usual arithmetic conversions
4070  // to find a common type: C99 6.5.15p3,5.
4071  if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {
4072    UsualArithmeticConversions(LHS, RHS);
4073    return LHS->getType();
4074  }
4075
4076  // If both operands are the same structure or union type, the result is that
4077  // type.
4078  if (const RecordType *LHSRT = LHSTy->getAs<RecordType>()) {    // C99 6.5.15p3
4079    if (const RecordType *RHSRT = RHSTy->getAs<RecordType>())
4080      if (LHSRT->getDecl() == RHSRT->getDecl())
4081        // "If both the operands have structure or union type, the result has
4082        // that type."  This implies that CV qualifiers are dropped.
4083        return LHSTy.getUnqualifiedType();
4084    // FIXME: Type of conditional expression must be complete in C mode.
4085  }
4086
4087  // C99 6.5.15p5: "If both operands have void type, the result has void type."
4088  // The following || allows only one side to be void (a GCC-ism).
4089  if (LHSTy->isVoidType() || RHSTy->isVoidType()) {
4090    if (!LHSTy->isVoidType())
4091      Diag(RHS->getLocStart(), diag::ext_typecheck_cond_one_void)
4092        << RHS->getSourceRange();
4093    if (!RHSTy->isVoidType())
4094      Diag(LHS->getLocStart(), diag::ext_typecheck_cond_one_void)
4095        << LHS->getSourceRange();
4096    ImpCastExprToType(LHS, Context.VoidTy, CastExpr::CK_ToVoid);
4097    ImpCastExprToType(RHS, Context.VoidTy, CastExpr::CK_ToVoid);
4098    return Context.VoidTy;
4099  }
4100  // C99 6.5.15p6 - "if one operand is a null pointer constant, the result has
4101  // the type of the other operand."
4102  if ((LHSTy->isAnyPointerType() || LHSTy->isBlockPointerType()) &&
4103      RHS->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
4104    // promote the null to a pointer.
4105    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_Unknown);
4106    return LHSTy;
4107  }
4108  if ((RHSTy->isAnyPointerType() || RHSTy->isBlockPointerType()) &&
4109      LHS->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
4110    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_Unknown);
4111    return RHSTy;
4112  }
4113
4114  // All objective-c pointer type analysis is done here.
4115  QualType compositeType = FindCompositeObjCPointerType(LHS, RHS,
4116                                                        QuestionLoc);
4117  if (!compositeType.isNull())
4118    return compositeType;
4119
4120
4121  // Handle block pointer types.
4122  if (LHSTy->isBlockPointerType() || RHSTy->isBlockPointerType()) {
4123    if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {
4124      if (LHSTy->isVoidPointerType() || RHSTy->isVoidPointerType()) {
4125        QualType destType = Context.getPointerType(Context.VoidTy);
4126        ImpCastExprToType(LHS, destType, CastExpr::CK_BitCast);
4127        ImpCastExprToType(RHS, destType, CastExpr::CK_BitCast);
4128        return destType;
4129      }
4130      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
4131      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4132      return QualType();
4133    }
4134    // We have 2 block pointer types.
4135    if (Context.getCanonicalType(LHSTy) == Context.getCanonicalType(RHSTy)) {
4136      // Two identical block pointer types are always compatible.
4137      return LHSTy;
4138    }
4139    // The block pointer types aren't identical, continue checking.
4140    QualType lhptee = LHSTy->getAs<BlockPointerType>()->getPointeeType();
4141    QualType rhptee = RHSTy->getAs<BlockPointerType>()->getPointeeType();
4142
4143    if (!Context.typesAreCompatible(lhptee.getUnqualifiedType(),
4144                                    rhptee.getUnqualifiedType())) {
4145      Diag(QuestionLoc, diag::warn_typecheck_cond_incompatible_pointers)
4146      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4147      // In this situation, we assume void* type. No especially good
4148      // reason, but this is what gcc does, and we do have to pick
4149      // to get a consistent AST.
4150      QualType incompatTy = Context.getPointerType(Context.VoidTy);
4151      ImpCastExprToType(LHS, incompatTy, CastExpr::CK_BitCast);
4152      ImpCastExprToType(RHS, incompatTy, CastExpr::CK_BitCast);
4153      return incompatTy;
4154    }
4155    // The block pointer types are compatible.
4156    ImpCastExprToType(LHS, LHSTy, CastExpr::CK_BitCast);
4157    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4158    return LHSTy;
4159  }
4160
4161  // Check constraints for C object pointers types (C99 6.5.15p3,6).
4162  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {
4163    // get the "pointed to" types
4164    QualType lhptee = LHSTy->getAs<PointerType>()->getPointeeType();
4165    QualType rhptee = RHSTy->getAs<PointerType>()->getPointeeType();
4166
4167    // ignore qualifiers on void (C99 6.5.15p3, clause 6)
4168    if (lhptee->isVoidType() && rhptee->isIncompleteOrObjectType()) {
4169      // Figure out necessary qualifiers (C99 6.5.15p6)
4170      QualType destPointee
4171        = Context.getQualifiedType(lhptee, rhptee.getQualifiers());
4172      QualType destType = Context.getPointerType(destPointee);
4173      // Add qualifiers if necessary.
4174      ImpCastExprToType(LHS, destType, CastExpr::CK_NoOp);
4175      // Promote to void*.
4176      ImpCastExprToType(RHS, destType, CastExpr::CK_BitCast);
4177      return destType;
4178    }
4179    if (rhptee->isVoidType() && lhptee->isIncompleteOrObjectType()) {
4180      QualType destPointee
4181        = Context.getQualifiedType(rhptee, lhptee.getQualifiers());
4182      QualType destType = Context.getPointerType(destPointee);
4183      // Add qualifiers if necessary.
4184      ImpCastExprToType(RHS, destType, CastExpr::CK_NoOp);
4185      // Promote to void*.
4186      ImpCastExprToType(LHS, destType, CastExpr::CK_BitCast);
4187      return destType;
4188    }
4189
4190    if (Context.getCanonicalType(LHSTy) == Context.getCanonicalType(RHSTy)) {
4191      // Two identical pointer types are always compatible.
4192      return LHSTy;
4193    }
4194    if (!Context.typesAreCompatible(lhptee.getUnqualifiedType(),
4195                                    rhptee.getUnqualifiedType())) {
4196      Diag(QuestionLoc, diag::warn_typecheck_cond_incompatible_pointers)
4197        << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4198      // In this situation, we assume void* type. No especially good
4199      // reason, but this is what gcc does, and we do have to pick
4200      // to get a consistent AST.
4201      QualType incompatTy = Context.getPointerType(Context.VoidTy);
4202      ImpCastExprToType(LHS, incompatTy, CastExpr::CK_BitCast);
4203      ImpCastExprToType(RHS, incompatTy, CastExpr::CK_BitCast);
4204      return incompatTy;
4205    }
4206    // The pointer types are compatible.
4207    // C99 6.5.15p6: If both operands are pointers to compatible types *or* to
4208    // differently qualified versions of compatible types, the result type is
4209    // a pointer to an appropriately qualified version of the *composite*
4210    // type.
4211    // FIXME: Need to calculate the composite type.
4212    // FIXME: Need to add qualifiers
4213    ImpCastExprToType(LHS, LHSTy, CastExpr::CK_BitCast);
4214    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4215    return LHSTy;
4216  }
4217
4218  // GCC compatibility: soften pointer/integer mismatch.
4219  if (RHSTy->isPointerType() && LHSTy->isIntegerType()) {
4220    Diag(QuestionLoc, diag::warn_typecheck_cond_pointer_integer_mismatch)
4221      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4222    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_IntegralToPointer);
4223    return RHSTy;
4224  }
4225  if (LHSTy->isPointerType() && RHSTy->isIntegerType()) {
4226    Diag(QuestionLoc, diag::warn_typecheck_cond_pointer_integer_mismatch)
4227      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4228    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_IntegralToPointer);
4229    return LHSTy;
4230  }
4231
4232  // Otherwise, the operands are not compatible.
4233  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
4234    << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
4235  return QualType();
4236}
4237
4238/// FindCompositeObjCPointerType - Helper method to find composite type of
4239/// two objective-c pointer types of the two input expressions.
4240QualType Sema::FindCompositeObjCPointerType(Expr *&LHS, Expr *&RHS,
4241                                        SourceLocation QuestionLoc) {
4242  QualType LHSTy = LHS->getType();
4243  QualType RHSTy = RHS->getType();
4244
4245  // Handle things like Class and struct objc_class*.  Here we case the result
4246  // to the pseudo-builtin, because that will be implicitly cast back to the
4247  // redefinition type if an attempt is made to access its fields.
4248  if (LHSTy->isObjCClassType() &&
4249      (RHSTy.getDesugaredType() == Context.ObjCClassRedefinitionType)) {
4250    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4251    return LHSTy;
4252  }
4253  if (RHSTy->isObjCClassType() &&
4254      (LHSTy.getDesugaredType() == Context.ObjCClassRedefinitionType)) {
4255    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_BitCast);
4256    return RHSTy;
4257  }
4258  // And the same for struct objc_object* / id
4259  if (LHSTy->isObjCIdType() &&
4260      (RHSTy.getDesugaredType() == Context.ObjCIdRedefinitionType)) {
4261    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4262    return LHSTy;
4263  }
4264  if (RHSTy->isObjCIdType() &&
4265      (LHSTy.getDesugaredType() == Context.ObjCIdRedefinitionType)) {
4266    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_BitCast);
4267    return RHSTy;
4268  }
4269  // And the same for struct objc_selector* / SEL
4270  if (Context.isObjCSelType(LHSTy) &&
4271      (RHSTy.getDesugaredType() == Context.ObjCSelRedefinitionType)) {
4272    ImpCastExprToType(RHS, LHSTy, CastExpr::CK_BitCast);
4273    return LHSTy;
4274  }
4275  if (Context.isObjCSelType(RHSTy) &&
4276      (LHSTy.getDesugaredType() == Context.ObjCSelRedefinitionType)) {
4277    ImpCastExprToType(LHS, RHSTy, CastExpr::CK_BitCast);
4278    return RHSTy;
4279  }
4280  // Check constraints for Objective-C object pointers types.
4281  if (LHSTy->isObjCObjectPointerType() && RHSTy->isObjCObjectPointerType()) {
4282
4283    if (Context.getCanonicalType(LHSTy) == Context.getCanonicalType(RHSTy)) {
4284      // Two identical object pointer types are always compatible.
4285      return LHSTy;
4286    }
4287    const ObjCObjectPointerType *LHSOPT = LHSTy->getAs<ObjCObjectPointerType>();
4288    const ObjCObjectPointerType *RHSOPT = RHSTy->getAs<ObjCObjectPointerType>();
4289    QualType compositeType = LHSTy;
4290
4291    // If both operands are interfaces and either operand can be
4292    // assigned to the other, use that type as the composite
4293    // type. This allows
4294    //   xxx ? (A*) a : (B*) b
4295    // where B is a subclass of A.
4296    //
4297    // Additionally, as for assignment, if either type is 'id'
4298    // allow silent coercion. Finally, if the types are
4299    // incompatible then make sure to use 'id' as the composite
4300    // type so the result is acceptable for sending messages to.
4301
4302    // FIXME: Consider unifying with 'areComparableObjCPointerTypes'.
4303    // It could return the composite type.
4304    if (Context.canAssignObjCInterfaces(LHSOPT, RHSOPT)) {
4305      compositeType = RHSOPT->isObjCBuiltinType() ? RHSTy : LHSTy;
4306    } else if (Context.canAssignObjCInterfaces(RHSOPT, LHSOPT)) {
4307      compositeType = LHSOPT->isObjCBuiltinType() ? LHSTy : RHSTy;
4308    } else if ((LHSTy->isObjCQualifiedIdType() ||
4309                RHSTy->isObjCQualifiedIdType()) &&
4310               Context.ObjCQualifiedIdTypesAreCompatible(LHSTy, RHSTy, true)) {
4311      // Need to handle "id<xx>" explicitly.
4312      // GCC allows qualified id and any Objective-C type to devolve to
4313      // id. Currently localizing to here until clear this should be
4314      // part of ObjCQualifiedIdTypesAreCompatible.
4315      compositeType = Context.getObjCIdType();
4316    } else if (LHSTy->isObjCIdType() || RHSTy->isObjCIdType()) {
4317      compositeType = Context.getObjCIdType();
4318    } else if (!(compositeType =
4319                 Context.areCommonBaseCompatible(LHSOPT, RHSOPT)).isNull())
4320      ;
4321    else {
4322      Diag(QuestionLoc, diag::ext_typecheck_cond_incompatible_operands)
4323      << LHSTy << RHSTy
4324      << LHS->getSourceRange() << RHS->getSourceRange();
4325      QualType incompatTy = Context.getObjCIdType();
4326      ImpCastExprToType(LHS, incompatTy, CastExpr::CK_BitCast);
4327      ImpCastExprToType(RHS, incompatTy, CastExpr::CK_BitCast);
4328      return incompatTy;
4329    }
4330    // The object pointer types are compatible.
4331    ImpCastExprToType(LHS, compositeType, CastExpr::CK_BitCast);
4332    ImpCastExprToType(RHS, compositeType, CastExpr::CK_BitCast);
4333    return compositeType;
4334  }
4335  // Check Objective-C object pointer types and 'void *'
4336  if (LHSTy->isVoidPointerType() && RHSTy->isObjCObjectPointerType()) {
4337    QualType lhptee = LHSTy->getAs<PointerType>()->getPointeeType();
4338    QualType rhptee = RHSTy->getAs<ObjCObjectPointerType>()->getPointeeType();
4339    QualType destPointee
4340    = Context.getQualifiedType(lhptee, rhptee.getQualifiers());
4341    QualType destType = Context.getPointerType(destPointee);
4342    // Add qualifiers if necessary.
4343    ImpCastExprToType(LHS, destType, CastExpr::CK_NoOp);
4344    // Promote to void*.
4345    ImpCastExprToType(RHS, destType, CastExpr::CK_BitCast);
4346    return destType;
4347  }
4348  if (LHSTy->isObjCObjectPointerType() && RHSTy->isVoidPointerType()) {
4349    QualType lhptee = LHSTy->getAs<ObjCObjectPointerType>()->getPointeeType();
4350    QualType rhptee = RHSTy->getAs<PointerType>()->getPointeeType();
4351    QualType destPointee
4352    = Context.getQualifiedType(rhptee, lhptee.getQualifiers());
4353    QualType destType = Context.getPointerType(destPointee);
4354    // Add qualifiers if necessary.
4355    ImpCastExprToType(RHS, destType, CastExpr::CK_NoOp);
4356    // Promote to void*.
4357    ImpCastExprToType(LHS, destType, CastExpr::CK_BitCast);
4358    return destType;
4359  }
4360  return QualType();
4361}
4362
4363/// ActOnConditionalOp - Parse a ?: operation.  Note that 'LHS' may be null
4364/// in the case of a the GNU conditional expr extension.
4365Action::OwningExprResult Sema::ActOnConditionalOp(SourceLocation QuestionLoc,
4366                                                  SourceLocation ColonLoc,
4367                                                  ExprArg Cond, ExprArg LHS,
4368                                                  ExprArg RHS) {
4369  Expr *CondExpr = (Expr *) Cond.get();
4370  Expr *LHSExpr = (Expr *) LHS.get(), *RHSExpr = (Expr *) RHS.get();
4371
4372  // If this is the gnu "x ?: y" extension, analyze the types as though the LHS
4373  // was the condition.
4374  bool isLHSNull = LHSExpr == 0;
4375  if (isLHSNull)
4376    LHSExpr = CondExpr;
4377
4378  QualType result = CheckConditionalOperands(CondExpr, LHSExpr,
4379                                             RHSExpr, QuestionLoc);
4380  if (result.isNull())
4381    return ExprError();
4382
4383  Cond.release();
4384  LHS.release();
4385  RHS.release();
4386  return Owned(new (Context) ConditionalOperator(CondExpr, QuestionLoc,
4387                                                 isLHSNull ? 0 : LHSExpr,
4388                                                 ColonLoc, RHSExpr, result));
4389}
4390
4391// CheckPointerTypesForAssignment - This is a very tricky routine (despite
4392// being closely modeled after the C99 spec:-). The odd characteristic of this
4393// routine is it effectively iqnores the qualifiers on the top level pointee.
4394// This circumvents the usual type rules specified in 6.2.7p1 & 6.7.5.[1-3].
4395// FIXME: add a couple examples in this comment.
4396Sema::AssignConvertType
4397Sema::CheckPointerTypesForAssignment(QualType lhsType, QualType rhsType) {
4398  QualType lhptee, rhptee;
4399
4400  if ((lhsType->isObjCClassType() &&
4401       (rhsType.getDesugaredType() == Context.ObjCClassRedefinitionType)) ||
4402     (rhsType->isObjCClassType() &&
4403       (lhsType.getDesugaredType() == Context.ObjCClassRedefinitionType))) {
4404      return Compatible;
4405  }
4406
4407  // get the "pointed to" type (ignoring qualifiers at the top level)
4408  lhptee = lhsType->getAs<PointerType>()->getPointeeType();
4409  rhptee = rhsType->getAs<PointerType>()->getPointeeType();
4410
4411  // make sure we operate on the canonical type
4412  lhptee = Context.getCanonicalType(lhptee);
4413  rhptee = Context.getCanonicalType(rhptee);
4414
4415  AssignConvertType ConvTy = Compatible;
4416
4417  // C99 6.5.16.1p1: This following citation is common to constraints
4418  // 3 & 4 (below). ...and the type *pointed to* by the left has all the
4419  // qualifiers of the type *pointed to* by the right;
4420  // FIXME: Handle ExtQualType
4421  if (!lhptee.isAtLeastAsQualifiedAs(rhptee))
4422    ConvTy = CompatiblePointerDiscardsQualifiers;
4423
4424  // C99 6.5.16.1p1 (constraint 4): If one operand is a pointer to an object or
4425  // incomplete type and the other is a pointer to a qualified or unqualified
4426  // version of void...
4427  if (lhptee->isVoidType()) {
4428    if (rhptee->isIncompleteOrObjectType())
4429      return ConvTy;
4430
4431    // As an extension, we allow cast to/from void* to function pointer.
4432    assert(rhptee->isFunctionType());
4433    return FunctionVoidPointer;
4434  }
4435
4436  if (rhptee->isVoidType()) {
4437    if (lhptee->isIncompleteOrObjectType())
4438      return ConvTy;
4439
4440    // As an extension, we allow cast to/from void* to function pointer.
4441    assert(lhptee->isFunctionType());
4442    return FunctionVoidPointer;
4443  }
4444  // C99 6.5.16.1p1 (constraint 3): both operands are pointers to qualified or
4445  // unqualified versions of compatible types, ...
4446  lhptee = lhptee.getUnqualifiedType();
4447  rhptee = rhptee.getUnqualifiedType();
4448  if (!Context.typesAreCompatible(lhptee, rhptee)) {
4449    // Check if the pointee types are compatible ignoring the sign.
4450    // We explicitly check for char so that we catch "char" vs
4451    // "unsigned char" on systems where "char" is unsigned.
4452    if (lhptee->isCharType())
4453      lhptee = Context.UnsignedCharTy;
4454    else if (lhptee->isSignedIntegerType())
4455      lhptee = Context.getCorrespondingUnsignedType(lhptee);
4456
4457    if (rhptee->isCharType())
4458      rhptee = Context.UnsignedCharTy;
4459    else if (rhptee->isSignedIntegerType())
4460      rhptee = Context.getCorrespondingUnsignedType(rhptee);
4461
4462    if (lhptee == rhptee) {
4463      // Types are compatible ignoring the sign. Qualifier incompatibility
4464      // takes priority over sign incompatibility because the sign
4465      // warning can be disabled.
4466      if (ConvTy != Compatible)
4467        return ConvTy;
4468      return IncompatiblePointerSign;
4469    }
4470
4471    // If we are a multi-level pointer, it's possible that our issue is simply
4472    // one of qualification - e.g. char ** -> const char ** is not allowed. If
4473    // the eventual target type is the same and the pointers have the same
4474    // level of indirection, this must be the issue.
4475    if (lhptee->isPointerType() && rhptee->isPointerType()) {
4476      do {
4477        lhptee = lhptee->getAs<PointerType>()->getPointeeType();
4478        rhptee = rhptee->getAs<PointerType>()->getPointeeType();
4479
4480        lhptee = Context.getCanonicalType(lhptee);
4481        rhptee = Context.getCanonicalType(rhptee);
4482      } while (lhptee->isPointerType() && rhptee->isPointerType());
4483
4484      if (Context.hasSameUnqualifiedType(lhptee, rhptee))
4485        return IncompatibleNestedPointerQualifiers;
4486    }
4487
4488    // General pointer incompatibility takes priority over qualifiers.
4489    return IncompatiblePointer;
4490  }
4491  return ConvTy;
4492}
4493
4494/// CheckBlockPointerTypesForAssignment - This routine determines whether two
4495/// block pointer types are compatible or whether a block and normal pointer
4496/// are compatible. It is more restrict than comparing two function pointer
4497// types.
4498Sema::AssignConvertType
4499Sema::CheckBlockPointerTypesForAssignment(QualType lhsType,
4500                                          QualType rhsType) {
4501  QualType lhptee, rhptee;
4502
4503  // get the "pointed to" type (ignoring qualifiers at the top level)
4504  lhptee = lhsType->getAs<BlockPointerType>()->getPointeeType();
4505  rhptee = rhsType->getAs<BlockPointerType>()->getPointeeType();
4506
4507  // make sure we operate on the canonical type
4508  lhptee = Context.getCanonicalType(lhptee);
4509  rhptee = Context.getCanonicalType(rhptee);
4510
4511  AssignConvertType ConvTy = Compatible;
4512
4513  // For blocks we enforce that qualifiers are identical.
4514  if (lhptee.getLocalCVRQualifiers() != rhptee.getLocalCVRQualifiers())
4515    ConvTy = CompatiblePointerDiscardsQualifiers;
4516
4517  if (!getLangOptions().CPlusPlus) {
4518    if (!Context.typesAreBlockPointerCompatible(lhsType, rhsType))
4519      return IncompatibleBlockPointer;
4520  }
4521  else if (!Context.typesAreCompatible(lhptee, rhptee))
4522    return IncompatibleBlockPointer;
4523  return ConvTy;
4524}
4525
4526/// CheckObjCPointerTypesForAssignment - Compares two objective-c pointer types
4527/// for assignment compatibility.
4528Sema::AssignConvertType
4529Sema::CheckObjCPointerTypesForAssignment(QualType lhsType, QualType rhsType) {
4530  if (lhsType->isObjCBuiltinType()) {
4531    // Class is not compatible with ObjC object pointers.
4532    if (lhsType->isObjCClassType() && !rhsType->isObjCBuiltinType() &&
4533        !rhsType->isObjCQualifiedClassType())
4534      return IncompatiblePointer;
4535    return Compatible;
4536  }
4537  if (rhsType->isObjCBuiltinType()) {
4538    // Class is not compatible with ObjC object pointers.
4539    if (rhsType->isObjCClassType() && !lhsType->isObjCBuiltinType() &&
4540        !lhsType->isObjCQualifiedClassType())
4541      return IncompatiblePointer;
4542    return Compatible;
4543  }
4544  QualType lhptee =
4545  lhsType->getAs<ObjCObjectPointerType>()->getPointeeType();
4546  QualType rhptee =
4547  rhsType->getAs<ObjCObjectPointerType>()->getPointeeType();
4548  // make sure we operate on the canonical type
4549  lhptee = Context.getCanonicalType(lhptee);
4550  rhptee = Context.getCanonicalType(rhptee);
4551  if (!lhptee.isAtLeastAsQualifiedAs(rhptee))
4552    return CompatiblePointerDiscardsQualifiers;
4553
4554  if (Context.typesAreCompatible(lhsType, rhsType))
4555    return Compatible;
4556  if (lhsType->isObjCQualifiedIdType() || rhsType->isObjCQualifiedIdType())
4557    return IncompatibleObjCQualifiedId;
4558  return IncompatiblePointer;
4559}
4560
4561/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently
4562/// has code to accommodate several GCC extensions when type checking
4563/// pointers. Here are some objectionable examples that GCC considers warnings:
4564///
4565///  int a, *pint;
4566///  short *pshort;
4567///  struct foo *pfoo;
4568///
4569///  pint = pshort; // warning: assignment from incompatible pointer type
4570///  a = pint; // warning: assignment makes integer from pointer without a cast
4571///  pint = a; // warning: assignment makes pointer from integer without a cast
4572///  pint = pfoo; // warning: assignment from incompatible pointer type
4573///
4574/// As a result, the code for dealing with pointers is more complex than the
4575/// C99 spec dictates.
4576///
4577Sema::AssignConvertType
4578Sema::CheckAssignmentConstraints(QualType lhsType, QualType rhsType) {
4579  // Get canonical types.  We're not formatting these types, just comparing
4580  // them.
4581  lhsType = Context.getCanonicalType(lhsType).getUnqualifiedType();
4582  rhsType = Context.getCanonicalType(rhsType).getUnqualifiedType();
4583
4584  if (lhsType == rhsType)
4585    return Compatible; // Common case: fast path an exact match.
4586
4587  if ((lhsType->isObjCClassType() &&
4588       (rhsType.getDesugaredType() == Context.ObjCClassRedefinitionType)) ||
4589     (rhsType->isObjCClassType() &&
4590       (lhsType.getDesugaredType() == Context.ObjCClassRedefinitionType))) {
4591      return Compatible;
4592  }
4593
4594  // If the left-hand side is a reference type, then we are in a
4595  // (rare!) case where we've allowed the use of references in C,
4596  // e.g., as a parameter type in a built-in function. In this case,
4597  // just make sure that the type referenced is compatible with the
4598  // right-hand side type. The caller is responsible for adjusting
4599  // lhsType so that the resulting expression does not have reference
4600  // type.
4601  if (const ReferenceType *lhsTypeRef = lhsType->getAs<ReferenceType>()) {
4602    if (Context.typesAreCompatible(lhsTypeRef->getPointeeType(), rhsType))
4603      return Compatible;
4604    return Incompatible;
4605  }
4606  // Allow scalar to ExtVector assignments, and assignments of an ExtVector type
4607  // to the same ExtVector type.
4608  if (lhsType->isExtVectorType()) {
4609    if (rhsType->isExtVectorType())
4610      return lhsType == rhsType ? Compatible : Incompatible;
4611    if (!rhsType->isVectorType() && rhsType->isArithmeticType())
4612      return Compatible;
4613  }
4614
4615  if (lhsType->isVectorType() || rhsType->isVectorType()) {
4616    // If we are allowing lax vector conversions, and LHS and RHS are both
4617    // vectors, the total size only needs to be the same. This is a bitcast;
4618    // no bits are changed but the result type is different.
4619    if (getLangOptions().LaxVectorConversions &&
4620        lhsType->isVectorType() && rhsType->isVectorType()) {
4621      if (Context.getTypeSize(lhsType) == Context.getTypeSize(rhsType))
4622        return IncompatibleVectors;
4623    }
4624    return Incompatible;
4625  }
4626
4627  if (lhsType->isArithmeticType() && rhsType->isArithmeticType())
4628    return Compatible;
4629
4630  if (isa<PointerType>(lhsType)) {
4631    if (rhsType->isIntegerType())
4632      return IntToPointer;
4633
4634    if (isa<PointerType>(rhsType))
4635      return CheckPointerTypesForAssignment(lhsType, rhsType);
4636
4637    // In general, C pointers are not compatible with ObjC object pointers.
4638    if (isa<ObjCObjectPointerType>(rhsType)) {
4639      if (lhsType->isVoidPointerType()) // an exception to the rule.
4640        return Compatible;
4641      return IncompatiblePointer;
4642    }
4643    if (rhsType->getAs<BlockPointerType>()) {
4644      if (lhsType->getAs<PointerType>()->getPointeeType()->isVoidType())
4645        return Compatible;
4646
4647      // Treat block pointers as objects.
4648      if (getLangOptions().ObjC1 && lhsType->isObjCIdType())
4649        return Compatible;
4650    }
4651    return Incompatible;
4652  }
4653
4654  if (isa<BlockPointerType>(lhsType)) {
4655    if (rhsType->isIntegerType())
4656      return IntToBlockPointer;
4657
4658    // Treat block pointers as objects.
4659    if (getLangOptions().ObjC1 && rhsType->isObjCIdType())
4660      return Compatible;
4661
4662    if (rhsType->isBlockPointerType())
4663      return CheckBlockPointerTypesForAssignment(lhsType, rhsType);
4664
4665    if (const PointerType *RHSPT = rhsType->getAs<PointerType>()) {
4666      if (RHSPT->getPointeeType()->isVoidType())
4667        return Compatible;
4668    }
4669    return Incompatible;
4670  }
4671
4672  if (isa<ObjCObjectPointerType>(lhsType)) {
4673    if (rhsType->isIntegerType())
4674      return IntToPointer;
4675
4676    // In general, C pointers are not compatible with ObjC object pointers.
4677    if (isa<PointerType>(rhsType)) {
4678      if (rhsType->isVoidPointerType()) // an exception to the rule.
4679        return Compatible;
4680      return IncompatiblePointer;
4681    }
4682    if (rhsType->isObjCObjectPointerType()) {
4683      return CheckObjCPointerTypesForAssignment(lhsType, rhsType);
4684    }
4685    if (const PointerType *RHSPT = rhsType->getAs<PointerType>()) {
4686      if (RHSPT->getPointeeType()->isVoidType())
4687        return Compatible;
4688    }
4689    // Treat block pointers as objects.
4690    if (rhsType->isBlockPointerType())
4691      return Compatible;
4692    return Incompatible;
4693  }
4694  if (isa<PointerType>(rhsType)) {
4695    // C99 6.5.16.1p1: the left operand is _Bool and the right is a pointer.
4696    if (lhsType == Context.BoolTy)
4697      return Compatible;
4698
4699    if (lhsType->isIntegerType())
4700      return PointerToInt;
4701
4702    if (isa<PointerType>(lhsType))
4703      return CheckPointerTypesForAssignment(lhsType, rhsType);
4704
4705    if (isa<BlockPointerType>(lhsType) &&
4706        rhsType->getAs<PointerType>()->getPointeeType()->isVoidType())
4707      return Compatible;
4708    return Incompatible;
4709  }
4710  if (isa<ObjCObjectPointerType>(rhsType)) {
4711    // C99 6.5.16.1p1: the left operand is _Bool and the right is a pointer.
4712    if (lhsType == Context.BoolTy)
4713      return Compatible;
4714
4715    if (lhsType->isIntegerType())
4716      return PointerToInt;
4717
4718    // In general, C pointers are not compatible with ObjC object pointers.
4719    if (isa<PointerType>(lhsType)) {
4720      if (lhsType->isVoidPointerType()) // an exception to the rule.
4721        return Compatible;
4722      return IncompatiblePointer;
4723    }
4724    if (isa<BlockPointerType>(lhsType) &&
4725        rhsType->getAs<PointerType>()->getPointeeType()->isVoidType())
4726      return Compatible;
4727    return Incompatible;
4728  }
4729
4730  if (isa<TagType>(lhsType) && isa<TagType>(rhsType)) {
4731    if (Context.typesAreCompatible(lhsType, rhsType))
4732      return Compatible;
4733  }
4734  return Incompatible;
4735}
4736
4737/// \brief Constructs a transparent union from an expression that is
4738/// used to initialize the transparent union.
4739static void ConstructTransparentUnion(ASTContext &C, Expr *&E,
4740                                      QualType UnionType, FieldDecl *Field) {
4741  // Build an initializer list that designates the appropriate member
4742  // of the transparent union.
4743  InitListExpr *Initializer = new (C) InitListExpr(C, SourceLocation(),
4744                                                   &E, 1,
4745                                                   SourceLocation());
4746  Initializer->setType(UnionType);
4747  Initializer->setInitializedFieldInUnion(Field);
4748
4749  // Build a compound literal constructing a value of the transparent
4750  // union type from this initializer list.
4751  TypeSourceInfo *unionTInfo = C.getTrivialTypeSourceInfo(UnionType);
4752  E = new (C) CompoundLiteralExpr(SourceLocation(), unionTInfo, UnionType,
4753                                  Initializer, false);
4754}
4755
4756Sema::AssignConvertType
4757Sema::CheckTransparentUnionArgumentConstraints(QualType ArgType, Expr *&rExpr) {
4758  QualType FromType = rExpr->getType();
4759
4760  // If the ArgType is a Union type, we want to handle a potential
4761  // transparent_union GCC extension.
4762  const RecordType *UT = ArgType->getAsUnionType();
4763  if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
4764    return Incompatible;
4765
4766  // The field to initialize within the transparent union.
4767  RecordDecl *UD = UT->getDecl();
4768  FieldDecl *InitField = 0;
4769  // It's compatible if the expression matches any of the fields.
4770  for (RecordDecl::field_iterator it = UD->field_begin(),
4771         itend = UD->field_end();
4772       it != itend; ++it) {
4773    if (it->getType()->isPointerType()) {
4774      // If the transparent union contains a pointer type, we allow:
4775      // 1) void pointer
4776      // 2) null pointer constant
4777      if (FromType->isPointerType())
4778        if (FromType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
4779          ImpCastExprToType(rExpr, it->getType(), CastExpr::CK_BitCast);
4780          InitField = *it;
4781          break;
4782        }
4783
4784      if (rExpr->isNullPointerConstant(Context,
4785                                       Expr::NPC_ValueDependentIsNull)) {
4786        ImpCastExprToType(rExpr, it->getType(), CastExpr::CK_IntegralToPointer);
4787        InitField = *it;
4788        break;
4789      }
4790    }
4791
4792    if (CheckAssignmentConstraints(it->getType(), rExpr->getType())
4793          == Compatible) {
4794      InitField = *it;
4795      break;
4796    }
4797  }
4798
4799  if (!InitField)
4800    return Incompatible;
4801
4802  ConstructTransparentUnion(Context, rExpr, ArgType, InitField);
4803  return Compatible;
4804}
4805
4806Sema::AssignConvertType
4807Sema::CheckSingleAssignmentConstraints(QualType lhsType, Expr *&rExpr) {
4808  if (getLangOptions().CPlusPlus) {
4809    if (!lhsType->isRecordType()) {
4810      // C++ 5.17p3: If the left operand is not of class type, the
4811      // expression is implicitly converted (C++ 4) to the
4812      // cv-unqualified type of the left operand.
4813      if (PerformImplicitConversion(rExpr, lhsType.getUnqualifiedType(),
4814                                    AA_Assigning))
4815        return Incompatible;
4816      return Compatible;
4817    }
4818
4819    // FIXME: Currently, we fall through and treat C++ classes like C
4820    // structures.
4821  }
4822
4823  // C99 6.5.16.1p1: the left operand is a pointer and the right is
4824  // a null pointer constant.
4825  if ((lhsType->isPointerType() ||
4826       lhsType->isObjCObjectPointerType() ||
4827       lhsType->isBlockPointerType())
4828      && rExpr->isNullPointerConstant(Context,
4829                                      Expr::NPC_ValueDependentIsNull)) {
4830    ImpCastExprToType(rExpr, lhsType, CastExpr::CK_Unknown);
4831    return Compatible;
4832  }
4833
4834  // This check seems unnatural, however it is necessary to ensure the proper
4835  // conversion of functions/arrays. If the conversion were done for all
4836  // DeclExpr's (created by ActOnIdExpression), it would mess up the unary
4837  // expressions that surpress this implicit conversion (&, sizeof).
4838  //
4839  // Suppress this for references: C++ 8.5.3p5.
4840  if (!lhsType->isReferenceType())
4841    DefaultFunctionArrayLvalueConversion(rExpr);
4842
4843  Sema::AssignConvertType result =
4844    CheckAssignmentConstraints(lhsType, rExpr->getType());
4845
4846  // C99 6.5.16.1p2: The value of the right operand is converted to the
4847  // type of the assignment expression.
4848  // CheckAssignmentConstraints allows the left-hand side to be a reference,
4849  // so that we can use references in built-in functions even in C.
4850  // The getNonReferenceType() call makes sure that the resulting expression
4851  // does not have reference type.
4852  if (result != Incompatible && rExpr->getType() != lhsType)
4853    ImpCastExprToType(rExpr, lhsType.getNonReferenceType(),
4854                      CastExpr::CK_Unknown);
4855  return result;
4856}
4857
4858QualType Sema::InvalidOperands(SourceLocation Loc, Expr *&lex, Expr *&rex) {
4859  Diag(Loc, diag::err_typecheck_invalid_operands)
4860    << lex->getType() << rex->getType()
4861    << lex->getSourceRange() << rex->getSourceRange();
4862  return QualType();
4863}
4864
4865QualType Sema::CheckVectorOperands(SourceLocation Loc, Expr *&lex, Expr *&rex) {
4866  // For conversion purposes, we ignore any qualifiers.
4867  // For example, "const float" and "float" are equivalent.
4868  QualType lhsType =
4869    Context.getCanonicalType(lex->getType()).getUnqualifiedType();
4870  QualType rhsType =
4871    Context.getCanonicalType(rex->getType()).getUnqualifiedType();
4872
4873  // If the vector types are identical, return.
4874  if (lhsType == rhsType)
4875    return lhsType;
4876
4877  // Handle the case of a vector & extvector type of the same size and element
4878  // type.  It would be nice if we only had one vector type someday.
4879  if (getLangOptions().LaxVectorConversions) {
4880    // FIXME: Should we warn here?
4881    if (const VectorType *LV = lhsType->getAs<VectorType>()) {
4882      if (const VectorType *RV = rhsType->getAs<VectorType>())
4883        if (LV->getElementType() == RV->getElementType() &&
4884            LV->getNumElements() == RV->getNumElements()) {
4885          return lhsType->isExtVectorType() ? lhsType : rhsType;
4886        }
4887    }
4888  }
4889
4890  // Canonicalize the ExtVector to the LHS, remember if we swapped so we can
4891  // swap back (so that we don't reverse the inputs to a subtract, for instance.
4892  bool swapped = false;
4893  if (rhsType->isExtVectorType()) {
4894    swapped = true;
4895    std::swap(rex, lex);
4896    std::swap(rhsType, lhsType);
4897  }
4898
4899  // Handle the case of an ext vector and scalar.
4900  if (const ExtVectorType *LV = lhsType->getAs<ExtVectorType>()) {
4901    QualType EltTy = LV->getElementType();
4902    if (EltTy->isIntegralType() && rhsType->isIntegralType()) {
4903      if (Context.getIntegerTypeOrder(EltTy, rhsType) >= 0) {
4904        ImpCastExprToType(rex, lhsType, CastExpr::CK_IntegralCast);
4905        if (swapped) std::swap(rex, lex);
4906        return lhsType;
4907      }
4908    }
4909    if (EltTy->isRealFloatingType() && rhsType->isScalarType() &&
4910        rhsType->isRealFloatingType()) {
4911      if (Context.getFloatingTypeOrder(EltTy, rhsType) >= 0) {
4912        ImpCastExprToType(rex, lhsType, CastExpr::CK_FloatingCast);
4913        if (swapped) std::swap(rex, lex);
4914        return lhsType;
4915      }
4916    }
4917  }
4918
4919  // Vectors of different size or scalar and non-ext-vector are errors.
4920  Diag(Loc, diag::err_typecheck_vector_not_convertable)
4921    << lex->getType() << rex->getType()
4922    << lex->getSourceRange() << rex->getSourceRange();
4923  return QualType();
4924}
4925
4926QualType Sema::CheckMultiplyDivideOperands(
4927  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isCompAssign, bool isDiv) {
4928  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
4929    return CheckVectorOperands(Loc, lex, rex);
4930
4931  QualType compType = UsualArithmeticConversions(lex, rex, isCompAssign);
4932
4933  if (!lex->getType()->isArithmeticType() ||
4934      !rex->getType()->isArithmeticType())
4935    return InvalidOperands(Loc, lex, rex);
4936
4937  // Check for division by zero.
4938  if (isDiv &&
4939      rex->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull))
4940    DiagRuntimeBehavior(Loc, PDiag(diag::warn_division_by_zero)
4941                                     << rex->getSourceRange());
4942
4943  return compType;
4944}
4945
4946QualType Sema::CheckRemainderOperands(
4947  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isCompAssign) {
4948  if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) {
4949    if (lex->getType()->isIntegerType() && rex->getType()->isIntegerType())
4950      return CheckVectorOperands(Loc, lex, rex);
4951    return InvalidOperands(Loc, lex, rex);
4952  }
4953
4954  QualType compType = UsualArithmeticConversions(lex, rex, isCompAssign);
4955
4956  if (!lex->getType()->isIntegerType() || !rex->getType()->isIntegerType())
4957    return InvalidOperands(Loc, lex, rex);
4958
4959  // Check for remainder by zero.
4960  if (rex->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull))
4961    DiagRuntimeBehavior(Loc, PDiag(diag::warn_remainder_by_zero)
4962                                 << rex->getSourceRange());
4963
4964  return compType;
4965}
4966
4967QualType Sema::CheckAdditionOperands( // C99 6.5.6
4968  Expr *&lex, Expr *&rex, SourceLocation Loc, QualType* CompLHSTy) {
4969  if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) {
4970    QualType compType = CheckVectorOperands(Loc, lex, rex);
4971    if (CompLHSTy) *CompLHSTy = compType;
4972    return compType;
4973  }
4974
4975  QualType compType = UsualArithmeticConversions(lex, rex, CompLHSTy);
4976
4977  // handle the common case first (both operands are arithmetic).
4978  if (lex->getType()->isArithmeticType() &&
4979      rex->getType()->isArithmeticType()) {
4980    if (CompLHSTy) *CompLHSTy = compType;
4981    return compType;
4982  }
4983
4984  // Put any potential pointer into PExp
4985  Expr* PExp = lex, *IExp = rex;
4986  if (IExp->getType()->isAnyPointerType())
4987    std::swap(PExp, IExp);
4988
4989  if (PExp->getType()->isAnyPointerType()) {
4990
4991    if (IExp->getType()->isIntegerType()) {
4992      QualType PointeeTy = PExp->getType()->getPointeeType();
4993
4994      // Check for arithmetic on pointers to incomplete types.
4995      if (PointeeTy->isVoidType()) {
4996        if (getLangOptions().CPlusPlus) {
4997          Diag(Loc, diag::err_typecheck_pointer_arith_void_type)
4998            << lex->getSourceRange() << rex->getSourceRange();
4999          return QualType();
5000        }
5001
5002        // GNU extension: arithmetic on pointer to void
5003        Diag(Loc, diag::ext_gnu_void_ptr)
5004          << lex->getSourceRange() << rex->getSourceRange();
5005      } else if (PointeeTy->isFunctionType()) {
5006        if (getLangOptions().CPlusPlus) {
5007          Diag(Loc, diag::err_typecheck_pointer_arith_function_type)
5008            << lex->getType() << lex->getSourceRange();
5009          return QualType();
5010        }
5011
5012        // GNU extension: arithmetic on pointer to function
5013        Diag(Loc, diag::ext_gnu_ptr_func_arith)
5014          << lex->getType() << lex->getSourceRange();
5015      } else {
5016        // Check if we require a complete type.
5017        if (((PExp->getType()->isPointerType() &&
5018              !PExp->getType()->isDependentType()) ||
5019              PExp->getType()->isObjCObjectPointerType()) &&
5020             RequireCompleteType(Loc, PointeeTy,
5021                           PDiag(diag::err_typecheck_arithmetic_incomplete_type)
5022                             << PExp->getSourceRange()
5023                             << PExp->getType()))
5024          return QualType();
5025      }
5026      // Diagnose bad cases where we step over interface counts.
5027      if (PointeeTy->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
5028        Diag(Loc, diag::err_arithmetic_nonfragile_interface)
5029          << PointeeTy << PExp->getSourceRange();
5030        return QualType();
5031      }
5032
5033      if (CompLHSTy) {
5034        QualType LHSTy = Context.isPromotableBitField(lex);
5035        if (LHSTy.isNull()) {
5036          LHSTy = lex->getType();
5037          if (LHSTy->isPromotableIntegerType())
5038            LHSTy = Context.getPromotedIntegerType(LHSTy);
5039        }
5040        *CompLHSTy = LHSTy;
5041      }
5042      return PExp->getType();
5043    }
5044  }
5045
5046  return InvalidOperands(Loc, lex, rex);
5047}
5048
5049// C99 6.5.6
5050QualType Sema::CheckSubtractionOperands(Expr *&lex, Expr *&rex,
5051                                        SourceLocation Loc, QualType* CompLHSTy) {
5052  if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) {
5053    QualType compType = CheckVectorOperands(Loc, lex, rex);
5054    if (CompLHSTy) *CompLHSTy = compType;
5055    return compType;
5056  }
5057
5058  QualType compType = UsualArithmeticConversions(lex, rex, CompLHSTy);
5059
5060  // Enforce type constraints: C99 6.5.6p3.
5061
5062  // Handle the common case first (both operands are arithmetic).
5063  if (lex->getType()->isArithmeticType()
5064      && rex->getType()->isArithmeticType()) {
5065    if (CompLHSTy) *CompLHSTy = compType;
5066    return compType;
5067  }
5068
5069  // Either ptr - int   or   ptr - ptr.
5070  if (lex->getType()->isAnyPointerType()) {
5071    QualType lpointee = lex->getType()->getPointeeType();
5072
5073    // The LHS must be an completely-defined object type.
5074
5075    bool ComplainAboutVoid = false;
5076    Expr *ComplainAboutFunc = 0;
5077    if (lpointee->isVoidType()) {
5078      if (getLangOptions().CPlusPlus) {
5079        Diag(Loc, diag::err_typecheck_pointer_arith_void_type)
5080          << lex->getSourceRange() << rex->getSourceRange();
5081        return QualType();
5082      }
5083
5084      // GNU C extension: arithmetic on pointer to void
5085      ComplainAboutVoid = true;
5086    } else if (lpointee->isFunctionType()) {
5087      if (getLangOptions().CPlusPlus) {
5088        Diag(Loc, diag::err_typecheck_pointer_arith_function_type)
5089          << lex->getType() << lex->getSourceRange();
5090        return QualType();
5091      }
5092
5093      // GNU C extension: arithmetic on pointer to function
5094      ComplainAboutFunc = lex;
5095    } else if (!lpointee->isDependentType() &&
5096               RequireCompleteType(Loc, lpointee,
5097                                   PDiag(diag::err_typecheck_sub_ptr_object)
5098                                     << lex->getSourceRange()
5099                                     << lex->getType()))
5100      return QualType();
5101
5102    // Diagnose bad cases where we step over interface counts.
5103    if (lpointee->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
5104      Diag(Loc, diag::err_arithmetic_nonfragile_interface)
5105        << lpointee << lex->getSourceRange();
5106      return QualType();
5107    }
5108
5109    // The result type of a pointer-int computation is the pointer type.
5110    if (rex->getType()->isIntegerType()) {
5111      if (ComplainAboutVoid)
5112        Diag(Loc, diag::ext_gnu_void_ptr)
5113          << lex->getSourceRange() << rex->getSourceRange();
5114      if (ComplainAboutFunc)
5115        Diag(Loc, diag::ext_gnu_ptr_func_arith)
5116          << ComplainAboutFunc->getType()
5117          << ComplainAboutFunc->getSourceRange();
5118
5119      if (CompLHSTy) *CompLHSTy = lex->getType();
5120      return lex->getType();
5121    }
5122
5123    // Handle pointer-pointer subtractions.
5124    if (const PointerType *RHSPTy = rex->getType()->getAs<PointerType>()) {
5125      QualType rpointee = RHSPTy->getPointeeType();
5126
5127      // RHS must be a completely-type object type.
5128      // Handle the GNU void* extension.
5129      if (rpointee->isVoidType()) {
5130        if (getLangOptions().CPlusPlus) {
5131          Diag(Loc, diag::err_typecheck_pointer_arith_void_type)
5132            << lex->getSourceRange() << rex->getSourceRange();
5133          return QualType();
5134        }
5135
5136        ComplainAboutVoid = true;
5137      } else if (rpointee->isFunctionType()) {
5138        if (getLangOptions().CPlusPlus) {
5139          Diag(Loc, diag::err_typecheck_pointer_arith_function_type)
5140            << rex->getType() << rex->getSourceRange();
5141          return QualType();
5142        }
5143
5144        // GNU extension: arithmetic on pointer to function
5145        if (!ComplainAboutFunc)
5146          ComplainAboutFunc = rex;
5147      } else if (!rpointee->isDependentType() &&
5148                 RequireCompleteType(Loc, rpointee,
5149                                     PDiag(diag::err_typecheck_sub_ptr_object)
5150                                       << rex->getSourceRange()
5151                                       << rex->getType()))
5152        return QualType();
5153
5154      if (getLangOptions().CPlusPlus) {
5155        // Pointee types must be the same: C++ [expr.add]
5156        if (!Context.hasSameUnqualifiedType(lpointee, rpointee)) {
5157          Diag(Loc, diag::err_typecheck_sub_ptr_compatible)
5158            << lex->getType() << rex->getType()
5159            << lex->getSourceRange() << rex->getSourceRange();
5160          return QualType();
5161        }
5162      } else {
5163        // Pointee types must be compatible C99 6.5.6p3
5164        if (!Context.typesAreCompatible(
5165                Context.getCanonicalType(lpointee).getUnqualifiedType(),
5166                Context.getCanonicalType(rpointee).getUnqualifiedType())) {
5167          Diag(Loc, diag::err_typecheck_sub_ptr_compatible)
5168            << lex->getType() << rex->getType()
5169            << lex->getSourceRange() << rex->getSourceRange();
5170          return QualType();
5171        }
5172      }
5173
5174      if (ComplainAboutVoid)
5175        Diag(Loc, diag::ext_gnu_void_ptr)
5176          << lex->getSourceRange() << rex->getSourceRange();
5177      if (ComplainAboutFunc)
5178        Diag(Loc, diag::ext_gnu_ptr_func_arith)
5179          << ComplainAboutFunc->getType()
5180          << ComplainAboutFunc->getSourceRange();
5181
5182      if (CompLHSTy) *CompLHSTy = lex->getType();
5183      return Context.getPointerDiffType();
5184    }
5185  }
5186
5187  return InvalidOperands(Loc, lex, rex);
5188}
5189
5190// C99 6.5.7
5191QualType Sema::CheckShiftOperands(Expr *&lex, Expr *&rex, SourceLocation Loc,
5192                                  bool isCompAssign) {
5193  // C99 6.5.7p2: Each of the operands shall have integer type.
5194  if (!lex->getType()->isIntegerType() || !rex->getType()->isIntegerType())
5195    return InvalidOperands(Loc, lex, rex);
5196
5197  // Vector shifts promote their scalar inputs to vector type.
5198  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
5199    return CheckVectorOperands(Loc, lex, rex);
5200
5201  // Shifts don't perform usual arithmetic conversions, they just do integer
5202  // promotions on each operand. C99 6.5.7p3
5203  QualType LHSTy = Context.isPromotableBitField(lex);
5204  if (LHSTy.isNull()) {
5205    LHSTy = lex->getType();
5206    if (LHSTy->isPromotableIntegerType())
5207      LHSTy = Context.getPromotedIntegerType(LHSTy);
5208  }
5209  if (!isCompAssign)
5210    ImpCastExprToType(lex, LHSTy, CastExpr::CK_IntegralCast);
5211
5212  UsualUnaryConversions(rex);
5213
5214  // Sanity-check shift operands
5215  llvm::APSInt Right;
5216  // Check right/shifter operand
5217  if (!rex->isValueDependent() &&
5218      rex->isIntegerConstantExpr(Right, Context)) {
5219    if (Right.isNegative())
5220      Diag(Loc, diag::warn_shift_negative) << rex->getSourceRange();
5221    else {
5222      llvm::APInt LeftBits(Right.getBitWidth(),
5223                          Context.getTypeSize(lex->getType()));
5224      if (Right.uge(LeftBits))
5225        Diag(Loc, diag::warn_shift_gt_typewidth) << rex->getSourceRange();
5226    }
5227  }
5228
5229  // "The type of the result is that of the promoted left operand."
5230  return LHSTy;
5231}
5232
5233// C99 6.5.8, C++ [expr.rel]
5234QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc,
5235                                    unsigned OpaqueOpc, bool isRelational) {
5236  BinaryOperator::Opcode Opc = (BinaryOperator::Opcode)OpaqueOpc;
5237
5238  // Handle vector comparisons separately.
5239  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
5240    return CheckVectorCompareOperands(lex, rex, Loc, isRelational);
5241
5242  CheckSignCompare(lex, rex, Loc, &Opc);
5243
5244  // C99 6.5.8p3 / C99 6.5.9p4
5245  if (lex->getType()->isArithmeticType() && rex->getType()->isArithmeticType())
5246    UsualArithmeticConversions(lex, rex);
5247  else {
5248    UsualUnaryConversions(lex);
5249    UsualUnaryConversions(rex);
5250  }
5251  QualType lType = lex->getType();
5252  QualType rType = rex->getType();
5253
5254  if (!lType->isFloatingType()
5255      && !(lType->isBlockPointerType() && isRelational)) {
5256    // For non-floating point types, check for self-comparisons of the form
5257    // x == x, x != x, x < x, etc.  These always evaluate to a constant, and
5258    // often indicate logic errors in the program.
5259    // NOTE: Don't warn about comparisons of enum constants. These can arise
5260    //  from macro expansions, and are usually quite deliberate.
5261    Expr *LHSStripped = lex->IgnoreParens();
5262    Expr *RHSStripped = rex->IgnoreParens();
5263    if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(LHSStripped))
5264      if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(RHSStripped))
5265        if (DRL->getDecl() == DRR->getDecl() &&
5266            !isa<EnumConstantDecl>(DRL->getDecl()))
5267          DiagRuntimeBehavior(Loc, PDiag(diag::warn_selfcomparison));
5268
5269    if (isa<CastExpr>(LHSStripped))
5270      LHSStripped = LHSStripped->IgnoreParenCasts();
5271    if (isa<CastExpr>(RHSStripped))
5272      RHSStripped = RHSStripped->IgnoreParenCasts();
5273
5274    // Warn about comparisons against a string constant (unless the other
5275    // operand is null), the user probably wants strcmp.
5276    Expr *literalString = 0;
5277    Expr *literalStringStripped = 0;
5278    if ((isa<StringLiteral>(LHSStripped) || isa<ObjCEncodeExpr>(LHSStripped)) &&
5279        !RHSStripped->isNullPointerConstant(Context,
5280                                            Expr::NPC_ValueDependentIsNull)) {
5281      literalString = lex;
5282      literalStringStripped = LHSStripped;
5283    } else if ((isa<StringLiteral>(RHSStripped) ||
5284                isa<ObjCEncodeExpr>(RHSStripped)) &&
5285               !LHSStripped->isNullPointerConstant(Context,
5286                                            Expr::NPC_ValueDependentIsNull)) {
5287      literalString = rex;
5288      literalStringStripped = RHSStripped;
5289    }
5290
5291    if (literalString) {
5292      std::string resultComparison;
5293      switch (Opc) {
5294      case BinaryOperator::LT: resultComparison = ") < 0"; break;
5295      case BinaryOperator::GT: resultComparison = ") > 0"; break;
5296      case BinaryOperator::LE: resultComparison = ") <= 0"; break;
5297      case BinaryOperator::GE: resultComparison = ") >= 0"; break;
5298      case BinaryOperator::EQ: resultComparison = ") == 0"; break;
5299      case BinaryOperator::NE: resultComparison = ") != 0"; break;
5300      default: assert(false && "Invalid comparison operator");
5301      }
5302
5303      DiagRuntimeBehavior(Loc,
5304        PDiag(diag::warn_stringcompare)
5305          << isa<ObjCEncodeExpr>(literalStringStripped)
5306          << literalString->getSourceRange());
5307    }
5308  }
5309
5310  // The result of comparisons is 'bool' in C++, 'int' in C.
5311  QualType ResultTy = getLangOptions().CPlusPlus ? Context.BoolTy:Context.IntTy;
5312
5313  if (isRelational) {
5314    if (lType->isRealType() && rType->isRealType())
5315      return ResultTy;
5316  } else {
5317    // Check for comparisons of floating point operands using != and ==.
5318    if (lType->isFloatingType() && rType->isFloatingType())
5319      CheckFloatComparison(Loc,lex,rex);
5320
5321    if (lType->isArithmeticType() && rType->isArithmeticType())
5322      return ResultTy;
5323  }
5324
5325  bool LHSIsNull = lex->isNullPointerConstant(Context,
5326                                              Expr::NPC_ValueDependentIsNull);
5327  bool RHSIsNull = rex->isNullPointerConstant(Context,
5328                                              Expr::NPC_ValueDependentIsNull);
5329
5330  // All of the following pointer related warnings are GCC extensions, except
5331  // when handling null pointer constants. One day, we can consider making them
5332  // errors (when -pedantic-errors is enabled).
5333  if (lType->isPointerType() && rType->isPointerType()) { // C99 6.5.8p2
5334    QualType LCanPointeeTy =
5335      Context.getCanonicalType(lType->getAs<PointerType>()->getPointeeType());
5336    QualType RCanPointeeTy =
5337      Context.getCanonicalType(rType->getAs<PointerType>()->getPointeeType());
5338
5339    if (getLangOptions().CPlusPlus) {
5340      if (LCanPointeeTy == RCanPointeeTy)
5341        return ResultTy;
5342      if (!isRelational &&
5343          (LCanPointeeTy->isVoidType() || RCanPointeeTy->isVoidType())) {
5344        // Valid unless comparison between non-null pointer and function pointer
5345        // This is a gcc extension compatibility comparison.
5346        if ((LCanPointeeTy->isFunctionType() || RCanPointeeTy->isFunctionType())
5347            && !LHSIsNull && !RHSIsNull) {
5348          Diag(Loc, diag::ext_typecheck_comparison_of_fptr_to_void)
5349            << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5350          ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5351          return ResultTy;
5352        }
5353      }
5354      // C++ [expr.rel]p2:
5355      //   [...] Pointer conversions (4.10) and qualification
5356      //   conversions (4.4) are performed on pointer operands (or on
5357      //   a pointer operand and a null pointer constant) to bring
5358      //   them to their composite pointer type. [...]
5359      //
5360      // C++ [expr.eq]p1 uses the same notion for (in)equality
5361      // comparisons of pointers.
5362      bool NonStandardCompositeType = false;
5363      QualType T = FindCompositePointerType(Loc, lex, rex,
5364                              isSFINAEContext()? 0 : &NonStandardCompositeType);
5365      if (T.isNull()) {
5366        Diag(Loc, diag::err_typecheck_comparison_of_distinct_pointers)
5367          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5368        return QualType();
5369      } else if (NonStandardCompositeType) {
5370        Diag(Loc,
5371             diag::ext_typecheck_comparison_of_distinct_pointers_nonstandard)
5372          << lType << rType << T
5373          << lex->getSourceRange() << rex->getSourceRange();
5374      }
5375
5376      ImpCastExprToType(lex, T, CastExpr::CK_BitCast);
5377      ImpCastExprToType(rex, T, CastExpr::CK_BitCast);
5378      return ResultTy;
5379    }
5380    // C99 6.5.9p2 and C99 6.5.8p2
5381    if (Context.typesAreCompatible(LCanPointeeTy.getUnqualifiedType(),
5382                                   RCanPointeeTy.getUnqualifiedType())) {
5383      // Valid unless a relational comparison of function pointers
5384      if (isRelational && LCanPointeeTy->isFunctionType()) {
5385        Diag(Loc, diag::ext_typecheck_ordered_comparison_of_function_pointers)
5386          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5387      }
5388    } else if (!isRelational &&
5389               (LCanPointeeTy->isVoidType() || RCanPointeeTy->isVoidType())) {
5390      // Valid unless comparison between non-null pointer and function pointer
5391      if ((LCanPointeeTy->isFunctionType() || RCanPointeeTy->isFunctionType())
5392          && !LHSIsNull && !RHSIsNull) {
5393        Diag(Loc, diag::ext_typecheck_comparison_of_fptr_to_void)
5394          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5395      }
5396    } else {
5397      // Invalid
5398      Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
5399        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5400    }
5401    if (LCanPointeeTy != RCanPointeeTy)
5402      ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5403    return ResultTy;
5404  }
5405
5406  if (getLangOptions().CPlusPlus) {
5407    // Comparison of pointers with null pointer constants and equality
5408    // comparisons of member pointers to null pointer constants.
5409    if (RHSIsNull &&
5410        (lType->isPointerType() ||
5411         (!isRelational && lType->isMemberPointerType()))) {
5412      ImpCastExprToType(rex, lType, CastExpr::CK_NullToMemberPointer);
5413      return ResultTy;
5414    }
5415    if (LHSIsNull &&
5416        (rType->isPointerType() ||
5417         (!isRelational && rType->isMemberPointerType()))) {
5418      ImpCastExprToType(lex, rType, CastExpr::CK_NullToMemberPointer);
5419      return ResultTy;
5420    }
5421
5422    // Comparison of member pointers.
5423    if (!isRelational &&
5424        lType->isMemberPointerType() && rType->isMemberPointerType()) {
5425      // C++ [expr.eq]p2:
5426      //   In addition, pointers to members can be compared, or a pointer to
5427      //   member and a null pointer constant. Pointer to member conversions
5428      //   (4.11) and qualification conversions (4.4) are performed to bring
5429      //   them to a common type. If one operand is a null pointer constant,
5430      //   the common type is the type of the other operand. Otherwise, the
5431      //   common type is a pointer to member type similar (4.4) to the type
5432      //   of one of the operands, with a cv-qualification signature (4.4)
5433      //   that is the union of the cv-qualification signatures of the operand
5434      //   types.
5435      bool NonStandardCompositeType = false;
5436      QualType T = FindCompositePointerType(Loc, lex, rex,
5437                              isSFINAEContext()? 0 : &NonStandardCompositeType);
5438      if (T.isNull()) {
5439        Diag(Loc, diag::err_typecheck_comparison_of_distinct_pointers)
5440          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5441        return QualType();
5442      } else if (NonStandardCompositeType) {
5443        Diag(Loc,
5444             diag::ext_typecheck_comparison_of_distinct_pointers_nonstandard)
5445          << lType << rType << T
5446          << lex->getSourceRange() << rex->getSourceRange();
5447      }
5448
5449      ImpCastExprToType(lex, T, CastExpr::CK_BitCast);
5450      ImpCastExprToType(rex, T, CastExpr::CK_BitCast);
5451      return ResultTy;
5452    }
5453
5454    // Comparison of nullptr_t with itself.
5455    if (lType->isNullPtrType() && rType->isNullPtrType())
5456      return ResultTy;
5457  }
5458
5459  // Handle block pointer types.
5460  if (!isRelational && lType->isBlockPointerType() && rType->isBlockPointerType()) {
5461    QualType lpointee = lType->getAs<BlockPointerType>()->getPointeeType();
5462    QualType rpointee = rType->getAs<BlockPointerType>()->getPointeeType();
5463
5464    if (!LHSIsNull && !RHSIsNull &&
5465        !Context.typesAreCompatible(lpointee, rpointee)) {
5466      Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks)
5467        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5468    }
5469    ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5470    return ResultTy;
5471  }
5472  // Allow block pointers to be compared with null pointer constants.
5473  if (!isRelational
5474      && ((lType->isBlockPointerType() && rType->isPointerType())
5475          || (lType->isPointerType() && rType->isBlockPointerType()))) {
5476    if (!LHSIsNull && !RHSIsNull) {
5477      if (!((rType->isPointerType() && rType->getAs<PointerType>()
5478             ->getPointeeType()->isVoidType())
5479            || (lType->isPointerType() && lType->getAs<PointerType>()
5480                ->getPointeeType()->isVoidType())))
5481        Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks)
5482          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5483    }
5484    ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5485    return ResultTy;
5486  }
5487
5488  if ((lType->isObjCObjectPointerType() || rType->isObjCObjectPointerType())) {
5489    if (lType->isPointerType() || rType->isPointerType()) {
5490      const PointerType *LPT = lType->getAs<PointerType>();
5491      const PointerType *RPT = rType->getAs<PointerType>();
5492      bool LPtrToVoid = LPT ?
5493        Context.getCanonicalType(LPT->getPointeeType())->isVoidType() : false;
5494      bool RPtrToVoid = RPT ?
5495        Context.getCanonicalType(RPT->getPointeeType())->isVoidType() : false;
5496
5497      if (!LPtrToVoid && !RPtrToVoid &&
5498          !Context.typesAreCompatible(lType, rType)) {
5499        Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
5500          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5501      }
5502      ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5503      return ResultTy;
5504    }
5505    if (lType->isObjCObjectPointerType() && rType->isObjCObjectPointerType()) {
5506      if (!Context.areComparableObjCPointerTypes(lType, rType))
5507        Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
5508          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5509      ImpCastExprToType(rex, lType, CastExpr::CK_BitCast);
5510      return ResultTy;
5511    }
5512  }
5513  if (lType->isAnyPointerType() && rType->isIntegerType()) {
5514    unsigned DiagID = 0;
5515    if (RHSIsNull) {
5516      if (isRelational)
5517        DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;
5518    } else if (isRelational)
5519      DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_integer;
5520    else
5521      DiagID = diag::ext_typecheck_comparison_of_pointer_integer;
5522
5523    if (DiagID) {
5524      Diag(Loc, DiagID)
5525        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5526    }
5527    ImpCastExprToType(rex, lType, CastExpr::CK_IntegralToPointer);
5528    return ResultTy;
5529  }
5530  if (lType->isIntegerType() && rType->isAnyPointerType()) {
5531    unsigned DiagID = 0;
5532    if (LHSIsNull) {
5533      if (isRelational)
5534        DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;
5535    } else if (isRelational)
5536      DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_integer;
5537    else
5538      DiagID = diag::ext_typecheck_comparison_of_pointer_integer;
5539
5540    if (DiagID) {
5541      Diag(Loc, DiagID)
5542        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
5543    }
5544    ImpCastExprToType(lex, rType, CastExpr::CK_IntegralToPointer);
5545    return ResultTy;
5546  }
5547  // Handle block pointers.
5548  if (!isRelational && RHSIsNull
5549      && lType->isBlockPointerType() && rType->isIntegerType()) {
5550    ImpCastExprToType(rex, lType, CastExpr::CK_IntegralToPointer);
5551    return ResultTy;
5552  }
5553  if (!isRelational && LHSIsNull
5554      && lType->isIntegerType() && rType->isBlockPointerType()) {
5555    ImpCastExprToType(lex, rType, CastExpr::CK_IntegralToPointer);
5556    return ResultTy;
5557  }
5558  return InvalidOperands(Loc, lex, rex);
5559}
5560
5561/// CheckVectorCompareOperands - vector comparisons are a clang extension that
5562/// operates on extended vector types.  Instead of producing an IntTy result,
5563/// like a scalar comparison, a vector comparison produces a vector of integer
5564/// types.
5565QualType Sema::CheckVectorCompareOperands(Expr *&lex, Expr *&rex,
5566                                          SourceLocation Loc,
5567                                          bool isRelational) {
5568  // Check to make sure we're operating on vectors of the same type and width,
5569  // Allowing one side to be a scalar of element type.
5570  QualType vType = CheckVectorOperands(Loc, lex, rex);
5571  if (vType.isNull())
5572    return vType;
5573
5574  QualType lType = lex->getType();
5575  QualType rType = rex->getType();
5576
5577  // For non-floating point types, check for self-comparisons of the form
5578  // x == x, x != x, x < x, etc.  These always evaluate to a constant, and
5579  // often indicate logic errors in the program.
5580  if (!lType->isFloatingType()) {
5581    if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(lex->IgnoreParens()))
5582      if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(rex->IgnoreParens()))
5583        if (DRL->getDecl() == DRR->getDecl())
5584          DiagRuntimeBehavior(Loc, PDiag(diag::warn_selfcomparison));
5585  }
5586
5587  // Check for comparisons of floating point operands using != and ==.
5588  if (!isRelational && lType->isFloatingType()) {
5589    assert (rType->isFloatingType());
5590    CheckFloatComparison(Loc,lex,rex);
5591  }
5592
5593  // Return the type for the comparison, which is the same as vector type for
5594  // integer vectors, or an integer type of identical size and number of
5595  // elements for floating point vectors.
5596  if (lType->isIntegerType())
5597    return lType;
5598
5599  const VectorType *VTy = lType->getAs<VectorType>();
5600  unsigned TypeSize = Context.getTypeSize(VTy->getElementType());
5601  if (TypeSize == Context.getTypeSize(Context.IntTy))
5602    return Context.getExtVectorType(Context.IntTy, VTy->getNumElements());
5603  if (TypeSize == Context.getTypeSize(Context.LongTy))
5604    return Context.getExtVectorType(Context.LongTy, VTy->getNumElements());
5605
5606  assert(TypeSize == Context.getTypeSize(Context.LongLongTy) &&
5607         "Unhandled vector element size in vector compare");
5608  return Context.getExtVectorType(Context.LongLongTy, VTy->getNumElements());
5609}
5610
5611inline QualType Sema::CheckBitwiseOperands(
5612  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isCompAssign) {
5613  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
5614    return CheckVectorOperands(Loc, lex, rex);
5615
5616  QualType compType = UsualArithmeticConversions(lex, rex, isCompAssign);
5617
5618  if (lex->getType()->isIntegerType() && rex->getType()->isIntegerType())
5619    return compType;
5620  return InvalidOperands(Loc, lex, rex);
5621}
5622
5623inline QualType Sema::CheckLogicalOperands( // C99 6.5.[13,14]
5624  Expr *&lex, Expr *&rex, SourceLocation Loc) {
5625  if (!Context.getLangOptions().CPlusPlus) {
5626    UsualUnaryConversions(lex);
5627    UsualUnaryConversions(rex);
5628
5629    if (!lex->getType()->isScalarType() || !rex->getType()->isScalarType())
5630      return InvalidOperands(Loc, lex, rex);
5631
5632    return Context.IntTy;
5633  }
5634
5635  // C++ [expr.log.and]p1
5636  // C++ [expr.log.or]p1
5637  // The operands are both implicitly converted to type bool (clause 4).
5638  StandardConversionSequence LHS;
5639  if (!IsStandardConversion(lex, Context.BoolTy,
5640                            /*InOverloadResolution=*/false, LHS))
5641    return InvalidOperands(Loc, lex, rex);
5642
5643  if (PerformImplicitConversion(lex, Context.BoolTy, LHS,
5644                                AA_Passing, /*IgnoreBaseAccess=*/false))
5645    return InvalidOperands(Loc, lex, rex);
5646
5647  StandardConversionSequence RHS;
5648  if (!IsStandardConversion(rex, Context.BoolTy,
5649                            /*InOverloadResolution=*/false, RHS))
5650    return InvalidOperands(Loc, lex, rex);
5651
5652  if (PerformImplicitConversion(rex, Context.BoolTy, RHS,
5653                                AA_Passing, /*IgnoreBaseAccess=*/false))
5654    return InvalidOperands(Loc, lex, rex);
5655
5656  // C++ [expr.log.and]p2
5657  // C++ [expr.log.or]p2
5658  // The result is a bool.
5659  return Context.BoolTy;
5660}
5661
5662/// IsReadonlyProperty - Verify that otherwise a valid l-value expression
5663/// is a read-only property; return true if so. A readonly property expression
5664/// depends on various declarations and thus must be treated specially.
5665///
5666static bool IsReadonlyProperty(Expr *E, Sema &S) {
5667  if (E->getStmtClass() == Expr::ObjCPropertyRefExprClass) {
5668    const ObjCPropertyRefExpr* PropExpr = cast<ObjCPropertyRefExpr>(E);
5669    if (ObjCPropertyDecl *PDecl = PropExpr->getProperty()) {
5670      QualType BaseType = PropExpr->getBase()->getType();
5671      if (const ObjCObjectPointerType *OPT =
5672            BaseType->getAsObjCInterfacePointerType())
5673        if (ObjCInterfaceDecl *IFace = OPT->getInterfaceDecl())
5674          if (S.isPropertyReadonly(PDecl, IFace))
5675            return true;
5676    }
5677  }
5678  return false;
5679}
5680
5681/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,
5682/// emit an error and return true.  If so, return false.
5683static bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {
5684  SourceLocation OrigLoc = Loc;
5685  Expr::isModifiableLvalueResult IsLV = E->isModifiableLvalue(S.Context,
5686                                                              &Loc);
5687  if (IsLV == Expr::MLV_Valid && IsReadonlyProperty(E, S))
5688    IsLV = Expr::MLV_ReadonlyProperty;
5689  if (IsLV == Expr::MLV_Valid)
5690    return false;
5691
5692  unsigned Diag = 0;
5693  bool NeedType = false;
5694  switch (IsLV) { // C99 6.5.16p2
5695  case Expr::MLV_ConstQualified: Diag = diag::err_typecheck_assign_const; break;
5696  case Expr::MLV_ArrayType:
5697    Diag = diag::err_typecheck_array_not_modifiable_lvalue;
5698    NeedType = true;
5699    break;
5700  case Expr::MLV_NotObjectType:
5701    Diag = diag::err_typecheck_non_object_not_modifiable_lvalue;
5702    NeedType = true;
5703    break;
5704  case Expr::MLV_LValueCast:
5705    Diag = diag::err_typecheck_lvalue_casts_not_supported;
5706    break;
5707  case Expr::MLV_Valid:
5708    llvm_unreachable("did not take early return for MLV_Valid");
5709  case Expr::MLV_InvalidExpression:
5710  case Expr::MLV_MemberFunction:
5711  case Expr::MLV_ClassTemporary:
5712    Diag = diag::err_typecheck_expression_not_modifiable_lvalue;
5713    break;
5714  case Expr::MLV_IncompleteType:
5715  case Expr::MLV_IncompleteVoidType:
5716    return S.RequireCompleteType(Loc, E->getType(),
5717              S.PDiag(diag::err_typecheck_incomplete_type_not_modifiable_lvalue)
5718                  << E->getSourceRange());
5719  case Expr::MLV_DuplicateVectorComponents:
5720    Diag = diag::err_typecheck_duplicate_vector_components_not_mlvalue;
5721    break;
5722  case Expr::MLV_NotBlockQualified:
5723    Diag = diag::err_block_decl_ref_not_modifiable_lvalue;
5724    break;
5725  case Expr::MLV_ReadonlyProperty:
5726    Diag = diag::error_readonly_property_assignment;
5727    break;
5728  case Expr::MLV_NoSetterProperty:
5729    Diag = diag::error_nosetter_property_assignment;
5730    break;
5731  case Expr::MLV_SubObjCPropertySetting:
5732    Diag = diag::error_no_subobject_property_setting;
5733    break;
5734  }
5735
5736  SourceRange Assign;
5737  if (Loc != OrigLoc)
5738    Assign = SourceRange(OrigLoc, OrigLoc);
5739  if (NeedType)
5740    S.Diag(Loc, Diag) << E->getType() << E->getSourceRange() << Assign;
5741  else
5742    S.Diag(Loc, Diag) << E->getSourceRange() << Assign;
5743  return true;
5744}
5745
5746
5747
5748// C99 6.5.16.1
5749QualType Sema::CheckAssignmentOperands(Expr *LHS, Expr *&RHS,
5750                                       SourceLocation Loc,
5751                                       QualType CompoundType) {
5752  // Verify that LHS is a modifiable lvalue, and emit error if not.
5753  if (CheckForModifiableLvalue(LHS, Loc, *this))
5754    return QualType();
5755
5756  QualType LHSType = LHS->getType();
5757  QualType RHSType = CompoundType.isNull() ? RHS->getType() : CompoundType;
5758
5759  AssignConvertType ConvTy;
5760  if (CompoundType.isNull()) {
5761    // Simple assignment "x = y".
5762    ConvTy = CheckSingleAssignmentConstraints(LHSType, RHS);
5763    // Special case of NSObject attributes on c-style pointer types.
5764    if (ConvTy == IncompatiblePointer &&
5765        ((Context.isObjCNSObjectType(LHSType) &&
5766          RHSType->isObjCObjectPointerType()) ||
5767         (Context.isObjCNSObjectType(RHSType) &&
5768          LHSType->isObjCObjectPointerType())))
5769      ConvTy = Compatible;
5770
5771    // If the RHS is a unary plus or minus, check to see if they = and + are
5772    // right next to each other.  If so, the user may have typo'd "x =+ 4"
5773    // instead of "x += 4".
5774    Expr *RHSCheck = RHS;
5775    if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(RHSCheck))
5776      RHSCheck = ICE->getSubExpr();
5777    if (UnaryOperator *UO = dyn_cast<UnaryOperator>(RHSCheck)) {
5778      if ((UO->getOpcode() == UnaryOperator::Plus ||
5779           UO->getOpcode() == UnaryOperator::Minus) &&
5780          Loc.isFileID() && UO->getOperatorLoc().isFileID() &&
5781          // Only if the two operators are exactly adjacent.
5782          Loc.getFileLocWithOffset(1) == UO->getOperatorLoc() &&
5783          // And there is a space or other character before the subexpr of the
5784          // unary +/-.  We don't want to warn on "x=-1".
5785          Loc.getFileLocWithOffset(2) != UO->getSubExpr()->getLocStart() &&
5786          UO->getSubExpr()->getLocStart().isFileID()) {
5787        Diag(Loc, diag::warn_not_compound_assign)
5788          << (UO->getOpcode() == UnaryOperator::Plus ? "+" : "-")
5789          << SourceRange(UO->getOperatorLoc(), UO->getOperatorLoc());
5790      }
5791    }
5792  } else {
5793    // Compound assignment "x += y"
5794    ConvTy = CheckAssignmentConstraints(LHSType, RHSType);
5795  }
5796
5797  if (DiagnoseAssignmentResult(ConvTy, Loc, LHSType, RHSType,
5798                               RHS, AA_Assigning))
5799    return QualType();
5800
5801  // C99 6.5.16p3: The type of an assignment expression is the type of the
5802  // left operand unless the left operand has qualified type, in which case
5803  // it is the unqualified version of the type of the left operand.
5804  // C99 6.5.16.1p2: In simple assignment, the value of the right operand
5805  // is converted to the type of the assignment expression (above).
5806  // C++ 5.17p1: the type of the assignment expression is that of its left
5807  // operand.
5808  return LHSType.getUnqualifiedType();
5809}
5810
5811// C99 6.5.17
5812QualType Sema::CheckCommaOperands(Expr *LHS, Expr *&RHS, SourceLocation Loc) {
5813  // Comma performs lvalue conversion (C99 6.3.2.1), but not unary conversions.
5814  // C++ does not perform this conversion (C++ [expr.comma]p1).
5815  if (!getLangOptions().CPlusPlus)
5816    DefaultFunctionArrayLvalueConversion(RHS);
5817
5818  // FIXME: Check that RHS type is complete in C mode (it's legal for it to be
5819  // incomplete in C++).
5820
5821  return RHS->getType();
5822}
5823
5824/// CheckIncrementDecrementOperand - unlike most "Check" methods, this routine
5825/// doesn't need to call UsualUnaryConversions or UsualArithmeticConversions.
5826QualType Sema::CheckIncrementDecrementOperand(Expr *Op, SourceLocation OpLoc,
5827                                              bool isInc) {
5828  if (Op->isTypeDependent())
5829    return Context.DependentTy;
5830
5831  QualType ResType = Op->getType();
5832  assert(!ResType.isNull() && "no type for increment/decrement expression");
5833
5834  if (getLangOptions().CPlusPlus && ResType->isBooleanType()) {
5835    // Decrement of bool is not allowed.
5836    if (!isInc) {
5837      Diag(OpLoc, diag::err_decrement_bool) << Op->getSourceRange();
5838      return QualType();
5839    }
5840    // Increment of bool sets it to true, but is deprecated.
5841    Diag(OpLoc, diag::warn_increment_bool) << Op->getSourceRange();
5842  } else if (ResType->isRealType()) {
5843    // OK!
5844  } else if (ResType->isAnyPointerType()) {
5845    QualType PointeeTy = ResType->getPointeeType();
5846
5847    // C99 6.5.2.4p2, 6.5.6p2
5848    if (PointeeTy->isVoidType()) {
5849      if (getLangOptions().CPlusPlus) {
5850        Diag(OpLoc, diag::err_typecheck_pointer_arith_void_type)
5851          << Op->getSourceRange();
5852        return QualType();
5853      }
5854
5855      // Pointer to void is a GNU extension in C.
5856      Diag(OpLoc, diag::ext_gnu_void_ptr) << Op->getSourceRange();
5857    } else if (PointeeTy->isFunctionType()) {
5858      if (getLangOptions().CPlusPlus) {
5859        Diag(OpLoc, diag::err_typecheck_pointer_arith_function_type)
5860          << Op->getType() << Op->getSourceRange();
5861        return QualType();
5862      }
5863
5864      Diag(OpLoc, diag::ext_gnu_ptr_func_arith)
5865        << ResType << Op->getSourceRange();
5866    } else if (RequireCompleteType(OpLoc, PointeeTy,
5867                           PDiag(diag::err_typecheck_arithmetic_incomplete_type)
5868                             << Op->getSourceRange()
5869                             << ResType))
5870      return QualType();
5871    // Diagnose bad cases where we step over interface counts.
5872    else if (PointeeTy->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
5873      Diag(OpLoc, diag::err_arithmetic_nonfragile_interface)
5874        << PointeeTy << Op->getSourceRange();
5875      return QualType();
5876    }
5877  } else if (ResType->isAnyComplexType()) {
5878    // C99 does not support ++/-- on complex types, we allow as an extension.
5879    Diag(OpLoc, diag::ext_integer_increment_complex)
5880      << ResType << Op->getSourceRange();
5881  } else {
5882    Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement)
5883      << ResType << int(isInc) << Op->getSourceRange();
5884    return QualType();
5885  }
5886  // At this point, we know we have a real, complex or pointer type.
5887  // Now make sure the operand is a modifiable lvalue.
5888  if (CheckForModifiableLvalue(Op, OpLoc, *this))
5889    return QualType();
5890  return ResType;
5891}
5892
5893/// getPrimaryDecl - Helper function for CheckAddressOfOperand().
5894/// This routine allows us to typecheck complex/recursive expressions
5895/// where the declaration is needed for type checking. We only need to
5896/// handle cases when the expression references a function designator
5897/// or is an lvalue. Here are some examples:
5898///  - &(x) => x
5899///  - &*****f => f for f a function designator.
5900///  - &s.xx => s
5901///  - &s.zz[1].yy -> s, if zz is an array
5902///  - *(x + 1) -> x, if x is an array
5903///  - &"123"[2] -> 0
5904///  - & __real__ x -> x
5905static NamedDecl *getPrimaryDecl(Expr *E) {
5906  switch (E->getStmtClass()) {
5907  case Stmt::DeclRefExprClass:
5908    return cast<DeclRefExpr>(E)->getDecl();
5909  case Stmt::MemberExprClass:
5910    // If this is an arrow operator, the address is an offset from
5911    // the base's value, so the object the base refers to is
5912    // irrelevant.
5913    if (cast<MemberExpr>(E)->isArrow())
5914      return 0;
5915    // Otherwise, the expression refers to a part of the base
5916    return getPrimaryDecl(cast<MemberExpr>(E)->getBase());
5917  case Stmt::ArraySubscriptExprClass: {
5918    // FIXME: This code shouldn't be necessary!  We should catch the implicit
5919    // promotion of register arrays earlier.
5920    Expr* Base = cast<ArraySubscriptExpr>(E)->getBase();
5921    if (ImplicitCastExpr* ICE = dyn_cast<ImplicitCastExpr>(Base)) {
5922      if (ICE->getSubExpr()->getType()->isArrayType())
5923        return getPrimaryDecl(ICE->getSubExpr());
5924    }
5925    return 0;
5926  }
5927  case Stmt::UnaryOperatorClass: {
5928    UnaryOperator *UO = cast<UnaryOperator>(E);
5929
5930    switch(UO->getOpcode()) {
5931    case UnaryOperator::Real:
5932    case UnaryOperator::Imag:
5933    case UnaryOperator::Extension:
5934      return getPrimaryDecl(UO->getSubExpr());
5935    default:
5936      return 0;
5937    }
5938  }
5939  case Stmt::ParenExprClass:
5940    return getPrimaryDecl(cast<ParenExpr>(E)->getSubExpr());
5941  case Stmt::ImplicitCastExprClass:
5942    // If the result of an implicit cast is an l-value, we care about
5943    // the sub-expression; otherwise, the result here doesn't matter.
5944    return getPrimaryDecl(cast<ImplicitCastExpr>(E)->getSubExpr());
5945  default:
5946    return 0;
5947  }
5948}
5949
5950/// CheckAddressOfOperand - The operand of & must be either a function
5951/// designator or an lvalue designating an object. If it is an lvalue, the
5952/// object cannot be declared with storage class register or be a bit field.
5953/// Note: The usual conversions are *not* applied to the operand of the &
5954/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.
5955/// In C++, the operand might be an overloaded function name, in which case
5956/// we allow the '&' but retain the overloaded-function type.
5957QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) {
5958  // Make sure to ignore parentheses in subsequent checks
5959  op = op->IgnoreParens();
5960
5961  if (op->isTypeDependent())
5962    return Context.DependentTy;
5963
5964  if (getLangOptions().C99) {
5965    // Implement C99-only parts of addressof rules.
5966    if (UnaryOperator* uOp = dyn_cast<UnaryOperator>(op)) {
5967      if (uOp->getOpcode() == UnaryOperator::Deref)
5968        // Per C99 6.5.3.2, the address of a deref always returns a valid result
5969        // (assuming the deref expression is valid).
5970        return uOp->getSubExpr()->getType();
5971    }
5972    // Technically, there should be a check for array subscript
5973    // expressions here, but the result of one is always an lvalue anyway.
5974  }
5975  NamedDecl *dcl = getPrimaryDecl(op);
5976  Expr::isLvalueResult lval = op->isLvalue(Context);
5977
5978  MemberExpr *ME = dyn_cast<MemberExpr>(op);
5979  if (lval == Expr::LV_MemberFunction && ME &&
5980      isa<CXXMethodDecl>(ME->getMemberDecl())) {
5981    ValueDecl *dcl = cast<MemberExpr>(op)->getMemberDecl();
5982    // &f where f is a member of the current object, or &o.f, or &p->f
5983    // All these are not allowed, and we need to catch them before the dcl
5984    // branch of the if, below.
5985    Diag(OpLoc, diag::err_unqualified_pointer_member_function)
5986        << dcl;
5987    // FIXME: Improve this diagnostic and provide a fixit.
5988
5989    // Now recover by acting as if the function had been accessed qualified.
5990    return Context.getMemberPointerType(op->getType(),
5991                Context.getTypeDeclType(cast<RecordDecl>(dcl->getDeclContext()))
5992                       .getTypePtr());
5993  } else if (lval == Expr::LV_ClassTemporary) {
5994    Diag(OpLoc, isSFINAEContext()? diag::err_typecheck_addrof_class_temporary
5995                                 : diag::ext_typecheck_addrof_class_temporary)
5996      << op->getType() << op->getSourceRange();
5997    if (isSFINAEContext())
5998      return QualType();
5999  } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {
6000    // C99 6.5.3.2p1
6001    // The operand must be either an l-value or a function designator
6002    if (!op->getType()->isFunctionType()) {
6003      // FIXME: emit more specific diag...
6004      Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof)
6005        << op->getSourceRange();
6006      return QualType();
6007    }
6008  } else if (op->getBitField()) { // C99 6.5.3.2p1
6009    // The operand cannot be a bit-field
6010    Diag(OpLoc, diag::err_typecheck_address_of)
6011      << "bit-field" << op->getSourceRange();
6012        return QualType();
6013  } else if (op->refersToVectorElement()) {
6014    // The operand cannot be an element of a vector
6015    Diag(OpLoc, diag::err_typecheck_address_of)
6016      << "vector element" << op->getSourceRange();
6017    return QualType();
6018  } else if (isa<ObjCPropertyRefExpr>(op)) {
6019    // cannot take address of a property expression.
6020    Diag(OpLoc, diag::err_typecheck_address_of)
6021      << "property expression" << op->getSourceRange();
6022    return QualType();
6023  } else if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(op)) {
6024    // FIXME: Can LHS ever be null here?
6025    if (!CheckAddressOfOperand(CO->getTrueExpr(), OpLoc).isNull())
6026      return CheckAddressOfOperand(CO->getFalseExpr(), OpLoc);
6027  } else if (isa<UnresolvedLookupExpr>(op)) {
6028    return Context.OverloadTy;
6029  } else if (dcl) { // C99 6.5.3.2p1
6030    // We have an lvalue with a decl. Make sure the decl is not declared
6031    // with the register storage-class specifier.
6032    if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) {
6033      if (vd->getStorageClass() == VarDecl::Register) {
6034        Diag(OpLoc, diag::err_typecheck_address_of)
6035          << "register variable" << op->getSourceRange();
6036        return QualType();
6037      }
6038    } else if (isa<FunctionTemplateDecl>(dcl)) {
6039      return Context.OverloadTy;
6040    } else if (FieldDecl *FD = dyn_cast<FieldDecl>(dcl)) {
6041      // Okay: we can take the address of a field.
6042      // Could be a pointer to member, though, if there is an explicit
6043      // scope qualifier for the class.
6044      if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier()) {
6045        DeclContext *Ctx = dcl->getDeclContext();
6046        if (Ctx && Ctx->isRecord()) {
6047          if (FD->getType()->isReferenceType()) {
6048            Diag(OpLoc,
6049                 diag::err_cannot_form_pointer_to_member_of_reference_type)
6050              << FD->getDeclName() << FD->getType();
6051            return QualType();
6052          }
6053
6054          return Context.getMemberPointerType(op->getType(),
6055                Context.getTypeDeclType(cast<RecordDecl>(Ctx)).getTypePtr());
6056        }
6057      }
6058    } else if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(dcl)) {
6059      // Okay: we can take the address of a function.
6060      // As above.
6061      if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier() &&
6062          MD->isInstance())
6063        return Context.getMemberPointerType(op->getType(),
6064              Context.getTypeDeclType(MD->getParent()).getTypePtr());
6065    } else if (!isa<FunctionDecl>(dcl))
6066      assert(0 && "Unknown/unexpected decl type");
6067  }
6068
6069  if (lval == Expr::LV_IncompleteVoidType) {
6070    // Taking the address of a void variable is technically illegal, but we
6071    // allow it in cases which are otherwise valid.
6072    // Example: "extern void x; void* y = &x;".
6073    Diag(OpLoc, diag::ext_typecheck_addrof_void) << op->getSourceRange();
6074  }
6075
6076  // If the operand has type "type", the result has type "pointer to type".
6077  return Context.getPointerType(op->getType());
6078}
6079
6080QualType Sema::CheckIndirectionOperand(Expr *Op, SourceLocation OpLoc) {
6081  if (Op->isTypeDependent())
6082    return Context.DependentTy;
6083
6084  UsualUnaryConversions(Op);
6085  QualType Ty = Op->getType();
6086
6087  // Note that per both C89 and C99, this is always legal, even if ptype is an
6088  // incomplete type or void.  It would be possible to warn about dereferencing
6089  // a void pointer, but it's completely well-defined, and such a warning is
6090  // unlikely to catch any mistakes.
6091  if (const PointerType *PT = Ty->getAs<PointerType>())
6092    return PT->getPointeeType();
6093
6094  if (const ObjCObjectPointerType *OPT = Ty->getAs<ObjCObjectPointerType>())
6095    return OPT->getPointeeType();
6096
6097  Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer)
6098    << Ty << Op->getSourceRange();
6099  return QualType();
6100}
6101
6102static inline BinaryOperator::Opcode ConvertTokenKindToBinaryOpcode(
6103  tok::TokenKind Kind) {
6104  BinaryOperator::Opcode Opc;
6105  switch (Kind) {
6106  default: assert(0 && "Unknown binop!");
6107  case tok::periodstar:           Opc = BinaryOperator::PtrMemD; break;
6108  case tok::arrowstar:            Opc = BinaryOperator::PtrMemI; break;
6109  case tok::star:                 Opc = BinaryOperator::Mul; break;
6110  case tok::slash:                Opc = BinaryOperator::Div; break;
6111  case tok::percent:              Opc = BinaryOperator::Rem; break;
6112  case tok::plus:                 Opc = BinaryOperator::Add; break;
6113  case tok::minus:                Opc = BinaryOperator::Sub; break;
6114  case tok::lessless:             Opc = BinaryOperator::Shl; break;
6115  case tok::greatergreater:       Opc = BinaryOperator::Shr; break;
6116  case tok::lessequal:            Opc = BinaryOperator::LE; break;
6117  case tok::less:                 Opc = BinaryOperator::LT; break;
6118  case tok::greaterequal:         Opc = BinaryOperator::GE; break;
6119  case tok::greater:              Opc = BinaryOperator::GT; break;
6120  case tok::exclaimequal:         Opc = BinaryOperator::NE; break;
6121  case tok::equalequal:           Opc = BinaryOperator::EQ; break;
6122  case tok::amp:                  Opc = BinaryOperator::And; break;
6123  case tok::caret:                Opc = BinaryOperator::Xor; break;
6124  case tok::pipe:                 Opc = BinaryOperator::Or; break;
6125  case tok::ampamp:               Opc = BinaryOperator::LAnd; break;
6126  case tok::pipepipe:             Opc = BinaryOperator::LOr; break;
6127  case tok::equal:                Opc = BinaryOperator::Assign; break;
6128  case tok::starequal:            Opc = BinaryOperator::MulAssign; break;
6129  case tok::slashequal:           Opc = BinaryOperator::DivAssign; break;
6130  case tok::percentequal:         Opc = BinaryOperator::RemAssign; break;
6131  case tok::plusequal:            Opc = BinaryOperator::AddAssign; break;
6132  case tok::minusequal:           Opc = BinaryOperator::SubAssign; break;
6133  case tok::lesslessequal:        Opc = BinaryOperator::ShlAssign; break;
6134  case tok::greatergreaterequal:  Opc = BinaryOperator::ShrAssign; break;
6135  case tok::ampequal:             Opc = BinaryOperator::AndAssign; break;
6136  case tok::caretequal:           Opc = BinaryOperator::XorAssign; break;
6137  case tok::pipeequal:            Opc = BinaryOperator::OrAssign; break;
6138  case tok::comma:                Opc = BinaryOperator::Comma; break;
6139  }
6140  return Opc;
6141}
6142
6143static inline UnaryOperator::Opcode ConvertTokenKindToUnaryOpcode(
6144  tok::TokenKind Kind) {
6145  UnaryOperator::Opcode Opc;
6146  switch (Kind) {
6147  default: assert(0 && "Unknown unary op!");
6148  case tok::plusplus:     Opc = UnaryOperator::PreInc; break;
6149  case tok::minusminus:   Opc = UnaryOperator::PreDec; break;
6150  case tok::amp:          Opc = UnaryOperator::AddrOf; break;
6151  case tok::star:         Opc = UnaryOperator::Deref; break;
6152  case tok::plus:         Opc = UnaryOperator::Plus; break;
6153  case tok::minus:        Opc = UnaryOperator::Minus; break;
6154  case tok::tilde:        Opc = UnaryOperator::Not; break;
6155  case tok::exclaim:      Opc = UnaryOperator::LNot; break;
6156  case tok::kw___real:    Opc = UnaryOperator::Real; break;
6157  case tok::kw___imag:    Opc = UnaryOperator::Imag; break;
6158  case tok::kw___extension__: Opc = UnaryOperator::Extension; break;
6159  }
6160  return Opc;
6161}
6162
6163/// CreateBuiltinBinOp - Creates a new built-in binary operation with
6164/// operator @p Opc at location @c TokLoc. This routine only supports
6165/// built-in operations; ActOnBinOp handles overloaded operators.
6166Action::OwningExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc,
6167                                                  unsigned Op,
6168                                                  Expr *lhs, Expr *rhs) {
6169  QualType ResultTy;     // Result type of the binary operator.
6170  BinaryOperator::Opcode Opc = (BinaryOperator::Opcode)Op;
6171  // The following two variables are used for compound assignment operators
6172  QualType CompLHSTy;    // Type of LHS after promotions for computation
6173  QualType CompResultTy; // Type of computation result
6174
6175  switch (Opc) {
6176  case BinaryOperator::Assign:
6177    ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, QualType());
6178    break;
6179  case BinaryOperator::PtrMemD:
6180  case BinaryOperator::PtrMemI:
6181    ResultTy = CheckPointerToMemberOperands(lhs, rhs, OpLoc,
6182                                            Opc == BinaryOperator::PtrMemI);
6183    break;
6184  case BinaryOperator::Mul:
6185  case BinaryOperator::Div:
6186    ResultTy = CheckMultiplyDivideOperands(lhs, rhs, OpLoc, false,
6187                                           Opc == BinaryOperator::Div);
6188    break;
6189  case BinaryOperator::Rem:
6190    ResultTy = CheckRemainderOperands(lhs, rhs, OpLoc);
6191    break;
6192  case BinaryOperator::Add:
6193    ResultTy = CheckAdditionOperands(lhs, rhs, OpLoc);
6194    break;
6195  case BinaryOperator::Sub:
6196    ResultTy = CheckSubtractionOperands(lhs, rhs, OpLoc);
6197    break;
6198  case BinaryOperator::Shl:
6199  case BinaryOperator::Shr:
6200    ResultTy = CheckShiftOperands(lhs, rhs, OpLoc);
6201    break;
6202  case BinaryOperator::LE:
6203  case BinaryOperator::LT:
6204  case BinaryOperator::GE:
6205  case BinaryOperator::GT:
6206    ResultTy = CheckCompareOperands(lhs, rhs, OpLoc, Opc, true);
6207    break;
6208  case BinaryOperator::EQ:
6209  case BinaryOperator::NE:
6210    ResultTy = CheckCompareOperands(lhs, rhs, OpLoc, Opc, false);
6211    break;
6212  case BinaryOperator::And:
6213  case BinaryOperator::Xor:
6214  case BinaryOperator::Or:
6215    ResultTy = CheckBitwiseOperands(lhs, rhs, OpLoc);
6216    break;
6217  case BinaryOperator::LAnd:
6218  case BinaryOperator::LOr:
6219    ResultTy = CheckLogicalOperands(lhs, rhs, OpLoc);
6220    break;
6221  case BinaryOperator::MulAssign:
6222  case BinaryOperator::DivAssign:
6223    CompResultTy = CheckMultiplyDivideOperands(lhs, rhs, OpLoc, true,
6224                                              Opc == BinaryOperator::DivAssign);
6225    CompLHSTy = CompResultTy;
6226    if (!CompResultTy.isNull())
6227      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6228    break;
6229  case BinaryOperator::RemAssign:
6230    CompResultTy = CheckRemainderOperands(lhs, rhs, OpLoc, true);
6231    CompLHSTy = CompResultTy;
6232    if (!CompResultTy.isNull())
6233      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6234    break;
6235  case BinaryOperator::AddAssign:
6236    CompResultTy = CheckAdditionOperands(lhs, rhs, OpLoc, &CompLHSTy);
6237    if (!CompResultTy.isNull())
6238      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6239    break;
6240  case BinaryOperator::SubAssign:
6241    CompResultTy = CheckSubtractionOperands(lhs, rhs, OpLoc, &CompLHSTy);
6242    if (!CompResultTy.isNull())
6243      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6244    break;
6245  case BinaryOperator::ShlAssign:
6246  case BinaryOperator::ShrAssign:
6247    CompResultTy = CheckShiftOperands(lhs, rhs, OpLoc, true);
6248    CompLHSTy = CompResultTy;
6249    if (!CompResultTy.isNull())
6250      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6251    break;
6252  case BinaryOperator::AndAssign:
6253  case BinaryOperator::XorAssign:
6254  case BinaryOperator::OrAssign:
6255    CompResultTy = CheckBitwiseOperands(lhs, rhs, OpLoc, true);
6256    CompLHSTy = CompResultTy;
6257    if (!CompResultTy.isNull())
6258      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
6259    break;
6260  case BinaryOperator::Comma:
6261    ResultTy = CheckCommaOperands(lhs, rhs, OpLoc);
6262    break;
6263  }
6264  if (ResultTy.isNull())
6265    return ExprError();
6266  if (CompResultTy.isNull())
6267    return Owned(new (Context) BinaryOperator(lhs, rhs, Opc, ResultTy, OpLoc));
6268  else
6269    return Owned(new (Context) CompoundAssignOperator(lhs, rhs, Opc, ResultTy,
6270                                                      CompLHSTy, CompResultTy,
6271                                                      OpLoc));
6272}
6273
6274/// SuggestParentheses - Emit a diagnostic together with a fixit hint that wraps
6275/// ParenRange in parentheses.
6276static void SuggestParentheses(Sema &Self, SourceLocation Loc,
6277                               const PartialDiagnostic &PD,
6278                               const PartialDiagnostic &FirstNote,
6279                               SourceRange FirstParenRange,
6280                               const PartialDiagnostic &SecondNote,
6281                               SourceRange SecondParenRange) {
6282  Self.Diag(Loc, PD);
6283
6284  if (!FirstNote.getDiagID())
6285    return;
6286
6287  SourceLocation EndLoc = Self.PP.getLocForEndOfToken(FirstParenRange.getEnd());
6288  if (!FirstParenRange.getEnd().isFileID() || EndLoc.isInvalid()) {
6289    // We can't display the parentheses, so just return.
6290    return;
6291  }
6292
6293  Self.Diag(Loc, FirstNote)
6294    << FixItHint::CreateInsertion(FirstParenRange.getBegin(), "(")
6295    << FixItHint::CreateInsertion(EndLoc, ")");
6296
6297  if (!SecondNote.getDiagID())
6298    return;
6299
6300  EndLoc = Self.PP.getLocForEndOfToken(SecondParenRange.getEnd());
6301  if (!SecondParenRange.getEnd().isFileID() || EndLoc.isInvalid()) {
6302    // We can't display the parentheses, so just dig the
6303    // warning/error and return.
6304    Self.Diag(Loc, SecondNote);
6305    return;
6306  }
6307
6308  Self.Diag(Loc, SecondNote)
6309    << FixItHint::CreateInsertion(SecondParenRange.getBegin(), "(")
6310    << FixItHint::CreateInsertion(EndLoc, ")");
6311}
6312
6313/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison
6314/// operators are mixed in a way that suggests that the programmer forgot that
6315/// comparison operators have higher precedence. The most typical example of
6316/// such code is "flags & 0x0020 != 0", which is equivalent to "flags & 1".
6317static void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperator::Opcode Opc,
6318                                      SourceLocation OpLoc,Expr *lhs,Expr *rhs){
6319  typedef BinaryOperator BinOp;
6320  BinOp::Opcode lhsopc = static_cast<BinOp::Opcode>(-1),
6321                rhsopc = static_cast<BinOp::Opcode>(-1);
6322  if (BinOp *BO = dyn_cast<BinOp>(lhs))
6323    lhsopc = BO->getOpcode();
6324  if (BinOp *BO = dyn_cast<BinOp>(rhs))
6325    rhsopc = BO->getOpcode();
6326
6327  // Subs are not binary operators.
6328  if (lhsopc == -1 && rhsopc == -1)
6329    return;
6330
6331  // Bitwise operations are sometimes used as eager logical ops.
6332  // Don't diagnose this.
6333  if ((BinOp::isComparisonOp(lhsopc) || BinOp::isBitwiseOp(lhsopc)) &&
6334      (BinOp::isComparisonOp(rhsopc) || BinOp::isBitwiseOp(rhsopc)))
6335    return;
6336
6337  if (BinOp::isComparisonOp(lhsopc))
6338    SuggestParentheses(Self, OpLoc,
6339      Self.PDiag(diag::warn_precedence_bitwise_rel)
6340          << SourceRange(lhs->getLocStart(), OpLoc)
6341          << BinOp::getOpcodeStr(Opc) << BinOp::getOpcodeStr(lhsopc),
6342      Self.PDiag(diag::note_precedence_bitwise_first)
6343          << BinOp::getOpcodeStr(Opc),
6344      SourceRange(cast<BinOp>(lhs)->getRHS()->getLocStart(), rhs->getLocEnd()),
6345      Self.PDiag(diag::note_precedence_bitwise_silence)
6346          << BinOp::getOpcodeStr(lhsopc),
6347                       lhs->getSourceRange());
6348  else if (BinOp::isComparisonOp(rhsopc))
6349    SuggestParentheses(Self, OpLoc,
6350      Self.PDiag(diag::warn_precedence_bitwise_rel)
6351          << SourceRange(OpLoc, rhs->getLocEnd())
6352          << BinOp::getOpcodeStr(Opc) << BinOp::getOpcodeStr(rhsopc),
6353      Self.PDiag(diag::note_precedence_bitwise_first)
6354        << BinOp::getOpcodeStr(Opc),
6355      SourceRange(lhs->getLocEnd(), cast<BinOp>(rhs)->getLHS()->getLocStart()),
6356      Self.PDiag(diag::note_precedence_bitwise_silence)
6357        << BinOp::getOpcodeStr(rhsopc),
6358                       rhs->getSourceRange());
6359}
6360
6361/// DiagnoseBinOpPrecedence - Emit warnings for expressions with tricky
6362/// precedence. This currently diagnoses only "arg1 'bitwise' arg2 'eq' arg3".
6363/// But it could also warn about arg1 && arg2 || arg3, as GCC 4.3+ does.
6364static void DiagnoseBinOpPrecedence(Sema &Self, BinaryOperator::Opcode Opc,
6365                                    SourceLocation OpLoc, Expr *lhs, Expr *rhs){
6366  if (BinaryOperator::isBitwiseOp(Opc))
6367    DiagnoseBitwisePrecedence(Self, Opc, OpLoc, lhs, rhs);
6368}
6369
6370// Binary Operators.  'Tok' is the token for the operator.
6371Action::OwningExprResult Sema::ActOnBinOp(Scope *S, SourceLocation TokLoc,
6372                                          tok::TokenKind Kind,
6373                                          ExprArg LHS, ExprArg RHS) {
6374  BinaryOperator::Opcode Opc = ConvertTokenKindToBinaryOpcode(Kind);
6375  Expr *lhs = LHS.takeAs<Expr>(), *rhs = RHS.takeAs<Expr>();
6376
6377  assert((lhs != 0) && "ActOnBinOp(): missing left expression");
6378  assert((rhs != 0) && "ActOnBinOp(): missing right expression");
6379
6380  // Emit warnings for tricky precedence issues, e.g. "bitfield & 0x4 == 0"
6381  DiagnoseBinOpPrecedence(*this, Opc, TokLoc, lhs, rhs);
6382
6383  return BuildBinOp(S, TokLoc, Opc, lhs, rhs);
6384}
6385
6386Action::OwningExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc,
6387                                          BinaryOperator::Opcode Opc,
6388                                          Expr *lhs, Expr *rhs) {
6389  if (getLangOptions().CPlusPlus &&
6390      (lhs->getType()->isOverloadableType() ||
6391       rhs->getType()->isOverloadableType())) {
6392    // Find all of the overloaded operators visible from this
6393    // point. We perform both an operator-name lookup from the local
6394    // scope and an argument-dependent lookup based on the types of
6395    // the arguments.
6396    UnresolvedSet<16> Functions;
6397    OverloadedOperatorKind OverOp = BinaryOperator::getOverloadedOperator(Opc);
6398    if (S && OverOp != OO_None)
6399      LookupOverloadedOperatorName(OverOp, S, lhs->getType(), rhs->getType(),
6400                                   Functions);
6401
6402    // Build the (potentially-overloaded, potentially-dependent)
6403    // binary operation.
6404    return CreateOverloadedBinOp(OpLoc, Opc, Functions, lhs, rhs);
6405  }
6406
6407  // Build a built-in binary operation.
6408  return CreateBuiltinBinOp(OpLoc, Opc, lhs, rhs);
6409}
6410
6411Action::OwningExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc,
6412                                                    unsigned OpcIn,
6413                                                    ExprArg InputArg) {
6414  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
6415
6416  // FIXME: Input is modified below, but InputArg is not updated appropriately.
6417  Expr *Input = (Expr *)InputArg.get();
6418  QualType resultType;
6419  switch (Opc) {
6420  case UnaryOperator::OffsetOf:
6421    assert(false && "Invalid unary operator");
6422    break;
6423
6424  case UnaryOperator::PreInc:
6425  case UnaryOperator::PreDec:
6426  case UnaryOperator::PostInc:
6427  case UnaryOperator::PostDec:
6428    resultType = CheckIncrementDecrementOperand(Input, OpLoc,
6429                                                Opc == UnaryOperator::PreInc ||
6430                                                Opc == UnaryOperator::PostInc);
6431    break;
6432  case UnaryOperator::AddrOf:
6433    resultType = CheckAddressOfOperand(Input, OpLoc);
6434    break;
6435  case UnaryOperator::Deref:
6436    DefaultFunctionArrayLvalueConversion(Input);
6437    resultType = CheckIndirectionOperand(Input, OpLoc);
6438    break;
6439  case UnaryOperator::Plus:
6440  case UnaryOperator::Minus:
6441    UsualUnaryConversions(Input);
6442    resultType = Input->getType();
6443    if (resultType->isDependentType())
6444      break;
6445    if (resultType->isArithmeticType()) // C99 6.5.3.3p1
6446      break;
6447    else if (getLangOptions().CPlusPlus && // C++ [expr.unary.op]p6-7
6448             resultType->isEnumeralType())
6449      break;
6450    else if (getLangOptions().CPlusPlus && // C++ [expr.unary.op]p6
6451             Opc == UnaryOperator::Plus &&
6452             resultType->isPointerType())
6453      break;
6454
6455    return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr)
6456      << resultType << Input->getSourceRange());
6457  case UnaryOperator::Not: // bitwise complement
6458    UsualUnaryConversions(Input);
6459    resultType = Input->getType();
6460    if (resultType->isDependentType())
6461      break;
6462    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.
6463    if (resultType->isComplexType() || resultType->isComplexIntegerType())
6464      // C99 does not support '~' for complex conjugation.
6465      Diag(OpLoc, diag::ext_integer_complement_complex)
6466        << resultType << Input->getSourceRange();
6467    else if (!resultType->isIntegerType())
6468      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr)
6469        << resultType << Input->getSourceRange());
6470    break;
6471  case UnaryOperator::LNot: // logical negation
6472    // Unlike +/-/~, integer promotions aren't done here (C99 6.5.3.3p5).
6473    DefaultFunctionArrayLvalueConversion(Input);
6474    resultType = Input->getType();
6475    if (resultType->isDependentType())
6476      break;
6477    if (!resultType->isScalarType()) // C99 6.5.3.3p1
6478      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr)
6479        << resultType << Input->getSourceRange());
6480    // LNot always has type int. C99 6.5.3.3p5.
6481    // In C++, it's bool. C++ 5.3.1p8
6482    resultType = getLangOptions().CPlusPlus ? Context.BoolTy : Context.IntTy;
6483    break;
6484  case UnaryOperator::Real:
6485  case UnaryOperator::Imag:
6486    resultType = CheckRealImagOperand(Input, OpLoc, Opc == UnaryOperator::Real);
6487    break;
6488  case UnaryOperator::Extension:
6489    resultType = Input->getType();
6490    break;
6491  }
6492  if (resultType.isNull())
6493    return ExprError();
6494
6495  InputArg.release();
6496  return Owned(new (Context) UnaryOperator(Input, Opc, resultType, OpLoc));
6497}
6498
6499Action::OwningExprResult Sema::BuildUnaryOp(Scope *S, SourceLocation OpLoc,
6500                                            UnaryOperator::Opcode Opc,
6501                                            ExprArg input) {
6502  Expr *Input = (Expr*)input.get();
6503  if (getLangOptions().CPlusPlus && Input->getType()->isOverloadableType() &&
6504      Opc != UnaryOperator::Extension) {
6505    // Find all of the overloaded operators visible from this
6506    // point. We perform both an operator-name lookup from the local
6507    // scope and an argument-dependent lookup based on the types of
6508    // the arguments.
6509    UnresolvedSet<16> Functions;
6510    OverloadedOperatorKind OverOp = UnaryOperator::getOverloadedOperator(Opc);
6511    if (S && OverOp != OO_None)
6512      LookupOverloadedOperatorName(OverOp, S, Input->getType(), QualType(),
6513                                   Functions);
6514
6515    return CreateOverloadedUnaryOp(OpLoc, Opc, Functions, move(input));
6516  }
6517
6518  return CreateBuiltinUnaryOp(OpLoc, Opc, move(input));
6519}
6520
6521// Unary Operators.  'Tok' is the token for the operator.
6522Action::OwningExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc,
6523                                            tok::TokenKind Op, ExprArg input) {
6524  return BuildUnaryOp(S, OpLoc, ConvertTokenKindToUnaryOpcode(Op), move(input));
6525}
6526
6527/// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo".
6528Sema::OwningExprResult Sema::ActOnAddrLabel(SourceLocation OpLoc,
6529                                            SourceLocation LabLoc,
6530                                            IdentifierInfo *LabelII) {
6531  // Look up the record for this label identifier.
6532  LabelStmt *&LabelDecl = getLabelMap()[LabelII];
6533
6534  // If we haven't seen this label yet, create a forward reference. It
6535  // will be validated and/or cleaned up in ActOnFinishFunctionBody.
6536  if (LabelDecl == 0)
6537    LabelDecl = new (Context) LabelStmt(LabLoc, LabelII, 0);
6538
6539  // Create the AST node.  The address of a label always has type 'void*'.
6540  return Owned(new (Context) AddrLabelExpr(OpLoc, LabLoc, LabelDecl,
6541                                       Context.getPointerType(Context.VoidTy)));
6542}
6543
6544Sema::OwningExprResult
6545Sema::ActOnStmtExpr(SourceLocation LPLoc, StmtArg substmt,
6546                    SourceLocation RPLoc) { // "({..})"
6547  Stmt *SubStmt = static_cast<Stmt*>(substmt.get());
6548  assert(SubStmt && isa<CompoundStmt>(SubStmt) && "Invalid action invocation!");
6549  CompoundStmt *Compound = cast<CompoundStmt>(SubStmt);
6550
6551  bool isFileScope
6552    = (getCurFunctionOrMethodDecl() == 0) && (getCurBlock() == 0);
6553  if (isFileScope)
6554    return ExprError(Diag(LPLoc, diag::err_stmtexpr_file_scope));
6555
6556  // FIXME: there are a variety of strange constraints to enforce here, for
6557  // example, it is not possible to goto into a stmt expression apparently.
6558  // More semantic analysis is needed.
6559
6560  // If there are sub stmts in the compound stmt, take the type of the last one
6561  // as the type of the stmtexpr.
6562  QualType Ty = Context.VoidTy;
6563
6564  if (!Compound->body_empty()) {
6565    Stmt *LastStmt = Compound->body_back();
6566    // If LastStmt is a label, skip down through into the body.
6567    while (LabelStmt *Label = dyn_cast<LabelStmt>(LastStmt))
6568      LastStmt = Label->getSubStmt();
6569
6570    if (Expr *LastExpr = dyn_cast<Expr>(LastStmt))
6571      Ty = LastExpr->getType();
6572  }
6573
6574  // FIXME: Check that expression type is complete/non-abstract; statement
6575  // expressions are not lvalues.
6576
6577  substmt.release();
6578  return Owned(new (Context) StmtExpr(Compound, Ty, LPLoc, RPLoc));
6579}
6580
6581Sema::OwningExprResult Sema::ActOnBuiltinOffsetOf(Scope *S,
6582                                                  SourceLocation BuiltinLoc,
6583                                                  SourceLocation TypeLoc,
6584                                                  TypeTy *argty,
6585                                                  OffsetOfComponent *CompPtr,
6586                                                  unsigned NumComponents,
6587                                                  SourceLocation RPLoc) {
6588  // FIXME: This function leaks all expressions in the offset components on
6589  // error.
6590  // FIXME: Preserve type source info.
6591  QualType ArgTy = GetTypeFromParser(argty);
6592  assert(!ArgTy.isNull() && "Missing type argument!");
6593
6594  bool Dependent = ArgTy->isDependentType();
6595
6596  // We must have at least one component that refers to the type, and the first
6597  // one is known to be a field designator.  Verify that the ArgTy represents
6598  // a struct/union/class.
6599  if (!Dependent && !ArgTy->isRecordType())
6600    return ExprError(Diag(TypeLoc, diag::err_offsetof_record_type) << ArgTy);
6601
6602  // FIXME: Type must be complete per C99 7.17p3 because a declaring a variable
6603  // with an incomplete type would be illegal.
6604
6605  // Otherwise, create a null pointer as the base, and iteratively process
6606  // the offsetof designators.
6607  QualType ArgTyPtr = Context.getPointerType(ArgTy);
6608  Expr* Res = new (Context) ImplicitValueInitExpr(ArgTyPtr);
6609  Res = new (Context) UnaryOperator(Res, UnaryOperator::Deref,
6610                                    ArgTy, SourceLocation());
6611
6612  // offsetof with non-identifier designators (e.g. "offsetof(x, a.b[c])") are a
6613  // GCC extension, diagnose them.
6614  // FIXME: This diagnostic isn't actually visible because the location is in
6615  // a system header!
6616  if (NumComponents != 1)
6617    Diag(BuiltinLoc, diag::ext_offsetof_extended_field_designator)
6618      << SourceRange(CompPtr[1].LocStart, CompPtr[NumComponents-1].LocEnd);
6619
6620  if (!Dependent) {
6621    bool DidWarnAboutNonPOD = false;
6622
6623    if (RequireCompleteType(TypeLoc, Res->getType(),
6624                            diag::err_offsetof_incomplete_type))
6625      return ExprError();
6626
6627    // FIXME: Dependent case loses a lot of information here. And probably
6628    // leaks like a sieve.
6629    for (unsigned i = 0; i != NumComponents; ++i) {
6630      const OffsetOfComponent &OC = CompPtr[i];
6631      if (OC.isBrackets) {
6632        // Offset of an array sub-field.  TODO: Should we allow vector elements?
6633        const ArrayType *AT = Context.getAsArrayType(Res->getType());
6634        if (!AT) {
6635          Res->Destroy(Context);
6636          return ExprError(Diag(OC.LocEnd, diag::err_offsetof_array_type)
6637            << Res->getType());
6638        }
6639
6640        // FIXME: C++: Verify that operator[] isn't overloaded.
6641
6642        // Promote the array so it looks more like a normal array subscript
6643        // expression.
6644        DefaultFunctionArrayLvalueConversion(Res);
6645
6646        // C99 6.5.2.1p1
6647        Expr *Idx = static_cast<Expr*>(OC.U.E);
6648        // FIXME: Leaks Res
6649        if (!Idx->isTypeDependent() && !Idx->getType()->isIntegerType())
6650          return ExprError(Diag(Idx->getLocStart(),
6651                                diag::err_typecheck_subscript_not_integer)
6652            << Idx->getSourceRange());
6653
6654        Res = new (Context) ArraySubscriptExpr(Res, Idx, AT->getElementType(),
6655                                               OC.LocEnd);
6656        continue;
6657      }
6658
6659      const RecordType *RC = Res->getType()->getAs<RecordType>();
6660      if (!RC) {
6661        Res->Destroy(Context);
6662        return ExprError(Diag(OC.LocEnd, diag::err_offsetof_record_type)
6663          << Res->getType());
6664      }
6665
6666      // Get the decl corresponding to this.
6667      RecordDecl *RD = RC->getDecl();
6668      if (CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD)) {
6669        if (!CRD->isPOD() && !DidWarnAboutNonPOD &&
6670            DiagRuntimeBehavior(BuiltinLoc,
6671                                PDiag(diag::warn_offsetof_non_pod_type)
6672                                  << SourceRange(CompPtr[0].LocStart, OC.LocEnd)
6673                                  << Res->getType()))
6674          DidWarnAboutNonPOD = true;
6675      }
6676
6677      LookupResult R(*this, OC.U.IdentInfo, OC.LocStart, LookupMemberName);
6678      LookupQualifiedName(R, RD);
6679
6680      FieldDecl *MemberDecl = R.getAsSingle<FieldDecl>();
6681      // FIXME: Leaks Res
6682      if (!MemberDecl)
6683        return ExprError(Diag(BuiltinLoc, diag::err_no_member)
6684         << OC.U.IdentInfo << RD << SourceRange(OC.LocStart, OC.LocEnd));
6685
6686      // FIXME: C++: Verify that MemberDecl isn't a static field.
6687      // FIXME: Verify that MemberDecl isn't a bitfield.
6688      if (cast<RecordDecl>(MemberDecl->getDeclContext())->isAnonymousStructOrUnion()) {
6689        Res = BuildAnonymousStructUnionMemberReference(
6690            OC.LocEnd, MemberDecl, Res, OC.LocEnd).takeAs<Expr>();
6691      } else {
6692        PerformObjectMemberConversion(Res, /*Qualifier=*/0,
6693                                      *R.begin(), MemberDecl);
6694        // MemberDecl->getType() doesn't get the right qualifiers, but it
6695        // doesn't matter here.
6696        Res = new (Context) MemberExpr(Res, false, MemberDecl, OC.LocEnd,
6697                MemberDecl->getType().getNonReferenceType());
6698      }
6699    }
6700  }
6701
6702  return Owned(new (Context) UnaryOperator(Res, UnaryOperator::OffsetOf,
6703                                           Context.getSizeType(), BuiltinLoc));
6704}
6705
6706
6707Sema::OwningExprResult Sema::ActOnTypesCompatibleExpr(SourceLocation BuiltinLoc,
6708                                                      TypeTy *arg1,TypeTy *arg2,
6709                                                      SourceLocation RPLoc) {
6710  // FIXME: Preserve type source info.
6711  QualType argT1 = GetTypeFromParser(arg1);
6712  QualType argT2 = GetTypeFromParser(arg2);
6713
6714  assert((!argT1.isNull() && !argT2.isNull()) && "Missing type argument(s)");
6715
6716  if (getLangOptions().CPlusPlus) {
6717    Diag(BuiltinLoc, diag::err_types_compatible_p_in_cplusplus)
6718      << SourceRange(BuiltinLoc, RPLoc);
6719    return ExprError();
6720  }
6721
6722  return Owned(new (Context) TypesCompatibleExpr(Context.IntTy, BuiltinLoc,
6723                                                 argT1, argT2, RPLoc));
6724}
6725
6726Sema::OwningExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc,
6727                                             ExprArg cond,
6728                                             ExprArg expr1, ExprArg expr2,
6729                                             SourceLocation RPLoc) {
6730  Expr *CondExpr = static_cast<Expr*>(cond.get());
6731  Expr *LHSExpr = static_cast<Expr*>(expr1.get());
6732  Expr *RHSExpr = static_cast<Expr*>(expr2.get());
6733
6734  assert((CondExpr && LHSExpr && RHSExpr) && "Missing type argument(s)");
6735
6736  QualType resType;
6737  bool ValueDependent = false;
6738  if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) {
6739    resType = Context.DependentTy;
6740    ValueDependent = true;
6741  } else {
6742    // The conditional expression is required to be a constant expression.
6743    llvm::APSInt condEval(32);
6744    SourceLocation ExpLoc;
6745    if (!CondExpr->isIntegerConstantExpr(condEval, Context, &ExpLoc))
6746      return ExprError(Diag(ExpLoc,
6747                       diag::err_typecheck_choose_expr_requires_constant)
6748        << CondExpr->getSourceRange());
6749
6750    // If the condition is > zero, then the AST type is the same as the LSHExpr.
6751    resType = condEval.getZExtValue() ? LHSExpr->getType() : RHSExpr->getType();
6752    ValueDependent = condEval.getZExtValue() ? LHSExpr->isValueDependent()
6753                                             : RHSExpr->isValueDependent();
6754  }
6755
6756  cond.release(); expr1.release(); expr2.release();
6757  return Owned(new (Context) ChooseExpr(BuiltinLoc, CondExpr, LHSExpr, RHSExpr,
6758                                        resType, RPLoc,
6759                                        resType->isDependentType(),
6760                                        ValueDependent));
6761}
6762
6763//===----------------------------------------------------------------------===//
6764// Clang Extensions.
6765//===----------------------------------------------------------------------===//
6766
6767/// ActOnBlockStart - This callback is invoked when a block literal is started.
6768void Sema::ActOnBlockStart(SourceLocation CaretLoc, Scope *BlockScope) {
6769  BlockDecl *Block = BlockDecl::Create(Context, CurContext, CaretLoc);
6770  PushBlockScope(BlockScope, Block);
6771  CurContext->addDecl(Block);
6772  PushDeclContext(BlockScope, Block);
6773}
6774
6775void Sema::ActOnBlockArguments(Declarator &ParamInfo, Scope *CurScope) {
6776  assert(ParamInfo.getIdentifier()==0 && "block-id should have no identifier!");
6777  BlockScopeInfo *CurBlock = getCurBlock();
6778
6779  if (ParamInfo.getNumTypeObjects() == 0
6780      || ParamInfo.getTypeObject(0).Kind != DeclaratorChunk::Function) {
6781    ProcessDeclAttributes(CurScope, CurBlock->TheDecl, ParamInfo);
6782    QualType T = GetTypeForDeclarator(ParamInfo, CurScope);
6783
6784    if (T->isArrayType()) {
6785      Diag(ParamInfo.getSourceRange().getBegin(),
6786           diag::err_block_returns_array);
6787      return;
6788    }
6789
6790    // The parameter list is optional, if there was none, assume ().
6791    if (!T->isFunctionType())
6792      T = Context.getFunctionType(T, 0, 0, false, 0, false, false, 0, 0,
6793                                  FunctionType::ExtInfo());
6794
6795    CurBlock->hasPrototype = true;
6796    CurBlock->isVariadic = false;
6797    // Check for a valid sentinel attribute on this block.
6798    if (CurBlock->TheDecl->getAttr<SentinelAttr>()) {
6799      Diag(ParamInfo.getAttributes()->getLoc(),
6800           diag::warn_attribute_sentinel_not_variadic) << 1;
6801      // FIXME: remove the attribute.
6802    }
6803    QualType RetTy = T.getTypePtr()->getAs<FunctionType>()->getResultType();
6804
6805    // Do not allow returning a objc interface by-value.
6806    if (RetTy->isObjCInterfaceType()) {
6807      Diag(ParamInfo.getSourceRange().getBegin(),
6808           diag::err_object_cannot_be_passed_returned_by_value) << 0 << RetTy;
6809      return;
6810    }
6811
6812    CurBlock->ReturnType = RetTy;
6813    return;
6814  }
6815
6816  // Analyze arguments to block.
6817  assert(ParamInfo.getTypeObject(0).Kind == DeclaratorChunk::Function &&
6818         "Not a function declarator!");
6819  DeclaratorChunk::FunctionTypeInfo &FTI = ParamInfo.getTypeObject(0).Fun;
6820
6821  CurBlock->hasPrototype = FTI.hasPrototype;
6822  CurBlock->isVariadic = true;
6823
6824  // Check for C99 6.7.5.3p10 - foo(void) is a non-varargs function that takes
6825  // no arguments, not a function that takes a single void argument.
6826  if (FTI.hasPrototype &&
6827      FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
6828     (!FTI.ArgInfo[0].Param.getAs<ParmVarDecl>()->getType().getCVRQualifiers()&&
6829        FTI.ArgInfo[0].Param.getAs<ParmVarDecl>()->getType()->isVoidType())) {
6830    // empty arg list, don't push any params.
6831    CurBlock->isVariadic = false;
6832  } else if (FTI.hasPrototype) {
6833    for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i) {
6834      ParmVarDecl *Param = FTI.ArgInfo[i].Param.getAs<ParmVarDecl>();
6835      if (Param->getIdentifier() == 0 &&
6836          !Param->isImplicit() &&
6837          !Param->isInvalidDecl() &&
6838          !getLangOptions().CPlusPlus)
6839        Diag(Param->getLocation(), diag::err_parameter_name_omitted);
6840      CurBlock->Params.push_back(Param);
6841    }
6842    CurBlock->isVariadic = FTI.isVariadic;
6843  }
6844  CurBlock->TheDecl->setParams(CurBlock->Params.data(),
6845                               CurBlock->Params.size());
6846  CurBlock->TheDecl->setIsVariadic(CurBlock->isVariadic);
6847  ProcessDeclAttributes(CurScope, CurBlock->TheDecl, ParamInfo);
6848
6849  bool ShouldCheckShadow =
6850    Diags.getDiagnosticLevel(diag::warn_decl_shadow) != Diagnostic::Ignored;
6851
6852  for (BlockDecl::param_iterator AI = CurBlock->TheDecl->param_begin(),
6853         E = CurBlock->TheDecl->param_end(); AI != E; ++AI) {
6854    (*AI)->setOwningFunction(CurBlock->TheDecl);
6855
6856    // If this has an identifier, add it to the scope stack.
6857    if ((*AI)->getIdentifier()) {
6858      if (ShouldCheckShadow)
6859        CheckShadow(CurBlock->TheScope, *AI);
6860
6861      PushOnScopeChains(*AI, CurBlock->TheScope);
6862    }
6863  }
6864
6865  // Check for a valid sentinel attribute on this block.
6866  if (!CurBlock->isVariadic &&
6867      CurBlock->TheDecl->getAttr<SentinelAttr>()) {
6868    Diag(ParamInfo.getAttributes()->getLoc(),
6869         diag::warn_attribute_sentinel_not_variadic) << 1;
6870    // FIXME: remove the attribute.
6871  }
6872
6873  // Analyze the return type.
6874  QualType T = GetTypeForDeclarator(ParamInfo, CurScope);
6875  QualType RetTy = T->getAs<FunctionType>()->getResultType();
6876
6877  // Do not allow returning a objc interface by-value.
6878  if (RetTy->isObjCInterfaceType()) {
6879    Diag(ParamInfo.getSourceRange().getBegin(),
6880         diag::err_object_cannot_be_passed_returned_by_value) << 0 << RetTy;
6881  } else if (!RetTy->isDependentType())
6882    CurBlock->ReturnType = RetTy;
6883}
6884
6885/// ActOnBlockError - If there is an error parsing a block, this callback
6886/// is invoked to pop the information about the block from the action impl.
6887void Sema::ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope) {
6888  // Pop off CurBlock, handle nested blocks.
6889  PopDeclContext();
6890  PopFunctionOrBlockScope();
6891  // FIXME: Delete the ParmVarDecl objects as well???
6892}
6893
6894/// ActOnBlockStmtExpr - This is called when the body of a block statement
6895/// literal was successfully completed.  ^(int x){...}
6896Sema::OwningExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc,
6897                                                StmtArg body, Scope *CurScope) {
6898  // If blocks are disabled, emit an error.
6899  if (!LangOpts.Blocks)
6900    Diag(CaretLoc, diag::err_blocks_disable);
6901
6902  BlockScopeInfo *BSI = cast<BlockScopeInfo>(FunctionScopes.back());
6903
6904  PopDeclContext();
6905
6906  QualType RetTy = Context.VoidTy;
6907  if (!BSI->ReturnType.isNull())
6908    RetTy = BSI->ReturnType;
6909
6910  llvm::SmallVector<QualType, 8> ArgTypes;
6911  for (unsigned i = 0, e = BSI->Params.size(); i != e; ++i)
6912    ArgTypes.push_back(BSI->Params[i]->getType());
6913
6914  bool NoReturn = BSI->TheDecl->getAttr<NoReturnAttr>();
6915  QualType BlockTy;
6916  if (!BSI->hasPrototype)
6917    BlockTy = Context.getFunctionType(RetTy, 0, 0, false, 0, false, false, 0, 0,
6918                                FunctionType::ExtInfo(NoReturn, 0, CC_Default));
6919  else
6920    BlockTy = Context.getFunctionType(RetTy, ArgTypes.data(), ArgTypes.size(),
6921                                      BSI->isVariadic, 0, false, false, 0, 0,
6922                                FunctionType::ExtInfo(NoReturn, 0, CC_Default));
6923
6924  // FIXME: Check that return/parameter types are complete/non-abstract
6925  DiagnoseUnusedParameters(BSI->Params.begin(), BSI->Params.end());
6926  BlockTy = Context.getBlockPointerType(BlockTy);
6927
6928  // If needed, diagnose invalid gotos and switches in the block.
6929  if (FunctionNeedsScopeChecking() && !hasAnyErrorsInThisFunction())
6930    DiagnoseInvalidJumps(static_cast<CompoundStmt*>(body.get()));
6931
6932  BSI->TheDecl->setBody(body.takeAs<CompoundStmt>());
6933
6934  bool Good = true;
6935  // Check goto/label use.
6936  for (llvm::DenseMap<IdentifierInfo*, LabelStmt*>::iterator
6937         I = BSI->LabelMap.begin(), E = BSI->LabelMap.end(); I != E; ++I) {
6938    LabelStmt *L = I->second;
6939
6940    // Verify that we have no forward references left.  If so, there was a goto
6941    // or address of a label taken, but no definition of it.
6942    if (L->getSubStmt() != 0)
6943      continue;
6944
6945    // Emit error.
6946    Diag(L->getIdentLoc(), diag::err_undeclared_label_use) << L->getName();
6947    Good = false;
6948  }
6949  if (!Good) {
6950    PopFunctionOrBlockScope();
6951    return ExprError();
6952  }
6953
6954  // Issue any analysis-based warnings.
6955  const sema::AnalysisBasedWarnings::Policy &WP =
6956    AnalysisWarnings.getDefaultPolicy();
6957  AnalysisWarnings.IssueWarnings(WP, BSI->TheDecl, BlockTy);
6958
6959  Expr *Result = new (Context) BlockExpr(BSI->TheDecl, BlockTy,
6960                                         BSI->hasBlockDeclRefExprs);
6961  PopFunctionOrBlockScope();
6962  return Owned(Result);
6963}
6964
6965Sema::OwningExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc,
6966                                        ExprArg expr, TypeTy *type,
6967                                        SourceLocation RPLoc) {
6968  QualType T = GetTypeFromParser(type);
6969  Expr *E = static_cast<Expr*>(expr.get());
6970  Expr *OrigExpr = E;
6971
6972  InitBuiltinVaListType();
6973
6974  // Get the va_list type
6975  QualType VaListType = Context.getBuiltinVaListType();
6976  if (VaListType->isArrayType()) {
6977    // Deal with implicit array decay; for example, on x86-64,
6978    // va_list is an array, but it's supposed to decay to
6979    // a pointer for va_arg.
6980    VaListType = Context.getArrayDecayedType(VaListType);
6981    // Make sure the input expression also decays appropriately.
6982    UsualUnaryConversions(E);
6983  } else {
6984    // Otherwise, the va_list argument must be an l-value because
6985    // it is modified by va_arg.
6986    if (!E->isTypeDependent() &&
6987        CheckForModifiableLvalue(E, BuiltinLoc, *this))
6988      return ExprError();
6989  }
6990
6991  if (!E->isTypeDependent() &&
6992      !Context.hasSameType(VaListType, E->getType())) {
6993    return ExprError(Diag(E->getLocStart(),
6994                         diag::err_first_argument_to_va_arg_not_of_type_va_list)
6995      << OrigExpr->getType() << E->getSourceRange());
6996  }
6997
6998  // FIXME: Check that type is complete/non-abstract
6999  // FIXME: Warn if a non-POD type is passed in.
7000
7001  expr.release();
7002  return Owned(new (Context) VAArgExpr(BuiltinLoc, E, T.getNonReferenceType(),
7003                                       RPLoc));
7004}
7005
7006Sema::OwningExprResult Sema::ActOnGNUNullExpr(SourceLocation TokenLoc) {
7007  // The type of __null will be int or long, depending on the size of
7008  // pointers on the target.
7009  QualType Ty;
7010  if (Context.Target.getPointerWidth(0) == Context.Target.getIntWidth())
7011    Ty = Context.IntTy;
7012  else
7013    Ty = Context.LongTy;
7014
7015  return Owned(new (Context) GNUNullExpr(Ty, TokenLoc));
7016}
7017
7018static void MakeObjCStringLiteralFixItHint(Sema& SemaRef, QualType DstType,
7019                                           Expr *SrcExpr, FixItHint &Hint) {
7020  if (!SemaRef.getLangOptions().ObjC1)
7021    return;
7022
7023  const ObjCObjectPointerType *PT = DstType->getAs<ObjCObjectPointerType>();
7024  if (!PT)
7025    return;
7026
7027  // Check if the destination is of type 'id'.
7028  if (!PT->isObjCIdType()) {
7029    // Check if the destination is the 'NSString' interface.
7030    const ObjCInterfaceDecl *ID = PT->getInterfaceDecl();
7031    if (!ID || !ID->getIdentifier()->isStr("NSString"))
7032      return;
7033  }
7034
7035  // Strip off any parens and casts.
7036  StringLiteral *SL = dyn_cast<StringLiteral>(SrcExpr->IgnoreParenCasts());
7037  if (!SL || SL->isWide())
7038    return;
7039
7040  Hint = FixItHint::CreateInsertion(SL->getLocStart(), "@");
7041}
7042
7043bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
7044                                    SourceLocation Loc,
7045                                    QualType DstType, QualType SrcType,
7046                                    Expr *SrcExpr, AssignmentAction Action,
7047                                    bool *Complained) {
7048  if (Complained)
7049    *Complained = false;
7050
7051  // Decode the result (notice that AST's are still created for extensions).
7052  bool isInvalid = false;
7053  unsigned DiagKind;
7054  FixItHint Hint;
7055
7056  switch (ConvTy) {
7057  default: assert(0 && "Unknown conversion type");
7058  case Compatible: return false;
7059  case PointerToInt:
7060    DiagKind = diag::ext_typecheck_convert_pointer_int;
7061    break;
7062  case IntToPointer:
7063    DiagKind = diag::ext_typecheck_convert_int_pointer;
7064    break;
7065  case IncompatiblePointer:
7066    MakeObjCStringLiteralFixItHint(*this, DstType, SrcExpr, Hint);
7067    DiagKind = diag::ext_typecheck_convert_incompatible_pointer;
7068    break;
7069  case IncompatiblePointerSign:
7070    DiagKind = diag::ext_typecheck_convert_incompatible_pointer_sign;
7071    break;
7072  case FunctionVoidPointer:
7073    DiagKind = diag::ext_typecheck_convert_pointer_void_func;
7074    break;
7075  case CompatiblePointerDiscardsQualifiers:
7076    // If the qualifiers lost were because we were applying the
7077    // (deprecated) C++ conversion from a string literal to a char*
7078    // (or wchar_t*), then there was no error (C++ 4.2p2).  FIXME:
7079    // Ideally, this check would be performed in
7080    // CheckPointerTypesForAssignment. However, that would require a
7081    // bit of refactoring (so that the second argument is an
7082    // expression, rather than a type), which should be done as part
7083    // of a larger effort to fix CheckPointerTypesForAssignment for
7084    // C++ semantics.
7085    if (getLangOptions().CPlusPlus &&
7086        IsStringLiteralToNonConstPointerConversion(SrcExpr, DstType))
7087      return false;
7088    DiagKind = diag::ext_typecheck_convert_discards_qualifiers;
7089    break;
7090  case IncompatibleNestedPointerQualifiers:
7091    DiagKind = diag::ext_nested_pointer_qualifier_mismatch;
7092    break;
7093  case IntToBlockPointer:
7094    DiagKind = diag::err_int_to_block_pointer;
7095    break;
7096  case IncompatibleBlockPointer:
7097    DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;
7098    break;
7099  case IncompatibleObjCQualifiedId:
7100    // FIXME: Diagnose the problem in ObjCQualifiedIdTypesAreCompatible, since
7101    // it can give a more specific diagnostic.
7102    DiagKind = diag::warn_incompatible_qualified_id;
7103    break;
7104  case IncompatibleVectors:
7105    DiagKind = diag::warn_incompatible_vectors;
7106    break;
7107  case Incompatible:
7108    DiagKind = diag::err_typecheck_convert_incompatible;
7109    isInvalid = true;
7110    break;
7111  }
7112
7113  QualType FirstType, SecondType;
7114  switch (Action) {
7115  case AA_Assigning:
7116  case AA_Initializing:
7117    // The destination type comes first.
7118    FirstType = DstType;
7119    SecondType = SrcType;
7120    break;
7121
7122  case AA_Returning:
7123  case AA_Passing:
7124  case AA_Converting:
7125  case AA_Sending:
7126  case AA_Casting:
7127    // The source type comes first.
7128    FirstType = SrcType;
7129    SecondType = DstType;
7130    break;
7131  }
7132
7133  Diag(Loc, DiagKind) << FirstType << SecondType << Action
7134    << SrcExpr->getSourceRange() << Hint;
7135  if (Complained)
7136    *Complained = true;
7137  return isInvalid;
7138}
7139
7140bool Sema::VerifyIntegerConstantExpression(const Expr *E, llvm::APSInt *Result){
7141  llvm::APSInt ICEResult;
7142  if (E->isIntegerConstantExpr(ICEResult, Context)) {
7143    if (Result)
7144      *Result = ICEResult;
7145    return false;
7146  }
7147
7148  Expr::EvalResult EvalResult;
7149
7150  if (!E->Evaluate(EvalResult, Context) || !EvalResult.Val.isInt() ||
7151      EvalResult.HasSideEffects) {
7152    Diag(E->getExprLoc(), diag::err_expr_not_ice) << E->getSourceRange();
7153
7154    if (EvalResult.Diag) {
7155      // We only show the note if it's not the usual "invalid subexpression"
7156      // or if it's actually in a subexpression.
7157      if (EvalResult.Diag != diag::note_invalid_subexpr_in_ice ||
7158          E->IgnoreParens() != EvalResult.DiagExpr->IgnoreParens())
7159        Diag(EvalResult.DiagLoc, EvalResult.Diag);
7160    }
7161
7162    return true;
7163  }
7164
7165  Diag(E->getExprLoc(), diag::ext_expr_not_ice) <<
7166    E->getSourceRange();
7167
7168  if (EvalResult.Diag &&
7169      Diags.getDiagnosticLevel(diag::ext_expr_not_ice) != Diagnostic::Ignored)
7170    Diag(EvalResult.DiagLoc, EvalResult.Diag);
7171
7172  if (Result)
7173    *Result = EvalResult.Val.getInt();
7174  return false;
7175}
7176
7177void
7178Sema::PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext) {
7179  ExprEvalContexts.push_back(
7180        ExpressionEvaluationContextRecord(NewContext, ExprTemporaries.size()));
7181}
7182
7183void
7184Sema::PopExpressionEvaluationContext() {
7185  // Pop the current expression evaluation context off the stack.
7186  ExpressionEvaluationContextRecord Rec = ExprEvalContexts.back();
7187  ExprEvalContexts.pop_back();
7188
7189  if (Rec.Context == PotentiallyPotentiallyEvaluated) {
7190    if (Rec.PotentiallyReferenced) {
7191      // Mark any remaining declarations in the current position of the stack
7192      // as "referenced". If they were not meant to be referenced, semantic
7193      // analysis would have eliminated them (e.g., in ActOnCXXTypeId).
7194      for (PotentiallyReferencedDecls::iterator
7195             I = Rec.PotentiallyReferenced->begin(),
7196             IEnd = Rec.PotentiallyReferenced->end();
7197           I != IEnd; ++I)
7198        MarkDeclarationReferenced(I->first, I->second);
7199    }
7200
7201    if (Rec.PotentiallyDiagnosed) {
7202      // Emit any pending diagnostics.
7203      for (PotentiallyEmittedDiagnostics::iterator
7204                I = Rec.PotentiallyDiagnosed->begin(),
7205             IEnd = Rec.PotentiallyDiagnosed->end();
7206           I != IEnd; ++I)
7207        Diag(I->first, I->second);
7208    }
7209  }
7210
7211  // When are coming out of an unevaluated context, clear out any
7212  // temporaries that we may have created as part of the evaluation of
7213  // the expression in that context: they aren't relevant because they
7214  // will never be constructed.
7215  if (Rec.Context == Unevaluated &&
7216      ExprTemporaries.size() > Rec.NumTemporaries)
7217    ExprTemporaries.erase(ExprTemporaries.begin() + Rec.NumTemporaries,
7218                          ExprTemporaries.end());
7219
7220  // Destroy the popped expression evaluation record.
7221  Rec.Destroy();
7222}
7223
7224/// \brief Note that the given declaration was referenced in the source code.
7225///
7226/// This routine should be invoke whenever a given declaration is referenced
7227/// in the source code, and where that reference occurred. If this declaration
7228/// reference means that the the declaration is used (C++ [basic.def.odr]p2,
7229/// C99 6.9p3), then the declaration will be marked as used.
7230///
7231/// \param Loc the location where the declaration was referenced.
7232///
7233/// \param D the declaration that has been referenced by the source code.
7234void Sema::MarkDeclarationReferenced(SourceLocation Loc, Decl *D) {
7235  assert(D && "No declaration?");
7236
7237  if (D->isUsed())
7238    return;
7239
7240  // Mark a parameter or variable declaration "used", regardless of whether we're in a
7241  // template or not. The reason for this is that unevaluated expressions
7242  // (e.g. (void)sizeof()) constitute a use for warning purposes (-Wunused-variables and
7243  // -Wunused-parameters)
7244  if (isa<ParmVarDecl>(D) ||
7245      (isa<VarDecl>(D) && D->getDeclContext()->isFunctionOrMethod())) {
7246    D->setUsed(true);
7247    return;
7248  }
7249
7250  if (!isa<VarDecl>(D) && !isa<FunctionDecl>(D))
7251    return;
7252
7253  // Do not mark anything as "used" within a dependent context; wait for
7254  // an instantiation.
7255  if (CurContext->isDependentContext())
7256    return;
7257
7258  switch (ExprEvalContexts.back().Context) {
7259    case Unevaluated:
7260      // We are in an expression that is not potentially evaluated; do nothing.
7261      return;
7262
7263    case PotentiallyEvaluated:
7264      // We are in a potentially-evaluated expression, so this declaration is
7265      // "used"; handle this below.
7266      break;
7267
7268    case PotentiallyPotentiallyEvaluated:
7269      // We are in an expression that may be potentially evaluated; queue this
7270      // declaration reference until we know whether the expression is
7271      // potentially evaluated.
7272      ExprEvalContexts.back().addReferencedDecl(Loc, D);
7273      return;
7274  }
7275
7276  // Note that this declaration has been used.
7277  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
7278    unsigned TypeQuals;
7279    if (Constructor->isImplicit() && Constructor->isDefaultConstructor()) {
7280        if (!Constructor->isUsed())
7281          DefineImplicitDefaultConstructor(Loc, Constructor);
7282    } else if (Constructor->isImplicit() &&
7283               Constructor->isCopyConstructor(TypeQuals)) {
7284      if (!Constructor->isUsed())
7285        DefineImplicitCopyConstructor(Loc, Constructor, TypeQuals);
7286    }
7287
7288    MaybeMarkVirtualMembersReferenced(Loc, Constructor);
7289  } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(D)) {
7290    if (Destructor->isImplicit() && !Destructor->isUsed())
7291      DefineImplicitDestructor(Loc, Destructor);
7292
7293  } else if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(D)) {
7294    if (MethodDecl->isImplicit() && MethodDecl->isOverloadedOperator() &&
7295        MethodDecl->getOverloadedOperator() == OO_Equal) {
7296      if (!MethodDecl->isUsed())
7297        DefineImplicitOverloadedAssign(Loc, MethodDecl);
7298    }
7299  }
7300  if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
7301    // Implicit instantiation of function templates and member functions of
7302    // class templates.
7303    if (!Function->getBody() && Function->isImplicitlyInstantiable()) {
7304      bool AlreadyInstantiated = false;
7305      if (FunctionTemplateSpecializationInfo *SpecInfo
7306                                = Function->getTemplateSpecializationInfo()) {
7307        if (SpecInfo->getPointOfInstantiation().isInvalid())
7308          SpecInfo->setPointOfInstantiation(Loc);
7309        else if (SpecInfo->getTemplateSpecializationKind()
7310                   == TSK_ImplicitInstantiation)
7311          AlreadyInstantiated = true;
7312      } else if (MemberSpecializationInfo *MSInfo
7313                                  = Function->getMemberSpecializationInfo()) {
7314        if (MSInfo->getPointOfInstantiation().isInvalid())
7315          MSInfo->setPointOfInstantiation(Loc);
7316        else if (MSInfo->getTemplateSpecializationKind()
7317                   == TSK_ImplicitInstantiation)
7318          AlreadyInstantiated = true;
7319      }
7320
7321      if (!AlreadyInstantiated) {
7322        if (isa<CXXRecordDecl>(Function->getDeclContext()) &&
7323            cast<CXXRecordDecl>(Function->getDeclContext())->isLocalClass())
7324          PendingLocalImplicitInstantiations.push_back(std::make_pair(Function,
7325                                                                      Loc));
7326        else
7327          PendingImplicitInstantiations.push_back(std::make_pair(Function,
7328                                                                 Loc));
7329      }
7330    }
7331
7332    // FIXME: keep track of references to static functions
7333    Function->setUsed(true);
7334
7335    return;
7336  }
7337
7338  if (VarDecl *Var = dyn_cast<VarDecl>(D)) {
7339    // Implicit instantiation of static data members of class templates.
7340    if (Var->isStaticDataMember() &&
7341        Var->getInstantiatedFromStaticDataMember()) {
7342      MemberSpecializationInfo *MSInfo = Var->getMemberSpecializationInfo();
7343      assert(MSInfo && "Missing member specialization information?");
7344      if (MSInfo->getPointOfInstantiation().isInvalid() &&
7345          MSInfo->getTemplateSpecializationKind()== TSK_ImplicitInstantiation) {
7346        MSInfo->setPointOfInstantiation(Loc);
7347        PendingImplicitInstantiations.push_back(std::make_pair(Var, Loc));
7348      }
7349    }
7350
7351    // FIXME: keep track of references to static data?
7352
7353    D->setUsed(true);
7354    return;
7355  }
7356}
7357
7358/// \brief Emit a diagnostic that describes an effect on the run-time behavior
7359/// of the program being compiled.
7360///
7361/// This routine emits the given diagnostic when the code currently being
7362/// type-checked is "potentially evaluated", meaning that there is a
7363/// possibility that the code will actually be executable. Code in sizeof()
7364/// expressions, code used only during overload resolution, etc., are not
7365/// potentially evaluated. This routine will suppress such diagnostics or,
7366/// in the absolutely nutty case of potentially potentially evaluated
7367/// expressions (C++ typeid), queue the diagnostic to potentially emit it
7368/// later.
7369///
7370/// This routine should be used for all diagnostics that describe the run-time
7371/// behavior of a program, such as passing a non-POD value through an ellipsis.
7372/// Failure to do so will likely result in spurious diagnostics or failures
7373/// during overload resolution or within sizeof/alignof/typeof/typeid.
7374bool Sema::DiagRuntimeBehavior(SourceLocation Loc,
7375                               const PartialDiagnostic &PD) {
7376  switch (ExprEvalContexts.back().Context ) {
7377  case Unevaluated:
7378    // The argument will never be evaluated, so don't complain.
7379    break;
7380
7381  case PotentiallyEvaluated:
7382    Diag(Loc, PD);
7383    return true;
7384
7385  case PotentiallyPotentiallyEvaluated:
7386    ExprEvalContexts.back().addDiagnostic(Loc, PD);
7387    break;
7388  }
7389
7390  return false;
7391}
7392
7393bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc,
7394                               CallExpr *CE, FunctionDecl *FD) {
7395  if (ReturnType->isVoidType() || !ReturnType->isIncompleteType())
7396    return false;
7397
7398  PartialDiagnostic Note =
7399    FD ? PDiag(diag::note_function_with_incomplete_return_type_declared_here)
7400    << FD->getDeclName() : PDiag();
7401  SourceLocation NoteLoc = FD ? FD->getLocation() : SourceLocation();
7402
7403  if (RequireCompleteType(Loc, ReturnType,
7404                          FD ?
7405                          PDiag(diag::err_call_function_incomplete_return)
7406                            << CE->getSourceRange() << FD->getDeclName() :
7407                          PDiag(diag::err_call_incomplete_return)
7408                            << CE->getSourceRange(),
7409                          std::make_pair(NoteLoc, Note)))
7410    return true;
7411
7412  return false;
7413}
7414
7415// Diagnose the common s/=/==/ typo.  Note that adding parentheses
7416// will prevent this condition from triggering, which is what we want.
7417void Sema::DiagnoseAssignmentAsCondition(Expr *E) {
7418  SourceLocation Loc;
7419
7420  unsigned diagnostic = diag::warn_condition_is_assignment;
7421
7422  if (isa<BinaryOperator>(E)) {
7423    BinaryOperator *Op = cast<BinaryOperator>(E);
7424    if (Op->getOpcode() != BinaryOperator::Assign)
7425      return;
7426
7427    // Greylist some idioms by putting them into a warning subcategory.
7428    if (ObjCMessageExpr *ME
7429          = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {
7430      Selector Sel = ME->getSelector();
7431
7432      // self = [<foo> init...]
7433      if (isSelfExpr(Op->getLHS())
7434          && Sel.getIdentifierInfoForSlot(0)->getName().startswith("init"))
7435        diagnostic = diag::warn_condition_is_idiomatic_assignment;
7436
7437      // <foo> = [<bar> nextObject]
7438      else if (Sel.isUnarySelector() &&
7439               Sel.getIdentifierInfoForSlot(0)->getName() == "nextObject")
7440        diagnostic = diag::warn_condition_is_idiomatic_assignment;
7441    }
7442
7443    Loc = Op->getOperatorLoc();
7444  } else if (isa<CXXOperatorCallExpr>(E)) {
7445    CXXOperatorCallExpr *Op = cast<CXXOperatorCallExpr>(E);
7446    if (Op->getOperator() != OO_Equal)
7447      return;
7448
7449    Loc = Op->getOperatorLoc();
7450  } else {
7451    // Not an assignment.
7452    return;
7453  }
7454
7455  SourceLocation Open = E->getSourceRange().getBegin();
7456  SourceLocation Close = PP.getLocForEndOfToken(E->getSourceRange().getEnd());
7457
7458  Diag(Loc, diagnostic) << E->getSourceRange();
7459  Diag(Loc, diag::note_condition_assign_to_comparison)
7460    << FixItHint::CreateReplacement(Loc, "==");
7461  Diag(Loc, diag::note_condition_assign_silence)
7462    << FixItHint::CreateInsertion(Open, "(")
7463    << FixItHint::CreateInsertion(Close, ")");
7464}
7465
7466bool Sema::CheckBooleanCondition(Expr *&E, SourceLocation Loc) {
7467  DiagnoseAssignmentAsCondition(E);
7468
7469  if (!E->isTypeDependent()) {
7470    DefaultFunctionArrayLvalueConversion(E);
7471
7472    QualType T = E->getType();
7473
7474    if (getLangOptions().CPlusPlus) {
7475      if (CheckCXXBooleanCondition(E)) // C++ 6.4p4
7476        return true;
7477    } else if (!T->isScalarType()) { // C99 6.8.4.1p1
7478      Diag(Loc, diag::err_typecheck_statement_requires_scalar)
7479        << T << E->getSourceRange();
7480      return true;
7481    }
7482  }
7483
7484  return false;
7485}
7486