On Mar 16, 2012, at 8:00 PM, Matt Beaumont-Gay wrote: > Hi Argyrios, > > This changes the behavior of RAV subclasses which override the > Traverse* methods. Is that intended?
Yes, intended. To elaborate: There are 2 uses cases for overriding Traverse* methods: 1) You want to skip traversing a statement. 2) You want to do an action before and after traversing. Both of these are incompatible with data recursion (#1 is incompatible because returning false from Traverse* will abort the whole AST traversal, not of just the current statement). Subclasses of RAV can either: -Return false from shouldUseDataRecursionFor() to reenable Traverse* for these specific statements that by default use data recursion. -To do #1 but still use data recursion, a subclass can return false from shouldUseDataRecursionFor() for the specific statement that wants skipping, then skip it in Traverse*. We could also add data-recursion specific methods to more easily do #1 and #2 while using data-recursion, though I didn't think it was high priority because currently no RAV subclass overrides Traverse* for those 3 statement kinds. -Argyrios > > Thanks, > Matt > > On Thu, Mar 15, 2012 at 11:07, Argyrios Kyrtzidis <[email protected]> wrote: >> Author: akirtzidis >> Date: Thu Mar 15 13:07:19 2012 >> New Revision: 152820 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=152820&view=rev >> Log: >> Make RecursiveASTVisitor to traverse certain statements using data recursion >> to avoid a stack overflow with extreme cases. >> >> Part of rdar://10941790. >> >> Added: >> cfe/trunk/test/Index/index-many-logical-ops.c >> Modified: >> cfe/trunk/include/clang/AST/RecursiveASTVisitor.h >> >> Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=152820&r1=152819&r2=152820&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original) >> +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Thu Mar 15 13:07:19 >> 2012 >> @@ -148,6 +148,12 @@ >> /// TypeLocs. >> bool shouldWalkTypesOfTypeLocs() const { return true; } >> >> + /// \brief Return whether \param S should be traversed using data >> recursion >> + /// to avoid a stack overflow with extreme cases. >> + bool shouldUseDataRecursionFor(Stmt *S) const { >> + return isa<BinaryOperator>(S) || isa<UnaryOperator>(S) || >> isa<CaseStmt>(S); >> + } >> + >> /// \brief Recursively visit a statement or expression, by >> /// dispatching to Traverse*() based on the argument's dynamic type. >> /// >> @@ -397,8 +403,102 @@ >> bool TraverseDeclContextHelper(DeclContext *DC); >> bool TraverseFunctionHelper(FunctionDecl *D); >> bool TraverseVarHelper(VarDecl *D); >> + >> + bool Walk(Stmt *S); >> + >> + struct EnqueueJob { >> + Stmt *S; >> + Stmt::child_iterator StmtIt; >> + >> + EnqueueJob(Stmt *S) : S(S), StmtIt() { >> + if (Expr *E = dyn_cast_or_null<Expr>(S)) >> + S = E->IgnoreParens(); >> + } >> + }; >> + bool dataTraverse(Stmt *S); >> }; >> >> +template<typename Derived> >> +bool RecursiveASTVisitor<Derived>::dataTraverse(Stmt *S) { >> + >> + SmallVector<EnqueueJob, 16> Queue; >> + Queue.push_back(S); >> + >> + while (!Queue.empty()) { >> + EnqueueJob &job = Queue.back(); >> + Stmt *CurrS = job.S; >> + if (!CurrS) { >> + Queue.pop_back(); >> + continue; >> + } >> + >> + if (getDerived().shouldUseDataRecursionFor(CurrS)) { >> + if (job.StmtIt == Stmt::child_iterator()) { >> + if (!Walk(CurrS)) return false; >> + job.StmtIt = CurrS->child_begin(); >> + } else { >> + ++job.StmtIt; >> + } >> + >> + if (job.StmtIt != CurrS->child_end()) >> + Queue.push_back(*job.StmtIt); >> + else >> + Queue.pop_back(); >> + continue; >> + } >> + >> + Queue.pop_back(); >> + TRY_TO(TraverseStmt(CurrS)); >> + } >> + >> + return true; >> +} >> + >> +template<typename Derived> >> +bool RecursiveASTVisitor<Derived>::Walk(Stmt *S) { >> + >> +#define DISPATCH_WALK(NAME, CLASS, VAR) \ >> + return getDerived().WalkUpFrom##NAME(static_cast<CLASS*>(VAR)); >> + >> + if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(S)) { >> + switch (BinOp->getOpcode()) { >> +#define OPERATOR(NAME) \ >> + case BO_##NAME: DISPATCH_WALK(Bin##NAME, BinaryOperator, S); >> + >> + BINOP_LIST() >> +#undef OPERATOR >> + >> +#define OPERATOR(NAME) \ >> + case BO_##NAME##Assign: \ >> + DISPATCH_WALK(Bin##NAME##Assign, CompoundAssignOperator, S); >> + >> + CAO_LIST() >> +#undef OPERATOR >> + } >> + } else if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(S)) { >> + switch (UnOp->getOpcode()) { >> +#define OPERATOR(NAME) \ >> + case UO_##NAME: DISPATCH_WALK(Unary##NAME, UnaryOperator, S); >> + >> + UNARYOP_LIST() >> +#undef OPERATOR >> + } >> + } >> + >> + // Top switch stmt: dispatch to TraverseFooStmt for each concrete FooStmt. >> + switch (S->getStmtClass()) { >> + case Stmt::NoStmtClass: break; >> +#define ABSTRACT_STMT(STMT) >> +#define STMT(CLASS, PARENT) \ >> + case Stmt::CLASS##Class: DISPATCH_WALK(CLASS, CLASS, S); >> +#include "clang/AST/StmtNodes.inc" >> + } >> + >> +#undef DISPATCH_WALK >> + >> + return true; >> +} >> + >> #define DISPATCH(NAME, CLASS, VAR) \ >> return getDerived().Traverse##NAME(static_cast<CLASS*>(VAR)) >> >> @@ -407,6 +507,9 @@ >> if (!S) >> return true; >> >> + if (getDerived().shouldUseDataRecursionFor(S)) >> + return dataTraverse(S); >> + >> // If we have a binary expr, dispatch to the subcode of the binop. A smart >> // optimizer (e.g. LLVM) will fold this comparison into the switch stmt >> // below. >> >> Added: cfe/trunk/test/Index/index-many-logical-ops.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/index-many-logical-ops.c?rev=152820&view=auto >> ============================================================================== >> --- cfe/trunk/test/Index/index-many-logical-ops.c (added) >> +++ cfe/trunk/test/Index/index-many-logical-ops.c Thu Mar 15 13:07:19 2012 >> @@ -0,0 +1,2011 @@ >> +// RUN: c-index-test -index-file %s | FileCheck %s >> + >> +// rdar://10941790 >> +// Check that we don't get stack overflow trying to index a huge number of >> +// logical operators. >> + >> +// CHECK: [indexDeclaration]: kind: function | name: foo >> +int foo(int x) { >> + return >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x && >> + x; >> +} >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
