From 667cc8f6e527608e555f2cdb8b8b642409464cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 13 Nov 2010 16:40:04 +0100 Subject: [PATCH] Tokenizer: Skip debug warnings in Tokenizer::simplifyKnownVariables for loop variable --- lib/tokenize.cpp | 11 ++++++++--- test/testtokenize.cpp | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 271dbf8ed..26da443e1 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -5918,10 +5918,15 @@ bool Tokenizer::simplifyKnownVariables() if (varid == 0) continue; - if (Token::Match(tok2->tokAt(-3), "for ( %type% %var% = %num% ;")) + + // skip loop variable + if (Token::Match(tok2->tokAt(-2), "(|:: %type%")) { - // skip loop variable - continue; + const Token *tok3 = tok2->previous(); + while (Token::Match(tok3->previous(), ":: %type%")) + tok3 = tok3->tokAt(-2); + if (Token::Match(tok3->tokAt(-2), "for ( %type%")) + continue; } if (tok2->str() == tok2->strAt(2)) diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 1b04e43ec..d6b4eafa3 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -126,6 +126,7 @@ private: TEST_CASE(simplifyKnownVariablesBailOutAssign); TEST_CASE(simplifyKnownVariablesBailOutFor1); TEST_CASE(simplifyKnownVariablesBailOutFor2); + TEST_CASE(simplifyKnownVariablesBailOutFor3); TEST_CASE(simplifyKnownVariablesBailOutMemberFunction); TEST_CASE(varid1); @@ -1916,6 +1917,20 @@ private: ASSERT_EQUALS(expected, tokenizeAndStringify(code, true)); } + void simplifyKnownVariablesBailOutFor3() + { + const char code[] = "void foo() {\n" + " for (std::string::size_type pos = 0; pos < 10; ++pos)\n" + " { }\n" + "}\n"; + const char expected[] = "void foo ( ) {\n" + "for ( std :: string :: size_type pos = 0 ; pos < 10 ; ++ pos )\n" + "{ }\n" + "}"; + ASSERT_EQUALS(expected, tokenizeAndStringify(code, true)); + ASSERT_EQUALS("", errout.str()); // debug warnings + } + void simplifyKnownVariablesBailOutMemberFunction() { const char code[] = "void foo(obj a) {\n"