diff --git a/lib/checkmemoryleak.cpp b/lib/checkmemoryleak.cpp index 0bd803b04..912ceb1e8 100644 --- a/lib/checkmemoryleak.cpp +++ b/lib/checkmemoryleak.cpp @@ -1890,6 +1890,16 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok) done = false; } + // loop { use ; callfunc ; } => use ; + // assume that the "callfunc" is not noreturn + if (Token::simpleMatch(tok2, "loop { use ; callfunc ; }")) + { + Token::eraseTokens(tok2, tok2->tokAt(7)); + tok2->str("use"); + tok2->insertToken(";"); + done = false; + } + // Delete if block in "alloc ; if(!var) return ;" if (Token::Match(tok2, "alloc ; if(!var) return ;")) { diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index 48b8f9f31..a8246de25 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -720,6 +720,7 @@ private: ASSERT_EQUALS(";", simplifycode("; do { dealloc ; alloc ; } while(var) ;")); ASSERT_EQUALS("dealloc ; alloc ;", simplifycode("loop { dealloc ; alloc ; }")); ASSERT_EQUALS("dealloc ; alloc ;", simplifycode("while1 { dealloc ; alloc ; }")); + ASSERT_EQUALS("use ; }", simplifycode("loop { use ; callfunc ; } }")); // scope.. // current result - ok