Skip to content

Commit dd04e09

Browse files
[Refactor] Redundant checks for noreturn functions (#8712)
1 parent 0a43e46 commit dd04e09

2 files changed

Lines changed: 11 additions & 25 deletions

File tree

lib/astutils.cpp

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
22292236
bool 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

22482243
static 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
}

lib/checkother.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -791,7 +791,7 @@ void CheckOtherImpl::redundantAssignmentSameValueError(const Token *tok, const V
791791
//---------------------------------------------------------------------------
792792
static inline bool isFunctionOrBreakPattern(const Token *tok)
793793
{
794-
return Token::Match(tok, "%name% (") || Token::Match(tok, "break|continue|return|exit|goto|throw");
794+
return Token::Match(tok, "%name% (") || (tok->isKeyword() && Token::Match(tok, "break|continue|return|goto|throw"));
795795
}
796796

797797
void CheckOtherImpl::redundantBitwiseOperationInSwitchError()

0 commit comments

Comments
 (0)