missingReturn; fixed false positive with trailing return type
This commit is contained in:
parent
ef0af26d9f
commit
7cb66d56f3
|
@ -259,7 +259,9 @@ void CheckFunctions::checkMissingReturn()
|
||||||
continue;
|
continue;
|
||||||
if (function->type != Function::Type::eFunction && function->type != Function::Type::eOperatorEqual)
|
if (function->type != Function::Type::eFunction && function->type != Function::Type::eOperatorEqual)
|
||||||
continue;
|
continue;
|
||||||
if (Token::Match(function->retDef, "void| %name% ("))
|
if (Token::Match(function->retDef, "%name% (") && function->retDef->isUpperCaseName())
|
||||||
|
continue;
|
||||||
|
if (Function::returnsVoid(function, true))
|
||||||
continue;
|
continue;
|
||||||
const Token *errorToken = checkMissingReturnScope(scope->bodyEnd);
|
const Token *errorToken = checkMissingReturnScope(scope->bodyEnd);
|
||||||
if (errorToken)
|
if (errorToken)
|
||||||
|
|
|
@ -2677,6 +2677,21 @@ bool Function::returnsReference(const Function* function, bool unknown)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Function::returnsVoid(const Function* function, bool unknown)
|
||||||
|
{
|
||||||
|
if (!function)
|
||||||
|
return false;
|
||||||
|
if (function->type != Function::eFunction)
|
||||||
|
return false;
|
||||||
|
const Token* defEnd = function->returnDefEnd();
|
||||||
|
if (defEnd->strAt(-1) == "void")
|
||||||
|
return true;
|
||||||
|
// Check for unknown types, which could be a void type
|
||||||
|
if (isUnknownType(function->retDef, defEnd))
|
||||||
|
return unknown;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<const Token*> Function::findReturns(const Function* f)
|
std::vector<const Token*> Function::findReturns(const Function* f)
|
||||||
{
|
{
|
||||||
std::vector<const Token*> result;
|
std::vector<const Token*> result;
|
||||||
|
|
|
@ -908,6 +908,8 @@ public:
|
||||||
|
|
||||||
static bool returnsReference(const Function* function, bool unknown = false);
|
static bool returnsReference(const Function* function, bool unknown = false);
|
||||||
|
|
||||||
|
static bool returnsVoid(const Function* function, bool unknown = false);
|
||||||
|
|
||||||
static std::vector<const Token*> findReturns(const Function* f);
|
static std::vector<const Token*> findReturns(const Function* f);
|
||||||
|
|
||||||
const Token* returnDefEnd() const {
|
const Token* returnDefEnd() const {
|
||||||
|
|
|
@ -1376,6 +1376,9 @@ private:
|
||||||
check("F(A,B) { x=1; }");
|
check("F(A,B) { x=1; }");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("auto foo4() -> void {}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
// switch
|
// switch
|
||||||
check("int f() {\n"
|
check("int f() {\n"
|
||||||
" switch (x) {\n"
|
" switch (x) {\n"
|
||||||
|
|
Loading…
Reference in New Issue