Skip to content

Commit 2697fbe

Browse files
authored
Merge pull request #1833 from goblint/c2po-combine
Remove C2PO `combine_env` and `combine_assign` duplication
2 parents c4e504c + 322c0fc commit 2697fbe

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

src/analyses/c2poAnalysis.ml

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,6 @@ struct
265265
let remove_out_of_scope_vars cc f =
266266
let local_vars = f.sformals @ f.slocals in
267267
let duplicated_vars = f.sformals in
268-
let cc = D.remove_terms_containing_return_variable cc in
269268
D.remove_terms_containing_variables (Var.from_varinfo local_vars duplicated_vars) cc
270269

271270
let combine_env ctx lval_opt expr f args t_context_opt f_d (f_ask: Queries.ask) =
@@ -306,32 +305,21 @@ struct
306305
match ctx.local with
307306
| `Bot -> `Bot
308307
| `Lifted d ->
309-
let caller_ask = ask_of_man ctx in
310-
(* assign function parameters to duplicated values *)
311-
let arg_assigns = GobList.combine_short f.sformals args in
312-
let assign_term st (var, arg) =
313-
let ghost_var = T.term_of_varinfo (DuplicVar var) in
314-
let arg = T.of_cil f_ask arg in
315-
assign_term st caller_ask ghost_var arg var.vtype
308+
let d =
309+
match var_opt with
310+
| None ->
311+
d
312+
| Some lval ->
313+
let return_type = typeOfLval lval in
314+
let return_var = MayBeEqual.return_var return_type in
315+
let return_var = (Some return_var, Some Z.zero) in
316+
assign_lval d f_ask lval return_var
316317
in
317-
let state_with_assignments = List.fold_left assign_term d arg_assigns in
318-
match D.meet (`Lifted state_with_assignments) f_d with
319-
| `Bot -> `Bot
320-
| `Lifted d ->
321-
let d = match var_opt with
322-
| None ->
323-
d
324-
| Some lval ->
325-
let return_type = typeOfLval lval in
326-
let return_var = MayBeEqual.return_var return_type in
327-
let return_var = (Some return_var, Some Z.zero) in
328-
assign_lval d f_ask lval return_var
329-
in
330-
if M.tracing then M.trace "c2po-function" "combine_assign1: assigning return value: %s\n" (C2PODomain.show d);
331-
let d = remove_out_of_scope_vars d.data f in
332-
let d = data_to_t d in
333-
if M.tracing then M.trace "c2po-function" "combine_assign2: result: %s\n" (C2PODomain.show d);
334-
`Lifted d
318+
if M.tracing then M.trace "c2po-function" "combine_assign1: assigning return value: %s\n" (C2PODomain.show d);
319+
let d = D.remove_terms_containing_return_variable d.data in
320+
let d = data_to_t d in
321+
if M.tracing then M.trace "c2po-function" "combine_assign2: result: %s\n" (C2PODomain.show d);
322+
`Lifted d
335323

336324
let startstate v =
337325
D.top ()

0 commit comments

Comments
 (0)