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