From d800b9c37c6acf69c5476e240a9f456282d8220b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9lio=20Brun?= <lb@leliobrun.net> Date: Thu, 26 Jan 2023 09:28:57 +0900 Subject: [PATCH] do not generate ghost reset functions for stateless machines --- src/backends/C/c_backend_header.ml | 15 +++++++++++---- src/backends/C/c_backend_spec.ml | 13 ++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/backends/C/c_backend_header.ml b/src/backends/C/c_backend_header.ml index 002c58a2..92134e63 100644 --- a/src/backends/C/c_backend_header.ml +++ b/src/backends/C/c_backend_header.ml @@ -307,7 +307,9 @@ struct let pp_alloc_header header_fmt basename machines dependencies = (* Include once: start *) - let machines' = List.filter (fun m -> not m.mis_contract) machines in + let machines' = List.filter (fun m -> + not m.mis_contract && not (fst (get_stateless_status m)) ) machines + in let baseNAME = file_to_module_name basename in let self_dep = { @@ -452,7 +454,7 @@ struct ~pp_prologue:(pp_print_endcut "/* Struct declarations */") pp_machine_struct_top_decl_from_header ~pp_epilogue:pp_print_cutcut) - nodes + (List.filter (fun td -> not (fst (get_stateless_status_top_decl td))) nodes) (* Print the prototypes of all machines *) (pp_print_list ~pp_open_box:pp_open_vbox0 @@ -464,7 +466,9 @@ struct let pp_memory_header header_fmt basename machines dependencies = (* Include once: start *) - let machines' = List.filter (fun m -> not m.mis_contract) machines in + let machines' = List.filter (fun m -> + not m.mis_contract && not (fst (get_stateless_status m)) ) machines + in let baseNAME = file_to_module_name basename in fprintf header_fmt @@ -501,6 +505,9 @@ struct pp ~pp_epilogue:pp_print_cutcut in + let machines' = List.filter (fun m -> not (fst (get_stateless_status m))) + machines + in fprintf header_fmt "@[<v>%a@,#ifndef _%s_SPEC@,#define _%s_SPEC@,@,%a@,%a#endif@]@." @@ -515,7 +522,7 @@ struct (pp_preds "/* Monolithic ghost `reset` functions */" (fun fmt m -> let mem = mk_mem m in Src.pp_ghost_reset_spec_code machines mem fmt m)) - machines + machines' end (* Local Variables: *) (* compile-command:"make -C ../../.." *) diff --git a/src/backends/C/c_backend_spec.ml b/src/backends/C/c_backend_spec.ml index 534426bc..d7f96b3e 100644 --- a/src/backends/C/c_backend_spec.ml +++ b/src/backends/C/c_backend_spec.ml @@ -1075,23 +1075,26 @@ module HdrMod = struct pp ~pp_epilogue:pp_print_cutcut in + let machines' = List.filter (fun m -> not (fst (get_stateless_status m))) + machines + in fprintf fmt "%a%a%a%a%a%a%a" (pp_preds "/* ACSL `valid` predicates */" pp_mem_valid_def) - machines + machines' (pp_preds "/* ACSL ghost structures */" pp_machine_ghost_struct) - machines + machines' (pp_preds "/* ACSL initialization annotations */" pp_initialization_def) - machines + machines' (pp_preds "/* ACSL `memory pack` simulations */" pp_memory_pack_defs) - machines + machines' (pp_preds "/* ACSL transition annotations */" pp_transition_defs) machines (pp_preds "/* ACSL transition memory footprints lemmas */" pp_transition_footprint_lemmas) - machines + machines' (pp_preds "/* k-induction predicates and lemmas */" (fun fmt m -> let c, m_c = contract_of machines m in pp_print_option (pp_proof_annotation m m_c) fmt c)) -- GitLab