From c3d7928ac88485e46ae92421c677fb33f3829ae6 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 30 Mar 2010 12:34:17 +0200 Subject: Clone the TemplateArguments before caching the result. --- src/shared/cplusplus/Parser.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/shared/cplusplus/Parser.cpp') diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index f323241a18..11bef468c9 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -854,12 +854,19 @@ bool Parser::parseTemplateArgumentList(TemplateArgumentListAST *&node) } } + if (_pool != _translationUnit->memoryPool()) { + MemoryPool *pool = _translationUnit->memoryPool(); + TemplateArgumentListAST *template_argument_list = node; + for (TemplateArgumentListAST *iter = template_argument_list, **ast_iter = &node; + iter; iter = iter->next, ast_iter = &(*ast_iter)->next) + *ast_iter = new (pool) TemplateArgumentListAST((iter->value) ? iter->value->clone(pool) : 0); + } + _templateArgumentList.insert(std::make_pair(start, TemplateArgumentListEntry(start, cursor(), node))); return true; } _templateArgumentList.insert(std::make_pair(start, TemplateArgumentListEntry(start, cursor(), 0))); - return false; } -- cgit v1.2.1