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();
|
tok = tok->next();
|
||||||
Token *tempToken = tok;
|
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");
|
bool innerIf = (tempToken->next() && tempToken->next()->str() == "if");
|
||||||
|
|
||||||
if (Token::simpleMatch(tempToken->next(), "do {"))
|
if (Token::simpleMatch(tempToken->next(), "do {"))
|
||||||
|
|
|
@ -107,6 +107,7 @@ private:
|
||||||
TEST_CASE(ifAddBraces16); // ticket # 2739 (segmentation fault)
|
TEST_CASE(ifAddBraces16); // ticket # 2739 (segmentation fault)
|
||||||
TEST_CASE(ifAddBraces17); // '} else' should be in the same line
|
TEST_CASE(ifAddBraces17); // '} else' should be in the same line
|
||||||
TEST_CASE(ifAddBraces18); // #3424 - if if { } else else
|
TEST_CASE(ifAddBraces18); // #3424 - if if { } else else
|
||||||
|
TEST_CASE(ifAddBraces19); // #3928 - if for if else
|
||||||
|
|
||||||
TEST_CASE(whileAddBraces);
|
TEST_CASE(whileAddBraces);
|
||||||
TEST_CASE(doWhileAddBraces);
|
TEST_CASE(doWhileAddBraces);
|
||||||
|
@ -1191,6 +1192,27 @@ private:
|
||||||
tokenizeAndStringify("{ if(x) if(y){}else;else;}", false));
|
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() {
|
void whileAddBraces() {
|
||||||
|
|
Loading…
Reference in New Issue