@@ -85,8 +85,10 @@ object brancher extends BranchingRules {
8585 val uidBranchPoint = v.symbExLog.insertBranchPoint(2 , Some (condition), conditionExp)
8686 var functionsOfCurrentDecider : Set [FunctionDecl ] = null
8787 var macrosOfCurrentDecider : Vector [MacroDecl ] = null
88+ var proverArgsOfCurrentDecider : viper.silicon.Map [String , String ] = null
8889 var wasElseExecutedOnDifferentVerifier = false
8990 var functionsOfElseBranchDecider : Set [FunctionDecl ] = null
91+ var proverArgsOfElseBranchDecider : viper.silicon.Map [String , String ] = null
9092 var macrosOfElseBranchDecider : Seq [MacroDecl ] = null
9193 var pcsForElseBranch : PathConditionStack = null
9294 var noOfErrors = 0
@@ -104,6 +106,7 @@ object brancher extends BranchingRules {
104106 if (parallelizeElseBranch){
105107 functionsOfCurrentDecider = v.decider.freshFunctions
106108 macrosOfCurrentDecider = v.decider.freshMacros
109+ proverArgsOfCurrentDecider = v.decider.getProverOptions()
107110 pcsForElseBranch = v.decider.pcs.duplicate()
108111 noOfErrors = v.errorsReportedSoFar.get()
109112 }
@@ -122,6 +125,9 @@ object brancher extends BranchingRules {
122125 val newMacros = macrosOfCurrentDecider.diff(v0.decider.freshMacros)
123126
124127 v0.decider.prover.comment(s " [Shifting execution from ${v.uniqueId} to ${v0.uniqueId}] " )
128+ proverArgsOfElseBranchDecider = v0.decider.getProverOptions()
129+ v0.decider.resetProverOptions()
130+ v0.decider.setProverOptions(proverArgsOfCurrentDecider)
125131 v0.decider.prover.comment(s " Bulk-declaring functions " )
126132 v0.decider.declareAndRecordAsFreshFunctions(newFunctions, false )
127133 v0.decider.prover.comment(s " Bulk-declaring macros " )
@@ -141,10 +147,14 @@ object brancher extends BranchingRules {
141147 v1.decider.prover.saturate(Verifier .config.proverSaturationTimeouts.afterContract)
142148
143149 val result = fElse(v1.stateConsolidator.consolidateIfRetrying(s1, v1), v1)
144- if (wasElseExecutedOnDifferentVerifier && s.underJoin) {
145- val newSymbols = v1.decider.popSymbolStack()
146- functionsOfElseBranchDecider = newSymbols._1
147- macrosOfElseBranchDecider = newSymbols._2
150+ if (wasElseExecutedOnDifferentVerifier) {
151+ v1.decider.resetProverOptions()
152+ v1.decider.setProverOptions(proverArgsOfElseBranchDecider)
153+ if (s.underJoin) {
154+ val newSymbols = v1.decider.popSymbolStack()
155+ functionsOfElseBranchDecider = newSymbols._1
156+ macrosOfElseBranchDecider = newSymbols._2
157+ }
148158 }
149159 result
150160 })
@@ -206,6 +216,8 @@ object brancher extends BranchingRules {
206216 v.decider.setPcs(pcsAfterThenBranch)
207217 v.errorsReportedSoFar.set(noOfErrorsAfterThenBranch)
208218 v.decider.prover.saturate(Verifier .config.proverSaturationTimeouts.afterContract)
219+ v.decider.resetProverOptions()
220+ v.decider.setProverOptions(proverArgsOfCurrentDecider)
209221 }
210222 }else {
211223 rs = elseBranchFuture.get()
0 commit comments