1515end
1616
1717
18- (* * The main point of this file---generating a [GlobConstrSys ] from a [Spec]. *)
18+ (* * The main point of this file---generating a [DemandGlobConstrSys ] from a [Spec]. *)
1919module FromSpec (S :Spec ) (Cfg :CfgBackward ) (I : Increment )
2020 : sig
21- include GlobConstrSys with module LVar = VarF (S. C )
22- and module GVar = GVarF (S. V )
23- and module D = S. D
24- and module G = GVarG (S. G ) (S. C )
21+ include DemandGlobConstrSys with module LVar = VarF (S. C )
22+ and module GVar = GVarF (S. V )
23+ and module D = S. D
24+ and module G = GVarG (S. G ) (S. C )
2525 end
2626=
2727struct
5050 if ! AnalysisState. postsolving then
5151 sideg (GVar. contexts f) (G. create_contexts (G.CSet. singleton c))
5252
53- let common_man var edge prev_node pval (getl :lv -> ld ) sidel getg sideg : (D.t, S.G.t, S.C.t, S.V.t) man * D.t list ref * (lval option * varinfo * exp list * D.t * bool) list ref =
53+ let common_man var edge prev_node pval (getl :lv -> ld ) sidel demandl getg sideg : (D.t, S.G.t, S.C.t, S.V.t) man * D.t list ref * (lval option * varinfo * exp list * D.t * bool) list ref =
5454 let r = ref [] in
5555 let spawns = ref [] in
5656 (* now watch this ... *)
7878 | fd ->
7979 let c = S. context man fd d in
8080 sidel (FunctionEntry fd, c) d;
81- ignore (getl ( Function fd, c) )
81+ demandl ( Function fd, c)
8282 | exception Not_found ->
8383 (* unknown function *)
8484 M. error ~category: Imprecise ~tags: [Category Unsound ] " Created a thread from unknown function %s" f.vname;
@@ -131,13 +131,13 @@ struct
131131
132132 let common_joins man ds splits spawns = common_join man (bigsqcup ds) splits spawns
133133
134- let tf_assign var edge prev_node lv e getl sidel getg sideg d =
135- let man, r, spawns = common_man var edge prev_node d getl sidel getg sideg in
134+ let tf_assign var edge prev_node lv e getl sidel demandl getg sideg d =
135+ let man, r, spawns = common_man var edge prev_node d getl sidel demandl getg sideg in
136136 let d = S. assign man lv e in (* Force transfer function to be evaluated before dereferencing in common_join argument. *)
137137 common_join man d ! r ! spawns
138138
139- let tf_vdecl var edge prev_node v getl sidel getg sideg d =
140- let man, r, spawns = common_man var edge prev_node d getl sidel getg sideg in
139+ let tf_vdecl var edge prev_node v getl sidel demandl getg sideg d =
140+ let man, r, spawns = common_man var edge prev_node d getl sidel demandl getg sideg in
141141 let d = S. vdecl man v in (* Force transfer function to be evaluated before dereferencing in common_join argument. *)
142142 common_join man d ! r ! spawns
143143
@@ -152,8 +152,8 @@ struct
152152 let nval = S. sync { man with local = spawning_return } `Return in
153153 nval
154154
155- let tf_ret var edge prev_node ret fd getl sidel getg sideg d =
156- let man, r, spawns = common_man var edge prev_node d getl sidel getg sideg in
155+ let tf_ret var edge prev_node ret fd getl sidel demandl getg sideg d =
156+ let man, r, spawns = common_man var edge prev_node d getl sidel demandl getg sideg in
157157 let d = (* Force transfer function to be evaluated before dereferencing in common_join argument. *)
158158 if (CilType.Fundec. equal fd MyCFG. dummy_func ||
159159 List. mem fd.svar.vname (get_string_list " mainfun" )) &&
@@ -163,21 +163,21 @@ struct
163163 in
164164 common_join man d ! r ! spawns
165165
166- let tf_entry var edge prev_node fd getl sidel getg sideg d =
166+ let tf_entry var edge prev_node fd getl sidel demandl getg sideg d =
167167 (* Side effect function context here instead of at sidel to FunctionEntry,
168168 because otherwise context for main functions (entrystates) will be missing or pruned during postsolving. *)
169169 let c: unit -> S.C. t = snd var |> Obj. obj in
170170 side_context sideg fd (c () );
171- let man, r, spawns = common_man var edge prev_node d getl sidel getg sideg in
171+ let man, r, spawns = common_man var edge prev_node d getl sidel demandl getg sideg in
172172 let d = S. body man fd in (* Force transfer function to be evaluated before dereferencing in common_join argument. *)
173173 common_join man d ! r ! spawns
174174
175- let tf_test var edge prev_node e tv getl sidel getg sideg d =
176- let man, r, spawns = common_man var edge prev_node d getl sidel getg sideg in
175+ let tf_test var edge prev_node e tv getl sidel demandl getg sideg d =
176+ let man, r, spawns = common_man var edge prev_node d getl sidel demandl getg sideg in
177177 let d = S. branch man e tv in (* Force transfer function to be evaluated before dereferencing in common_join argument. *)
178178 common_join man d ! r ! spawns
179179
180- let tf_normal_call man lv e (f :fundec ) args getl sidel getg sideg =
180+ let tf_normal_call man lv e (f :fundec ) args getl sidel demandl getg sideg =
181181 let combine (cd , fc , fd ) =
182182 if M. tracing then M. traceli " combine" " local: %a" S.D. pretty cd;
183183 if M. tracing then M. trace " combine" " function: %a" S.D. pretty fd;
@@ -245,8 +245,8 @@ struct
245245
246246 let tf_special_call man lv f args = S. special man lv f args
247247
248- let tf_proc var edge prev_node lv e args getl sidel getg sideg d =
249- let man, r, spawns = common_man var edge prev_node d getl sidel getg sideg in
248+ let tf_proc var edge prev_node lv e args getl sidel demandl getg sideg d =
249+ let man, r, spawns = common_man var edge prev_node d getl sidel demandl getg sideg in
250250 let functions =
251251 match e with
252252 | Lval (Var v , NoOffset) ->
@@ -271,7 +271,7 @@ struct
271271 M. info ~category: Analyzer " Using special for defined function %s" f.vname;
272272 tf_special_call man lv f args
273273 | fd ->
274- tf_normal_call man lv e fd args getl sidel getg sideg
274+ tf_normal_call man lv e fd args getl sidel demandl getg sideg
275275 | exception Not_found ->
276276 tf_special_call man lv f args)
277277 end
@@ -292,17 +292,17 @@ struct
292292 end else
293293 common_joins man funs ! r ! spawns
294294
295- let tf_asm var edge prev_node getl sidel getg sideg d =
296- let man, r, spawns = common_man var edge prev_node d getl sidel getg sideg in
295+ let tf_asm var edge prev_node getl sidel demandl getg sideg d =
296+ let man, r, spawns = common_man var edge prev_node d getl sidel demandl getg sideg in
297297 let d = S. asm man in (* Force transfer function to be evaluated before dereferencing in common_join argument. *)
298298 common_join man d ! r ! spawns
299299
300- let tf_skip var edge prev_node getl sidel getg sideg d =
301- let man, r, spawns = common_man var edge prev_node d getl sidel getg sideg in
300+ let tf_skip var edge prev_node getl sidel demandl getg sideg d =
301+ let man, r, spawns = common_man var edge prev_node d getl sidel demandl getg sideg in
302302 let d = S. skip man in (* Force transfer function to be evaluated before dereferencing in common_join argument. *)
303303 common_join man d ! r ! spawns
304304
305- let tf var getl sidel getg sideg prev_node edge d =
305+ let tf var getl sidel demandl getg sideg prev_node edge d =
306306 begin match edge with
307307 | Assign (lv ,rv ) -> tf_assign var edge prev_node lv rv
308308 | VDecl (v ) -> tf_vdecl var edge prev_node v
@@ -312,7 +312,7 @@ struct
312312 | Test (p ,b ) -> tf_test var edge prev_node p b
313313 | ASM (_ , _ , _ ) -> tf_asm var edge prev_node (* TODO: use ASM fields for something? *)
314314 | Skip -> tf_skip var edge prev_node
315- end getl sidel getg sideg d
315+ end getl sidel demandl getg sideg d
316316
317317 type Goblint_backtrace.mark + = TfLocation of location
318318
@@ -322,7 +322,7 @@ struct
322322 | _ -> None (* for other marks *)
323323 )
324324
325- let tf var getl sidel getg sideg prev_node (_ ,edge ) d (f ,t ) =
325+ let tf var getl sidel demandl getg sideg prev_node (_ ,edge ) d (f ,t ) =
326326 let old_loc = ! Goblint_tracing. current_loc in
327327 let old_loc2 = ! Goblint_tracing. next_loc in
328328 Goblint_tracing. current_loc := f;
@@ -331,16 +331,16 @@ struct
331331 Goblint_tracing. current_loc := old_loc;
332332 Goblint_tracing. next_loc := old_loc2
333333 ) (fun () ->
334- let d = tf var getl sidel getg sideg prev_node edge d in
334+ let d = tf var getl sidel demandl getg sideg prev_node edge d in
335335 d
336336 )
337337
338- let tf (v ,c ) (edges , u ) getl sidel getg sideg =
338+ let tf (v ,c ) (edges , u ) getl sidel demandl getg sideg =
339339 let pval = getl (u,c) in
340340 let _, locs = List. fold_right (fun (f ,e ) (t ,xs ) -> f, (f,t)::xs) edges (Node. location v,[] ) in
341- List. fold_left2 (|> ) pval (List. map (tf (v,Obj. repr (fun () -> c)) getl sidel getg sideg u) edges) locs
341+ List. fold_left2 (|> ) pval (List. map (tf (v,Obj. repr (fun () -> c)) getl sidel demandl getg sideg u) edges) locs
342342
343- let tf (v ,c ) (e ,u ) getl sidel getg sideg =
343+ let tf (v ,c ) (e ,u ) getl sidel demandl getg sideg =
344344 let old_node = ! current_node in
345345 let old_fd = Option. map Node. find_fundec old_node |? Cil. dummyFunDec in
346346 let new_fd = Node. find_fundec v in
@@ -355,7 +355,7 @@ struct
355355 if not (CilType.Fundec. equal old_fd new_fd) then
356356 Timing.Program. exit new_fd.svar.vname
357357 ) (fun () ->
358- let d = tf (v,c) (e,u) getl sidel getg sideg in
358+ let d = tf (v,c) (e,u) getl sidel demandl getg sideg in
359359 d
360360 )
361361
@@ -364,8 +364,8 @@ struct
364364 | FunctionEntry _ ->
365365 None
366366 | _ ->
367- let tf getl sidel getg sideg =
368- let tf' eu = tf (v,c) eu getl sidel getg sideg in
367+ let tf getl sidel demandl getg sideg =
368+ let tf' eu = tf (v,c) eu getl sidel demandl getg sideg in
369369
370370 match NodeH. find_option CfgTools. node_scc_global v with
371371 | Some scc when NodeH. mem scc.prev v && NodeH. length scc.prev = 1 ->
0 commit comments