[cfe-commits] r152820 - in /cfe/trunk: include/clang/AST/RecursiveASTVisitor.h test/Index/index-many-logical-ops.c
Argyrios Kyrtzidis
kyrtzidis at apple.com
Mon Mar 19 13:58:06 PDT 2012
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 <akyrtzi at gmail.com> 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
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list