Minor updates. Removed some false positives when checking variable scope

This commit is contained in:
Daniel Marjamäki 2008-04-01 06:21:12 +00:00
parent 89605c0167
commit 60e454fa11
3 changed files with 31 additions and 3 deletions

View File

@ -189,7 +189,8 @@ static void CheckBufferOverrun_CheckScope( const TOKEN *tok, const char *varname
// Function call..
// Todo: Handle struct member variables..
// It's not interesting to check what happens when the whole struct is
// sent as the parameter, that is checked separately anyway.
if ( Match( tok, "%var% (" ) )
{
// Don't make recursive checking..

View File

@ -637,6 +637,7 @@ static void CheckVariableScope_LookupVar( const TOKEN *tok1, const char varname[
// Check if the variable is used in this indentlevel..
bool used = false, used1 = false;
int indentlevel = 0;
int parlevel = 0;
bool for_or_while = false;
while ( indentlevel >= 0 && tok )
{
@ -657,6 +658,17 @@ static void CheckVariableScope_LookupVar( const TOKEN *tok1, const char varname[
}
}
else if ( tok->str[0] == '(' )
{
parlevel++;
}
else if ( tok->str[0] == ')' )
{
parlevel--;
}
else if ( strcmp(tok->str, varname) == 0 )
{
if ( indentlevel == 0 || used1 )
@ -668,7 +680,7 @@ static void CheckVariableScope_LookupVar( const TOKEN *tok1, const char varname[
{
if ( strcmp(tok->str,"for")==0 || strcmp(tok->str,"while")==0 )
for_or_while = true;
if ( tok->str[0] == ';' )
if ( parlevel == 0 && tok->str[0] == ';' )
for_or_while = false;
}

View File

@ -956,5 +956,20 @@ static void unused_variable()
check( CheckVariableScope, __LINE__, test9, "" );
const char test10[] = "static void f()\n"
"{\n"
" TPoint p1;\n"
" for (i=0;i<10;i++)\n"
" {\n"
" p1=point(i,i);\n"
" }\n"
"}\n";
check( CheckVariableScope, __LINE__, test10, "" );
}