@@ -3265,6 +3265,18 @@ static ExprUsage getFunctionUsage(const Token* tok, int indirect, const Settings
32653265 return ExprUsage::Inconclusive;
32663266}
32673267
3268+ bool isLeafDot (const Token* tok)
3269+ {
3270+ if (!tok)
3271+ return false ;
3272+ const Token * parent = tok->astParent ();
3273+ if (!Token::simpleMatch (parent, " ." ))
3274+ return false ;
3275+ if (parent->astOperand2 () == tok && !Token::simpleMatch (parent->astParent (), " ." ))
3276+ return true ;
3277+ return isLeafDot (parent);
3278+ }
3279+
32683280ExprUsage getExprUsage (const Token* tok, int indirect, const Settings* settings, bool cpp)
32693281{
32703282 const Token* parent = tok->astParent ();
@@ -3285,6 +3297,13 @@ ExprUsage getExprUsage(const Token* tok, int indirect, const Settings* settings,
32853297 !parent->isUnaryOp (" &" ) &&
32863298 !(astIsRHS (tok) && isLikelyStreamRead (cpp, parent)))
32873299 return ExprUsage::Used;
3300+ if (isLeafDot (tok)) {
3301+ const Token* op = parent->astParent ();
3302+ while (Token::simpleMatch (op, " ." ))
3303+ op = op->astParent ();
3304+ if (Token::Match (op, " %assign%|++|--" ) && op->str () != " =" )
3305+ return ExprUsage::Used;
3306+ }
32883307 if (Token::simpleMatch (parent, " =" ) && astIsRHS (tok)) {
32893308 const Token* const lhs = parent->astOperand1 ();
32903309 if (lhs && lhs->variable () && lhs->variable ()->isReference () && lhs == lhs->variable ()->nameToken ())
0 commit comments