File tree Expand file tree Collapse file tree 4 files changed +18
-1
lines changed
Expand file tree Collapse file tree 4 files changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -3234,6 +3234,11 @@ INTERNAL OPTIONS
32343234 --pulse-skip-procedures-reset
32353235 Cancel the effect of --pulse-skip-procedures.
32363236
3237+ --pulse-specialization-abort-if-impossible
3238+ Activates: If a caller can not satisfy callee specialization
3239+ needs, abort current symbolic execution (Conversely:
3240+ --no-pulse-specialization-abort-if-impossible)
3241+
32373242 --no-pulse-specialization-partial
32383243 Deactivates: A caller does not wait to have a full set of
32393244 specialization information before running a specialized analysis
Original file line number Diff line number Diff line change @@ -2719,6 +2719,11 @@ and pulse_skip_procedures =
27192719 ~meta: " regex" " Regex of procedures that should not be analyzed by Pulse."
27202720
27212721
2722+ and pulse_specialization_abort_if_impossible =
2723+ CLOpt. mk_bool ~long: " pulse-specialization-abort-if-impossible" ~default: false
2724+ " If a caller can not satisfy callee specialization needs, abort current symbolic execution"
2725+
2726+
27222727and pulse_specialization_iteration_limit =
27232728 CLOpt. mk_int ~long: " pulse-specialization-iteration-limit" ~default: 20
27242729 ~in_help: InferCommand. [(Analyze , manual_pulse)]
@@ -4650,6 +4655,8 @@ and pulse_sanity_checks = !pulse_sanity_checks
46504655
46514656and pulse_skip_procedures = Option. map ~f: Str. regexp ! pulse_skip_procedures
46524657
4658+ and pulse_specialization_abort_if_impossible = ! pulse_specialization_abort_if_impossible
4659+
46534660and pulse_specialization_iteration_limit = ! pulse_specialization_iteration_limit
46544661
46554662and pulse_specialization_limit = ! pulse_specialization_limit
Original file line number Diff line number Diff line change @@ -684,6 +684,8 @@ val pulse_sanity_checks : bool
684684
685685val pulse_skip_procedures : Str .regexp option
686686
687+ val pulse_specialization_abort_if_impossible : bool
688+
687689val pulse_specialization_iteration_limit : int
688690
689691val pulse_specialization_limit : int
Original file line number Diff line number Diff line change @@ -836,6 +836,7 @@ let call ?disjunct_limit ({InterproceduralAnalysis.analyze_dependency} as analys
836836 in
837837 let rec iter_call ~max_iteration ~nth_iteration ~is_pulse_specialization_limit_reached
838838 ?(specialization = Specialization.Pulse. bottom) already_given summary astate =
839+ L. d_printfln ~color: Orange " iter_call %d" nth_iteration ;
839840 let res, non_disj, contradiction = call_specialized specialization summary astate in
840841 let needs_aliasing_specialization =
841842 match (res, contradiction) with
@@ -927,7 +928,9 @@ let call ?disjunct_limit ({InterproceduralAnalysis.analyze_dependency} as analys
927928 Specialization.Pulse. pp specialization ;
928929 if nth_iteration > = max_iteration then
929930 L. d_printfln " [specialization] we have reached the maximum number of iteration" ;
930- if
931+ if nth_iteration > = max_iteration && Config. pulse_specialization_abort_if_impossible then
932+ case_if_specialization_is_impossible []
933+ else if
931934 nth_iteration > = max_iteration || has_already_be_given || ask_caller_of_caller_first
932935 || Specialization.Pulse. is_bottom specialization
933936 then
You can’t perform that action at this time.
0 commit comments