CheckClass: Restore a few warnings about member initialization of classes
This commit is contained in:
parent
da2867c09a
commit
60ac463a79
|
@ -161,7 +161,7 @@ void CheckClass::constructors()
|
|||
if (usage[count].assign || usage[count].init || var.isStatic())
|
||||
continue;
|
||||
|
||||
if (var.valueType()->pointer == 0 && var.type() && var.type()->needInitialization == Type::False)
|
||||
if (var.valueType()->pointer == 0 && var.type() && var.type()->needInitialization == Type::False && var.type()->derivedFrom.empty())
|
||||
continue;
|
||||
|
||||
if (var.isConst() && func.isOperator()) // We can't set const members in assignment operator
|
||||
|
@ -193,7 +193,7 @@ void CheckClass::constructors()
|
|||
bool inconclusive = false;
|
||||
// Don't warn about unknown types in copy constructors since we
|
||||
// don't know if they can be copied or not..
|
||||
if ((func.type == Function::eCopyConstructor || func.type == Function::eOperatorEqual) && !isVariableCopyNeeded(var))
|
||||
if ((func.type == Function::eCopyConstructor || func.type == Function::eMoveConstructor || func.type == Function::eOperatorEqual) && !isVariableCopyNeeded(var))
|
||||
inconclusive = true;
|
||||
|
||||
if (!printInconclusive && inconclusive)
|
||||
|
|
|
@ -1356,6 +1356,25 @@ private:
|
|||
"};");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("class A : public std::vector<int>\n"
|
||||
"{\n"
|
||||
"public:\n"
|
||||
" A(const A &a);\n"
|
||||
"};\n"
|
||||
"class B\n"
|
||||
"{\n"
|
||||
" A a;\n"
|
||||
"public:\n"
|
||||
" B(){}\n"
|
||||
" B(const B&){}\n"
|
||||
" B(B &&){}\n"
|
||||
" const B& operator=(const B&){return *this;}\n"
|
||||
"};", true);
|
||||
ASSERT_EQUALS("[test.cpp:11]: (warning, inconclusive) Member variable 'B::a' is not initialized in the constructor.\n"
|
||||
"[test.cpp:12]: (warning, inconclusive) Member variable 'B::a' is not initialized in the constructor.\n"
|
||||
"[test.cpp:13]: (warning, inconclusive) Member variable 'B::a' is not assigned a value in 'B::operator='.\n",
|
||||
errout.str());
|
||||
|
||||
check("class B\n"
|
||||
"{\n"
|
||||
"public:\n"
|
||||
|
|
Loading…
Reference in New Issue