From d2b25e384f76bcb05c37bb7f9cf871c7e9f70e08 Mon Sep 17 00:00:00 2001
From: Etienne Kneuss <colder@php.net>
Date: Mon, 14 Jan 2013 20:05:54 +0100
Subject: [PATCH] Fix timeouts for sub solvers

---
 .../scala/leon/solvers/z3/FairZ3Solver.scala   | 10 +++++++++-
 .../scala/leon/synthesis/rules/Cegis.scala     | 18 ++++++++----------
 2 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/src/main/scala/leon/solvers/z3/FairZ3Solver.scala b/src/main/scala/leon/solvers/z3/FairZ3Solver.scala
index bce3e3bb1..448f42c25 100644
--- a/src/main/scala/leon/solvers/z3/FairZ3Solver.scala
+++ b/src/main/scala/leon/solvers/z3/FairZ3Solver.scala
@@ -391,8 +391,15 @@ class FairZ3Solver(context : LeonContext)
       frameExpressions = Nil :: frameExpressions
     }
 
+    override def init() {
+      FairZ3Solver.super.init
+    }
+
     def halt() {
-      z3.interrupt
+      FairZ3Solver.super.halt
+      if(z3 ne null) {
+        z3.interrupt
+      }
     }
 
     def pop(lvl: Int = 1) {
@@ -590,6 +597,7 @@ class FairZ3Solver(context : LeonContext)
                   }
 
                 case None =>
+                  foundAnswer(None)
               }
             }
 
diff --git a/src/main/scala/leon/synthesis/rules/Cegis.scala b/src/main/scala/leon/synthesis/rules/Cegis.scala
index 1bdf8d1cf..296d4ef40 100644
--- a/src/main/scala/leon/synthesis/rules/Cegis.scala
+++ b/src/main/scala/leon/synthesis/rules/Cegis.scala
@@ -557,8 +557,12 @@ case object CEGIS extends Rule("CEGIS") {
                                 // the assumptions are.
                                 solver1.getUnsatCore
 
-                              case _ =>
+                              case Some(true) =>
+                                // Can't be!
                                 bssAssumptions
+
+                              case None =>
+                                return RuleApplicationImpossible
                             }
 
                             solver1.pop()
@@ -602,10 +606,7 @@ case object CEGIS extends Rule("CEGIS") {
                           result = Some(RuleSuccess(Solution(BooleanLiteral(true), Set(), expr)))
 
                         case _ =>
-                          if (!sctx.shouldStop.get) {
-                            sctx.reporter.warning("Solver returned 'UNKNOWN' in a CEGIS iteration.")
-                          }
-                          needMoreUnrolling = true
+                          return RuleApplicationImpossible
                       }
                     }
 
@@ -617,7 +618,7 @@ case object CEGIS extends Rule("CEGIS") {
                       solver1.check match {
                         case Some(false) =>
                           // Unsat even without blockers (under which fcalls are then uninterpreted)
-                          result = Some(RuleApplicationImpossible)
+                          return RuleApplicationImpossible
 
                         case _ =>
                       }
@@ -626,11 +627,8 @@ case object CEGIS extends Rule("CEGIS") {
                     needMoreUnrolling = true
 
                   case _ =>
-                    if (!sctx.shouldStop.get) {
-                      sctx.reporter.warning("Solver returned 'UNKNOWN' in a CEGIS iteration.")
-                    }
                     //println("%%%% WOOPS")
-                    needMoreUnrolling = true
+                    return RuleApplicationImpossible
                 }
               }
 
-- 
GitLab