diff --git a/src/tokenize.cpp b/src/tokenize.cpp index 6c00c5690..5f9846bdb 100644 --- a/src/tokenize.cpp +++ b/src/tokenize.cpp @@ -2188,8 +2188,9 @@ bool Tokenizer::simplifyKnownVariables() break; } - else if (Token::Match(tok2, "%var% = %num% ;") || - Token::Match(tok2, "%var% = %bool% ;")) + else if (tok2->previous()->str() != "*" && + (Token::Match(tok2, "%var% = %num% ;") || + Token::Match(tok2, "%var% = %bool% ;"))) { unsigned int varid = tok2->varId(); if (varid == 0) diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index 3e84dbc7a..f1b3e0f58 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -216,6 +216,7 @@ private: TEST_CASE(strndup_function); TEST_CASE(fcloseall_function); + TEST_CASE(pointer_to_pointer); } @@ -2188,6 +2189,16 @@ private: ASSERT_EQUALS(std::string(""), errout.str()); } + void pointer_to_pointer() + { + check("void f(char **data)\n" + "{\n" + " char *c = new char[12];\n" + " *c = 0;\n" + " *data = c;\n" + "}\n"); + ASSERT_EQUALS(std::string(""), errout.str()); + } }; REGISTER_TEST(TestMemleak)