@@ -423,7 +423,14 @@ let congruenceOption factors file =
423423 activate;
424424 }
425425
426- let apronOctagonOption factors file =
426+ let activateOctagonAnalysis () =
427+ set_string " ana.apron.domain" " octagon" ;
428+ set_auto " ana.activated[+]" " apron" ;
429+ set_bool " ana.apron.threshold_widening" true ;
430+ set_string " ana.apron.threshold_widening_constants" " comparisons" ;
431+ Logs. info " Enabled octagon domain."
432+
433+ let octagonVarsOption factors file =
427434 let locals =
428435 if List. mem " specification" (get_string_list " ana.autotune.activated" ) && get_string " ana.specification" <> " " then
429436 if List. mem Svcomp.Specification. NoOverflow (Svcomp.Specification. of_option () ) then
@@ -447,13 +454,9 @@ let apronOctagonOption factors file =
447454 let allVars = (selectedGlobals @ selectedLocals) in
448455 let cost = (Batteries.Int. pow (locals + globals) 3 ) * (factors.instructions / 70 ) in
449456 let activateVars () =
450- Logs. debug " Octagon: %d" cost;
457+ Logs. debug " Octagon vars : %d" cost;
451458 set_bool " annotation.goblint_relation_track" true ;
452- set_string " ana.apron.domain" " octagon" ;
453- set_auto " ana.activated[+]" " apron" ;
454- set_bool " ana.apron.threshold_widening" true ;
455- set_string " ana.apron.threshold_widening_constants" " comparisons" ;
456- Logs. info " Enabled octagon domain ONLY for:" ;
459+ Logs. info " Restricted octagon analysis to following tracked variables:" ;
457460 Logs. info " %s" @@ String. concat " , " @@ List. map (fun info -> info.vname) allVars;
458461 List. iter (fun info -> info.vattr < - addAttribute (Attr (" goblint_relation_track" ,[] )) info.vattr) allVars
459462 in
@@ -556,10 +559,16 @@ let chooseConfig file =
556559 if isActivated " tmpSpecialAnalysis" then
557560 activateTmpSpecialAnalysis () ;
558561
562+ let non_termination_task = not (isTerminationTask () ) in
563+
564+ (* octagonVars implies octagonAnalysis *)
565+ if non_termination_task && (isActivated " octagonAnalysis" || isActivated " octagonVars" ) then
566+ activateOctagonAnalysis () ;
567+
559568 let options = [] in
560569 let options = if isActivated " congruence" then (congruenceOption factors file)::options else options in
561570 (* Termination analysis uses apron in a different configuration. *)
562- let options = if isActivated " octagon " && not (isTerminationTask () ) then (apronOctagonOption factors file)::options else options in
571+ let options = if non_termination_task && isActivated " octagonVars " then (octagonVarsOption factors file)::options else options in
563572 let options = if isActivated " wideningThresholds" then (wideningOption factors file)::options else options in
564573
565574 List. iter (fun o -> o.activate () ) @@ chooseFromOptions (totalTarget - fileCompplexity) options
0 commit comments