Remove a false positive - main function has no return value (#3335)
This commit is contained in:
parent
942202aede
commit
c71e2da5a8
|
@ -257,6 +257,8 @@ void CheckFunctions::checkMissingReturn()
|
|||
const Function *function = scope->function;
|
||||
if (!function || !function->hasBody())
|
||||
continue;
|
||||
if (function->name() == "main" && !(mSettings->standards.c < Standards::C99 && mTokenizer->isC()))
|
||||
continue;
|
||||
if (function->type != Function::Type::eFunction && function->type != Function::Type::eOperatorEqual)
|
||||
continue;
|
||||
if (Token::Match(function->retDef, "%name% (") && function->retDef->isUpperCaseName())
|
||||
|
|
|
@ -1373,6 +1373,21 @@ private:
|
|||
check("int f() {}");
|
||||
ASSERT_EQUALS("[test.cpp:1]: (error) Found a exit path from function with non-void return type that has missing return statement\n", errout.str());
|
||||
|
||||
{
|
||||
const char code[] = "int main(void) {}";
|
||||
Settings s;
|
||||
|
||||
s.standards.c = Standards::C89;
|
||||
check(code, "test.c", &s); // c code (c89)
|
||||
ASSERT_EQUALS("[test.c:1]: (error) Found a exit path from function with non-void return type that has missing return statement\n", errout.str());
|
||||
|
||||
s.standards.c = Standards::C99; check(code, "test.c", &s); // c code (c99)
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check(code, "test.cpp", &s); // c++ code
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
check("F(A,B) { x=1; }");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
|
|
Loading…
Reference in New Issue