@@ -496,13 +496,22 @@ static bool isDanglingSubFunction(const Token* tokvalue, const Token* tok)
496496 return exprDependsOnThis (parent);
497497}
498498
499+ static const Variable* getParentVar (const Token* tok)
500+ {
501+ if (!tok)
502+ return nullptr ;
503+ if (Token::simpleMatch (tok, " ." ))
504+ return getParentVar (tok->astOperand1 ());
505+ return tok->variable ();
506+ }
507+
499508static bool isAssignedToNonLocal (const Token* tok)
500509{
501510 if (!Token::simpleMatch (tok->astParent (), " =" ))
502511 return false ;
503- if (!Token::Match (tok-> astParent ()-> astOperand1 (), " %var% " ))
512+ if (!astIsRHS (tok))
504513 return false ;
505- const Variable* var = tok->astParent ()->astOperand1 ()-> variable ( );
514+ const Variable* var = getParentVar ( tok->astParent ()->astOperand1 ());
506515 if (!var)
507516 return false ;
508517 return !var->isLocal () || var->isStatic ();
@@ -597,8 +606,8 @@ void CheckAutoVariables::checkVarLifetimeScope(const Token * start, const Token
597606 const Variable * var = nullptr ;
598607 const Token * tok2 = tok;
599608 if (Token::simpleMatch (tok->astParent (), " =" )) {
600- if (tok-> astParent ()-> astOperand2 () == tok) {
601- var = getLHSVariable (tok->astParent ());
609+ if (astIsRHS ( tok) ) {
610+ var = getParentVar (tok->astParent ()-> astOperand1 ());
602611 tok2 = tok->astParent ()->astOperand1 ();
603612 }
604613 } else if (tok->variable () && tok->variable ()->declarationId () == tok->varId ()) {
0 commit comments