Fixed #3928 (Tokenizer: Wrong simplification of inner if-else 'if (a) while (b) if (c) x; else y;')
This commit is contained in:
parent
392960513b
commit
c2608108dd
|
@ -3962,6 +3962,10 @@ bool Tokenizer::simplifyIfAddBraces()
|
|||
tok = tok->next();
|
||||
Token *tempToken = tok;
|
||||
|
||||
// if (cond1) for(;;) if (cond2) ; else ;
|
||||
while (Token::Match(tempToken->next(), "for|while|BOOST_FOREACH ("))
|
||||
tempToken = tempToken->linkAt(2);
|
||||
|
||||
bool innerIf = (tempToken->next() && tempToken->next()->str() == "if");
|
||||
|
||||
if (Token::simpleMatch(tempToken->next(), "do {"))
|
||||
|
|
|
@ -107,6 +107,7 @@ private:
|
|||
TEST_CASE(ifAddBraces16); // ticket # 2739 (segmentation fault)
|
||||
TEST_CASE(ifAddBraces17); // '} else' should be in the same line
|
||||
TEST_CASE(ifAddBraces18); // #3424 - if if { } else else
|
||||
TEST_CASE(ifAddBraces19); // #3928 - if for if else
|
||||
|
||||
TEST_CASE(whileAddBraces);
|
||||
TEST_CASE(doWhileAddBraces);
|
||||
|
@ -1191,6 +1192,27 @@ private:
|
|||
tokenizeAndStringify("{ if(x) if(y){}else;else;}", false));
|
||||
}
|
||||
|
||||
void ifAddBraces19() {
|
||||
// #3928 - if for if else
|
||||
const char code[] = "void f()\n"
|
||||
"{\n"
|
||||
" if (a)\n"
|
||||
" for (;;)\n"
|
||||
" if (b)\n"
|
||||
" bar1();\n"
|
||||
" else\n"
|
||||
" bar2();\n"
|
||||
"}\n";
|
||||
ASSERT_EQUALS("void f ( )\n"
|
||||
"{\n"
|
||||
"if ( a ) {\n"
|
||||
"for ( ; ; ) {\n"
|
||||
"if ( b ) {\n"
|
||||
"bar1 ( ) ;\n"
|
||||
"} else {\n"
|
||||
"bar2 ( ) ; } } }\n"
|
||||
"}", tokenizeAndStringify(code, true));
|
||||
}
|
||||
|
||||
|
||||
void whileAddBraces() {
|
||||
|
|
Loading…
Reference in New Issue