diff --git a/src/checkmemoryleak.cpp b/src/checkmemoryleak.cpp index 40d97c4c2..50055add1 100644 --- a/src/checkmemoryleak.cpp +++ b/src/checkmemoryleak.cpp @@ -1322,14 +1322,6 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok, bool &all) done = false; } - // Reduce "if* alloc ; dealloc ;" => ";" - if (Token::simpleMatch(tok2->tokAt(2), "alloc ; dealloc ;") && - tok2->next()->str().find("if") == 0) - { - Token::eraseTokens(tok2, tok2->tokAt(5)); - done = false; - } - // Delete second use in "use ; use ;" while (Token::Match(tok2, "[;{}] use ; use ;")) { diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index 6c33c0aa4..e9fcaef3f 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -128,6 +128,7 @@ private: TEST_CASE(simple8); TEST_CASE(simple9); // Bug 2435468 - member function "free" TEST_CASE(simple10); // fclose in a if condition + TEST_CASE(simple11); TEST_CASE(new_nothrow); TEST_CASE(alloc_alloc_1); @@ -402,6 +403,30 @@ private: ASSERT_EQUALS("", errout.str()); } + void simple11() + { + check("void Fred::aaa()\n" + "{ }\n" + "\n" + "void Fred::foo()\n" + "{\n" + " char *s = NULL;\n" + " if (a)\n" + " s = malloc(10);\n" + " else if (b)\n" + " s = malloc(10);\n" + " else\n" + " f();\n" + " g(s);\n" + " if (c)\n" + " h(s);\n" + " free(s);\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + } + + + void new_nothrow() { check("void f()\n"