diff --git a/src/tokenize.cpp b/src/tokenize.cpp index 8f9776f99..f60370a9b 100644 --- a/src/tokenize.cpp +++ b/src/tokenize.cpp @@ -1395,11 +1395,12 @@ bool Tokenizer::simplifyCasts() bool ret = false; for (Token *tok = _tokens; tok; tok = tok->next()) { - if (!tok->isName() && Token::Match(tok->next(), "( %type% * )")) + if (Token::Match(tok->next(), "( %type% * )") || Token::Match(tok->next(), "( %type% %type% * )")) { - tok->deleteNext(); - tok->deleteNext(); - tok->deleteNext(); + if (tok->isName() && tok->str() != "return") + continue; + while (tok->next()->str() != ")") + tok->deleteNext(); tok->deleteNext(); ret = true; } diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 564bc6568..b597b591a 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -58,6 +58,7 @@ private: void run() { TEST_CASE(cast0); + TEST_CASE(cast1); TEST_CASE(iftruefalse); TEST_CASE(combine_strings); TEST_CASE(double_plus); @@ -99,6 +100,13 @@ private: ASSERT_EQUALS(tok(code1), tok(code2)); } + void cast1() + { + const char code[] = "return (unsigned char *)str;"; + const char expected[] = "return str;"; + ASSERT_EQUALS(tok(expected), tok(code)); + } + void iftruefalse() { {