@@ -159,33 +159,26 @@ static void valueFlowBeforeCondition(TokenList *tokenlist, ErrorLogger *errorLog
159159 }
160160
161161 // bailout: while-condition, variable is changed in while loop
162- for (const Token *tok2 = tok; tok2; tok2 = tok2->previous ()) {
163- if (tok2->str () == " )" )
164- tok2 = tok2->link ();
165-
166- else if (tok2->str () == " (" && Token::simpleMatch (tok2->link (), " ) {" )) {
167- if (Token::Match (tok2->previous (), " for|while (" )) {
168- const Token *start = tok2->link ()->next ();
169- const Token *end = start->link ();
170- if (Token::findmatch (start," ++|--| %varid% ++|--|=" ,end,varid)) {
171- varid = 0U ;
172- if (settings->debugwarnings )
173- bailout (tokenlist, errorLogger, tok, " variable " + var->nameToken ()->str () + " used in loop" );
174- }
175- }
162+ for (const Token *tok2 = tok; tok2; tok2 = tok2->astParent ()) {
163+ if (tok2->astParent () || tok2->str () != " (" || !Token::simpleMatch (tok2->link (), " ) {" ))
164+ continue ;
176165
177- // if,macro => bailout
178- else if (Token::simpleMatch (tok2->previous (), " if (" ) && tok2->previous ()->isExpandedMacro ()) {
166+ if (Token::Match (tok2->previous (), " for|while (" )) {
167+ const Token *start = tok2->link ()->next ();
168+ const Token *end = start->link ();
169+ if (Token::findmatch (start," ++|--| %varid% ++|--|=" ,end,varid)) {
179170 varid = 0U ;
180171 if (settings->debugwarnings )
181- bailout (tokenlist, errorLogger, tok, " variable " + var->nameToken ()->str () + " , condition is defined in macro " );
172+ bailout (tokenlist, errorLogger, tok, " variable " + var->nameToken ()->str () + " used in loop " );
182173 }
183-
184- break ;
185174 }
186175
187- else if (Token::Match (tok2, " [{}]" ))
188- break ;
176+ // if,macro => bailout
177+ else if (Token::simpleMatch (tok2->previous (), " if (" ) && tok2->previous ()->isExpandedMacro ()) {
178+ varid = 0U ;
179+ if (settings->debugwarnings )
180+ bailout (tokenlist, errorLogger, tok, " variable " + var->nameToken ()->str () + " , condition is defined in macro" );
181+ }
189182 }
190183 if (varid == 0U )
191184 continue ;
0 commit comments