Bug hunting; Timeout

This commit is contained in:
Daniel Marjamäki 2020-06-21 18:28:07 +02:00
parent 65498b5e9a
commit 11e2b5ea14
1 changed files with 8 additions and 0 deletions

View File

@ -337,6 +337,7 @@ namespace {
, tokenizer(tokenizer)
, callbacks(callbacks)
, recursion(0)
, startTime(std::time(nullptr))
, mTrackExecution(trackExecution)
, mDataIndex(trackExecution->getNewDataIndex()) {}
typedef std::map<nonneg int, ExprEngine::ValuePtr> Memory;
@ -347,6 +348,7 @@ namespace {
const std::vector<ExprEngine::Callback> &callbacks;
std::vector<ExprEngine::ValuePtr> constraints;
int recursion;
std::time_t startTime;
ExprEngine::ValuePtr executeContract(const Function *function, ExprEngine::ValuePtr(*executeExpression)(const Token*, Data&)) {
const auto it = settings->functionContracts.find(function->fullName());
@ -2253,9 +2255,15 @@ static std::string execute(const Token *start, const Token *end, Data &data)
caseData.addConstraint(condValue, caseValue, true);
defaultData.addConstraint(condValue, caseValue, false);
exec(tok2->tokAt(2), end, caseData);
// After 1 minute processing a function.. only check first case..
if (std::time(nullptr) > data.startTime + 60)
break;
} else if (Token::Match(tok2, "case %name% :") && !Token::Match(tok2->tokAt(3), ";| case")) {
Data caseData(data);
exec(tok2->tokAt(2), end, caseData);
// After 1 minute processing a function.. only check first case..
if (std::time(nullptr) > data.startTime + 60)
break;
} else if (Token::simpleMatch(tok2, "default :"))
defaultStart = tok2;
}