MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / checkUnsafeClassRefMember

Method checkUnsafeClassRefMember

lib/checkclass.cpp:3652–3674  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3650}
3651
3652void CheckClassImpl::checkUnsafeClassRefMember()
3653{
3654 if (!mSettings.safeChecks.classes || !mSettings.severity.isEnabled(Severity::warning))
3655 return;
3656 logChecker("CheckClass::checkUnsafeClassRefMember"); // warning,safeChecks
3657 for (const Scope * classScope : mSymbolDatabase->classAndStructScopes) {
3658 for (const Function &func : classScope->functionList) {
3659 if (!func.hasBody() || !func.isConstructor())
3660 continue;
3661
3662 const Token *initList = func.constructorMemberInitialization();
3663 while (Token::Match(initList, "[:,] %name% (")) {
3664 if (Token::Match(initList->tokAt(2), "( %var% )")) {
3665 const Variable * const memberVar = initList->next()->variable();
3666 const Variable * const argVar = initList->tokAt(3)->variable();
3667 if (memberVar && argVar && memberVar->isConst() && memberVar->isReference() && argVar->isArgument() && argVar->isConst() && argVar->isReference())
3668 unsafeClassRefMemberError(initList->next(), classScope->className + "::" + memberVar->name());
3669 }
3670 initList = initList->linkAt(2)->next();
3671 }
3672 }
3673 }
3674}
3675
3676void CheckClassImpl::unsafeClassRefMemberError(const Token *tok, const std::string &varname)
3677{

Callers 1

runChecksMethod · 0.80

Calls 8

variableMethod · 0.80
nextMethod · 0.80
isConstMethod · 0.80
linkAtMethod · 0.80
isEnabledMethod · 0.45
tokAtMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected