avoid warning on first case (in case there are declarations before first case)
This commit is contained in:
parent
1a606a57fd
commit
70fcbe94f4
|
@ -323,6 +323,7 @@ void CheckOther::checkSwitchCaseFallThrough()
|
||||||
std::stack<Token *> loopnest;
|
std::stack<Token *> loopnest;
|
||||||
std::stack<Token *> scopenest;
|
std::stack<Token *> scopenest;
|
||||||
bool justbreak = true;
|
bool justbreak = true;
|
||||||
|
bool firstcase = true;
|
||||||
for (const Token *tok2 = tok->tokAt(1)->link()->tokAt(2); tok2; tok2 = tok2->next())
|
for (const Token *tok2 = tok->tokAt(1)->link()->tokAt(2); tok2; tok2 = tok2->next())
|
||||||
{
|
{
|
||||||
if (Token::Match(tok2, "if ("))
|
if (Token::Match(tok2, "if ("))
|
||||||
|
@ -396,12 +397,13 @@ void CheckOther::checkSwitchCaseFallThrough()
|
||||||
}
|
}
|
||||||
else if (Token::Match(tok2, "case|default"))
|
else if (Token::Match(tok2, "case|default"))
|
||||||
{
|
{
|
||||||
if (!justbreak)
|
if (!justbreak && !firstcase)
|
||||||
{
|
{
|
||||||
switchCaseFallThrough(tok2);
|
switchCaseFallThrough(tok2);
|
||||||
}
|
}
|
||||||
tok2 = Token::findmatch(tok2, ":");
|
tok2 = Token::findmatch(tok2, ":");
|
||||||
justbreak = true;
|
justbreak = true;
|
||||||
|
firstcase = false;
|
||||||
}
|
}
|
||||||
else if (tok2->str() == "{")
|
else if (tok2->str() == "{")
|
||||||
{
|
{
|
||||||
|
|
|
@ -1383,6 +1383,16 @@ private:
|
||||||
" }\n"
|
" }\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:5]: (warning) Switch falls through case without comment\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:5]: (warning) Switch falls through case without comment\n", errout.str());
|
||||||
|
|
||||||
|
check_preprocess_suppress(
|
||||||
|
"void foo() {\n"
|
||||||
|
" switch (a) {\n"
|
||||||
|
" int x;\n"
|
||||||
|
" case 1:\n"
|
||||||
|
" break;\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void selfAssignment()
|
void selfAssignment()
|
||||||
|
|
Loading…
Reference in New Issue