From 1f24aa778b5714d1211c7c4b2259c5af30181717 Mon Sep 17 00:00:00 2001 From: Paul Fultz II Date: Sun, 9 Jun 2019 01:10:57 -0500 Subject: [PATCH] Fix issue 9156: Analysis failed because square brackets arent linked correctly (#1871) --- lib/templatesimplifier.cpp | 25 ++++++++++++++++++------- test/testtokenize.cpp | 14 ++++++++++++++ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/lib/templatesimplifier.cpp b/lib/templatesimplifier.cpp index cd768fd09..c8c299195 100644 --- a/lib/templatesimplifier.cpp +++ b/lib/templatesimplifier.cpp @@ -1578,9 +1578,7 @@ void TemplateSimplifier::expandTemplate( previous->isSigned(typetok->isSigned()); previous->isUnsigned(typetok->isUnsigned()); previous->isLong(typetok->isLong()); - if (previous->str() == "{") { - brackets1.push(previous); - } else if (previous->str() == "(") { + if (Token::Match(previous, "{|(|[")) { brackets1.push(previous); } else if (previous->str() == "}") { assert(brackets1.empty() == false); @@ -1592,6 +1590,11 @@ void TemplateSimplifier::expandTemplate( assert(brackets1.top()->str() == "("); Token::createMutualLinks(brackets1.top(), previous); brackets1.pop(); + } else if (previous->str() == "]") { + assert(brackets1.empty() == false); + assert(brackets1.top()->str() == "["); + Token::createMutualLinks(brackets1.top(), previous); + brackets1.pop(); } } } else { @@ -1785,9 +1788,7 @@ void TemplateSimplifier::expandTemplate( --typeindentlevel; mTokenList.addtoken(typetok, tok5->linenr(), tok5->fileIndex()); Token *back = mTokenList.back(); - if (back->str() == "{") { - brackets1.push(back); - } else if (back->str() == "(") { + if (Token::Match(back, "{|(|[")) { brackets1.push(back); } else if (back->str() == "}") { assert(brackets1.empty() == false); @@ -1799,6 +1800,11 @@ void TemplateSimplifier::expandTemplate( assert(brackets1.top()->str() == "("); Token::createMutualLinks(brackets1.top(), back); brackets1.pop(); + } else if (back->str() == "]") { + assert(brackets1.empty() == false); + assert(brackets1.top()->str() == "["); + Token::createMutualLinks(brackets1.top(), back); + brackets1.pop(); } back->isTemplateArg(true); added = true; @@ -1863,7 +1869,7 @@ void TemplateSimplifier::expandTemplate( if (copy) { mTokenList.addtoken(typetok, tok3->linenr(), tok3->fileIndex()); Token *back = mTokenList.back(); - if (back->str() == "{") { + if (Token::Match(back, "{|(|[")) { brackets1.push(back); } else if (back->str() == "(") { brackets1.push(back); @@ -1877,6 +1883,11 @@ void TemplateSimplifier::expandTemplate( assert(brackets1.top()->str() == "("); Token::createMutualLinks(brackets1.top(), back); brackets1.pop(); + } else if (back->str() == "]") { + assert(brackets1.empty() == false); + assert(brackets1.top()->str() == "["); + Token::createMutualLinks(brackets1.top(), back); + brackets1.pop(); } back->isTemplateArg(true); } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index d820f615d..d1b862231 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7784,6 +7784,20 @@ private: "template