Fix #10143 false positive: redundantInitialization with std::shared_ptr (#3746)

This commit is contained in:
chrchr-github 2022-01-24 21:50:50 +01:00 committed by GitHub
parent d64dadcd31
commit 158f3d494e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 7 deletions

View File

@ -479,9 +479,10 @@ void CheckOther::checkRedundantAssignment()
// todo: check static variables
continue;
// If there is a custom assignment operator => this is inconclusive
bool inconclusive = false;
if (mTokenizer->isCPP() && tok->astOperand1()->valueType() && tok->astOperand1()->valueType()->typeScope) {
if (mTokenizer->isCPP() && tok->astOperand1()->valueType()) {
// If there is a custom assignment operator => this is inconclusive
if (tok->astOperand1()->valueType()->typeScope) {
const std::string op = "operator" + tok->str();
for (const Function& f : tok->astOperand1()->valueType()->typeScope->functionList) {
if (f.name() == op) {
@ -490,6 +491,10 @@ void CheckOther::checkRedundantAssignment()
}
}
}
// assigning a smart pointer has side effects
if (tok->astOperand1()->valueType()->type == ValueType::SMART_POINTER)
break;
}
if (inconclusive && !mSettings->certainty.isEnabled(Certainty::inconclusive))
continue;

View File

@ -7875,6 +7875,13 @@ private:
" e = dostuff();\n"
"}");
ASSERT_EQUALS("", errout.str());
check("void f() {\n" // #10143
" std::shared_ptr<int> i = g();\n"
" h();\n"
" i = nullptr;\n"
"}\n");
ASSERT_EQUALS("", errout.str());
}
void redundantMemWrite() {