diff options
author | Andres Noetzli <noetzli@stanford.edu> | 2017-11-28 13:37:14 -0800 |
---|---|---|
committer | Andres Noetzli <noetzli@stanford.edu> | 2017-11-28 13:37:14 -0800 |
commit | 3604b8a863df3007e62a54739d4ae2c4f6f26dde (patch) | |
tree | cb119a522e1a61877bab7967375bbe32bb443679 | |
parent | ae25a706b60ba1c94a63056fc566e6e37597a5bd (diff) |
Fix reset-assertions
This commit fixes two issues with reset-assertions:
- pending pops were not done in SmtEngine, resulting in the following
assertion failure:
d_userLevels.size() == 0 && d_userContext->getLevel() == 1
- all definitions were erased on reset-assertion in an SMT2 file,
leading to errors about undefined types
-rw-r--r-- | src/parser/smt2/smt2.cpp | 5 | ||||
-rw-r--r-- | src/smt/smt_engine.cpp | 1 | ||||
-rw-r--r-- | test/regress/regress0/Makefile.am | 1 | ||||
-rw-r--r-- | test/regress/regress0/reset-assertions.smt2 | 17 |
4 files changed, 23 insertions, 1 deletions
diff --git a/src/parser/smt2/smt2.cpp b/src/parser/smt2/smt2.cpp index a72b0ac6e..45c332b37 100644 --- a/src/parser/smt2/smt2.cpp +++ b/src/parser/smt2/smt2.cpp @@ -361,7 +361,10 @@ void Smt2::reset() { } void Smt2::resetAssertions() { - this->Parser::reset(); + // Remove all declarations except the ones at level 0. + while (this->scopeLevel() > 0) { + this->popScope(); + } } void Smt2::setLogic(std::string name) { diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index e70f4db05..54194d3bb 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -5585,6 +5585,7 @@ void SmtEngine::reset() throw() { void SmtEngine::resetAssertions() throw() { SmtScope smts(this); + doPendingPops(); Trace("smt") << "SMT resetAssertions()" << endl; if(Dump.isOn("benchmark")) { diff --git a/test/regress/regress0/Makefile.am b/test/regress/regress0/Makefile.am index 879fd9fc8..18dbde652 100644 --- a/test/regress/regress0/Makefile.am +++ b/test/regress/regress0/Makefile.am @@ -74,6 +74,7 @@ SMT2_TESTS = \ issue1063-overloading-dt-sel.smt2 \ issue1063-overloading-dt-fun.smt2 \ non-fatal-errors.smt2 \ + reset-assertions.smt2 \ sqrt2-sort-inf-unk.smt2 diff --git a/test/regress/regress0/reset-assertions.smt2 b/test/regress/regress0/reset-assertions.smt2 new file mode 100644 index 000000000..3c37f2cba --- /dev/null +++ b/test/regress/regress0/reset-assertions.smt2 @@ -0,0 +1,17 @@ +; EXPECT: sat +; EXPECT: sat +(set-logic QF_ALL) +(set-option :incremental true) +(set-option :produce-models true) + +(declare-fun x () Real) +(declare-fun y () Real) +(assert (> x 0.0)) +(assert (> y 0.0)) +(assert (= (+ (* 2 x) y) 4)) +(check-sat) +(reset-assertions) + +(declare-fun a () (Array Int Int)) +(assert (= (select a 4) 10)) +(check-sat) |