add support in CheckOther::functionVariableUsage() for checking structures that are declared with struct keyword
This commit is contained in:
parent
3225c9dd9b
commit
18e6509c5d
|
@ -1766,6 +1766,24 @@ void CheckOther::functionVariableUsage()
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// standard struct type declaration with possible initialization
|
||||||
|
// struct S s; struct S s = { 0 }; static struct S s;
|
||||||
|
else if (Token::Match(tok, "[;{}] static| struct %type% %var% ;|=") &&
|
||||||
|
(isRecordTypeWithoutSideEffects(tok->strAt(1) == "static" ? tok->tokAt(4) : tok->tokAt(3))))
|
||||||
|
{
|
||||||
|
tok = tok->next();
|
||||||
|
|
||||||
|
bool isStatic = tok->str() == "static";
|
||||||
|
if (isStatic)
|
||||||
|
tok = tok->next();
|
||||||
|
|
||||||
|
tok = tok->next();
|
||||||
|
|
||||||
|
variables.addVar(tok->next(), Variables::standard, info,
|
||||||
|
tok->tokAt(2)->str() == "=" || isStatic);
|
||||||
|
tok = tok->next();
|
||||||
|
}
|
||||||
|
|
||||||
// standard type declaration and initialization using constructor
|
// standard type declaration and initialization using constructor
|
||||||
// int i(0); static int j(0);
|
// int i(0); static int j(0);
|
||||||
else if (Token::Match(tok, "[;{}] static| %type% %var% ( %any% ) ;") &&
|
else if (Token::Match(tok, "[;{}] static| %type% %var% ( %any% ) ;") &&
|
||||||
|
@ -2162,7 +2180,7 @@ void CheckOther::functionVariableUsage()
|
||||||
variables.read(tok->varId());
|
variables.read(tok->varId());
|
||||||
}
|
}
|
||||||
else if (tok->varId() != varid1 && Token::Match(tok, "%var% ."))
|
else if (tok->varId() != varid1 && Token::Match(tok, "%var% ."))
|
||||||
variables.use(tok->varId());
|
variables.read(tok->varId());
|
||||||
else if (tok->varId() != varid1 &&
|
else if (tok->varId() != varid1 &&
|
||||||
var2->_type == Variables::standard &&
|
var2->_type == Variables::standard &&
|
||||||
tok->strAt(-1) != "&")
|
tok->strAt(-1) != "&")
|
||||||
|
|
|
@ -1887,7 +1887,8 @@ private:
|
||||||
" struct AB ab;\n"
|
" struct AB ab;\n"
|
||||||
" int * a = &ab.a;\n"
|
" int * a = &ab.a;\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:5]: (style) Variable 'a' is assigned a value that is never used\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:4]: (style) Variable 'ab' is not assigned a value\n"
|
||||||
|
"[test.cpp:5]: (style) Variable 'a' is assigned a value that is never used\n", errout.str());
|
||||||
|
|
||||||
functionVariableUsage("struct AB { int a; int b; };\n"
|
functionVariableUsage("struct AB { int a; int b; };\n"
|
||||||
"void foo()\n"
|
"void foo()\n"
|
||||||
|
@ -2322,7 +2323,7 @@ private:
|
||||||
" struct ABC { int a, b, c; };\n"
|
" struct ABC { int a, b, c; };\n"
|
||||||
" struct ABC abc = { 1, 2, 3 };\n"
|
" struct ABC abc = { 1, 2, 3 };\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("[test.cpp:4]: (style) Variable 'abc' is assigned a value that is never used\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void localvarStruct3()
|
void localvarStruct3()
|
||||||
|
|
Loading…
Reference in New Issue