Fixed #6869 (False positive: uninitvar, array passed to function)
This commit is contained in:
parent
e598b07a6d
commit
4bebb80300
|
@ -896,15 +896,14 @@ int CheckUninitVar::isFunctionParUsage(const Token *vartok, bool pointer, Alloc
|
||||||
// is this a function call?
|
// is this a function call?
|
||||||
if (start && Token::Match(start->previous(), "%name% (")) {
|
if (start && Token::Match(start->previous(), "%name% (")) {
|
||||||
const bool address(vartok->previous()->str() == "&");
|
const bool address(vartok->previous()->str() == "&");
|
||||||
|
const bool array(vartok->variable() && vartok->variable()->isArray());
|
||||||
// check how function handle uninitialized data arguments..
|
// check how function handle uninitialized data arguments..
|
||||||
const Function *func = start->previous()->function();
|
const Function *func = start->previous()->function();
|
||||||
if (func) {
|
if (func) {
|
||||||
const Variable *arg = func->getArgumentVar(argumentNumber);
|
const Variable *arg = func->getArgumentVar(argumentNumber);
|
||||||
if (arg) {
|
if (arg) {
|
||||||
const Token *argStart = arg->typeStartToken();
|
const Token *argStart = arg->typeStartToken();
|
||||||
if (!address && Token::Match(argStart, "struct| %type% [,)]"))
|
if (!address && !array && Token::Match(argStart, "struct| %type% %name%| [,)]"))
|
||||||
return 1;
|
|
||||||
if (!address && Token::Match(argStart, "struct| %type% %name% [,)]"))
|
|
||||||
return 1;
|
return 1;
|
||||||
if (pointer && !address && alloc == NO_ALLOC && Token::Match(argStart, "struct| %type% * %name% [,)]"))
|
if (pointer && !address && alloc == NO_ALLOC && Token::Match(argStart, "struct| %type% * %name% [,)]"))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -1336,6 +1336,14 @@ private:
|
||||||
" int **b = a[0];\n"
|
" int **b = a[0];\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
// #6869 - FP when passing uninit array to function
|
||||||
|
checkUninitVar("void bar(PSTR x);\n"
|
||||||
|
"void foo() {\n"
|
||||||
|
" char x[10];\n"
|
||||||
|
" bar(x);\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// alloc..
|
// alloc..
|
||||||
|
|
Loading…
Reference in New Issue