diff --git a/src/checkmemoryleak.cpp b/src/checkmemoryleak.cpp index 782c5f141..1016c94fe 100644 --- a/src/checkmemoryleak.cpp +++ b/src/checkmemoryleak.cpp @@ -1084,22 +1084,6 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok, bool &all) tok2->str("return"); } - // If "--all" is given, remove all "callfunc".. - if (_settings->_showAll) - { - Token *tok2 = tok; - while (tok2) - { - if (tok2->str() == "callfunc") - { - tok2->deleteThis(); - all = true; - } - else - tok2 = tok2->next(); - } - } - // reduce the code.. bool done = false; while (! done) @@ -1138,10 +1122,17 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok, bool &all) done = false; } - // Reduce "if if" => "if" + // reduce "; callfunc ; %var%" + else if (Token::Match(tok2, "; callfunc ; %type%")) + { + tok2->deleteNext(); + done = false; + } + + // Reduce "if if|callfunc" => "if" else if (Token::Match(tok2, "if if|callfunc")) { - Token::eraseTokens(tok2, tok2->tokAt(2)); + tok2->deleteNext(); done = false; } @@ -1284,30 +1275,6 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok, bool &all) done = false; } - // Reduce "} else .." => "} if .." - if (Token::simpleMatch(tok2, "} else")) - { - int indentlevel = 0; - for (const Token *tok3 = tok2; tok3; tok3 = tok3->previous()) - { - if (tok3->str() == "{") - { - --indentlevel; - if (indentlevel == 0) - { - if (tok3->previous()->str() == "if") - tok2->next()->str("if"); - } - if (indentlevel <= 0) - break; - } - else if (tok3->str() == "}") - { - ++indentlevel; - } - } - } - // Remove "catch ;" if (Token::simpleMatch(tok2->next(), "catch ;")) { @@ -1616,9 +1583,21 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok, bool &all) } } } + + // If "--all" is given, remove all "callfunc".. + if (done && _settings->_showAll) + { + for (Token *tok2 = tok; tok2; tok2 = tok2->next()) + { + if (tok2->str() == "callfunc") + { + tok2->deleteThis(); + all = true; + done = false; + } + } + } } - - } diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index 0b3763028..af18f5a01 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -467,6 +467,8 @@ private: ASSERT_EQUALS("; alloc ; dealloc ;\n; alloc ;", simplifycode("; alloc ; if(!var) { return ; } if { dealloc ; }")); + ASSERT_EQUALS("; if alloc ; else assign ; return use ;", simplifycode("; callfunc ; if callfunc { alloc ; } else { assign ; } return use ;")); + // "if ; .." ASSERT_EQUALS("; if xxx ;", simplifycode("; if ; else xxx ;")); ASSERT_EQUALS("; if(var) xxx ;", simplifycode("; if(!var) ; else xxx ;"));