Fix SmtEngine::reset() (#4917)
authorGereon Kremer <gereon.kremer@cs.rwth-aachen.de>
Wed, 19 Aug 2020 13:04:53 +0000 (15:04 +0200)
committerGitHub <noreply@github.com>
Wed, 19 Aug 2020 13:04:53 +0000 (08:04 -0500)
Calling (reset) multiple times produced parsing problems (#4866) and could probably lead to all kinds of interesting issues.
In a nutshell, reset() failed to properly reset d_initialOptions (which is used to properly reset d_options) so that all options defaulted after the second call to reset().
This PR properly sets d_initialOptions after a reset (and the filename as well).

Fixes #4866.

src/smt/smt_engine.cpp
test/regress/CMakeLists.txt
test/regress/regress0/smtlib/issue4866.smt2 [new file with mode: 0644]

index 83f3cb5e0f92214ffe3bae5276d4a61974e69cd2..d4b7eecbfe1783330a2d350901e923034efafe1b 100644 (file)
@@ -2101,10 +2101,13 @@ void SmtEngine::reset()
   if(Dump.isOn("benchmark")) {
     Dump("benchmark") << ResetCommand();
   }
+  std::string filename = d_state->getFilename();
   Options opts;
   opts.copyValues(d_originalOptions);
   this->~SmtEngine();
   new (this) SmtEngine(em, &opts);
+  // Restore data set after creation
+  notifyStartParsing(filename);
 }
 
 void SmtEngine::resetAssertions()
index a21b76b0cd37c8c70cdab167a6376f3ec21d6d27..8ca9d74c34f710bc54e7b43bf10e368cf63acb2f 100644 (file)
@@ -946,6 +946,7 @@ set(regress_0_tests
   regress0/smtlib/issue4077.smt2
   regress0/smtlib/issue4151.smt2
   regress0/smtlib/issue4552.smt2
+  regress0/smtlib/issue4866.smt2
   regress0/smtlib/reason-unknown.smt2
   regress0/smtlib/reset.smt2
   regress0/smtlib/reset-assertions1.smt2
diff --git a/test/regress/regress0/smtlib/issue4866.smt2 b/test/regress/regress0/smtlib/issue4866.smt2
new file mode 100644 (file)
index 0000000..1bbe25d
--- /dev/null
@@ -0,0 +1,6 @@
+; EXIT: 0
+; EXPECT: 
+; Test triple reset. There was a bug with restoring options on reset.
+(reset)
+(reset)
+(reset)