From 9d88e17c392f21dcdad3ee47b4cc02b894e43552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 21 Nov 2010 13:40:42 +0100 Subject: [PATCH] Tokenizer::simplifyKnownVariables: Reduce debug-warnings for conditional increment --- lib/tokenize.cpp | 5 +++++ test/testtokenize.cpp | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 1528056b8..cd8f3ab33 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -6131,6 +6131,11 @@ bool Tokenizer::simplifyKnownVariables() Token::Match(tok3->previous(), ", %var% ,|)")) break; + // conditional increment + if (Token::Match(tok3->tokAt(-3), ") { ++|--") || + Token::Match(tok3->tokAt(-2), ") { %var% ++|--")) + break; + std::list locationList; ErrorLogger::ErrorMessage::FileLocation loc; loc.line = tok3->linenr(); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 48378deef..296e355e3 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -129,6 +129,7 @@ private: TEST_CASE(simplifyKnownVariablesBailOutFor2); TEST_CASE(simplifyKnownVariablesBailOutFor3); TEST_CASE(simplifyKnownVariablesBailOutMemberFunction); + TEST_CASE(simplifyKnownVariablesBailOutConditionalIncrement); TEST_CASE(varid1); TEST_CASE(varid2); @@ -1961,6 +1962,19 @@ private: ASSERT_EQUALS(expected, tokenizeAndStringify(code, true)); } + void simplifyKnownVariablesBailOutConditionalIncrement() + { + const char code[] = "int f() {\n" + " int a = 0;\n" + " if (x) {\n" + " ++a;\n" // conditional increment + " }\n" + " return a;\n" + "}\n"; + tokenizeAndStringify(code,true); + ASSERT_EQUALS("", errout.str()); // no debug warnings + } + std::string tokenizeDebugListing(const std::string &code, bool simplify = false) { Tokenizer tokenizer;