fix #1593 (false negative: the function can be declared as const)
This commit is contained in:
parent
2f4aee2923
commit
74c1bdde77
|
@ -1630,6 +1630,23 @@ bool CheckClass::checkConstFunc(const Scope *scope, const Token *tok)
|
||||||
isconst = false;
|
isconst = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else if (Token::Match(tok1, "%var% . size ( )") && tok1->varId())
|
||||||
|
{
|
||||||
|
// STL container size() is const
|
||||||
|
static const char STL_CONTAINER_LIST[] = "bitset|deque|list|map|multimap|multiset|priority_queue|queue|set|stack|hash_map|hash_multimap|hash_set|string|vector";
|
||||||
|
const Variable *var = symbolDatabase->getVariableFromVarId(tok1->varId());
|
||||||
|
|
||||||
|
if (var)
|
||||||
|
{
|
||||||
|
const Token *tok2 = var->typeStartToken();
|
||||||
|
// skip namespace if present
|
||||||
|
if (Token::simpleMatch(tok2, "std ::"))
|
||||||
|
tok2 = tok2->tokAt(2);
|
||||||
|
// check for STL container
|
||||||
|
if (Token::Match(tok2, STL_CONTAINER_LIST))
|
||||||
|
tok1 = tok1->tokAt(4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// delete..
|
// delete..
|
||||||
else if (tok1->str() == "delete")
|
else if (tok1->str() == "delete")
|
||||||
|
|
|
@ -4818,8 +4818,7 @@ private:
|
||||||
"std::vector<std::string> m_strVec;\n"
|
"std::vector<std::string> m_strVec;\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
);
|
);
|
||||||
TODO_ASSERT_EQUALS("[test.cpp:4]: (information) Technically the member function 'A::strGetSize' can be const.\n",
|
ASSERT_EQUALS("[test.cpp:4]: (information) Technically the member function 'A::strGetSize' can be const.\n", errout.str());
|
||||||
"", errout.str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void const26() // ticket #1847
|
void const26() // ticket #1847
|
||||||
|
@ -5988,8 +5987,7 @@ private:
|
||||||
" A(){}\n"
|
" A(){}\n"
|
||||||
" unsigned int GetVecSize() {return m_v.size();}\n"
|
" unsigned int GetVecSize() {return m_v.size();}\n"
|
||||||
"};");
|
"};");
|
||||||
TODO_ASSERT_EQUALS("[test.cpp:7]: (information) Technically the member function 'A::GetVecSize' can be const.\n",
|
ASSERT_EQUALS("[test.cpp:7]: (information) Technically the member function 'A::GetVecSize' can be const.\n", errout.str());
|
||||||
"", errout.str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void constVirtualFunc()
|
void constVirtualFunc()
|
||||||
|
|
Loading…
Reference in New Issue