Uninitialized variables: error when passing uninit pointer to function
This commit is contained in:
parent
83066edec0
commit
ef15e40de5
|
@ -1693,9 +1693,9 @@ bool CheckUninitVar::isVariableUsage(const Token *vartok, bool pointer, bool all
|
||||||
return true;
|
return true;
|
||||||
if (Token::Match(argStart, "const %type% & %var% [,)]"))
|
if (Token::Match(argStart, "const %type% & %var% [,)]"))
|
||||||
return true;
|
return true;
|
||||||
if (pointer && !address && Token::Match(argStart, "%type% * %var% [,)]"))
|
if (pointer && !address && Token::Match(argStart, "struct| %type% * %var% [,)]"))
|
||||||
return true;
|
return true;
|
||||||
if ((pointer || address) && Token::Match(argStart, "const %type% * %var% [,)]"))
|
if ((pointer || address) && Token::Match(argStart, "const struct| %type% * %var% [,)]"))
|
||||||
return true;
|
return true;
|
||||||
if ((pointer || address) && Token::Match(argStart, "const %type% %var% [") && Token::Match(argStart->linkAt(3), "] [,)]"))
|
if ((pointer || address) && Token::Match(argStart, "const %type% %var% [") && Token::Match(argStart->linkAt(3), "] [,)]"))
|
||||||
return true;
|
return true;
|
||||||
|
@ -1830,7 +1830,7 @@ bool CheckUninitVar::isMemberVariableUsage(const Token *tok, bool isPointer, boo
|
||||||
|
|
||||||
if (Token::Match(tok, "%var% . %var%") && tok->strAt(2) == membervar)
|
if (Token::Match(tok, "%var% . %var%") && tok->strAt(2) == membervar)
|
||||||
return true;
|
return true;
|
||||||
else if (Token::Match(tok->previous(), "[(,] %var% [,)]") && isVariableUsage(tok, isPointer, alloc, _tokenizer->isCPP()))
|
else if (!isPointer && Token::Match(tok->previous(), "[(,] %var% [,)]") && isVariableUsage(tok, isPointer, alloc, _tokenizer->isCPP()))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -2649,6 +2649,14 @@ private:
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: c\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: c\n", errout.str());
|
||||||
|
|
||||||
|
checkUninitVar2("typedef struct { int a; int b; } AB;\n"
|
||||||
|
"void a(AB *ab);\n"
|
||||||
|
"void b() {\n"
|
||||||
|
" AB *ab;\n"
|
||||||
|
" a(ab);\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("[test.cpp:5]: (error) Uninitialized variable: ab\n", errout.str());
|
||||||
|
|
||||||
checkUninitVar2("void a(const char *c);\n" // const address => error
|
checkUninitVar2("void a(const char *c);\n" // const address => error
|
||||||
"void b() {\n"
|
"void b() {\n"
|
||||||
" char *c;\n"
|
" char *c;\n"
|
||||||
|
|
Loading…
Reference in New Issue