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