@@ -97,6 +97,15 @@ namespace {
9797 return actions.isModified ();
9898 }
9999
100+ bool stopOnCondition (const Token* condTok) const
101+ {
102+ if (analyzer->isConditional () && findAstNode (condTok, [](const Token* tok) {
103+ return tok->isIncompleteVar ();
104+ }))
105+ return true ;
106+ return analyzer->stopOnCondition (condTok);
107+ }
108+
100109 std::pair<bool , bool > evalCond (const Token* tok, const Token* ctx = nullptr ) const {
101110 if (!tok)
102111 return std::make_pair (false , false );
@@ -194,12 +203,12 @@ namespace {
194203 template <class T , class F , REQUIRES(" T must be a Token class" , std::is_convertible<T*, const Token*> )>
195204 Progress traverseConditional (T* tok, F f, bool traverseUnknown) {
196205 if (Token::Match (tok, " ?|&&|%oror%" ) && tok->astOperand1 () && tok->astOperand2 ()) {
197- T* condTok = tok->astOperand1 ();
206+ const T* condTok = tok->astOperand1 ();
198207 T* childTok = tok->astOperand2 ();
199208 bool checkThen, checkElse;
200209 std::tie (checkThen, checkElse) = evalCond (condTok);
201210 if (!checkThen && !checkElse) {
202- if (!traverseUnknown && analyzer-> stopOnCondition (condTok) && stopUpdates ()) {
211+ if (!traverseUnknown && stopOnCondition (condTok) && stopUpdates ()) {
203212 return Progress::Continue;
204213 }
205214 checkThen = true ;
@@ -467,7 +476,7 @@ namespace {
467476 if (updateRecursive (condTok) == Progress::Break)
468477 return Break ();
469478 }
470- if (!checkThen && !checkElse && !isDoWhile && analyzer-> stopOnCondition (condTok) && stopUpdates ())
479+ if (!checkThen && !checkElse && !isDoWhile && stopOnCondition (condTok) && stopUpdates ())
471480 return Break (Analyzer::Terminate::Conditional);
472481 // condition is false, we don't enter the loop
473482 if (checkElse)
@@ -689,7 +698,7 @@ namespace {
689698 Branch elseBranch{endBlock->tokAt (2 ) ? endBlock->linkAt (2 ) : nullptr };
690699 // Check if condition is true or false
691700 std::tie (thenBranch.check , elseBranch.check ) = evalCond (condTok);
692- if (!thenBranch.check && !elseBranch.check && analyzer-> stopOnCondition (condTok) && stopUpdates ())
701+ if (!thenBranch.check && !elseBranch.check && stopOnCondition (condTok) && stopUpdates ())
693702 return Break (Analyzer::Terminate::Conditional);
694703 const bool hasElse = Token::simpleMatch (endBlock, " } else {" );
695704 bool bail = false ;
0 commit comments