From bc808710a09d7f42b0572f3e3bceea05928b3604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 12 Dec 2009 19:58:19 +0100 Subject: [PATCH] Fixed #1097 (Internal error: When macro is not expanded 'ABC(for (i=0;i<10;i++) ..);') --- lib/tokenize.cpp | 3 +++ test/testtokenize.cpp | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 6fb791888..4d02dfe57 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2347,6 +2347,9 @@ void Tokenizer::simplifyIfAddBraces() { for (Token *tok = _tokens; tok; tok = tok ? tok->next() : NULL) { + if (tok->previous() && !Token::Match(tok->previous(), ";|{|}|else|)|:")) + continue; + if (Token::Match(tok, "if|for|while (")) { // don't add "{}" around ";" in "do {} while();" (#609) diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 57c5a1b30..244bb59aa 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -41,6 +41,7 @@ private: { TEST_CASE(tokenize1); TEST_CASE(tokenize2); + TEST_CASE(tokenize3); TEST_CASE(minus); @@ -234,6 +235,22 @@ private: ASSERT_EQUALS("{ sizeof a , sizeof b }", tokenizeAndStringify(code.c_str())); } + void tokenize3() + { + errout.str(""); + const std::string code("void foo()\n" + "{\n" + " int i;\n" + " ABC(for(i=0;i<10;i++) x());\n" + "}"); + ASSERT_EQUALS("void foo ( )\n" + "{\n" + "int i ;\n" + "ABC ( for ( i = 0 ; i < 10 ; i ++ ) x ( ) ) ;\n" + "}", tokenizeAndStringify(code.c_str())); + ASSERT_EQUALS("", errout.str()); + } + void minus() { ASSERT_EQUALS("i = -12", tokenizeAndStringify("i = -12"));