Skip to content

Commit 3d3d39a

Browse files
committed
fix
1 parent 5b2fbea commit 3d3d39a

3 files changed

Lines changed: 15 additions & 0 deletions

File tree

lib/checkfunctions.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,8 @@ void CheckFunctionsImpl::checkMissingReturn()
329329
continue;
330330
if (Function::returnsVoid(function, true))
331331
continue;
332+
if (Function::isCoroutine(function))
333+
continue;
332334
const Token *errorToken = checkMissingReturnScope(scope->bodyEnd, mSettings.library);
333335
if (errorToken)
334336
missingReturnError(errorToken);

lib/symboldatabase.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3407,6 +3407,18 @@ bool Function::returnsVoid(const Function* function, bool unknown)
34073407
});
34083408
}
34093409

3410+
bool Function::isCoroutine(const Function* function)
3411+
{
3412+
if (!function->functionScope)
3413+
return false;
3414+
const Scope *scope = function->functionScope;
3415+
for (const Token *tok = scope->bodyStart; tok != scope->bodyEnd; tok = tok->next()) {
3416+
if (Token::Match(tok, "co_return|co_await|co_yield"))
3417+
return true;
3418+
}
3419+
return false;
3420+
}
3421+
34103422
std::vector<const Token*> Function::findReturns(const Function* f)
34113423
{
34123424
std::vector<const Token*> result;

lib/symboldatabase.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,7 @@ class CPPCHECKLIB Function {
945945
static bool returnsStandardType(const Function* function, bool unknown = false);
946946

947947
static bool returnsVoid(const Function* function, bool unknown = false);
948+
static bool isCoroutine(const Function* function);
948949

949950
static std::vector<const Token*> findReturns(const Function* f);
950951

0 commit comments

Comments
 (0)