Fix a panic, when we "improve" an unused variable

This commit is contained in:
Iavor S. Diatchki 2015-02-27 16:44:05 -08:00
parent 55140b0685
commit 8404fc7d05
2 changed files with 14 additions and 5 deletions

View File

@ -31,6 +31,7 @@ import Cryptol.Utils.Panic(panic)
import Cryptol.Parser.Position(rCombs) import Cryptol.Parser.Position(rCombs)
import Data.Either(partitionEithers) import Data.Either(partitionEithers)
import Data.Maybe(catMaybes)
import Data.Map ( Map ) import Data.Map ( Map )
import qualified Data.Map as Map import qualified Data.Map as Map
import Data.Set ( Set ) import Data.Set ( Set )
@ -184,6 +185,7 @@ simpGoals s gs0 =
[ "Unexpected import results" [ "Unexpected import results"
, show r , show r
] ]
case numCts of case numCts of
[] -> do debugBlock s "After simplification (no numerics):" [] -> do debugBlock s "After simplification (no numerics):"
$ debugLog s unsolvedClassCts $ debugLog s unsolvedClassCts
@ -245,15 +247,21 @@ simpGoals s gs0 =
importSplitImps :: Num.VarMap -> Map Num.Name Num.Expr -> (Subst, [Prop]) importSplitImps :: Num.VarMap -> Map Num.Name Num.Expr -> (Subst, [Prop])
importSplitImps varMap = mk . partitionEithers . map imp . Map.toList importSplitImps varMap = mk . partitionEithers . map imp . Map.toList
where where
mk (uni,props) = (listSubst uni, props) mk (uni,props) = (listSubst (catMaybes uni), props)
imp (x,e) = case (Map.lookup x varMap, Num.importType varMap e) of imp (x,e) = case (Map.lookup x varMap, Num.importType varMap e) of
(Just tv, Just ty) -> (Just tv, Just ty) ->
case tv of case tv of
TVFree {} -> Left (tv,ty) TVFree {} -> Left (Just (tv,ty))
TVBound {} -> Right (TVar tv =#= ty) TVBound {} -> Right (TVar tv =#= ty)
_ -> panic "importSplitImps"
[ "Failed to import:", show x, show e ] {- This may happen if we are working on an implication,
and we have an improvement about a variable in the
assumptions that is not in any og the goals.
XXX: Perhaps, we should mark these variable, so we don't waste
time to "improve" them. -}
_ -> Left Nothing

View File

@ -464,7 +464,8 @@ getNLSubst Solver { .. } =
-- | Execute a computation with a fresh solver instance. -- | Execute a computation with a fresh solver instance.
withSolver :: Bool -> (Solver -> IO a) -> IO a withSolver :: Bool -> (Solver -> IO a) -> IO a
withSolver chatty k = withSolver chatty k =
do logger <- if chatty then SMT.newLogger else return quietLogger do -- let chatty = True
logger <- if chatty then SMT.newLogger else return quietLogger
solver <- SMT.newSolver "cvc4" [ "--lang=smt2" solver <- SMT.newSolver "cvc4" [ "--lang=smt2"
, "--incremental" , "--incremental"