Bug hunting; Timeout
This commit is contained in:
parent
65498b5e9a
commit
11e2b5ea14
|
@ -337,6 +337,7 @@ namespace {
|
||||||
, tokenizer(tokenizer)
|
, tokenizer(tokenizer)
|
||||||
, callbacks(callbacks)
|
, callbacks(callbacks)
|
||||||
, recursion(0)
|
, recursion(0)
|
||||||
|
, startTime(std::time(nullptr))
|
||||||
, mTrackExecution(trackExecution)
|
, mTrackExecution(trackExecution)
|
||||||
, mDataIndex(trackExecution->getNewDataIndex()) {}
|
, mDataIndex(trackExecution->getNewDataIndex()) {}
|
||||||
typedef std::map<nonneg int, ExprEngine::ValuePtr> Memory;
|
typedef std::map<nonneg int, ExprEngine::ValuePtr> Memory;
|
||||||
|
@ -347,6 +348,7 @@ namespace {
|
||||||
const std::vector<ExprEngine::Callback> &callbacks;
|
const std::vector<ExprEngine::Callback> &callbacks;
|
||||||
std::vector<ExprEngine::ValuePtr> constraints;
|
std::vector<ExprEngine::ValuePtr> constraints;
|
||||||
int recursion;
|
int recursion;
|
||||||
|
std::time_t startTime;
|
||||||
|
|
||||||
ExprEngine::ValuePtr executeContract(const Function *function, ExprEngine::ValuePtr(*executeExpression)(const Token*, Data&)) {
|
ExprEngine::ValuePtr executeContract(const Function *function, ExprEngine::ValuePtr(*executeExpression)(const Token*, Data&)) {
|
||||||
const auto it = settings->functionContracts.find(function->fullName());
|
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);
|
caseData.addConstraint(condValue, caseValue, true);
|
||||||
defaultData.addConstraint(condValue, caseValue, false);
|
defaultData.addConstraint(condValue, caseValue, false);
|
||||||
exec(tok2->tokAt(2), end, caseData);
|
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")) {
|
} else if (Token::Match(tok2, "case %name% :") && !Token::Match(tok2->tokAt(3), ";| case")) {
|
||||||
Data caseData(data);
|
Data caseData(data);
|
||||||
exec(tok2->tokAt(2), end, caseData);
|
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 :"))
|
} else if (Token::simpleMatch(tok2, "default :"))
|
||||||
defaultStart = tok2;
|
defaultStart = tok2;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue