Expr.cpp revision d603eaa682cecac2c10771a700cb83aa301653b4
1//===--- Expr.cpp - Expression AST Node Implementation --------------------===//
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 the Expr class and subclasses.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/AST/Expr.h"
15#include "clang/AST/APValue.h"
16#include "clang/AST/ASTContext.h"
17#include "clang/AST/DeclObjC.h"
18#include "clang/AST/DeclCXX.h"
19#include "clang/AST/DeclTemplate.h"
20#include "clang/AST/RecordLayout.h"
21#include "clang/AST/StmtVisitor.h"
22#include "clang/Basic/TargetInfo.h"
23using namespace clang;
24
25//===----------------------------------------------------------------------===//
26// Primary Expressions.
27//===----------------------------------------------------------------------===//
28
29/// getValueAsApproximateDouble - This returns the value as an inaccurate
30/// double.  Note that this may cause loss of precision, but is useful for
31/// debugging dumps, etc.
32double FloatingLiteral::getValueAsApproximateDouble() const {
33  llvm::APFloat V = getValue();
34  bool ignored;
35  V.convert(llvm::APFloat::IEEEdouble, llvm::APFloat::rmNearestTiesToEven,
36            &ignored);
37  return V.convertToDouble();
38}
39
40
41StringLiteral::StringLiteral(ASTContext& C, const char *strData,
42                             unsigned byteLength, bool Wide, QualType t,
43                             SourceLocation firstLoc,
44                             SourceLocation lastLoc) :
45  Expr(StringLiteralClass, t) {
46  // OPTIMIZE: could allocate this appended to the StringLiteral.
47  char *AStrData = new (C, 1) char[byteLength];
48  memcpy(AStrData, strData, byteLength);
49  StrData = AStrData;
50  ByteLength = byteLength;
51  IsWide = Wide;
52  firstTokLoc = firstLoc;
53  lastTokLoc = lastLoc;
54}
55
56void StringLiteral::Destroy(ASTContext &C) {
57  C.Deallocate(const_cast<char*>(StrData));
58  this->~StringLiteral();
59  C.Deallocate(this);
60}
61
62bool UnaryOperator::isPostfix(Opcode Op) {
63  switch (Op) {
64  case PostInc:
65  case PostDec:
66    return true;
67  default:
68    return false;
69  }
70}
71
72bool UnaryOperator::isPrefix(Opcode Op) {
73  switch (Op) {
74    case PreInc:
75    case PreDec:
76      return true;
77    default:
78      return false;
79  }
80}
81
82/// getOpcodeStr - Turn an Opcode enum value into the punctuation char it
83/// corresponds to, e.g. "sizeof" or "[pre]++".
84const char *UnaryOperator::getOpcodeStr(Opcode Op) {
85  switch (Op) {
86  default: assert(0 && "Unknown unary operator");
87  case PostInc: return "++";
88  case PostDec: return "--";
89  case PreInc:  return "++";
90  case PreDec:  return "--";
91  case AddrOf:  return "&";
92  case Deref:   return "*";
93  case Plus:    return "+";
94  case Minus:   return "-";
95  case Not:     return "~";
96  case LNot:    return "!";
97  case Real:    return "__real";
98  case Imag:    return "__imag";
99  case Extension: return "__extension__";
100  case OffsetOf: return "__builtin_offsetof";
101  }
102}
103
104//===----------------------------------------------------------------------===//
105// Postfix Operators.
106//===----------------------------------------------------------------------===//
107
108CallExpr::CallExpr(ASTContext& C, StmtClass SC, Expr *fn, Expr **args,
109                   unsigned numargs, QualType t, SourceLocation rparenloc)
110  : Expr(SC, t,
111         fn->isTypeDependent() || hasAnyTypeDependentArguments(args, numargs),
112         fn->isValueDependent() || hasAnyValueDependentArguments(args,numargs)),
113    NumArgs(numargs) {
114
115  SubExprs = new (C) Stmt*[numargs+1];
116  SubExprs[FN] = fn;
117  for (unsigned i = 0; i != numargs; ++i)
118    SubExprs[i+ARGS_START] = args[i];
119
120  RParenLoc = rparenloc;
121}
122
123CallExpr::CallExpr(ASTContext& C, Expr *fn, Expr **args, unsigned numargs,
124                   QualType t, SourceLocation rparenloc)
125  : Expr(CallExprClass, t,
126         fn->isTypeDependent() || hasAnyTypeDependentArguments(args, numargs),
127         fn->isValueDependent() || hasAnyValueDependentArguments(args,numargs)),
128    NumArgs(numargs) {
129
130  SubExprs = new (C) Stmt*[numargs+1];
131  SubExprs[FN] = fn;
132  for (unsigned i = 0; i != numargs; ++i)
133    SubExprs[i+ARGS_START] = args[i];
134
135  RParenLoc = rparenloc;
136}
137
138void CallExpr::Destroy(ASTContext& C) {
139  DestroyChildren(C);
140  if (SubExprs) C.Deallocate(SubExprs);
141  this->~CallExpr();
142  C.Deallocate(this);
143}
144
145/// setNumArgs - This changes the number of arguments present in this call.
146/// Any orphaned expressions are deleted by this, and any new operands are set
147/// to null.
148void CallExpr::setNumArgs(ASTContext& C, unsigned NumArgs) {
149  // No change, just return.
150  if (NumArgs == getNumArgs()) return;
151
152  // If shrinking # arguments, just delete the extras and forgot them.
153  if (NumArgs < getNumArgs()) {
154    for (unsigned i = NumArgs, e = getNumArgs(); i != e; ++i)
155      getArg(i)->Destroy(C);
156    this->NumArgs = NumArgs;
157    return;
158  }
159
160  // Otherwise, we are growing the # arguments.  New an bigger argument array.
161  Stmt **NewSubExprs = new Stmt*[NumArgs+1];
162  // Copy over args.
163  for (unsigned i = 0; i != getNumArgs()+ARGS_START; ++i)
164    NewSubExprs[i] = SubExprs[i];
165  // Null out new args.
166  for (unsigned i = getNumArgs()+ARGS_START; i != NumArgs+ARGS_START; ++i)
167    NewSubExprs[i] = 0;
168
169  delete [] SubExprs;
170  SubExprs = NewSubExprs;
171  this->NumArgs = NumArgs;
172}
173
174/// isBuiltinCall - If this is a call to a builtin, return the builtin ID.  If
175/// not, return 0.
176unsigned CallExpr::isBuiltinCall(ASTContext &Context) const {
177  // All simple function calls (e.g. func()) are implicitly cast to pointer to
178  // function. As a result, we try and obtain the DeclRefExpr from the
179  // ImplicitCastExpr.
180  const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(getCallee());
181  if (!ICE) // FIXME: deal with more complex calls (e.g. (func)(), (*func)()).
182    return 0;
183
184  const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr());
185  if (!DRE)
186    return 0;
187
188  const FunctionDecl *FDecl = dyn_cast<FunctionDecl>(DRE->getDecl());
189  if (!FDecl)
190    return 0;
191
192  if (!FDecl->getIdentifier())
193    return 0;
194
195  return FDecl->getBuiltinID(Context);
196}
197
198
199/// getOpcodeStr - Turn an Opcode enum value into the punctuation char it
200/// corresponds to, e.g. "<<=".
201const char *BinaryOperator::getOpcodeStr(Opcode Op) {
202  switch (Op) {
203  default: assert(0 && "Unknown binary operator");
204  case Mul:       return "*";
205  case Div:       return "/";
206  case Rem:       return "%";
207  case Add:       return "+";
208  case Sub:       return "-";
209  case Shl:       return "<<";
210  case Shr:       return ">>";
211  case LT:        return "<";
212  case GT:        return ">";
213  case LE:        return "<=";
214  case GE:        return ">=";
215  case EQ:        return "==";
216  case NE:        return "!=";
217  case And:       return "&";
218  case Xor:       return "^";
219  case Or:        return "|";
220  case LAnd:      return "&&";
221  case LOr:       return "||";
222  case Assign:    return "=";
223  case MulAssign: return "*=";
224  case DivAssign: return "/=";
225  case RemAssign: return "%=";
226  case AddAssign: return "+=";
227  case SubAssign: return "-=";
228  case ShlAssign: return "<<=";
229  case ShrAssign: return ">>=";
230  case AndAssign: return "&=";
231  case XorAssign: return "^=";
232  case OrAssign:  return "|=";
233  case Comma:     return ",";
234  }
235}
236
237InitListExpr::InitListExpr(SourceLocation lbraceloc,
238                           Expr **initExprs, unsigned numInits,
239                           SourceLocation rbraceloc)
240  : Expr(InitListExprClass, QualType()),
241    LBraceLoc(lbraceloc), RBraceLoc(rbraceloc), SyntacticForm(0),
242    UnionFieldInit(0), HadArrayRangeDesignator(false) {
243
244  InitExprs.insert(InitExprs.end(), initExprs, initExprs+numInits);
245}
246
247void InitListExpr::resizeInits(ASTContext &Context, unsigned NumInits) {
248  for (unsigned Idx = NumInits, LastIdx = InitExprs.size();
249       Idx != LastIdx; ++Idx)
250    delete InitExprs[Idx];
251  InitExprs.resize(NumInits, 0);
252}
253
254Expr *InitListExpr::updateInit(unsigned Init, Expr *expr) {
255  if (Init >= InitExprs.size()) {
256    InitExprs.insert(InitExprs.end(), Init - InitExprs.size() + 1, 0);
257    InitExprs.back() = expr;
258    return 0;
259  }
260
261  Expr *Result = cast_or_null<Expr>(InitExprs[Init]);
262  InitExprs[Init] = expr;
263  return Result;
264}
265
266/// getFunctionType - Return the underlying function type for this block.
267///
268const FunctionType *BlockExpr::getFunctionType() const {
269  return getType()->getAsBlockPointerType()->
270                    getPointeeType()->getAsFunctionType();
271}
272
273SourceLocation BlockExpr::getCaretLocation() const {
274  return TheBlock->getCaretLocation();
275}
276const Stmt *BlockExpr::getBody() const { return TheBlock->getBody(); }
277Stmt *BlockExpr::getBody() { return TheBlock->getBody(); }
278
279
280//===----------------------------------------------------------------------===//
281// Generic Expression Routines
282//===----------------------------------------------------------------------===//
283
284/// isUnusedResultAWarning - Return true if this immediate expression should
285/// be warned about if the result is unused.  If so, fill in Loc and Ranges
286/// with location to warn on and the source range[s] to report with the
287/// warning.
288bool Expr::isUnusedResultAWarning(SourceLocation &Loc, SourceRange &R1,
289                                  SourceRange &R2) const {
290  switch (getStmtClass()) {
291  default:
292    Loc = getExprLoc();
293    R1 = getSourceRange();
294    return true;
295  case ParenExprClass:
296    return cast<ParenExpr>(this)->getSubExpr()->
297      isUnusedResultAWarning(Loc, R1, R2);
298  case UnaryOperatorClass: {
299    const UnaryOperator *UO = cast<UnaryOperator>(this);
300
301    switch (UO->getOpcode()) {
302    default: break;
303    case UnaryOperator::PostInc:
304    case UnaryOperator::PostDec:
305    case UnaryOperator::PreInc:
306    case UnaryOperator::PreDec:                 // ++/--
307      return false;  // Not a warning.
308    case UnaryOperator::Deref:
309      // Dereferencing a volatile pointer is a side-effect.
310      if (getType().isVolatileQualified())
311        return false;
312      break;
313    case UnaryOperator::Real:
314    case UnaryOperator::Imag:
315      // accessing a piece of a volatile complex is a side-effect.
316      if (UO->getSubExpr()->getType().isVolatileQualified())
317        return false;
318      break;
319    case UnaryOperator::Extension:
320      return UO->getSubExpr()->isUnusedResultAWarning(Loc, R1, R2);
321    }
322    Loc = UO->getOperatorLoc();
323    R1 = UO->getSubExpr()->getSourceRange();
324    return true;
325  }
326  case BinaryOperatorClass: {
327    const BinaryOperator *BO = cast<BinaryOperator>(this);
328    // Consider comma to have side effects if the LHS or RHS does.
329    if (BO->getOpcode() == BinaryOperator::Comma)
330      return BO->getRHS()->isUnusedResultAWarning(Loc, R1, R2) ||
331             BO->getLHS()->isUnusedResultAWarning(Loc, R1, R2);
332
333    if (BO->isAssignmentOp())
334      return false;
335    Loc = BO->getOperatorLoc();
336    R1 = BO->getLHS()->getSourceRange();
337    R2 = BO->getRHS()->getSourceRange();
338    return true;
339  }
340  case CompoundAssignOperatorClass:
341    return false;
342
343  case ConditionalOperatorClass: {
344    // The condition must be evaluated, but if either the LHS or RHS is a
345    // warning, warn about them.
346    const ConditionalOperator *Exp = cast<ConditionalOperator>(this);
347    if (Exp->getLHS()->isUnusedResultAWarning(Loc, R1, R2))
348      return true;
349    return Exp->getRHS()->isUnusedResultAWarning(Loc, R1, R2);
350  }
351
352  case MemberExprClass:
353    // If the base pointer or element is to a volatile pointer/field, accessing
354    // it is a side effect.
355    if (getType().isVolatileQualified())
356      return false;
357    Loc = cast<MemberExpr>(this)->getMemberLoc();
358    R1 = SourceRange(Loc, Loc);
359    R2 = cast<MemberExpr>(this)->getBase()->getSourceRange();
360    return true;
361
362  case ArraySubscriptExprClass:
363    // If the base pointer or element is to a volatile pointer/field, accessing
364    // it is a side effect.
365    if (getType().isVolatileQualified())
366      return false;
367    Loc = cast<ArraySubscriptExpr>(this)->getRBracketLoc();
368    R1 = cast<ArraySubscriptExpr>(this)->getLHS()->getSourceRange();
369    R2 = cast<ArraySubscriptExpr>(this)->getRHS()->getSourceRange();
370    return true;
371
372  case CallExprClass:
373  case CXXOperatorCallExprClass: {
374    // If this is a direct call, get the callee.
375    const CallExpr *CE = cast<CallExpr>(this);
376    const Expr *CalleeExpr = CE->getCallee()->IgnoreParenCasts();
377    if (const DeclRefExpr *CalleeDRE = dyn_cast<DeclRefExpr>(CalleeExpr)) {
378      // If the callee has attribute pure, const, or warn_unused_result, warn
379      // about it. void foo() { strlen("bar"); } should warn.
380      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(CalleeDRE->getDecl()))
381        if (FD->getAttr<WarnUnusedResultAttr>() ||
382            FD->getAttr<PureAttr>() || FD->getAttr<ConstAttr>()) {
383          Loc = CE->getCallee()->getLocStart();
384          R1 = CE->getCallee()->getSourceRange();
385
386          if (unsigned NumArgs = CE->getNumArgs())
387            R2 = SourceRange(CE->getArg(0)->getLocStart(),
388                             CE->getArg(NumArgs-1)->getLocEnd());
389          return true;
390        }
391    }
392    return false;
393  }
394  case ObjCMessageExprClass:
395    return false;
396  case StmtExprClass: {
397    // Statement exprs don't logically have side effects themselves, but are
398    // sometimes used in macros in ways that give them a type that is unused.
399    // For example ({ blah; foo(); }) will end up with a type if foo has a type.
400    // however, if the result of the stmt expr is dead, we don't want to emit a
401    // warning.
402    const CompoundStmt *CS = cast<StmtExpr>(this)->getSubStmt();
403    if (!CS->body_empty())
404      if (const Expr *E = dyn_cast<Expr>(CS->body_back()))
405        return E->isUnusedResultAWarning(Loc, R1, R2);
406
407    Loc = cast<StmtExpr>(this)->getLParenLoc();
408    R1 = getSourceRange();
409    return true;
410  }
411  case CStyleCastExprClass:
412    // If this is a cast to void, check the operand.  Otherwise, the result of
413    // the cast is unused.
414    if (getType()->isVoidType())
415      return cast<CastExpr>(this)->getSubExpr()->isUnusedResultAWarning(Loc,
416                                                                        R1, R2);
417    Loc = cast<CStyleCastExpr>(this)->getLParenLoc();
418    R1 = cast<CStyleCastExpr>(this)->getSubExpr()->getSourceRange();
419    return true;
420  case CXXFunctionalCastExprClass:
421    // If this is a cast to void, check the operand.  Otherwise, the result of
422    // the cast is unused.
423    if (getType()->isVoidType())
424      return cast<CastExpr>(this)->getSubExpr()->isUnusedResultAWarning(Loc,
425                                                                        R1, R2);
426    Loc = cast<CXXFunctionalCastExpr>(this)->getTypeBeginLoc();
427    R1 = cast<CXXFunctionalCastExpr>(this)->getSubExpr()->getSourceRange();
428    return true;
429
430  case ImplicitCastExprClass:
431    // Check the operand, since implicit casts are inserted by Sema
432    return cast<ImplicitCastExpr>(this)
433      ->getSubExpr()->isUnusedResultAWarning(Loc, R1, R2);
434
435  case CXXDefaultArgExprClass:
436    return cast<CXXDefaultArgExpr>(this)
437      ->getExpr()->isUnusedResultAWarning(Loc, R1, R2);
438
439  case CXXNewExprClass:
440    // FIXME: In theory, there might be new expressions that don't have side
441    // effects (e.g. a placement new with an uninitialized POD).
442  case CXXDeleteExprClass:
443    return false;
444  }
445}
446
447/// DeclCanBeLvalue - Determine whether the given declaration can be
448/// an lvalue. This is a helper routine for isLvalue.
449static bool DeclCanBeLvalue(const NamedDecl *Decl, ASTContext &Ctx) {
450  // C++ [temp.param]p6:
451  //   A non-type non-reference template-parameter is not an lvalue.
452  if (const NonTypeTemplateParmDecl *NTTParm
453        = dyn_cast<NonTypeTemplateParmDecl>(Decl))
454    return NTTParm->getType()->isReferenceType();
455
456  return isa<VarDecl>(Decl) || isa<FieldDecl>(Decl) ||
457    // C++ 3.10p2: An lvalue refers to an object or function.
458    (Ctx.getLangOptions().CPlusPlus &&
459     (isa<FunctionDecl>(Decl) || isa<OverloadedFunctionDecl>(Decl)));
460}
461
462/// isLvalue - C99 6.3.2.1: an lvalue is an expression with an object type or an
463/// incomplete type other than void. Nonarray expressions that can be lvalues:
464///  - name, where name must be a variable
465///  - e[i]
466///  - (e), where e must be an lvalue
467///  - e.name, where e must be an lvalue
468///  - e->name
469///  - *e, the type of e cannot be a function type
470///  - string-constant
471///  - (__real__ e) and (__imag__ e) where e is an lvalue  [GNU extension]
472///  - reference type [C++ [expr]]
473///
474Expr::isLvalueResult Expr::isLvalue(ASTContext &Ctx) const {
475  // first, check the type (C99 6.3.2.1). Expressions with function
476  // type in C are not lvalues, but they can be lvalues in C++.
477  if (!Ctx.getLangOptions().CPlusPlus && TR->isFunctionType())
478    return LV_NotObjectType;
479
480  // Allow qualified void which is an incomplete type other than void (yuck).
481  if (TR->isVoidType() && !Ctx.getCanonicalType(TR).getCVRQualifiers())
482    return LV_IncompleteVoidType;
483
484  /// FIXME: Expressions can't have reference type, so the following
485  /// isn't needed.
486  if (TR->isReferenceType()) // C++ [expr]
487    return LV_Valid;
488
489  // the type looks fine, now check the expression
490  switch (getStmtClass()) {
491  case StringLiteralClass: // C99 6.5.1p4
492    return LV_Valid;
493  case ArraySubscriptExprClass: // C99 6.5.3p4 (e1[e2] == (*((e1)+(e2))))
494    // For vectors, make sure base is an lvalue (i.e. not a function call).
495    if (cast<ArraySubscriptExpr>(this)->getBase()->getType()->isVectorType())
496      return cast<ArraySubscriptExpr>(this)->getBase()->isLvalue(Ctx);
497    return LV_Valid;
498  case DeclRefExprClass:
499  case QualifiedDeclRefExprClass: { // C99 6.5.1p2
500    const NamedDecl *RefdDecl = cast<DeclRefExpr>(this)->getDecl();
501    if (DeclCanBeLvalue(RefdDecl, Ctx))
502      return LV_Valid;
503    break;
504  }
505  case BlockDeclRefExprClass: {
506    const BlockDeclRefExpr *BDR = cast<BlockDeclRefExpr>(this);
507    if (isa<VarDecl>(BDR->getDecl()))
508      return LV_Valid;
509    break;
510  }
511  case MemberExprClass: {
512    const MemberExpr *m = cast<MemberExpr>(this);
513    if (Ctx.getLangOptions().CPlusPlus) { // C++ [expr.ref]p4:
514      NamedDecl *Member = m->getMemberDecl();
515      // C++ [expr.ref]p4:
516      //   If E2 is declared to have type "reference to T", then E1.E2
517      //   is an lvalue.
518      if (ValueDecl *Value = dyn_cast<ValueDecl>(Member))
519        if (Value->getType()->isReferenceType())
520          return LV_Valid;
521
522      //   -- If E2 is a static data member [...] then E1.E2 is an lvalue.
523      if (isa<CXXClassVarDecl>(Member))
524        return LV_Valid;
525
526      //   -- If E2 is a non-static data member [...]. If E1 is an
527      //      lvalue, then E1.E2 is an lvalue.
528      if (isa<FieldDecl>(Member))
529        return m->isArrow() ? LV_Valid : m->getBase()->isLvalue(Ctx);
530
531      //   -- If it refers to a static member function [...], then
532      //      E1.E2 is an lvalue.
533      //   -- Otherwise, if E1.E2 refers to a non-static member
534      //      function [...], then E1.E2 is not an lvalue.
535      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Member))
536        return Method->isStatic()? LV_Valid : LV_MemberFunction;
537
538      //   -- If E2 is a member enumerator [...], the expression E1.E2
539      //      is not an lvalue.
540      if (isa<EnumConstantDecl>(Member))
541        return LV_InvalidExpression;
542
543        // Not an lvalue.
544      return LV_InvalidExpression;
545    }
546
547    // C99 6.5.2.3p4
548    return m->isArrow() ? LV_Valid : m->getBase()->isLvalue(Ctx);
549  }
550  case UnaryOperatorClass:
551    if (cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Deref)
552      return LV_Valid; // C99 6.5.3p4
553
554    if (cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Real ||
555        cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Imag ||
556        cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Extension)
557      return cast<UnaryOperator>(this)->getSubExpr()->isLvalue(Ctx);  // GNU.
558
559    if (Ctx.getLangOptions().CPlusPlus && // C++ [expr.pre.incr]p1
560        (cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::PreInc ||
561         cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::PreDec))
562      return LV_Valid;
563    break;
564  case ImplicitCastExprClass:
565    return cast<ImplicitCastExpr>(this)->isLvalueCast()? LV_Valid
566                                                       : LV_InvalidExpression;
567  case ParenExprClass: // C99 6.5.1p5
568    return cast<ParenExpr>(this)->getSubExpr()->isLvalue(Ctx);
569  case BinaryOperatorClass:
570  case CompoundAssignOperatorClass: {
571    const BinaryOperator *BinOp = cast<BinaryOperator>(this);
572
573    if (Ctx.getLangOptions().CPlusPlus && // C++ [expr.comma]p1
574        BinOp->getOpcode() == BinaryOperator::Comma)
575      return BinOp->getRHS()->isLvalue(Ctx);
576
577    // C++ [expr.mptr.oper]p6
578    if ((BinOp->getOpcode() == BinaryOperator::PtrMemD ||
579         BinOp->getOpcode() == BinaryOperator::PtrMemI) &&
580        !BinOp->getType()->isFunctionType())
581      return BinOp->getLHS()->isLvalue(Ctx);
582
583    if (!BinOp->isAssignmentOp())
584      return LV_InvalidExpression;
585
586    if (Ctx.getLangOptions().CPlusPlus)
587      // C++ [expr.ass]p1:
588      //   The result of an assignment operation [...] is an lvalue.
589      return LV_Valid;
590
591
592    // C99 6.5.16:
593    //   An assignment expression [...] is not an lvalue.
594    return LV_InvalidExpression;
595  }
596  // FIXME: OverloadExprClass
597  case CallExprClass:
598  case CXXOperatorCallExprClass:
599  case CXXMemberCallExprClass: {
600    // C++ [expr.call]p10:
601    //   A function call is an lvalue if and only if the result type
602    //   is a reference.
603    QualType CalleeType = cast<CallExpr>(this)->getCallee()->getType();
604    if (const PointerType *FnTypePtr = CalleeType->getAsPointerType())
605      CalleeType = FnTypePtr->getPointeeType();
606    if (const FunctionType *FnType = CalleeType->getAsFunctionType())
607      if (FnType->getResultType()->isReferenceType())
608        return LV_Valid;
609
610    break;
611  }
612  case CompoundLiteralExprClass: // C99 6.5.2.5p5
613    return LV_Valid;
614  case ChooseExprClass:
615    // __builtin_choose_expr is an lvalue if the selected operand is.
616    if (cast<ChooseExpr>(this)->isConditionTrue(Ctx))
617      return cast<ChooseExpr>(this)->getLHS()->isLvalue(Ctx);
618    else
619      return cast<ChooseExpr>(this)->getRHS()->isLvalue(Ctx);
620
621  case ExtVectorElementExprClass:
622    if (cast<ExtVectorElementExpr>(this)->containsDuplicateElements())
623      return LV_DuplicateVectorComponents;
624    return LV_Valid;
625  case ObjCIvarRefExprClass: // ObjC instance variables are lvalues.
626    return LV_Valid;
627  case ObjCPropertyRefExprClass: // FIXME: check if read-only property.
628    return LV_Valid;
629  case ObjCKVCRefExprClass: // FIXME: check if read-only property.
630    return LV_Valid;
631  case PredefinedExprClass:
632    return LV_Valid;
633  case VAArgExprClass:
634    return LV_NotObjectType;
635  case CXXDefaultArgExprClass:
636    return cast<CXXDefaultArgExpr>(this)->getExpr()->isLvalue(Ctx);
637  case CXXConditionDeclExprClass:
638    return LV_Valid;
639  case CStyleCastExprClass:
640  case CXXFunctionalCastExprClass:
641  case CXXStaticCastExprClass:
642  case CXXDynamicCastExprClass:
643  case CXXReinterpretCastExprClass:
644  case CXXConstCastExprClass:
645    // The result of an explicit cast is an lvalue if the type we are
646    // casting to is a reference type. See C++ [expr.cast]p1,
647    // C++ [expr.static.cast]p2, C++ [expr.dynamic.cast]p2,
648    // C++ [expr.reinterpret.cast]p1, C++ [expr.const.cast]p1.
649    if (cast<ExplicitCastExpr>(this)->getTypeAsWritten()->isReferenceType())
650      return LV_Valid;
651    break;
652  case CXXTypeidExprClass:
653    // C++ 5.2.8p1: The result of a typeid expression is an lvalue of ...
654    return LV_Valid;
655  default:
656    break;
657  }
658  return LV_InvalidExpression;
659}
660
661/// isModifiableLvalue - C99 6.3.2.1: an lvalue that does not have array type,
662/// does not have an incomplete type, does not have a const-qualified type, and
663/// if it is a structure or union, does not have any member (including,
664/// recursively, any member or element of all contained aggregates or unions)
665/// with a const-qualified type.
666Expr::isModifiableLvalueResult Expr::isModifiableLvalue(ASTContext &Ctx) const {
667  isLvalueResult lvalResult = isLvalue(Ctx);
668
669  switch (lvalResult) {
670  case LV_Valid:
671    // C++ 3.10p11: Functions cannot be modified, but pointers to
672    // functions can be modifiable.
673    if (Ctx.getLangOptions().CPlusPlus && TR->isFunctionType())
674      return MLV_NotObjectType;
675    break;
676
677  case LV_NotObjectType: return MLV_NotObjectType;
678  case LV_IncompleteVoidType: return MLV_IncompleteVoidType;
679  case LV_DuplicateVectorComponents: return MLV_DuplicateVectorComponents;
680  case LV_InvalidExpression:
681    // If the top level is a C-style cast, and the subexpression is a valid
682    // lvalue, then this is probably a use of the old-school "cast as lvalue"
683    // GCC extension.  We don't support it, but we want to produce good
684    // diagnostics when it happens so that the user knows why.
685    if (const CStyleCastExpr *CE = dyn_cast<CStyleCastExpr>(this))
686      if (CE->getSubExpr()->isLvalue(Ctx) == LV_Valid)
687        return MLV_LValueCast;
688    return MLV_InvalidExpression;
689  case LV_MemberFunction: return MLV_MemberFunction;
690  }
691
692  QualType CT = Ctx.getCanonicalType(getType());
693
694  if (CT.isConstQualified())
695    return MLV_ConstQualified;
696  if (CT->isArrayType())
697    return MLV_ArrayType;
698  if (CT->isIncompleteType())
699    return MLV_IncompleteType;
700
701  if (const RecordType *r = CT->getAsRecordType()) {
702    if (r->hasConstFields())
703      return MLV_ConstQualified;
704  }
705  // The following is illegal:
706  //   void takeclosure(void (^C)(void));
707  //   void func() { int x = 1; takeclosure(^{ x = 7 }); }
708  //
709  if (getStmtClass() == BlockDeclRefExprClass) {
710    const BlockDeclRefExpr *BDR = cast<BlockDeclRefExpr>(this);
711    if (!BDR->isByRef() && isa<VarDecl>(BDR->getDecl()))
712      return MLV_NotBlockQualified;
713  }
714
715  // Assigning to an 'implicit' property?
716  else if (getStmtClass() == ObjCKVCRefExprClass) {
717    const ObjCKVCRefExpr* KVCExpr = cast<ObjCKVCRefExpr>(this);
718    if (KVCExpr->getSetterMethod() == 0)
719      return MLV_NoSetterProperty;
720  }
721  return MLV_Valid;
722}
723
724/// hasGlobalStorage - Return true if this expression has static storage
725/// duration.  This means that the address of this expression is a link-time
726/// constant.
727bool Expr::hasGlobalStorage() const {
728  switch (getStmtClass()) {
729  default:
730    return false;
731  case ParenExprClass:
732    return cast<ParenExpr>(this)->getSubExpr()->hasGlobalStorage();
733  case ImplicitCastExprClass:
734    return cast<ImplicitCastExpr>(this)->getSubExpr()->hasGlobalStorage();
735  case CompoundLiteralExprClass:
736    return cast<CompoundLiteralExpr>(this)->isFileScope();
737  case DeclRefExprClass:
738  case QualifiedDeclRefExprClass: {
739    const Decl *D = cast<DeclRefExpr>(this)->getDecl();
740    if (const VarDecl *VD = dyn_cast<VarDecl>(D))
741      return VD->hasGlobalStorage();
742    if (isa<FunctionDecl>(D))
743      return true;
744    return false;
745  }
746  case MemberExprClass: {
747    const MemberExpr *M = cast<MemberExpr>(this);
748    return !M->isArrow() && M->getBase()->hasGlobalStorage();
749  }
750  case ArraySubscriptExprClass:
751    return cast<ArraySubscriptExpr>(this)->getBase()->hasGlobalStorage();
752  case PredefinedExprClass:
753    return true;
754  case CXXDefaultArgExprClass:
755    return cast<CXXDefaultArgExpr>(this)->getExpr()->hasGlobalStorage();
756  }
757}
758
759Expr* Expr::IgnoreParens() {
760  Expr* E = this;
761  while (ParenExpr* P = dyn_cast<ParenExpr>(E))
762    E = P->getSubExpr();
763
764  return E;
765}
766
767/// IgnoreParenCasts - Ignore parentheses and casts.  Strip off any ParenExpr
768/// or CastExprs or ImplicitCastExprs, returning their operand.
769Expr *Expr::IgnoreParenCasts() {
770  Expr *E = this;
771  while (true) {
772    if (ParenExpr *P = dyn_cast<ParenExpr>(E))
773      E = P->getSubExpr();
774    else if (CastExpr *P = dyn_cast<CastExpr>(E))
775      E = P->getSubExpr();
776    else
777      return E;
778  }
779}
780
781/// hasAnyTypeDependentArguments - Determines if any of the expressions
782/// in Exprs is type-dependent.
783bool Expr::hasAnyTypeDependentArguments(Expr** Exprs, unsigned NumExprs) {
784  for (unsigned I = 0; I < NumExprs; ++I)
785    if (Exprs[I]->isTypeDependent())
786      return true;
787
788  return false;
789}
790
791/// hasAnyValueDependentArguments - Determines if any of the expressions
792/// in Exprs is value-dependent.
793bool Expr::hasAnyValueDependentArguments(Expr** Exprs, unsigned NumExprs) {
794  for (unsigned I = 0; I < NumExprs; ++I)
795    if (Exprs[I]->isValueDependent())
796      return true;
797
798  return false;
799}
800
801bool Expr::isConstantInitializer(ASTContext &Ctx) const {
802  // This function is attempting whether an expression is an initializer
803  // which can be evaluated at compile-time.  isEvaluatable handles most
804  // of the cases, but it can't deal with some initializer-specific
805  // expressions, and it can't deal with aggregates; we deal with those here,
806  // and fall back to isEvaluatable for the other cases.
807
808  switch (getStmtClass()) {
809  default: break;
810  case StringLiteralClass:
811    return true;
812  case CompoundLiteralExprClass: {
813    const Expr *Exp = cast<CompoundLiteralExpr>(this)->getInitializer();
814    return Exp->isConstantInitializer(Ctx);
815  }
816  case InitListExprClass: {
817    const InitListExpr *Exp = cast<InitListExpr>(this);
818    unsigned numInits = Exp->getNumInits();
819    for (unsigned i = 0; i < numInits; i++) {
820      if (!Exp->getInit(i)->isConstantInitializer(Ctx))
821        return false;
822    }
823    return true;
824  }
825  case ImplicitValueInitExprClass:
826    return true;
827  case ParenExprClass: {
828    return cast<ParenExpr>(this)->getSubExpr()->isConstantInitializer(Ctx);
829  }
830  case UnaryOperatorClass: {
831    const UnaryOperator* Exp = cast<UnaryOperator>(this);
832    if (Exp->getOpcode() == UnaryOperator::Extension)
833      return Exp->getSubExpr()->isConstantInitializer(Ctx);
834    break;
835  }
836  case CStyleCastExprClass:
837    // Handle casts with a destination that's a struct or union; this
838    // deals with both the gcc no-op struct cast extension and the
839    // cast-to-union extension.
840    if (getType()->isRecordType())
841      return cast<CastExpr>(this)->getSubExpr()->isConstantInitializer(Ctx);
842    break;
843  case DesignatedInitExprClass:
844    return cast<DesignatedInitExpr>(this)->
845            getInit()->isConstantInitializer(Ctx);
846  }
847
848  return isEvaluatable(Ctx);
849}
850
851/// isIntegerConstantExpr - this recursive routine will test if an expression is
852/// an integer constant expression. Note: With the introduction of VLA's in
853/// C99 the result of the sizeof operator is no longer always a constant
854/// expression. The generalization of the wording to include any subexpression
855/// that is not evaluated (C99 6.6p3) means that nonconstant subexpressions
856/// can appear as operands to other operators (e.g. &&, ||, ?:). For instance,
857/// "0 || f()" can be treated as a constant expression. In C90 this expression,
858/// occurring in a context requiring a constant, would have been a constraint
859/// violation. FIXME: This routine currently implements C90 semantics.
860/// To properly implement C99 semantics this routine will need to evaluate
861/// expressions involving operators previously mentioned.
862
863/// FIXME: Pass up a reason why! Invalid operation in i-c-e, division by zero,
864/// comma, etc
865///
866/// FIXME: This should ext-warn on overflow during evaluation!  ISO C does not
867/// permit this.  This includes things like (int)1e1000
868///
869/// FIXME: Handle offsetof.  Two things to do:  Handle GCC's __builtin_offsetof
870/// to support gcc 4.0+  and handle the idiom GCC recognizes with a null pointer
871/// cast+dereference.
872bool Expr::isIntegerConstantExpr(llvm::APSInt &Result, ASTContext &Ctx,
873                                 SourceLocation *Loc, bool isEvaluated) const {
874  // Pretest for integral type; some parts of the code crash for types that
875  // can't be sized.
876  if (!getType()->isIntegralType()) {
877    if (Loc) *Loc = getLocStart();
878    return false;
879  }
880  switch (getStmtClass()) {
881  default:
882    if (Loc) *Loc = getLocStart();
883    return false;
884  case ParenExprClass:
885    return cast<ParenExpr>(this)->getSubExpr()->
886                     isIntegerConstantExpr(Result, Ctx, Loc, isEvaluated);
887  case IntegerLiteralClass:
888    Result = cast<IntegerLiteral>(this)->getValue();
889    break;
890  case CharacterLiteralClass: {
891    const CharacterLiteral *CL = cast<CharacterLiteral>(this);
892    Result.zextOrTrunc(static_cast<uint32_t>(Ctx.getTypeSize(getType())));
893    Result = CL->getValue();
894    Result.setIsUnsigned(!getType()->isSignedIntegerType());
895    break;
896  }
897  case CXXBoolLiteralExprClass: {
898    const CXXBoolLiteralExpr *BL = cast<CXXBoolLiteralExpr>(this);
899    Result.zextOrTrunc(static_cast<uint32_t>(Ctx.getTypeSize(getType())));
900    Result = BL->getValue();
901    Result.setIsUnsigned(!getType()->isSignedIntegerType());
902    break;
903  }
904  case CXXZeroInitValueExprClass:
905    Result.clear();
906    break;
907  case TypesCompatibleExprClass: {
908    const TypesCompatibleExpr *TCE = cast<TypesCompatibleExpr>(this);
909    Result.zextOrTrunc(static_cast<uint32_t>(Ctx.getTypeSize(getType())));
910    // Per gcc docs "this built-in function ignores top level
911    // qualifiers".  We need to use the canonical version to properly
912    // be able to strip CRV qualifiers from the type.
913    QualType T0 = Ctx.getCanonicalType(TCE->getArgType1());
914    QualType T1 = Ctx.getCanonicalType(TCE->getArgType2());
915    Result = Ctx.typesAreCompatible(T0.getUnqualifiedType(),
916                                    T1.getUnqualifiedType());
917    break;
918  }
919  case CallExprClass:
920  case CXXOperatorCallExprClass: {
921    const CallExpr *CE = cast<CallExpr>(this);
922    Result.zextOrTrunc(static_cast<uint32_t>(Ctx.getTypeSize(getType())));
923
924    // If this is a call to a builtin function, constant fold it otherwise
925    // reject it.
926    if (CE->isBuiltinCall(Ctx)) {
927      EvalResult EvalResult;
928      if (CE->Evaluate(EvalResult, Ctx)) {
929        assert(!EvalResult.HasSideEffects &&
930               "Foldable builtin call should not have side effects!");
931        Result = EvalResult.Val.getInt();
932        break;  // It is a constant, expand it.
933      }
934    }
935
936    if (Loc) *Loc = getLocStart();
937    return false;
938  }
939  case DeclRefExprClass:
940  case QualifiedDeclRefExprClass:
941    if (const EnumConstantDecl *D =
942          dyn_cast<EnumConstantDecl>(cast<DeclRefExpr>(this)->getDecl())) {
943      Result = D->getInitVal();
944      break;
945    }
946    if (Ctx.getLangOptions().CPlusPlus &&
947        getType().getCVRQualifiers() == QualType::Const) {
948      // C++ 7.1.5.1p2
949      //   A variable of non-volatile const-qualified integral or enumeration
950      //   type initialized by an ICE can be used in ICEs.
951      if (const VarDecl *Dcl =
952              dyn_cast<VarDecl>(cast<DeclRefExpr>(this)->getDecl())) {
953        if (const Expr *Init = Dcl->getInit())
954          return Init->isIntegerConstantExpr(Result, Ctx, Loc, isEvaluated);
955      }
956    }
957    if (Loc) *Loc = getLocStart();
958    return false;
959  case UnaryOperatorClass: {
960    const UnaryOperator *Exp = cast<UnaryOperator>(this);
961
962    // Get the operand value.  If this is offsetof, do not evalute the
963    // operand.  This affects C99 6.6p3.
964    if (!Exp->isOffsetOfOp() && !Exp->getSubExpr()->
965                        isIntegerConstantExpr(Result, Ctx, Loc, isEvaluated))
966      return false;
967
968    switch (Exp->getOpcode()) {
969    // Address, indirect, pre/post inc/dec, etc are not valid constant exprs.
970    // See C99 6.6p3.
971    default:
972      if (Loc) *Loc = Exp->getOperatorLoc();
973      return false;
974    case UnaryOperator::Extension:
975      return true;  // FIXME: this is wrong.
976    case UnaryOperator::LNot: {
977      bool Val = Result == 0;
978      Result.zextOrTrunc(static_cast<uint32_t>(Ctx.getTypeSize(getType())));
979      Result = Val;
980      break;
981    }
982    case UnaryOperator::Plus:
983      break;
984    case UnaryOperator::Minus:
985      Result = -Result;
986      break;
987    case UnaryOperator::Not:
988      Result = ~Result;
989      break;
990    case UnaryOperator::OffsetOf:
991      Result.zextOrTrunc(static_cast<uint32_t>(Ctx.getTypeSize(getType())));
992      Result = Exp->evaluateOffsetOf(Ctx);
993    }
994    break;
995  }
996  case SizeOfAlignOfExprClass: {
997    const SizeOfAlignOfExpr *Exp = cast<SizeOfAlignOfExpr>(this);
998
999    // Return the result in the right width.
1000    Result.zextOrTrunc(static_cast<uint32_t>(Ctx.getTypeSize(getType())));
1001
1002    QualType ArgTy = Exp->getTypeOfArgument();
1003    // sizeof(void) and __alignof__(void) = 1 as a gcc extension.
1004    if (ArgTy->isVoidType()) {
1005      Result = 1;
1006      break;
1007    }
1008
1009    // alignof always evaluates to a constant, sizeof does if arg is not VLA.
1010    if (Exp->isSizeOf() && !ArgTy->isConstantSizeType()) {
1011      if (Loc) *Loc = Exp->getOperatorLoc();
1012      return false;
1013    }
1014
1015    // Get information about the size or align.
1016    if (ArgTy->isFunctionType()) {
1017      // GCC extension: sizeof(function) = 1.
1018      Result = Exp->isSizeOf() ? 1 : 4;
1019    } else {
1020      unsigned CharSize = Ctx.Target.getCharWidth();
1021      if (Exp->isSizeOf())
1022        Result = Ctx.getTypeSize(ArgTy) / CharSize;
1023      else
1024        Result = Ctx.getTypeAlign(ArgTy) / CharSize;
1025    }
1026    break;
1027  }
1028  case BinaryOperatorClass: {
1029    const BinaryOperator *Exp = cast<BinaryOperator>(this);
1030    llvm::APSInt LHS, RHS;
1031
1032    // Initialize result to have correct signedness and width.
1033    Result = llvm::APSInt(static_cast<uint32_t>(Ctx.getTypeSize(getType())),
1034                          !getType()->isSignedIntegerType());
1035
1036    // The LHS of a constant expr is always evaluated and needed.
1037    if (!Exp->getLHS()->isIntegerConstantExpr(LHS, Ctx, Loc, isEvaluated))
1038      return false;
1039
1040    // The short-circuiting &&/|| operators don't necessarily evaluate their
1041    // RHS.  Make sure to pass isEvaluated down correctly.
1042    if (Exp->isLogicalOp()) {
1043      bool RHSEval;
1044      if (Exp->getOpcode() == BinaryOperator::LAnd)
1045        RHSEval = LHS != 0;
1046      else {
1047        assert(Exp->getOpcode() == BinaryOperator::LOr &&"Unexpected logical");
1048        RHSEval = LHS == 0;
1049      }
1050
1051      if (!Exp->getRHS()->isIntegerConstantExpr(RHS, Ctx, Loc,
1052                                                isEvaluated & RHSEval))
1053        return false;
1054    } else {
1055      if (!Exp->getRHS()->isIntegerConstantExpr(RHS, Ctx, Loc, isEvaluated))
1056        return false;
1057    }
1058
1059    switch (Exp->getOpcode()) {
1060    default:
1061      if (Loc) *Loc = getLocStart();
1062      return false;
1063    case BinaryOperator::Mul:
1064      Result = LHS * RHS;
1065      break;
1066    case BinaryOperator::Div:
1067      if (RHS == 0) {
1068        if (!isEvaluated) break;
1069        if (Loc) *Loc = getLocStart();
1070        return false;
1071      }
1072      Result = LHS / RHS;
1073      break;
1074    case BinaryOperator::Rem:
1075      if (RHS == 0) {
1076        if (!isEvaluated) break;
1077        if (Loc) *Loc = getLocStart();
1078        return false;
1079      }
1080      Result = LHS % RHS;
1081      break;
1082    case BinaryOperator::Add: Result = LHS + RHS; break;
1083    case BinaryOperator::Sub: Result = LHS - RHS; break;
1084    case BinaryOperator::Shl:
1085      Result = LHS <<
1086        static_cast<uint32_t>(RHS.getLimitedValue(LHS.getBitWidth()-1));
1087    break;
1088    case BinaryOperator::Shr:
1089      Result = LHS >>
1090        static_cast<uint32_t>(RHS.getLimitedValue(LHS.getBitWidth()-1));
1091      break;
1092    case BinaryOperator::LT:  Result = LHS < RHS; break;
1093    case BinaryOperator::GT:  Result = LHS > RHS; break;
1094    case BinaryOperator::LE:  Result = LHS <= RHS; break;
1095    case BinaryOperator::GE:  Result = LHS >= RHS; break;
1096    case BinaryOperator::EQ:  Result = LHS == RHS; break;
1097    case BinaryOperator::NE:  Result = LHS != RHS; break;
1098    case BinaryOperator::And: Result = LHS & RHS; break;
1099    case BinaryOperator::Xor: Result = LHS ^ RHS; break;
1100    case BinaryOperator::Or:  Result = LHS | RHS; break;
1101    case BinaryOperator::LAnd:
1102      Result = LHS != 0 && RHS != 0;
1103      break;
1104    case BinaryOperator::LOr:
1105      Result = LHS != 0 || RHS != 0;
1106      break;
1107
1108    case BinaryOperator::Comma:
1109      // C99 6.6p3: "shall not contain assignment, ..., or comma operators,
1110      // *except* when they are contained within a subexpression that is not
1111      // evaluated".  Note that Assignment can never happen due to constraints
1112      // on the LHS subexpr, so we don't need to check it here.
1113      if (isEvaluated) {
1114        if (Loc) *Loc = getLocStart();
1115        return false;
1116      }
1117
1118      // The result of the constant expr is the RHS.
1119      Result = RHS;
1120      return true;
1121    }
1122
1123    assert(!Exp->isAssignmentOp() && "LHS can't be a constant expr!");
1124    break;
1125  }
1126  case ImplicitCastExprClass:
1127  case CStyleCastExprClass:
1128  case CXXFunctionalCastExprClass: {
1129    const Expr *SubExpr = cast<CastExpr>(this)->getSubExpr();
1130    SourceLocation CastLoc = getLocStart();
1131
1132    // C99 6.6p6: shall only convert arithmetic types to integer types.
1133    if (!SubExpr->getType()->isArithmeticType() ||
1134        !getType()->isIntegerType()) {
1135      if (Loc) *Loc = SubExpr->getLocStart();
1136      return false;
1137    }
1138
1139    uint32_t DestWidth = static_cast<uint32_t>(Ctx.getTypeSize(getType()));
1140
1141    // Handle simple integer->integer casts.
1142    if (SubExpr->getType()->isIntegerType()) {
1143      if (!SubExpr->isIntegerConstantExpr(Result, Ctx, Loc, isEvaluated))
1144        return false;
1145
1146      // Figure out if this is a truncate, extend or noop cast.
1147      // If the input is signed, do a sign extend, noop, or truncate.
1148      if (getType()->isBooleanType()) {
1149        // Conversion to bool compares against zero.
1150        Result = Result != 0;
1151        Result.zextOrTrunc(DestWidth);
1152      } else if (SubExpr->getType()->isSignedIntegerType())
1153        Result.sextOrTrunc(DestWidth);
1154      else  // If the input is unsigned, do a zero extend, noop, or truncate.
1155        Result.zextOrTrunc(DestWidth);
1156      break;
1157    }
1158
1159    // Allow floating constants that are the immediate operands of casts or that
1160    // are parenthesized.
1161    const Expr *Operand = SubExpr;
1162    while (const ParenExpr *PE = dyn_cast<ParenExpr>(Operand))
1163      Operand = PE->getSubExpr();
1164
1165    // If this isn't a floating literal, we can't handle it.
1166    const FloatingLiteral *FL = dyn_cast<FloatingLiteral>(Operand);
1167    if (!FL) {
1168      if (Loc) *Loc = Operand->getLocStart();
1169      return false;
1170    }
1171
1172    // If the destination is boolean, compare against zero.
1173    if (getType()->isBooleanType()) {
1174      Result = !FL->getValue().isZero();
1175      Result.zextOrTrunc(DestWidth);
1176      break;
1177    }
1178
1179    // Determine whether we are converting to unsigned or signed.
1180    bool DestSigned = getType()->isSignedIntegerType();
1181
1182    // TODO: Warn on overflow, but probably not here: isIntegerConstantExpr can
1183    // be called multiple times per AST.
1184    uint64_t Space[4];
1185    bool ignored;
1186    (void)FL->getValue().convertToInteger(Space, DestWidth, DestSigned,
1187                                          llvm::APFloat::rmTowardZero,
1188                                          &ignored);
1189    Result = llvm::APInt(DestWidth, 4, Space);
1190    break;
1191  }
1192  case ConditionalOperatorClass: {
1193    const ConditionalOperator *Exp = cast<ConditionalOperator>(this);
1194
1195    const Expr *Cond = Exp->getCond();
1196
1197    if (!Cond->isIntegerConstantExpr(Result, Ctx, Loc, isEvaluated))
1198      return false;
1199
1200    const Expr *TrueExp  = Exp->getLHS();
1201    const Expr *FalseExp = Exp->getRHS();
1202    if (Result == 0) std::swap(TrueExp, FalseExp);
1203
1204    // If the condition (ignoring parens) is a __builtin_constant_p call,
1205    // then only the true side is actually considered in an integer constant
1206    // expression, and it is fully evaluated.  This is an important GNU
1207    // extension.  See GCC PR38377 for discussion.
1208    if (const CallExpr *CallCE = dyn_cast<CallExpr>(Cond->IgnoreParenCasts()))
1209      if (CallCE->isBuiltinCall(Ctx) == Builtin::BI__builtin_constant_p) {
1210        EvalResult EVResult;
1211        if (!Evaluate(EVResult, Ctx) || EVResult.HasSideEffects)
1212          return false;
1213        assert(EVResult.Val.isInt() && "FP conditional expr not expected");
1214        Result = EVResult.Val.getInt();
1215        if (Loc) *Loc = EVResult.DiagLoc;
1216        return true;
1217      }
1218
1219    // Evaluate the false one first, discard the result.
1220    if (FalseExp && !FalseExp->isIntegerConstantExpr(Result, Ctx, Loc, false))
1221      return false;
1222    // Evalute the true one, capture the result.
1223    if (TrueExp &&
1224        !TrueExp->isIntegerConstantExpr(Result, Ctx, Loc, isEvaluated))
1225      return false;
1226    break;
1227  }
1228  case CXXDefaultArgExprClass:
1229    return cast<CXXDefaultArgExpr>(this)
1230             ->isIntegerConstantExpr(Result, Ctx, Loc, isEvaluated);
1231
1232  case UnaryTypeTraitExprClass:
1233    Result = cast<UnaryTypeTraitExpr>(this)->Evaluate();
1234    return true;
1235  }
1236
1237  // Cases that are valid constant exprs fall through to here.
1238  Result.setIsUnsigned(getType()->isUnsignedIntegerType());
1239  return true;
1240}
1241
1242/// isNullPointerConstant - C99 6.3.2.3p3 -  Return true if this is either an
1243/// integer constant expression with the value zero, or if this is one that is
1244/// cast to void*.
1245bool Expr::isNullPointerConstant(ASTContext &Ctx) const
1246{
1247  // Strip off a cast to void*, if it exists. Except in C++.
1248  if (const ExplicitCastExpr *CE = dyn_cast<ExplicitCastExpr>(this)) {
1249    if (!Ctx.getLangOptions().CPlusPlus) {
1250      // Check that it is a cast to void*.
1251      if (const PointerType *PT = CE->getType()->getAsPointerType()) {
1252        QualType Pointee = PT->getPointeeType();
1253        if (Pointee.getCVRQualifiers() == 0 &&
1254            Pointee->isVoidType() &&                              // to void*
1255            CE->getSubExpr()->getType()->isIntegerType())         // from int.
1256          return CE->getSubExpr()->isNullPointerConstant(Ctx);
1257      }
1258    }
1259  } else if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(this)) {
1260    // Ignore the ImplicitCastExpr type entirely.
1261    return ICE->getSubExpr()->isNullPointerConstant(Ctx);
1262  } else if (const ParenExpr *PE = dyn_cast<ParenExpr>(this)) {
1263    // Accept ((void*)0) as a null pointer constant, as many other
1264    // implementations do.
1265    return PE->getSubExpr()->isNullPointerConstant(Ctx);
1266  } else if (const CXXDefaultArgExpr *DefaultArg
1267               = dyn_cast<CXXDefaultArgExpr>(this)) {
1268    // See through default argument expressions
1269    return DefaultArg->getExpr()->isNullPointerConstant(Ctx);
1270  } else if (isa<GNUNullExpr>(this)) {
1271    // The GNU __null extension is always a null pointer constant.
1272    return true;
1273  }
1274
1275  // This expression must be an integer type.
1276  if (!getType()->isIntegerType())
1277    return false;
1278
1279  // If we have an integer constant expression, we need to *evaluate* it and
1280  // test for the value 0.
1281  // FIXME: We should probably return false if we're compiling in strict mode
1282  // and Diag is not null (this indicates that the value was foldable but not
1283  // an ICE.
1284  EvalResult Result;
1285  return Evaluate(Result, Ctx) && !Result.HasSideEffects &&
1286        Result.Val.isInt() && Result.Val.getInt() == 0;
1287}
1288
1289/// isBitField - Return true if this expression is a bit-field.
1290bool Expr::isBitField() {
1291  Expr *E = this->IgnoreParenCasts();
1292  if (MemberExpr *MemRef = dyn_cast<MemberExpr>(E))
1293    if (FieldDecl *Field = dyn_cast<FieldDecl>(MemRef->getMemberDecl()))
1294        return Field->isBitField();
1295  return false;
1296}
1297
1298/// isArrow - Return true if the base expression is a pointer to vector,
1299/// return false if the base expression is a vector.
1300bool ExtVectorElementExpr::isArrow() const {
1301  return getBase()->getType()->isPointerType();
1302}
1303
1304unsigned ExtVectorElementExpr::getNumElements() const {
1305  if (const VectorType *VT = getType()->getAsVectorType())
1306    return VT->getNumElements();
1307  return 1;
1308}
1309
1310/// containsDuplicateElements - Return true if any element access is repeated.
1311bool ExtVectorElementExpr::containsDuplicateElements() const {
1312  const char *compStr = Accessor.getName();
1313  unsigned length = Accessor.getLength();
1314
1315  // Halving swizzles do not contain duplicate elements.
1316  if (!strcmp(compStr, "hi") || !strcmp(compStr, "lo") ||
1317      !strcmp(compStr, "even") || !strcmp(compStr, "odd"))
1318    return false;
1319
1320  // Advance past s-char prefix on hex swizzles.
1321  if (*compStr == 's') {
1322    compStr++;
1323    length--;
1324  }
1325
1326  for (unsigned i = 0; i != length-1; i++) {
1327    const char *s = compStr+i;
1328    for (const char c = *s++; *s; s++)
1329      if (c == *s)
1330        return true;
1331  }
1332  return false;
1333}
1334
1335/// getEncodedElementAccess - We encode the fields as a llvm ConstantArray.
1336void ExtVectorElementExpr::getEncodedElementAccess(
1337                                  llvm::SmallVectorImpl<unsigned> &Elts) const {
1338  const char *compStr = Accessor.getName();
1339  if (*compStr == 's')
1340    compStr++;
1341
1342  bool isHi =   !strcmp(compStr, "hi");
1343  bool isLo =   !strcmp(compStr, "lo");
1344  bool isEven = !strcmp(compStr, "even");
1345  bool isOdd  = !strcmp(compStr, "odd");
1346
1347  for (unsigned i = 0, e = getNumElements(); i != e; ++i) {
1348    uint64_t Index;
1349
1350    if (isHi)
1351      Index = e + i;
1352    else if (isLo)
1353      Index = i;
1354    else if (isEven)
1355      Index = 2 * i;
1356    else if (isOdd)
1357      Index = 2 * i + 1;
1358    else
1359      Index = ExtVectorType::getAccessorIdx(compStr[i]);
1360
1361    Elts.push_back(Index);
1362  }
1363}
1364
1365// constructor for instance messages.
1366ObjCMessageExpr::ObjCMessageExpr(Expr *receiver, Selector selInfo,
1367                QualType retType, ObjCMethodDecl *mproto,
1368                SourceLocation LBrac, SourceLocation RBrac,
1369                Expr **ArgExprs, unsigned nargs)
1370  : Expr(ObjCMessageExprClass, retType), SelName(selInfo),
1371    MethodProto(mproto) {
1372  NumArgs = nargs;
1373  SubExprs = new Stmt*[NumArgs+1];
1374  SubExprs[RECEIVER] = receiver;
1375  if (NumArgs) {
1376    for (unsigned i = 0; i != NumArgs; ++i)
1377      SubExprs[i+ARGS_START] = static_cast<Expr *>(ArgExprs[i]);
1378  }
1379  LBracloc = LBrac;
1380  RBracloc = RBrac;
1381}
1382
1383// constructor for class messages.
1384// FIXME: clsName should be typed to ObjCInterfaceType
1385ObjCMessageExpr::ObjCMessageExpr(IdentifierInfo *clsName, Selector selInfo,
1386                QualType retType, ObjCMethodDecl *mproto,
1387                SourceLocation LBrac, SourceLocation RBrac,
1388                Expr **ArgExprs, unsigned nargs)
1389  : Expr(ObjCMessageExprClass, retType), SelName(selInfo),
1390    MethodProto(mproto) {
1391  NumArgs = nargs;
1392  SubExprs = new Stmt*[NumArgs+1];
1393  SubExprs[RECEIVER] = (Expr*) ((uintptr_t) clsName | IsClsMethDeclUnknown);
1394  if (NumArgs) {
1395    for (unsigned i = 0; i != NumArgs; ++i)
1396      SubExprs[i+ARGS_START] = static_cast<Expr *>(ArgExprs[i]);
1397  }
1398  LBracloc = LBrac;
1399  RBracloc = RBrac;
1400}
1401
1402// constructor for class messages.
1403ObjCMessageExpr::ObjCMessageExpr(ObjCInterfaceDecl *cls, Selector selInfo,
1404                                 QualType retType, ObjCMethodDecl *mproto,
1405                                 SourceLocation LBrac, SourceLocation RBrac,
1406                                 Expr **ArgExprs, unsigned nargs)
1407: Expr(ObjCMessageExprClass, retType), SelName(selInfo),
1408MethodProto(mproto) {
1409  NumArgs = nargs;
1410  SubExprs = new Stmt*[NumArgs+1];
1411  SubExprs[RECEIVER] = (Expr*) ((uintptr_t) cls | IsClsMethDeclKnown);
1412  if (NumArgs) {
1413    for (unsigned i = 0; i != NumArgs; ++i)
1414      SubExprs[i+ARGS_START] = static_cast<Expr *>(ArgExprs[i]);
1415  }
1416  LBracloc = LBrac;
1417  RBracloc = RBrac;
1418}
1419
1420ObjCMessageExpr::ClassInfo ObjCMessageExpr::getClassInfo() const {
1421  uintptr_t x = (uintptr_t) SubExprs[RECEIVER];
1422  switch (x & Flags) {
1423    default:
1424      assert(false && "Invalid ObjCMessageExpr.");
1425    case IsInstMeth:
1426      return ClassInfo(0, 0);
1427    case IsClsMethDeclUnknown:
1428      return ClassInfo(0, (IdentifierInfo*) (x & ~Flags));
1429    case IsClsMethDeclKnown: {
1430      ObjCInterfaceDecl* D = (ObjCInterfaceDecl*) (x & ~Flags);
1431      return ClassInfo(D, D->getIdentifier());
1432    }
1433  }
1434}
1435
1436bool ChooseExpr::isConditionTrue(ASTContext &C) const {
1437  return getCond()->getIntegerConstantExprValue(C) != 0;
1438}
1439
1440static int64_t evaluateOffsetOf(ASTContext& C, const Expr *E) {
1441  if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
1442    QualType Ty = ME->getBase()->getType();
1443
1444    RecordDecl *RD = Ty->getAsRecordType()->getDecl();
1445    const ASTRecordLayout &RL = C.getASTRecordLayout(RD);
1446    if (FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl())) {
1447      // FIXME: This is linear time. And the fact that we're indexing
1448      // into the layout by position in the record means that we're
1449      // either stuck numbering the fields in the AST or we have to keep
1450      // the linear search (yuck and yuck).
1451      unsigned i = 0;
1452      for (RecordDecl::field_iterator Field = RD->field_begin(),
1453                                   FieldEnd = RD->field_end();
1454           Field != FieldEnd; (void)++Field, ++i) {
1455        if (*Field == FD)
1456          break;
1457      }
1458
1459      return RL.getFieldOffset(i) + evaluateOffsetOf(C, ME->getBase());
1460    }
1461  } else if (const ArraySubscriptExpr *ASE = dyn_cast<ArraySubscriptExpr>(E)) {
1462    const Expr *Base = ASE->getBase();
1463
1464    int64_t size = C.getTypeSize(ASE->getType());
1465    size *= ASE->getIdx()->getIntegerConstantExprValue(C).getSExtValue();
1466
1467    return size + evaluateOffsetOf(C, Base);
1468  } else if (isa<CompoundLiteralExpr>(E))
1469    return 0;
1470
1471  assert(0 && "Unknown offsetof subexpression!");
1472  return 0;
1473}
1474
1475int64_t UnaryOperator::evaluateOffsetOf(ASTContext& C) const
1476{
1477  assert(Opc == OffsetOf && "Unary operator not offsetof!");
1478
1479  unsigned CharSize = C.Target.getCharWidth();
1480  return ::evaluateOffsetOf(C, cast<Expr>(Val)) / CharSize;
1481}
1482
1483void SizeOfAlignOfExpr::Destroy(ASTContext& C) {
1484  // Override default behavior of traversing children. If this has a type
1485  // operand and the type is a variable-length array, the child iteration
1486  // will iterate over the size expression. However, this expression belongs
1487  // to the type, not to this, so we don't want to delete it.
1488  // We still want to delete this expression.
1489  if (isArgumentType()) {
1490    this->~SizeOfAlignOfExpr();
1491    C.Deallocate(this);
1492  }
1493  else
1494    Expr::Destroy(C);
1495}
1496
1497void OverloadExpr::Destroy(ASTContext& C) {
1498  DestroyChildren(C);
1499  C.Deallocate(SubExprs);
1500  this->~OverloadExpr();
1501  C.Deallocate(this);
1502}
1503
1504//===----------------------------------------------------------------------===//
1505//  DesignatedInitExpr
1506//===----------------------------------------------------------------------===//
1507
1508IdentifierInfo *DesignatedInitExpr::Designator::getFieldName() {
1509  assert(Kind == FieldDesignator && "Only valid on a field designator");
1510  if (Field.NameOrField & 0x01)
1511    return reinterpret_cast<IdentifierInfo *>(Field.NameOrField&~0x01);
1512  else
1513    return getField()->getIdentifier();
1514}
1515
1516DesignatedInitExpr *
1517DesignatedInitExpr::Create(ASTContext &C, Designator *Designators,
1518                           unsigned NumDesignators,
1519                           Expr **IndexExprs, unsigned NumIndexExprs,
1520                           SourceLocation ColonOrEqualLoc,
1521                           bool UsesColonSyntax, Expr *Init) {
1522  void *Mem = C.Allocate(sizeof(DesignatedInitExpr) +
1523                         sizeof(Designator) * NumDesignators +
1524                         sizeof(Stmt *) * (NumIndexExprs + 1), 8);
1525  DesignatedInitExpr *DIE
1526    = new (Mem) DesignatedInitExpr(C.VoidTy, NumDesignators,
1527                                   ColonOrEqualLoc, UsesColonSyntax,
1528                                   NumIndexExprs + 1);
1529
1530  // Fill in the designators
1531  unsigned ExpectedNumSubExprs = 0;
1532  designators_iterator Desig = DIE->designators_begin();
1533  for (unsigned Idx = 0; Idx < NumDesignators; ++Idx, ++Desig) {
1534    new (static_cast<void*>(Desig)) Designator(Designators[Idx]);
1535    if (Designators[Idx].isArrayDesignator())
1536      ++ExpectedNumSubExprs;
1537    else if (Designators[Idx].isArrayRangeDesignator())
1538      ExpectedNumSubExprs += 2;
1539  }
1540  assert(ExpectedNumSubExprs == NumIndexExprs && "Wrong number of indices!");
1541
1542  // Fill in the subexpressions, including the initializer expression.
1543  child_iterator Child = DIE->child_begin();
1544  *Child++ = Init;
1545  for (unsigned Idx = 0; Idx < NumIndexExprs; ++Idx, ++Child)
1546    *Child = IndexExprs[Idx];
1547
1548  return DIE;
1549}
1550
1551SourceRange DesignatedInitExpr::getSourceRange() const {
1552  SourceLocation StartLoc;
1553  Designator &First =
1554    *const_cast<DesignatedInitExpr*>(this)->designators_begin();
1555  if (First.isFieldDesignator()) {
1556    if (UsesColonSyntax)
1557      StartLoc = SourceLocation::getFromRawEncoding(First.Field.FieldLoc);
1558    else
1559      StartLoc = SourceLocation::getFromRawEncoding(First.Field.DotLoc);
1560  } else
1561    StartLoc =
1562      SourceLocation::getFromRawEncoding(First.ArrayOrRange.LBracketLoc);
1563  return SourceRange(StartLoc, getInit()->getSourceRange().getEnd());
1564}
1565
1566DesignatedInitExpr::designators_iterator
1567DesignatedInitExpr::designators_begin() {
1568  char* Ptr = static_cast<char*>(static_cast<void *>(this));
1569  Ptr += sizeof(DesignatedInitExpr);
1570  return static_cast<Designator*>(static_cast<void*>(Ptr));
1571}
1572
1573DesignatedInitExpr::designators_iterator DesignatedInitExpr::designators_end() {
1574  return designators_begin() + NumDesignators;
1575}
1576
1577Expr *DesignatedInitExpr::getArrayIndex(const Designator& D) {
1578  assert(D.Kind == Designator::ArrayDesignator && "Requires array designator");
1579  char* Ptr = static_cast<char*>(static_cast<void *>(this));
1580  Ptr += sizeof(DesignatedInitExpr);
1581  Ptr += sizeof(Designator) * NumDesignators;
1582  Stmt **SubExprs = reinterpret_cast<Stmt**>(reinterpret_cast<void**>(Ptr));
1583  return cast<Expr>(*(SubExprs + D.ArrayOrRange.Index + 1));
1584}
1585
1586Expr *DesignatedInitExpr::getArrayRangeStart(const Designator& D) {
1587  assert(D.Kind == Designator::ArrayRangeDesignator &&
1588         "Requires array range designator");
1589  char* Ptr = static_cast<char*>(static_cast<void *>(this));
1590  Ptr += sizeof(DesignatedInitExpr);
1591  Ptr += sizeof(Designator) * NumDesignators;
1592  Stmt **SubExprs = reinterpret_cast<Stmt**>(reinterpret_cast<void**>(Ptr));
1593  return cast<Expr>(*(SubExprs + D.ArrayOrRange.Index + 1));
1594}
1595
1596Expr *DesignatedInitExpr::getArrayRangeEnd(const Designator& D) {
1597  assert(D.Kind == Designator::ArrayRangeDesignator &&
1598         "Requires array range designator");
1599  char* Ptr = static_cast<char*>(static_cast<void *>(this));
1600  Ptr += sizeof(DesignatedInitExpr);
1601  Ptr += sizeof(Designator) * NumDesignators;
1602  Stmt **SubExprs = reinterpret_cast<Stmt**>(reinterpret_cast<void**>(Ptr));
1603  return cast<Expr>(*(SubExprs + D.ArrayOrRange.Index + 2));
1604}
1605
1606//===----------------------------------------------------------------------===//
1607//  ExprIterator.
1608//===----------------------------------------------------------------------===//
1609
1610Expr* ExprIterator::operator[](size_t idx) { return cast<Expr>(I[idx]); }
1611Expr* ExprIterator::operator*() const { return cast<Expr>(*I); }
1612Expr* ExprIterator::operator->() const { return cast<Expr>(*I); }
1613const Expr* ConstExprIterator::operator[](size_t idx) const {
1614  return cast<Expr>(I[idx]);
1615}
1616const Expr* ConstExprIterator::operator*() const { return cast<Expr>(*I); }
1617const Expr* ConstExprIterator::operator->() const { return cast<Expr>(*I); }
1618
1619//===----------------------------------------------------------------------===//
1620//  Child Iterators for iterating over subexpressions/substatements
1621//===----------------------------------------------------------------------===//
1622
1623// DeclRefExpr
1624Stmt::child_iterator DeclRefExpr::child_begin() { return child_iterator(); }
1625Stmt::child_iterator DeclRefExpr::child_end() { return child_iterator(); }
1626
1627// ObjCIvarRefExpr
1628Stmt::child_iterator ObjCIvarRefExpr::child_begin() { return &Base; }
1629Stmt::child_iterator ObjCIvarRefExpr::child_end() { return &Base+1; }
1630
1631// ObjCPropertyRefExpr
1632Stmt::child_iterator ObjCPropertyRefExpr::child_begin() { return &Base; }
1633Stmt::child_iterator ObjCPropertyRefExpr::child_end() { return &Base+1; }
1634
1635// ObjCKVCRefExpr
1636Stmt::child_iterator ObjCKVCRefExpr::child_begin() { return &Base; }
1637Stmt::child_iterator ObjCKVCRefExpr::child_end() { return &Base+1; }
1638
1639// ObjCSuperExpr
1640Stmt::child_iterator ObjCSuperExpr::child_begin() { return child_iterator(); }
1641Stmt::child_iterator ObjCSuperExpr::child_end() { return child_iterator(); }
1642
1643// PredefinedExpr
1644Stmt::child_iterator PredefinedExpr::child_begin() { return child_iterator(); }
1645Stmt::child_iterator PredefinedExpr::child_end() { return child_iterator(); }
1646
1647// IntegerLiteral
1648Stmt::child_iterator IntegerLiteral::child_begin() { return child_iterator(); }
1649Stmt::child_iterator IntegerLiteral::child_end() { return child_iterator(); }
1650
1651// CharacterLiteral
1652Stmt::child_iterator CharacterLiteral::child_begin() { return child_iterator();}
1653Stmt::child_iterator CharacterLiteral::child_end() { return child_iterator(); }
1654
1655// FloatingLiteral
1656Stmt::child_iterator FloatingLiteral::child_begin() { return child_iterator(); }
1657Stmt::child_iterator FloatingLiteral::child_end() { return child_iterator(); }
1658
1659// ImaginaryLiteral
1660Stmt::child_iterator ImaginaryLiteral::child_begin() { return &Val; }
1661Stmt::child_iterator ImaginaryLiteral::child_end() { return &Val+1; }
1662
1663// StringLiteral
1664Stmt::child_iterator StringLiteral::child_begin() { return child_iterator(); }
1665Stmt::child_iterator StringLiteral::child_end() { return child_iterator(); }
1666
1667// ParenExpr
1668Stmt::child_iterator ParenExpr::child_begin() { return &Val; }
1669Stmt::child_iterator ParenExpr::child_end() { return &Val+1; }
1670
1671// UnaryOperator
1672Stmt::child_iterator UnaryOperator::child_begin() { return &Val; }
1673Stmt::child_iterator UnaryOperator::child_end() { return &Val+1; }
1674
1675// SizeOfAlignOfExpr
1676Stmt::child_iterator SizeOfAlignOfExpr::child_begin() {
1677  // If this is of a type and the type is a VLA type (and not a typedef), the
1678  // size expression of the VLA needs to be treated as an executable expression.
1679  // Why isn't this weirdness documented better in StmtIterator?
1680  if (isArgumentType()) {
1681    if (VariableArrayType* T = dyn_cast<VariableArrayType>(
1682                                   getArgumentType().getTypePtr()))
1683      return child_iterator(T);
1684    return child_iterator();
1685  }
1686  return child_iterator(&Argument.Ex);
1687}
1688Stmt::child_iterator SizeOfAlignOfExpr::child_end() {
1689  if (isArgumentType())
1690    return child_iterator();
1691  return child_iterator(&Argument.Ex + 1);
1692}
1693
1694// ArraySubscriptExpr
1695Stmt::child_iterator ArraySubscriptExpr::child_begin() {
1696  return &SubExprs[0];
1697}
1698Stmt::child_iterator ArraySubscriptExpr::child_end() {
1699  return &SubExprs[0]+END_EXPR;
1700}
1701
1702// CallExpr
1703Stmt::child_iterator CallExpr::child_begin() {
1704  return &SubExprs[0];
1705}
1706Stmt::child_iterator CallExpr::child_end() {
1707  return &SubExprs[0]+NumArgs+ARGS_START;
1708}
1709
1710// MemberExpr
1711Stmt::child_iterator MemberExpr::child_begin() { return &Base; }
1712Stmt::child_iterator MemberExpr::child_end() { return &Base+1; }
1713
1714// ExtVectorElementExpr
1715Stmt::child_iterator ExtVectorElementExpr::child_begin() { return &Base; }
1716Stmt::child_iterator ExtVectorElementExpr::child_end() { return &Base+1; }
1717
1718// CompoundLiteralExpr
1719Stmt::child_iterator CompoundLiteralExpr::child_begin() { return &Init; }
1720Stmt::child_iterator CompoundLiteralExpr::child_end() { return &Init+1; }
1721
1722// CastExpr
1723Stmt::child_iterator CastExpr::child_begin() { return &Op; }
1724Stmt::child_iterator CastExpr::child_end() { return &Op+1; }
1725
1726// BinaryOperator
1727Stmt::child_iterator BinaryOperator::child_begin() {
1728  return &SubExprs[0];
1729}
1730Stmt::child_iterator BinaryOperator::child_end() {
1731  return &SubExprs[0]+END_EXPR;
1732}
1733
1734// ConditionalOperator
1735Stmt::child_iterator ConditionalOperator::child_begin() {
1736  return &SubExprs[0];
1737}
1738Stmt::child_iterator ConditionalOperator::child_end() {
1739  return &SubExprs[0]+END_EXPR;
1740}
1741
1742// AddrLabelExpr
1743Stmt::child_iterator AddrLabelExpr::child_begin() { return child_iterator(); }
1744Stmt::child_iterator AddrLabelExpr::child_end() { return child_iterator(); }
1745
1746// StmtExpr
1747Stmt::child_iterator StmtExpr::child_begin() { return &SubStmt; }
1748Stmt::child_iterator StmtExpr::child_end() { return &SubStmt+1; }
1749
1750// TypesCompatibleExpr
1751Stmt::child_iterator TypesCompatibleExpr::child_begin() {
1752  return child_iterator();
1753}
1754
1755Stmt::child_iterator TypesCompatibleExpr::child_end() {
1756  return child_iterator();
1757}
1758
1759// ChooseExpr
1760Stmt::child_iterator ChooseExpr::child_begin() { return &SubExprs[0]; }
1761Stmt::child_iterator ChooseExpr::child_end() { return &SubExprs[0]+END_EXPR; }
1762
1763// GNUNullExpr
1764Stmt::child_iterator GNUNullExpr::child_begin() { return child_iterator(); }
1765Stmt::child_iterator GNUNullExpr::child_end() { return child_iterator(); }
1766
1767// OverloadExpr
1768Stmt::child_iterator OverloadExpr::child_begin() { return &SubExprs[0]; }
1769Stmt::child_iterator OverloadExpr::child_end() { return &SubExprs[0]+NumExprs; }
1770
1771// ShuffleVectorExpr
1772Stmt::child_iterator ShuffleVectorExpr::child_begin() {
1773  return &SubExprs[0];
1774}
1775Stmt::child_iterator ShuffleVectorExpr::child_end() {
1776  return &SubExprs[0]+NumExprs;
1777}
1778
1779// VAArgExpr
1780Stmt::child_iterator VAArgExpr::child_begin() { return &Val; }
1781Stmt::child_iterator VAArgExpr::child_end() { return &Val+1; }
1782
1783// InitListExpr
1784Stmt::child_iterator InitListExpr::child_begin() {
1785  return InitExprs.size() ? &InitExprs[0] : 0;
1786}
1787Stmt::child_iterator InitListExpr::child_end() {
1788  return InitExprs.size() ? &InitExprs[0] + InitExprs.size() : 0;
1789}
1790
1791// DesignatedInitExpr
1792Stmt::child_iterator DesignatedInitExpr::child_begin() {
1793  char* Ptr = static_cast<char*>(static_cast<void *>(this));
1794  Ptr += sizeof(DesignatedInitExpr);
1795  Ptr += sizeof(Designator) * NumDesignators;
1796  return reinterpret_cast<Stmt**>(reinterpret_cast<void**>(Ptr));
1797}
1798Stmt::child_iterator DesignatedInitExpr::child_end() {
1799  return child_iterator(&*child_begin() + NumSubExprs);
1800}
1801
1802// ImplicitValueInitExpr
1803Stmt::child_iterator ImplicitValueInitExpr::child_begin() {
1804  return child_iterator();
1805}
1806
1807Stmt::child_iterator ImplicitValueInitExpr::child_end() {
1808  return child_iterator();
1809}
1810
1811// ObjCStringLiteral
1812Stmt::child_iterator ObjCStringLiteral::child_begin() {
1813  return child_iterator();
1814}
1815Stmt::child_iterator ObjCStringLiteral::child_end() {
1816  return child_iterator();
1817}
1818
1819// ObjCEncodeExpr
1820Stmt::child_iterator ObjCEncodeExpr::child_begin() { return child_iterator(); }
1821Stmt::child_iterator ObjCEncodeExpr::child_end() { return child_iterator(); }
1822
1823// ObjCSelectorExpr
1824Stmt::child_iterator ObjCSelectorExpr::child_begin() {
1825  return child_iterator();
1826}
1827Stmt::child_iterator ObjCSelectorExpr::child_end() {
1828  return child_iterator();
1829}
1830
1831// ObjCProtocolExpr
1832Stmt::child_iterator ObjCProtocolExpr::child_begin() {
1833  return child_iterator();
1834}
1835Stmt::child_iterator ObjCProtocolExpr::child_end() {
1836  return child_iterator();
1837}
1838
1839// ObjCMessageExpr
1840Stmt::child_iterator ObjCMessageExpr::child_begin() {
1841  return getReceiver() ? &SubExprs[0] : &SubExprs[0] + ARGS_START;
1842}
1843Stmt::child_iterator ObjCMessageExpr::child_end() {
1844  return &SubExprs[0]+ARGS_START+getNumArgs();
1845}
1846
1847// Blocks
1848Stmt::child_iterator BlockExpr::child_begin() { return child_iterator(); }
1849Stmt::child_iterator BlockExpr::child_end() { return child_iterator(); }
1850
1851Stmt::child_iterator BlockDeclRefExpr::child_begin() { return child_iterator();}
1852Stmt::child_iterator BlockDeclRefExpr::child_end() { return child_iterator(); }
1853