@@ -72,6 +72,7 @@ import SAWScript.X86 hiding (Options)
72
72
import SAWScript.X86Spec
73
73
import SAWScript.Crucible.Common
74
74
75
+ import qualified SAWScript.Crucible.Common as Common
75
76
import qualified SAWScript.Crucible.Common.MethodSpec as MS
76
77
import qualified SAWScript.Crucible.Common.Override as O
77
78
import qualified SAWScript.Crucible.Common.Setup.Type as Setup
@@ -437,7 +438,15 @@ llvm_verify_x86 (Some (llvmModule :: LLVMModule x)) path nm globsyms checkSat se
437
438
438
439
liftIO $ C. executeCrucible execFeatures initial >>= \ case
439
440
C. FinishedResult {} -> pure ()
440
- C. AbortedResult {} -> printOutLn opts Warn " Warning: function never returns"
441
+ C. AbortedResult _ ar -> do
442
+ printOutLn opts Warn " Warning: function never returns"
443
+ print $ Common. ppAbortedResult
444
+ ( \ gp ->
445
+ case C. lookupGlobal mvar $ gp ^. C. gpGlobals of
446
+ Nothing -> " LLVM memory global variable not initialized"
447
+ Just mem -> C.LLVM. ppMem $ C.LLVM. memImplHeap mem
448
+ )
449
+ ar
441
450
C. TimeoutResult {} -> fail " Execution timed out"
442
451
443
452
stats <- checkGoals sym opts sc tactic
@@ -870,7 +879,10 @@ assertPost globals env premem preregs = do
870
879
pointsToMatches <- forM (ms ^. MS. csPostState . MS. csPointsTos)
871
880
$ assertPointsTo env tyenv nameEnv
872
881
873
- let setupConditionMatches = fmap
882
+ let setupConditionMatchesPre = fmap -- assume preconditions
883
+ (LO. executeSetupCondition opts sc cc ms)
884
+ $ ms ^. MS. csPreState . MS. csConditions
885
+ let setupConditionMatchesPost = fmap -- assert postconditions
874
886
(LO. learnSetupCondition opts sc cc ms MS. PostState )
875
887
$ ms ^. MS. csPostState . MS. csConditions
876
888
@@ -889,12 +901,15 @@ assertPost globals env premem preregs = do
889
901
. sequence_ $ mconcat
890
902
[ returnMatches
891
903
, pointsToMatches
892
- , setupConditionMatches
904
+ , setupConditionMatchesPre
905
+ , setupConditionMatchesPost
893
906
, [LO. assertTermEqualities sc cc]
894
907
]
895
908
st <- case result of
896
909
Left err -> throwX86 $ show err
897
910
Right (_, st) -> pure st
911
+ liftIO . forM_ (view O. osAssumes st) $ \ p ->
912
+ C. addAssumption sym . C. LabeledPred p $ C. AssumptionReason (st ^. O. osLocation) " precondition"
898
913
liftIO . forM_ (view LO. osAsserts st) $ \ (W4. LabeledPred p r) ->
899
914
C. addAssertion sym $ C. LabeledPred p r
900
915
0 commit comments