diff options
author | Cristian Cadar <c.cadar@imperial.ac.uk> | 2016-11-19 20:34:58 +0000 |
---|---|---|
committer | Cristian Cadar <c.cadar@imperial.ac.uk> | 2016-11-19 20:34:58 +0000 |
commit | 18bcb212f43f983fe742b8a04cb22e69acba66f1 (patch) | |
tree | 4445ed956c973d499ea7be7dd140d3523aaf387e /lib | |
parent | 1eed21e1f4c374ea6d90734f4fcf32062438cc8a (diff) | |
parent | d85f81ce5cf60817550f200a69923e47a8e0792c (diff) | |
download | klee-18bcb212f43f983fe742b8a04cb22e69acba66f1.tar.gz |
Merge branch 'MartinNowack-fix_bfs2'
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Core/Searcher.cpp | 10 | ||||
-rw-r--r-- | lib/Core/UserSearcher.cpp | 2 |
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/Core/Searcher.cpp b/lib/Core/Searcher.cpp index 47f300d1..c787382f 100644 --- a/lib/Core/Searcher.cpp +++ b/lib/Core/Searcher.cpp @@ -104,6 +104,16 @@ ExecutionState &BFSSearcher::selectState() { void BFSSearcher::update(ExecutionState *current, const std::vector<ExecutionState *> &addedStates, const std::vector<ExecutionState *> &removedStates) { + // Assumption: If new states were added KLEE forked, therefore states evolved. + // constraints were added to the current state, it evolved. + if (!addedStates.empty() && current && + std::find(removedStates.begin(), removedStates.end(), current) == + removedStates.end()) { + assert(states.front() == current); + states.pop_front(); + states.push_back(current); + } + states.insert(states.end(), addedStates.begin(), addedStates.end()); diff --git a/lib/Core/UserSearcher.cpp b/lib/Core/UserSearcher.cpp index 0aa4a4b0..725836e8 100644 --- a/lib/Core/UserSearcher.cpp +++ b/lib/Core/UserSearcher.cpp @@ -22,7 +22,7 @@ namespace { cl::list<Searcher::CoreSearchType> CoreSearch("search", cl::desc("Specify the search heuristic (default=random-path interleaved with nurs:covnew)"), cl::values(clEnumValN(Searcher::DFS, "dfs", "use Depth First Search (DFS)"), - clEnumValN(Searcher::BFS, "bfs", "use Breadth First Search (BFS)"), + clEnumValN(Searcher::BFS, "bfs", "use Breadth First Search (BFS), where scheduling decisions are taken at the level of (2-way) forks"), clEnumValN(Searcher::RandomState, "random-state", "randomly select a state to explore"), clEnumValN(Searcher::RandomPath, "random-path", "use Random Path Selection (see OSDI'08 paper)"), clEnumValN(Searcher::NURS_CovNew, "nurs:covnew", "use Non Uniform Random Search (NURS) with Coverage-New"), |