From 555e8c6efc3df30eba7fc226a527654bfb499ab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 15 Mar 2012 19:09:36 +0100 Subject: [PATCH] Fixed #36221 (Input streams: Wrong token list simplification) --- lib/tokenize.cpp | 2 +- test/testtokenize.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index c52c0d514..ab37e65a0 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -6504,7 +6504,7 @@ bool Tokenizer::simplifyKnownVariablesSimplify(Token **tok2, Token *tok3, unsign const Token *prev = tok3->previous(); while (prev && prev->str() != "return" && (prev->isName() || prev->str() == "::")) prev = prev->previous(); - if (Token::Match(prev, "[;{}]")) + if (Token::Match(prev, ";|{|}|>>")) break; } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 35c15c7d5..caf3c34ba 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -149,6 +149,7 @@ private: TEST_CASE(simplifyKnownVariables44); // ticket #3117 - don't simplify static variables TEST_CASE(simplifyKnownVariables45); // ticket #3281 - static constant variable not simplified TEST_CASE(simplifyKnownVariables46); // ticket #3587 - >> + TEST_CASE(simplifyKnownVariables47); // ticket #3627 - >> TEST_CASE(simplifyKnownVariablesIfEq); // if (a==5) => a is 5 in the block TEST_CASE(simplifyKnownVariablesBailOutAssign1); TEST_CASE(simplifyKnownVariablesBailOutAssign2); @@ -2307,6 +2308,19 @@ private: } } + void simplifyKnownVariables47() { + // #3621 + const char code[] = "void f() {\n" + " int x = 0;\n" + " cin >> std::hex >> x;\n" + "}"; + const char expected[] = "void f ( ) {\n" + "int x ; x = 0 ;\n" + "cin >> std :: hex >> x ;\n" + "}"; + ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Unspecified, "test.cpp")); + } + void simplifyKnownVariablesIfEq() { const char code[] = "void f(int x) {\n" " if (x==5) {\n"