diff options
author | Mathias Preiner <mathias.preiner@gmail.com> | 2018-05-03 16:36:48 -0700 |
---|---|---|
committer | Andres Noetzli <andres.noetzli@gmail.com> | 2018-05-03 16:36:48 -0700 |
commit | 2cc0e2c6a691fb6d30ed8879832b49bc1f277d77 (patch) | |
tree | 8c461783100ffd00fb3e8ad0a049482e64507d2a /src | |
parent | 475a7de39316ee13bd279a090c30c52bc61978ce (diff) |
Fix redundant internalPush calls. (#1865)
The SMT2 parser by default passes a true expression to the CheckSatCommand,
which results in checkSatisfiability (in SmtEngine) to always do an internal
push. As a consequence, the work of each check-sat was reset even though no
user level push/pop happened.
Diffstat (limited to 'src')
-rw-r--r-- | src/parser/smt2/Smt2.g | 2 | ||||
-rw-r--r-- | src/smt/smt_engine.cpp | 8 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/parser/smt2/Smt2.g b/src/parser/smt2/Smt2.g index 74f8e71d3..5afb2c316 100644 --- a/src/parser/smt2/Smt2.g +++ b/src/parser/smt2/Smt2.g @@ -454,7 +454,7 @@ command [std::unique_ptr<CVC4::Command>* cmd] "permitted while operating in strict compliance mode."); } } - | { expr = MK_CONST(bool(true)); } + | { expr = Expr(); } ) { cmd->reset(new CheckSatCommand(expr)); } | /* check-sat-assuming */ diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index 0cff9c8fa..c1e8596cf 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -4530,6 +4530,12 @@ Result SmtEngine::checkSatisfiability(const vector<Expr>& assumptions, d_assumptions = assumptions; } + if (!d_assumptions.empty()) + { + internalPush(); + didInternalPush = true; + } + Result r(Result::SAT_UNKNOWN, Result::UNKNOWN_REASON); for (Expr e : d_assumptions) { @@ -4540,8 +4546,6 @@ Result SmtEngine::checkSatisfiability(const vector<Expr>& assumptions, ensureBoolean(e); /* Add assumption */ - internalPush(); - didInternalPush = true; if (d_assertionList != NULL) { d_assertionList->push_back(e); |