r253958 - Reduce the stack usage per recursive step when RecursiveASTVisitor cannot perform data recursion.
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 24 15:54:23 PST 2015
On Tue, Nov 24, 2015 at 1:16 PM, Alexey Samsonov <vonosmas at gmail.com> wrote:
> Looks like Clang::Index/index-many-call-ops.cpp still uses too much stack
> in ASan mode:
>
> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/10177/steps/check-clang%20asan/logs/stdio
>
> ASan increases the stack usage, so do you think there's more to fix here,
> or we should just disable the test under ASan?
>
I think this should work even under ASan conditions; fixed in r254041.
> On Mon, Nov 23, 2015 at 11:13 PM, Richard Smith via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> Author: rsmith
>> Date: Tue Nov 24 01:13:06 2015
>> New Revision: 253958
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=253958&view=rev
>> Log:
>> Reduce the stack usage per recursive step when RecursiveASTVisitor cannot
>> perform data recursion.
>>
>> 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=253958&r1=253957&r2=253958&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)
>> +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Tue Nov 24 01:13:06
>> 2015
>> @@ -471,28 +471,10 @@ private:
>> /// \brief Process clauses with list of variables.
>> template <typename T> bool VisitOMPClauseList(T *Node);
>>
>> - bool dataTraverse(Stmt *S);
>> bool dataTraverseNode(Stmt *S, DataRecursionQueue *Queue);
>> };
>>
>> template <typename Derived>
>> -bool RecursiveASTVisitor<Derived>::dataTraverse(Stmt *S) {
>> - SmallVector<Stmt*, 16> Queue;
>> - Queue.push_back(S);
>> -
>> - while (!Queue.empty()) {
>> - Stmt *CurrS = Queue.pop_back_val();
>> -
>> - size_t N = Queue.size();
>> - TRY_TO(dataTraverseNode(CurrS, &Queue));
>> - // Process new children in the order they were added.
>> - std::reverse(Queue.begin() + N, Queue.end());
>> - }
>> -
>> - return true;
>> -}
>> -
>> -template <typename Derived>
>> bool RecursiveASTVisitor<Derived>::dataTraverseNode(Stmt *S,
>> DataRecursionQueue
>> *Queue) {
>> #define DISPATCH_STMT(NAME, CLASS, VAR)
>> \
>> @@ -561,10 +543,23 @@ bool RecursiveASTVisitor<Derived>::Trave
>> &RecursiveASTVisitor::TraverseStmt>::value)
>> return dataTraverseNode(S, nullptr);
>>
>> - if (!Queue)
>> - return dataTraverse(S);
>> + if (Queue) {
>> + Queue->push_back(S);
>> + return true;
>> + }
>> +
>> + SmallVector<Stmt *, 8> LocalQueue;
>> + LocalQueue.push_back(S);
>> +
>> + while (!LocalQueue.empty()) {
>> + Stmt *CurrS = LocalQueue.pop_back_val();
>> +
>> + size_t N = LocalQueue.size();
>> + TRY_TO(dataTraverseNode(CurrS, &LocalQueue));
>> + // Process new children in the order they were added.
>> + std::reverse(LocalQueue.begin() + N, LocalQueue.end());
>> + }
>>
>> - Queue->push_back(S);
>> return true;
>> }
>>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
>
> --
> Alexey Samsonov
> vonosmas at gmail.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151124/1ae3d084/attachment.html>
More information about the cfe-commits
mailing list