diff --git a/lib/checkmemoryleak.cpp b/lib/checkmemoryleak.cpp index 09a5c84f1..d12694d48 100644 --- a/lib/checkmemoryleak.cpp +++ b/lib/checkmemoryleak.cpp @@ -1317,7 +1317,9 @@ Token *CheckMemoryLeakInFunction::getcode(const Token *tok, std::listnext(), "[")) { } - else if (f.empty() || !test_white_list(f.top()->str())) + else if (f.empty() || + !test_white_list(f.top()->str()) || + getDeallocationType(f.top(),varid)) { use = true; } diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index df129aba9..aede99d05 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -485,6 +485,7 @@ private: ASSERT_EQUALS(";;dealloc;", getcode("void *p; foo(fclose(p));", "p")); ASSERT_EQUALS(";;dealloc;", getcode("void *p; foo(close(p));", "p")); ASSERT_EQUALS(";;;;", getcode("FILE *f1; FILE *f2; fclose(f1);", "f2")); + ASSERT_EQUALS(";;returnuse;", getcode("FILE *f; return fclose(f) == EOF ? 1 : 2;", "f")); // if.. ASSERT_EQUALS(";;if{}", getcode("char *s; if (a) { }", "s"));