<div dir="ltr"><div>Looks like Clang::Index/index-many-call-ops.cpp still uses too much stack in ASan mode:</div><div><a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/10177/steps/check-clang%20asan/logs/stdio" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/10177/steps/check-clang%20asan/logs/stdio</a><br></div><div><br></div><div>ASan increases the stack usage, so do you think there's more to fix here, or we should just disable the test under ASan?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 23, 2015 at 11:13 PM, Richard Smith via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rsmith<br>
Date: Tue Nov 24 01:13:06 2015<br>
New Revision: 253958<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=253958&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=253958&view=rev</a><br>
Log:<br>
Reduce the stack usage per recursive step when RecursiveASTVisitor cannot perform data recursion.<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/AST/RecursiveASTVisitor.h<br>
<br>
Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=253958&r1=253957&r2=253958&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=253958&r1=253957&r2=253958&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)<br>
+++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Tue Nov 24 01:13:06 2015<br>
@@ -471,28 +471,10 @@ private:<br>
   /// \brief Process clauses with list of variables.<br>
   template <typename T> bool VisitOMPClauseList(T *Node);<br>
<br>
-  bool dataTraverse(Stmt *S);<br>
   bool dataTraverseNode(Stmt *S, DataRecursionQueue *Queue);<br>
 };<br>
<br>
 template <typename Derived><br>
-bool RecursiveASTVisitor<Derived>::dataTraverse(Stmt *S) {<br>
-  SmallVector<Stmt*, 16> Queue;<br>
-  Queue.push_back(S);<br>
-<br>
-  while (!Queue.empty()) {<br>
-    Stmt *CurrS = Queue.pop_back_val();<br>
-<br>
-    size_t N = Queue.size();<br>
-    TRY_TO(dataTraverseNode(CurrS, &Queue));<br>
-    // Process new children in the order they were added.<br>
-    std::reverse(Queue.begin() + N, Queue.end());<br>
-  }<br>
-<br>
-  return true;<br>
-}<br>
-<br>
-template <typename Derived><br>
 bool RecursiveASTVisitor<Derived>::dataTraverseNode(Stmt *S,<br>
                                                     DataRecursionQueue *Queue) {<br>
 #define DISPATCH_STMT(NAME, CLASS, VAR)                                        \<br>
@@ -561,10 +543,23 @@ bool RecursiveASTVisitor<Derived>::Trave<br>
                               &RecursiveASTVisitor::TraverseStmt>::value)<br>
     return dataTraverseNode(S, nullptr);<br>
<br>
-  if (!Queue)<br>
-    return dataTraverse(S);<br>
+  if (Queue) {<br>
+    Queue->push_back(S);<br>
+    return true;<br>
+  }<br>
+<br>
+  SmallVector<Stmt *, 8> LocalQueue;<br>
+  LocalQueue.push_back(S);<br>
+<br>
+  while (!LocalQueue.empty()) {<br>
+    Stmt *CurrS = LocalQueue.pop_back_val();<br>
+<br>
+    size_t N = LocalQueue.size();<br>
+    TRY_TO(dataTraverseNode(CurrS, &LocalQueue));<br>
+    // Process new children in the order they were added.<br>
+    std::reverse(LocalQueue.begin() + N, LocalQueue.end());<br>
+  }<br>
<br>
-  Queue->push_back(S);<br>
   return true;<br>
 }<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div></div>
</div>