Proofs- and cores-related segfault fixes (mainly a usability issue), thanks Christoph...
authorMorgan Deters <mdeters@cs.nyu.edu>
Tue, 30 Sep 2014 20:58:24 +0000 (16:58 -0400)
committerMorgan Deters <mdeters@cs.nyu.edu>
Tue, 30 Sep 2014 20:59:37 +0000 (16:59 -0400)
src/main/driver_unified.cpp
src/main/options
src/options/mkoptions
src/smt/smt_engine.cpp
src/theory/theory_engine.cpp

index 1202c7882bd52b893ec2282c8119c9abd7ec85d2..bf297ad9e0901f66dfd544197c2c37dc89a4679a 100644 (file)
@@ -268,15 +268,8 @@ int runCvc4(int argc, char* argv[], Options& opts) {
     Command* cmd;
     bool status = true;
     if(opts[options::interactive] && inputFromStdin) {
-      if(opts[options::tearDownIncremental] && opts[options::incrementalSolving]) {
-        if(opts.wasSetByUser(options::incrementalSolving)) {
-          throw OptionException("--tear-down-incremental incompatible with --incremental");
-        }
-
-        cmd = new SetOptionCommand("incremental", false);
-        cmd->setMuted(true);
-        pExecutor->doCommand(cmd);
-        delete cmd;
+      if(opts[options::tearDownIncremental]) {
+        throw OptionException("--tear-down-incremental doesn't work in interactive mode");
       }
 #ifndef PORTFOLIO_BUILD
       if(!opts.wasSetByUser(options::incrementalSolving)) {
index b9262bfa4d33e88682f8e0b455347911be9cd19a..6cc6a0ca0d613bc2603ade44c86bc80c17f8a2ed 100644 (file)
@@ -52,7 +52,7 @@ option segvSpin --segv-spin bool :default false
  spin on segfault/other crash waiting for gdb
 undocumented-alias --segv-nospin = --no-segv-spin
 
-expert-option tearDownIncremental --tear-down-incremental bool :default false
+expert-option tearDownIncremental --tear-down-incremental bool :default false
  implement PUSH/POP/multi-query by destroying and recreating SmtEngine
 
 expert-option waitToJoin --wait-to-join bool :default true
index a3a1571ec69bed151ad156e80d04059df2447ac3..03d7837ac46cd6735285f2cced86d20699e6b94c 100755 (executable)
@@ -352,6 +352,10 @@ function handle_option {
       WARN "$internal is inaccessible via SmtEngine (no smt name for option) but can be set via command-line: $long_option $short_option $long_option_alternate $short_option_alternate"
     fi
   fi
+  # in options files, use an smt name of ":" to force there not to be one
+  if [ "$smtname" = : ]; then
+    smtname=
+  fi
 
   # check for duplicates
   if [ "$internal" != - ]; then
index caa757426a4816c991245133f6c7392e79540713..7f9658ba0c699b5ae7f5544c7e03d9a0c5d2094d 100644 (file)
@@ -692,8 +692,6 @@ SmtEngine::SmtEngine(ExprManager* em) throw() :
   d_statisticsRegistry = new StatisticsRegistry();
   d_stats = new SmtEngineStatistics();
 
-  PROOF( d_proofManager = new ProofManager(); );
-
   // We have mutual dependency here, so we add the prop engine to the theory
   // engine later (it is non-essential there)
   d_theoryEngine = new TheoryEngine(d_context, d_userContext, d_private->d_iteRemover, const_cast<const LogicInfo&>(d_logic));
@@ -716,6 +714,9 @@ void SmtEngine::finishInit() {
   // ensure that our heuristics are properly set up
   setDefaults();
 
+  Assert(d_proofManager == NULL);
+  PROOF( d_proofManager = new ProofManager(); );
+
   d_decisionEngine = new DecisionEngine(d_context, d_userContext);
   d_decisionEngine->init();   // enable appropriate strategies
 
@@ -1366,8 +1367,8 @@ void SmtEngine::setDefaults() {
     }
   }
 
-  if (options::incrementalSolving() && options::proof()) {
-    Warning() << "SmtEngine: turning off incremental solving mode (not yet supported with --proof" << endl;
+  if(options::incrementalSolving() && (options::proof() || options::unsatCores())) {
+    Warning() << "SmtEngine: turning off incremental solving mode (not yet supported with --proof or --produce-unsat-cores, try --tear-down-incremental instead)" << endl;
     setOption("incremental", SExpr("false"));
   }
 }
index 073f2ab944ade658ce99b4fe512e250a97840baa..01387637e120e5952493f6564a6d7d955163d311 100644 (file)
@@ -65,6 +65,8 @@ using namespace CVC4;
 using namespace CVC4::theory;
 
 void TheoryEngine::finishInit() {
+  PROOF (ProofManager::initTheoryProof(); );
+
   // initialize the quantifiers engine
   d_quantEngine = new QuantifiersEngine(d_context, d_userContext, this);
 
@@ -170,8 +172,6 @@ TheoryEngine::TheoryEngine(context::Context* context,
   d_true = NodeManager::currentNM()->mkConst<bool>(true);
   d_false = NodeManager::currentNM()->mkConst<bool>(false);
 
-  PROOF (ProofManager::initTheoryProof(); );
-
   d_iteUtilities = new ITEUtilities(d_iteRemover.getContainsVisitor());
 
   StatisticsRegistry::registerStat(&d_arithSubstitutionsAdded);