CheckConstantFunctionParameters: Updated the check to handle all std::.. struct and class
This commit is contained in:
parent
cae2e190da
commit
a4486fb883
|
@ -704,12 +704,32 @@ void CheckConstantFunctionParameter()
|
||||||
{
|
{
|
||||||
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if ( Match(tok,"[,(] const std :: string %var% [,)]") )
|
if ( Match(tok,"[,(] const std :: %type% %var% [,)]") )
|
||||||
{
|
{
|
||||||
std::ostringstream errmsg;
|
std::ostringstream errmsg;
|
||||||
errmsg << FileLine(tok) << " looks like a constant function parameter that is passed by value";
|
errmsg << FileLine(tok) << " " << getstr(tok,5) << " is passed by value, it could be passed by reference/pointer instead";
|
||||||
ReportErr( errmsg.str() );
|
ReportErr( errmsg.str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if ( Match(tok,"[,(] const %type% %var% [,)]") )
|
||||||
|
{
|
||||||
|
// Check if type is a struct or class.
|
||||||
|
const char *pattern[3] = {"class","type",0};
|
||||||
|
pattern[1] = getstr(tok, 2);
|
||||||
|
if ( findtoken(tokens, pattern) )
|
||||||
|
{
|
||||||
|
std::ostringstream errmsg;
|
||||||
|
errmsg << FileLine(tok) << " " << getstr(tok,3) << " is passed by value, it could be passed by reference/pointer instead";
|
||||||
|
ReportErr( errmsg.str() );
|
||||||
|
}
|
||||||
|
pattern[0] = "struct";
|
||||||
|
if ( findtoken(tokens, pattern) )
|
||||||
|
{
|
||||||
|
std::ostringstream errmsg;
|
||||||
|
errmsg << FileLine(tok) << " " << getstr(tok,3) << " is passed by value, it could be passed by reference/pointer instead";
|
||||||
|
ReportErr( errmsg.str() );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
30
tests.cpp
30
tests.cpp
|
@ -28,6 +28,7 @@ static void memleak_in_function();
|
||||||
static void memleak_in_class();
|
static void memleak_in_class();
|
||||||
static void division();
|
static void division();
|
||||||
static void unused_variable();
|
static void unused_variable();
|
||||||
|
static void fpar_byvalue();
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
@ -59,6 +60,8 @@ int main()
|
||||||
// unused variable..
|
// unused variable..
|
||||||
unused_variable();
|
unused_variable();
|
||||||
|
|
||||||
|
fpar_byvalue();
|
||||||
|
|
||||||
std::cout << "Success Rate: "
|
std::cout << "Success Rate: "
|
||||||
<< SuccessCount
|
<< SuccessCount
|
||||||
<< " / "
|
<< " / "
|
||||||
|
@ -875,7 +878,7 @@ static void unused_variable()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const char test10[] = "static void f()\n"
|
const char test10[] = "static void f()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" TPoint p1;\n"
|
" TPoint p1;\n"
|
||||||
|
@ -885,9 +888,26 @@ static void unused_variable()
|
||||||
" }\n"
|
" }\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
check( CheckVariableScope, __LINE__, test10, "" );
|
check( CheckVariableScope, __LINE__, test10, "" );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
static void fpar_byvalue()
|
||||||
|
{
|
||||||
|
check( CheckConstantFunctionParameter,
|
||||||
|
__LINE__,
|
||||||
|
"void f(const std::string str);",
|
||||||
|
"[test.cpp:1] str is passed by value, it could be passed by reference/pointer instead\n" );
|
||||||
|
|
||||||
|
check( CheckConstantFunctionParameter,
|
||||||
|
__LINE__,
|
||||||
|
"void f(const int a, const std::vector v, const int b);",
|
||||||
|
"[test.cpp:1] v is passed by value, it could be passed by reference/pointer instead\n" );
|
||||||
|
|
||||||
|
check( CheckConstantFunctionParameter,
|
||||||
|
__LINE__,
|
||||||
|
"class Fred;\n"
|
||||||
|
"void f(const Fred f);",
|
||||||
|
"[test.cpp:2] f is passed by value, it could be passed by reference/pointer instead\n" );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue