diff --git a/src/bin/seer.rs b/src/bin/seer.rs index dd5668e5510c3289e541d369e0c1121a262732ce..2f1fa3edd9704cf9f33aedcb7cd7ee7e603b2e18 100644 --- a/src/bin/seer.rs +++ b/src/bin/seer.rs @@ -71,11 +71,9 @@ fn main() { println!("{:?}", complete); println!("as string: {:?}", ::std::str::from_utf8(&complete.input)); if let Err(_) = complete.result { - println!("hit an error. halting"); - false - } else { - true + println!("hit an error. continuing"); } + true }; let mut config = ::seer::ExecutionConfig::new(); diff --git a/src/executor.rs b/src/executor.rs index e0da30b9b3cb2f816a73e82a228a09e6d11d9205..4fc794fd5a012ae52384ea886cbfd87c39289797 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -154,6 +154,7 @@ impl <'a, 'tcx: 'a> Executor<'a, 'tcx> { let iter = ::std::iter::repeat(ecx).zip(branches.into_iter()); for (mut cx, finish_step) in iter { let FinishStep {constraints, variant} = finish_step; + let mut no_errors: bool = true; for constraint in constraints { cx.memory.constraints.push_constraint(constraint); match variant { @@ -169,10 +170,14 @@ impl <'a, 'tcx: 'a> Executor<'a, 'tcx> { if !self.report_error(&cx, e.clone()) { break 'main_loop; } + no_errors = false; } } } - self.push_eval_context(cx); + if no_errors { + // only continue along branches without errors + self.push_eval_context(cx); + } } } }