diff --git a/src/checkautovariables.cpp b/src/checkautovariables.cpp index a0e890f9c..cd408aab5 100644 --- a/src/checkautovariables.cpp +++ b/src/checkautovariables.cpp @@ -44,7 +44,6 @@ static CheckAutoVariables instance; bool CheckAutoVariables::errorAv(const Token* left, const Token* right) { const std::string left_var(left->str()); - const std::string right_var(right->str()); std::list::iterator it_fp; for (it_fp = fp_list.begin(); it_fp != fp_list.end(); ++it_fp) @@ -63,12 +62,11 @@ bool CheckAutoVariables::errorAv(const Token* left, const Token* right) if (it_fp == fp_list.end()) return false; - std::list::iterator id_vd; + std::list::const_iterator id_vd; for (id_vd = vd_list.begin(); id_vd != vd_list.end(); ++id_vd) { - std::string vname(*id_vd); //The left argument is a variable declaration - if (vname == right_var) + if (*id_vd == right->varId()) break; } //The left argument is NOT a variable declaration @@ -79,14 +77,12 @@ bool CheckAutoVariables::errorAv(const Token* left, const Token* right) } -bool CheckAutoVariables::isAutoVar(const Token* t) +bool CheckAutoVariables::isAutoVar(unsigned int varId) { - std::list::iterator id_vd; - std::string v(t->str()); + std::list::iterator id_vd; for (id_vd = vd_list.begin(); id_vd != vd_list.end(); ++id_vd) { - std::string vname(*id_vd); - if (vname == v) + if (*id_vd == varId) return true; } return false; @@ -143,10 +139,8 @@ bool isExternOrStatic(const Token *tok) void CheckAutoVariables::addVD(const Token* tok) { - std::string var_name(tok->str()); - - //std::cout << "VD " << tok->linenr() << " " << var_name << std::endl; - vd_list.push_back(var_name); + //std::cout << "VD " << tok->linenr() << " " << tok->str() << std::endl; + vd_list.push_back(tok->varId()); } void CheckAutoVariables::addVDA(const Token* tok) @@ -231,7 +225,7 @@ void CheckAutoVariables::autoVariables() } else if (bindent > 0 && Token::Match(tok, "return & %var% ;")) //Critical return { - if (isAutoVar(tok->tokAt(2))) + if (isAutoVar(tok->tokAt(2)->varId())) reportError(tok, Severity::error, "autoVariables", diff --git a/src/checkautovariables.h b/src/checkautovariables.h index 4bb37392c..6d7410ea3 100644 --- a/src/checkautovariables.h +++ b/src/checkautovariables.h @@ -57,10 +57,10 @@ public: private: std::list fp_list; - std::list vd_list; + std::list vd_list; std::list vda_list; bool errorAv(const Token* left, const Token* right); - bool isAutoVar(const Token* t); + bool isAutoVar(unsigned int varId); bool isAutoVarArray(unsigned int varId); void addVD(const Token* t); void addVDA(const Token* t);