MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / isScopeNoReturn

Method isScopeNoReturn

lib/library.cpp:1336–1377  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1334}
1335
1336bool Library::isScopeNoReturn(const Token *end, std::string *unknownFunc) const
1337{
1338 if (unknownFunc)
1339 unknownFunc->clear();
1340
1341 if (Token::Match(end->tokAt(-2), "!!{ ; }")) {
1342 const Token *lastTop = end->tokAt(-2)->astTop();
1343 if (Token::simpleMatch(lastTop, "<<") &&
1344 Token::simpleMatch(lastTop->astOperand1(), "(") &&
1345 Token::Match(lastTop->astOperand1()->previous(), "%name% ("))
1346 return isnoreturn(lastTop->astOperand1()->previous());
1347 }
1348
1349 if (!Token::simpleMatch(end->tokAt(-2), ") ; }"))
1350 return false;
1351
1352 const Token *funcname = end->linkAt(-2)->previous();
1353 if (funcname->isCpp() && funcname->astTop()->str() == "throw")
1354 return true;
1355 const Token *start = funcname;
1356 if (Token::Match(funcname->tokAt(-3),"( * %name% )")) {
1357 funcname = funcname->previous();
1358 start = funcname->tokAt(-3);
1359 } else if (funcname->isName()) {
1360 while (Token::Match(start, "%name%|.|::"))
1361 start = start->previous();
1362 } else {
1363 return false;
1364 }
1365 if (Token::Match(start,"[;{}]") && Token::Match(funcname, "%name% )| (")) {
1366 if (funcname->isKeyword())
1367 return false;
1368 if (funcname->str() == "exit")
1369 return true;
1370 if (!isnotnoreturn(funcname)) {
1371 if (unknownFunc && !isnoreturn(funcname))
1372 *unknownFunc = funcname->str();
1373 return true;
1374 }
1375 }
1376 return false;
1377}
1378
1379// cppcheck-suppress unusedFunction - used in tests only
1380const std::unordered_map<std::string, Library::Container>& Library::containers() const

Callers 5

checkReallocUsageMethod · 0.45
isEscapeScopeFunction · 0.45
checkScopeForVariableMethod · 0.45
checkScopeMethod · 0.45
checkReturnPtrThisMethod · 0.45

Calls 8

astTopMethod · 0.80
astOperand1Method · 0.80
linkAtMethod · 0.80
simpleMatchFunction · 0.70
clearMethod · 0.45
tokAtMethod · 0.45
strMethod · 0.45
isKeywordMethod · 0.45

Tested by

no test coverage detected