From cbeb45566bf7f09043a4d32600017996959717c1 Mon Sep 17 00:00:00 2001 From: Slava Semushin Date: Sat, 22 Aug 2009 14:49:45 +0700 Subject: [PATCH] Fixed #609 (Tokenizer: don't add {} after do-while();) http://sourceforge.net/apps/trac/cppcheck/ticket/609 --- src/tokenize.cpp | 10 ++++++++++ test/testtokenize.cpp | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/src/tokenize.cpp b/src/tokenize.cpp index 4592cbd2c..aeb1a7406 100644 --- a/src/tokenize.cpp +++ b/src/tokenize.cpp @@ -1805,6 +1805,16 @@ bool Tokenizer::simplifyIfAddBraces() { if (Token::Match(tok, "if|for|while (")) { + // don't add "{}" around ";" in "do {} while();" (#609) + const Token *prev = tok->previous(); + if (Token::simpleMatch(prev, "} while") && + prev->link() && + prev->link()->previous() && + prev->link()->previous()->str() == "do") + { + continue; + } + // Goto the ending ')' int parlevel = 1; tok = tok->next(); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 67df16d14..97f966888 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -59,6 +59,7 @@ private: TEST_CASE(ifAddBraces5); TEST_CASE(ifAddBraces6); TEST_CASE(ifAddBraces7); + TEST_CASE(ifAddBraces8); TEST_CASE(whileAddBraces); @@ -505,6 +506,12 @@ private: "}", tokenizeAndStringify(code, true)); } + void ifAddBraces8() + { + const char code[] = "do { ; } while(0);"; + ASSERT_EQUALS("do { ; } while ( false ) ;", tokenizeAndStringify(code, true)); + } + void whileAddBraces() { {