summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Preiner <mathias.preiner@gmail.com>2018-05-03 16:36:48 -0700
committerAndres Noetzli <andres.noetzli@gmail.com>2018-05-03 16:36:48 -0700
commit2cc0e2c6a691fb6d30ed8879832b49bc1f277d77 (patch)
tree8c461783100ffd00fb3e8ad0a049482e64507d2a
parent475a7de39316ee13bd279a090c30c52bc61978ce (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.
-rw-r--r--src/parser/smt2/Smt2.g2
-rw-r--r--src/smt/smt_engine.cpp8
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);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback