summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Noetzli <noetzli@stanford.edu>2017-11-28 13:37:14 -0800
committerAndres Noetzli <noetzli@stanford.edu>2017-11-28 13:37:14 -0800
commit3604b8a863df3007e62a54739d4ae2c4f6f26dde (patch)
treecb119a522e1a61877bab7967375bbe32bb443679
parentae25a706b60ba1c94a63056fc566e6e37597a5bd (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.cpp5
-rw-r--r--src/smt/smt_engine.cpp1
-rw-r--r--test/regress/regress0/Makefile.am1
-rw-r--r--test/regress/regress0/reset-assertions.smt217
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)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback