diff --git a/lib/checkmemoryleak.cpp b/lib/checkmemoryleak.cpp index 1c4dd2187..f79ad8f38 100644 --- a/lib/checkmemoryleak.cpp +++ b/lib/checkmemoryleak.cpp @@ -2762,7 +2762,7 @@ void CheckMemoryLeakNoVar::check() void CheckMemoryLeakNoVar::checkForUnusedReturnValue(const Scope *scope) { for (const Token *tok = scope->classStart; tok != scope->classEnd; tok = tok->next()) { - if (Token::Match(tok, "{|}|; %var% (")) { + if (Token::Match(tok, "{|}|; %var% (") && tok->strAt(-1) != "=") { tok = tok->next(); const int allocationId = _settings->library.alloc(tok); if (allocationId > 0) diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index 3c83d1420..d0ef25b6c 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -6345,6 +6345,12 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + check("char** x(const char* str) {\n" + " char* ptr[] = { malloc(10), malloc(5), strdup(str) };\n" + " return ptr;\n" + "}"); + ASSERT_EQUALS("", errout.str()); + check("void x()\n" "{\n" " 42,malloc(42);\n"