#12158: improve check: variableScope is not reported when there is el… (#5758)

variableScope is not reported when there is else if
This commit is contained in:
olabetskyi 2023-12-24 15:01:01 +02:00 committed by GitHub
parent c02d0786ad
commit e553940e23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 10 deletions

View File

@ -995,16 +995,7 @@ void CheckOther::checkVariableScope()
// parse else if blocks..
} else if (Token::simpleMatch(tok, "else { if (") && Token::simpleMatch(tok->linkAt(3), ") {")) {
const Token *endif = tok->linkAt(3)->linkAt(1);
bool elseif = false;
if (Token::simpleMatch(endif, "} }"))
elseif = true;
else if (Token::simpleMatch(endif, "} else {") && Token::simpleMatch(endif->linkAt(2),"} }"))
elseif = true;
if (elseif && Token::findmatch(tok->next(), "%varid%", tok->linkAt(1), var->declarationId())) {
reduce = false;
break;
}
tok = tok->next();
} else if (tok->varId() == var->declarationId() || tok->str() == "goto") {
reduce = false;
break;

View File

@ -101,6 +101,8 @@ private:
TEST_CASE(varScope33);
TEST_CASE(varScope34);
TEST_CASE(varScope35);
TEST_CASE(varScope36); // #12158
TEST_CASE(varScope37); // #12158
TEST_CASE(oldStylePointerCast);
TEST_CASE(invalidPointerCast);
@ -1667,6 +1669,35 @@ private:
ASSERT_EQUALS("[test.cpp:4]: (style) The scope of the variable 'buf' can be reduced.\n", errout.str());
}
void varScope36() {
// #12158
check("void f( uint32_t value ) {\n"
" uint32_t i = 0U;\n"
" if ( value > 100U ) { }\n"
" else if( value > 50U ) { }\n"
" else{\n"
" for( i = 0U; i < 5U; i++ ) {}\n"
" }\n"
"}\n", nullptr, false);
ASSERT_EQUALS("[test.cpp:2]: (style) The scope of the variable 'i' can be reduced.\n", errout.str());
}
void varScope37() {
// #12158
check("void f( uint32_t value ) {\n"
" uint32_t i = 0U;\n"
" if ( value > 100U ) { }\n"
" else {\n"
" if( value > 50U ) { }\n"
" else{\n"
" for( i = 0U; i < 5U; i++ ) {}\n"
" }\n"
" }\n"
"}\n", nullptr, false);
ASSERT_EQUALS("[test.cpp:2]: (style) The scope of the variable 'i' can be reduced.\n", errout.str());
}
#define checkOldStylePointerCast(code) checkOldStylePointerCast_(code, __FILE__, __LINE__)
void checkOldStylePointerCast_(const char code[], const char* file, int line) {
// Clear the error buffer..