@@ -2472,6 +2472,37 @@ bool isVariableChanged(const Token *tok, int indirect, const Settings *settings,
24722472 return false ;
24732473
24742474 const Token *ftok = tok->tokAt (2 );
2475+ if (astIsContainer (tok) && tok->valueType () && tok->valueType ()->container ) {
2476+ const Library::Container* c = tok->valueType ()->container ;
2477+ const Library::Container::Action action = c->getAction (ftok->str ());
2478+ if (contains ({Library::Container::Action::INSERT ,
2479+ Library::Container::Action::ERASE ,
2480+ Library::Container::Action::CHANGE ,
2481+ Library::Container::Action::CHANGE_CONTENT ,
2482+ Library::Container::Action::CHANGE_INTERNAL ,
2483+ Library::Container::Action::CLEAR ,
2484+ Library::Container::Action::PUSH ,
2485+ Library::Container::Action::POP ,
2486+ Library::Container::Action::RESIZE },
2487+ action))
2488+ return true ;
2489+ const Library::Container::Yield yield = c->getYield (ftok->str ());
2490+ // If accessing element check if the element is changed
2491+ if (contains ({Library::Container::Yield::ITEM , Library::Container::Yield::AT_INDEX }, yield)) {
2492+ return isVariableChanged (ftok->next (), indirect, settings, cpp, depth - 1 );
2493+ } else if (contains ({Library::Container::Yield::BUFFER ,
2494+ Library::Container::Yield::BUFFER_NT ,
2495+ Library::Container::Yield::START_ITERATOR ,
2496+ Library::Container::Yield::ITERATOR },
2497+ yield)) {
2498+ return isVariableChanged (ftok->next (), indirect + 1 , settings, cpp, depth - 1 );
2499+ } else if (contains ({Library::Container::Yield::SIZE ,
2500+ Library::Container::Yield::EMPTY ,
2501+ Library::Container::Yield::END_ITERATOR },
2502+ yield)) {
2503+ return false ;
2504+ }
2505+ }
24752506 if (settings)
24762507 return !settings->library .isFunctionConst (ftok);
24772508
0 commit comments