[sledge] Cleanup initial execution of entry points

Summary:
Mainly code simplification. The only functional change is to move the
test that a candidate entry-point function has no formals earlier,
with the result of avoiding failure if a function with an entry-point
name but with formals is encountered before an entry-point function
with no formals.

Reviewed By: jvillard

Differential Revision: D27828751

fbshipit-source-id: d5a832952
master
Josh Berdine 4 years ago committed by Facebook GitHub Bot
parent 79020c4880
commit e11641587e

@ -501,30 +501,28 @@ module Make (Opts : Domain_intf.Opts) (Dom : Domain_intf.Dom) = struct
Report.alarm alarm ; Report.alarm alarm ;
Work.skip Work.skip
let harness : Llair.program -> Work.t option = let call_entry_point : Llair.program -> Work.t option =
fun pgm -> fun pgm ->
List.find_map let+ {name; formals; freturn; locals; entry} =
~f:(fun entry_point -> Llair.Func.find entry_point pgm.functions) List.find_map Opts.entry_points ~f:(fun entry_point ->
Opts.entry_points let* func = Llair.Func.find entry_point pgm.functions in
|> function if IArray.is_empty func.formals then Some func else None )
| Some {name; formals; freturn; locals; entry} in
when IArray.is_empty formals -> let summaries = Opts.function_summaries in
Some let globals = Domain_used_globals.by_function Opts.globals name in
(Work.init let actuals = IArray.empty in
(fst let areturn = None in
(Dom.call ~summaries:Opts.function_summaries let state, _ =
~globals: Dom.call ~summaries ~globals ~actuals ~areturn ~formals ~freturn
(Domain_used_globals.by_function Opts.globals name) ~locals (Dom.init pgm.globals)
~actuals:IArray.empty ~areturn:None ~formals:IArray.empty in
~freturn ~locals (Dom.init pgm.globals))) Work.init state entry
entry)
| _ -> None
let exec_pgm : Llair.program -> unit = let exec_pgm : Llair.program -> unit =
fun pgm -> fun pgm ->
match harness pgm with match call_entry_point pgm with
| Some work -> Work.run ~f:(exec_block pgm) work | Some work -> Work.run ~f:(exec_block pgm) work
| None -> fail "no applicable harness" () | None -> fail "no entry point found" ()
let compute_summaries pgm : Dom.summary list Llair.Function.Map.t = let compute_summaries pgm : Dom.summary list Llair.Function.Map.t =
assert Opts.function_summaries ; assert Opts.function_summaries ;

Loading…
Cancel
Save