Skip to content

Commit edac342

Browse files
davidpichardiemeta-codesync[bot]
authored andcommitted
[pulse][specialization] new flag to enforce more strict incorrectness logic on call resolution failure
Summary: if specialization can not satisfy callee specialization needs, we cut exploration (if the new option is set). false by default. Reviewed By: dulmarod Differential Revision: D91479599 fbshipit-source-id: 2f0df8b85f8272540ca9535814dfb7dafcb2b177
1 parent 2fbbdd1 commit edac342

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed

infer/man/man1/infer-full.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff 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

infer/src/base/Config.ml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
27222727
and 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

46514656
and 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+
46534660
and pulse_specialization_iteration_limit = !pulse_specialization_iteration_limit
46544661

46554662
and pulse_specialization_limit = !pulse_specialization_limit

infer/src/base/Config.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,8 @@ val pulse_sanity_checks : bool
684684

685685
val pulse_skip_procedures : Str.regexp option
686686

687+
val pulse_specialization_abort_if_impossible : bool
688+
687689
val pulse_specialization_iteration_limit : int
688690

689691
val pulse_specialization_limit : int

infer/src/pulse/PulseCallOperations.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)