From 328cc7b8f5847bff4bde69515c6cf433a593531d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 19 Jul 2014 18:29:53 +0200 Subject: [PATCH] Fixed #5996 (false positive: Clarify calculation precedence for '+' and '?'.) --- lib/tokenize.cpp | 15 ++++----------- test/testtokenize.cpp | 8 +++++++- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 9dc75c827..580c70df2 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -4886,20 +4886,13 @@ void Tokenizer::simplifyCasts() } } - while (Token::Match(tok->next(), "dynamic_cast|reinterpret_cast|const_cast|static_cast <")) { + if (Token::Match(tok->next(), "dynamic_cast|reinterpret_cast|const_cast|static_cast <")) { Token *tok2 = tok->linkAt(2); - if (Token::simpleMatch(tok2, "> (")) { - Token *closeBracket = tok2->next()->link(); - if (closeBracket) { - Token::eraseTokens(tok, tok2->tokAt(2)); - closeBracket->deleteThis(); - } else { - break; - } - } else { + if (Token::simpleMatch(tok2, "> (")) + Token::eraseTokens(tok, tok2->next()); + else break; - } } } } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 5229ea3e7..7c0579314 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -108,6 +108,7 @@ private: TEST_CASE(removeCast12); TEST_CASE(removeCast13); TEST_CASE(removeCast14); + TEST_CASE(removeCast15); // #5996 - don't remove cast in 'a+static_cast(b?60:0)' TEST_CASE(simplifyFloatCasts); // float casting a integer @@ -1175,7 +1176,7 @@ private: tokenizer.simplifyCasts(); - ASSERT_EQUALS("t = & p ;", tokenizer.tokens()->stringifyList(0, false)); + ASSERT_EQUALS("t = ( & p ) ;", tokenizer.tokens()->stringifyList(0, false)); } void removeCast3() { @@ -1257,6 +1258,11 @@ private: ASSERT_EQUALS("bar ( & ptr ) ;", tokenizeAndStringify("bar((const X**)&ptr);",true)); } + void removeCast15() { // #5996 - don't remove cast in 'a+static_cast(b?60:0)' + ASSERT_EQUALS("a + ( b ? 60 : 0 ) ;", + tokenizeAndStringify("a + static_cast(b ? 60 : 0);",true)); + } + void simplifyFloatCasts() { // float casting integers // C-style casts ASSERT_EQUALS("a = 1.0f ;", tokenizeAndStringify("a = (float)1;"));