[cfe-commits] r152820 - in /cfe/trunk: include/clang/AST/RecursiveASTVisitor.h test/Index/index-many-logical-ops.c

Matt Beaumont-Gay matthewbg at google.com
Fri Mar 16 20:00:07 PDT 2012


Hi Argyrios,

This changes the behavior of RAV subclasses which override the
Traverse* methods. Is that intended?

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