Fixed #8100 (False positive when method/function defines lambda with pointer return value)
This commit is contained in:
parent
f096d7f474
commit
3d629944da
|
@ -353,6 +353,8 @@ CheckMemoryLeak::AllocType CheckMemoryLeak::functionReturnType(const Function* f
|
||||||
// Get return pointer..
|
// Get return pointer..
|
||||||
unsigned int varid = 0;
|
unsigned int varid = 0;
|
||||||
for (const Token *tok2 = func->functionScope->bodyStart; tok2 != func->functionScope->bodyEnd; tok2 = tok2->next()) {
|
for (const Token *tok2 = func->functionScope->bodyStart; tok2 != func->functionScope->bodyEnd; tok2 = tok2->next()) {
|
||||||
|
if (const Token *endOfLambda = findLambdaEndToken(tok2))
|
||||||
|
tok2 = endOfLambda;
|
||||||
if (tok2->str() == "return") {
|
if (tok2->str() == "return") {
|
||||||
const AllocType allocType = getAllocationType(tok2->next(), 0, callstack);
|
const AllocType allocType = getAllocationType(tok2->next(), 0, callstack);
|
||||||
if (allocType != No)
|
if (allocType != No)
|
||||||
|
|
|
@ -5869,6 +5869,16 @@ private:
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:7]: (error) Return value of allocation function 'f' is not stored.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:7]: (error) Return value of allocation function 'f' is not stored.\n", errout.str());
|
||||||
|
|
||||||
|
check("void f()\n" // #8100
|
||||||
|
"{\n"
|
||||||
|
" auto lambda = [](){return malloc(10);};\n"
|
||||||
|
"}\n"
|
||||||
|
"void x()\n"
|
||||||
|
"{\n"
|
||||||
|
" f();\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("void x()\n"
|
check("void x()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" if(!malloc(5)) fail();\n"
|
" if(!malloc(5)) fail();\n"
|
||||||
|
|
Loading…
Reference in New Issue