[absint] rename confusing compute_and_store_post function

Summary: The docs for this said that it stores the summary to disk, which is no longer true. `compute_summary` is more descriptive of what it actually does now.

Reviewed By: jberdine

Differential Revision: D5245416

fbshipit-source-id: f5138cd
master
Sam Blackshear 8 years ago committed by Facebook Github Bot
parent 99a0f894b6
commit 2a3032d0e3

@ -539,14 +539,16 @@ let print_summary : Typ.Procname.t -> Dom.Summary.t -> unit
Dom.Summary.pp_summary s Dom.Summary.pp_summary s
let checker : Callbacks.proc_callback_args -> Specs.summary let checker : Callbacks.proc_callback_args -> Specs.summary
= fun ({ summary } as callback) -> = fun ({ proc_desc; tenv; summary } as callback) ->
let proc_name = Specs.get_proc_name summary in let proc_name = Specs.get_proc_name summary in
let make_extras _ = callback.get_proc_desc in let make_extras _ = callback.get_proc_desc in
let updated_summary : Specs.summary = let updated_summary : Specs.summary =
Interprocedural.compute_and_store_post Interprocedural.compute_summary
~compute_post ~compute_post
~make_extras ~make_extras
callback in proc_desc
tenv
summary in
let post = let post =
updated_summary.payload.buffer_overrun in updated_summary.payload.buffer_overrun in
begin begin

@ -157,14 +157,12 @@ end
module Interprocedural (Summ : Summary.S) = struct module Interprocedural (Summ : Summary.S) = struct
let compute_and_store_post let compute_summary ~compute_post ~make_extras proc_desc tenv summary =
~compute_post ~make_extras { Callbacks.proc_desc; summary; tenv; } : Specs.summary =
match compute_post (ProcData.make proc_desc tenv (make_extras proc_desc)) with match compute_post (ProcData.make proc_desc tenv (make_extras proc_desc)) with
| Some post -> | Some post ->
Summ.update_summary post summary Summ.update_summary post summary
| None -> | None ->
summary summary
end end
module MakeWithScheduler (C : ProcCfg.S) (S : Scheduler.Make) (T : TransferFunctions.MakeSIL) = module MakeWithScheduler (C : ProcCfg.S) (S : Scheduler.Make) (T : TransferFunctions.MakeSIL) =

@ -67,11 +67,13 @@ module Make
(** create an interprocedural abstract interpreter given logic for handling summaries *) (** create an interprocedural abstract interpreter given logic for handling summaries *)
module Interprocedural (Summary : Summary.S) : sig module Interprocedural (Summary : Summary.S) : sig
(** compute and return the summary for the given procedure and store it on disk using (** compute a summary for the given procedure using [compute_post] and write it into the
[compute_post]. *) aggregated [Specs.summary] *)
val compute_and_store_post : val compute_summary :
compute_post: ('a ProcData.t -> Summary.payload option) -> compute_post: ('a ProcData.t -> Summary.payload option) ->
make_extras : (Procdesc.t -> 'a) -> make_extras : (Procdesc.t -> 'a) ->
Callbacks.proc_callback_args -> Procdesc.t ->
Tenv.t ->
Specs.summary ->
Specs.summary Specs.summary
end end

@ -164,7 +164,7 @@ let pretty_field_name proc_data field_name =
(* This format is subject to change once this checker gets to run on C/Cpp/ObjC *) (* This format is subject to change once this checker gets to run on C/Cpp/ObjC *)
Fieldname.to_string field_name Fieldname.to_string field_name
let checker ({ Callbacks.summary } as callback) = let checker { Callbacks.summary; proc_desc; tenv; } =
let report astate (proc_data : extras ProcData.t) = let report astate (proc_data : extras ProcData.t) =
let report_access_path ap udchain = let report_access_path ap udchain =
let issue_kind = Localise.to_issue_id Localise.field_should_be_nullable in let issue_kind = Localise.to_issue_id Localise.field_should_be_nullable in
@ -199,4 +199,4 @@ let checker ({ Callbacks.summary } as callback) =
"Analyzer failed to compute post for %a" "Analyzer failed to compute post for %a"
Typ.Procname.pp (Procdesc.get_proc_name proc_data.pdesc) Typ.Procname.pp (Procdesc.get_proc_name proc_data.pdesc)
in in
Interprocedural.compute_and_store_post ~compute_post ~make_extras:(fun _ -> ()) callback Interprocedural.compute_summary ~compute_post ~make_extras:(fun _ -> ()) proc_desc tenv summary

@ -244,12 +244,14 @@ let compute_post proc_data =
~initial:(SiofDomain.BottomSiofTrace.Bottom, SiofDomain.VarNames.empty) ~initial:(SiofDomain.BottomSiofTrace.Bottom, SiofDomain.VarNames.empty)
|> Option.map ~f:SiofDomain.normalize |> Option.map ~f:SiofDomain.normalize
let checker ({ Callbacks.proc_desc } as callback) : Specs.summary = let checker { Callbacks.proc_desc; tenv; summary } : Specs.summary =
let updated_summary = let updated_summary =
Interprocedural.compute_and_store_post Interprocedural.compute_summary
~compute_post ~compute_post
~make_extras:ProcData.make_empty_extras ~make_extras:ProcData.make_empty_extras
callback in proc_desc
tenv
summary in
let pname = Procdesc.get_proc_name proc_desc in let pname = Procdesc.get_proc_name proc_desc in
begin begin
match Typ.Procname.get_global_name_of_initializer pname with match Typ.Procname.get_global_name_of_initializer pname with

@ -866,7 +866,7 @@ let empty_post =
and return_attrs = ThreadSafetyDomain.AttributeSetDomain.empty in and return_attrs = ThreadSafetyDomain.AttributeSetDomain.empty in
(initial_thumbs_up, initial_known_on_ui_thread, has_lock, ThreadSafetyDomain.AccessDomain.empty, return_attrs) (initial_thumbs_up, initial_known_on_ui_thread, has_lock, ThreadSafetyDomain.AccessDomain.empty, return_attrs)
let analyze_procedure callback = let analyze_procedure { Callbacks.proc_desc; tenv; summary; } =
let is_initializer tenv proc_name = let is_initializer tenv proc_name =
Typ.Procname.is_constructor proc_name || FbThreadSafety.is_custom_init tenv proc_name in Typ.Procname.is_constructor proc_name || FbThreadSafety.is_custom_init tenv proc_name in
let open ThreadSafetyDomain in let open ThreadSafetyDomain in
@ -917,10 +917,7 @@ let analyze_procedure callback =
end end
else else
Some empty_post in Some empty_post in
Interprocedural.compute_and_store_post Interprocedural.compute_summary ~compute_post ~make_extras:FormalMap.make proc_desc tenv summary
~compute_post
~make_extras:FormalMap.make
callback
(* we assume two access paths can alias if their access parts are equal (we ignore the base). *) (* we assume two access paths can alias if their access parts are equal (we ignore the base). *)
let can_alias access_path1 access_path2 = let can_alias access_path1 access_path2 =

@ -392,24 +392,26 @@ let check_expensive_subtyping_rules { Callbacks.proc_desc; tenv; summary } overr
module Interprocedural = struct module Interprocedural = struct
include AbstractInterpreter.Interprocedural(Summary) include AbstractInterpreter.Interprocedural(Summary)
let check_and_report ({ Callbacks.proc_desc; tenv } as proc_data) : Specs.summary = let check_and_report ({ Callbacks.proc_desc; tenv; summary} as callback) : Specs.summary =
let proc_name = Procdesc.get_proc_name proc_desc in let proc_name = Procdesc.get_proc_name proc_desc in
if is_expensive tenv proc_name then if is_expensive tenv proc_name then
PatternMatch.override_iter (check_expensive_subtyping_rules proc_data) tenv proc_name; PatternMatch.override_iter (check_expensive_subtyping_rules callback) tenv proc_name;
let initial = let initial =
(AnnotReachabilityDomain.empty, Domain.TrackingDomain.NonBottom Domain.TrackingVar.empty) in (AnnotReachabilityDomain.empty, Domain.TrackingDomain.NonBottom Domain.TrackingVar.empty) in
let compute_post proc_data = let compute_post proc_data =
Option.map ~f:fst (Analyzer.compute_post ~initial proc_data) in Option.map ~f:fst (Analyzer.compute_post ~initial proc_data) in
let updated_summary : Specs.summary = let updated_summary : Specs.summary =
compute_and_store_post compute_summary
~compute_post:compute_post ~compute_post:compute_post
~make_extras:ProcData.make_empty_extras ~make_extras:ProcData.make_empty_extras
proc_data in proc_desc
tenv
summary in
begin begin
match updated_summary.payload.annot_map with match updated_summary.payload.annot_map with
| Some annot_map -> | Some annot_map ->
List.iter ~f:(report_src_snk_paths proc_data annot_map) src_snk_pairs List.iter ~f:(report_src_snk_paths callback annot_map) src_snk_pairs
| None -> | None ->
() ()
end; end;

@ -97,7 +97,7 @@ module Analyzer =
module Interprocedural = AbstractInterpreter.Interprocedural (Summary) module Interprocedural = AbstractInterpreter.Interprocedural (Summary)
(* Callback for invoking the checker from the outside--registered in RegisterCheckers *) (* Callback for invoking the checker from the outside--registered in RegisterCheckers *)
let checker ({ Callbacks.summary; } as callback) : Specs.summary = let checker { Callbacks.summary; proc_desc; tenv; } : Specs.summary =
(* Report an error when we have acquired more resources than we have released *) (* Report an error when we have acquired more resources than we have released *)
let report leak_count (proc_data : extras ProcData.t) = let report leak_count (proc_data : extras ProcData.t) =
if leak_count > 0 (* 3(a) *) if leak_count > 0 (* 3(a) *)
@ -123,4 +123,4 @@ let checker ({ Callbacks.summary; } as callback) : Specs.summary =
"Analyzer failed to compute post for %a" "Analyzer failed to compute post for %a"
Typ.Procname.pp (Procdesc.get_proc_name proc_data.pdesc) in Typ.Procname.pp (Procdesc.get_proc_name proc_data.pdesc) in
Interprocedural.compute_and_store_post ~compute_post ~make_extras:FormalMap.make callback Interprocedural.compute_summary ~compute_post ~make_extras:FormalMap.make proc_desc tenv summary

@ -614,7 +614,7 @@ module Make (TaintSpecification : TaintSpec.S) = struct
module Interprocedural = AbstractInterpreter.Interprocedural(Summary) module Interprocedural = AbstractInterpreter.Interprocedural(Summary)
let checker ({ Callbacks.tenv; summary; } as callback) : Specs.summary = let checker { Callbacks.tenv; summary; proc_desc; } : Specs.summary =
(* bind parameters to a trace with a tainted source (if applicable) *) (* bind parameters to a trace with a tainted source (if applicable) *)
let make_initial pdesc = let make_initial pdesc =
@ -650,5 +650,5 @@ module Make (TaintSpecification : TaintSpec.S) = struct
let make_extras pdesc = let make_extras pdesc =
let formal_map = FormalMap.make pdesc in let formal_map = FormalMap.make pdesc in
{ formal_map; summary; } in { formal_map; summary; } in
Interprocedural.compute_and_store_post ~compute_post ~make_extras callback Interprocedural.compute_summary ~compute_post ~make_extras proc_desc tenv summary
end end

Loading…
Cancel
Save