@@ -2226,23 +2226,18 @@ static bool isEscapedOrJump(const Token* tok, bool functionsScope, const Library
22262226 return Token::Match (tok, " return|goto|throw|continue|break" );
22272227}
22282228
2229+ static bool isNoreturnFunction (const Token* ftok, const Library& library)
2230+ {
2231+ if (const Function* function = ftok->function ())
2232+ return function->isEscapeFunction () || function->isAttributeNoreturn ();
2233+ return library.isnoreturn (ftok);
2234+ }
2235+
22292236bool isEscapeFunction (const Token* ftok, const Library& library)
22302237{
22312238 if (!Token::Match (ftok, " %name% (" ))
22322239 return false ;
2233- if (Token::Match (ftok, " exit|abort" ))
2234- return true ;
2235- const Function* function = ftok->function ();
2236- if (function) {
2237- if (function->isEscapeFunction ())
2238- return true ;
2239- if (function->isAttributeNoreturn ())
2240- return true ;
2241- } else {
2242- if (library.isnoreturn (ftok))
2243- return true ;
2244- }
2245- return false ;
2240+ return isNoreturnFunction (ftok, library);
22462241}
22472242
22482243static bool hasNoreturnFunction (const Token* tok, const Library& library, const Token** unknownFunc)
@@ -2253,18 +2248,9 @@ static bool hasNoreturnFunction(const Token* tok, const Library& library, const
22532248 while (Token::simpleMatch (ftok, " (" ))
22542249 ftok = ftok->astOperand1 ();
22552250 if (ftok) {
2256- const Function * function = ftok->function ();
2257- if (function) {
2258- if (function->isEscapeFunction ())
2259- return true ;
2260- if (function->isAttributeNoreturn ())
2261- return true ;
2262- } else if (library.isnoreturn (ftok)) {
2263- return true ;
2264- } else if (Token::Match (ftok, " exit|abort" )) {
2251+ if (isNoreturnFunction (ftok, library))
22652252 return true ;
2266- }
2267- if (unknownFunc && !function && library.functions ().count (library.getFunctionName (ftok)) == 0 )
2253+ if (unknownFunc && !ftok->function () && library.functions ().count (library.getFunctionName (ftok)) == 0 )
22682254 *unknownFunc = ftok;
22692255 return false ;
22702256 }
0 commit comments