From a9a28c2e7377f52def9aa329d93a9c9673f59efd Mon Sep 17 00:00:00 2001 From: Thibault Martin <thi.martin.pro@pm.me> Date: Thu, 27 Jul 2023 15:08:58 +0200 Subject: [PATCH] Add an option to turn of generation --- src/kernel_internals/typing/populate_spec.ml | 13 ++++++------- src/kernel_services/ast_data/annotations.ml | 3 ++- src/kernel_services/plugin_entry_points/kernel.ml | 14 ++++++++++++++ src/kernel_services/plugin_entry_points/kernel.mli | 7 ++++--- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/kernel_internals/typing/populate_spec.ml b/src/kernel_internals/typing/populate_spec.ml index 76f20f9e9b5..135c7c0e4aa 100644 --- a/src/kernel_internals/typing/populate_spec.ml +++ b/src/kernel_internals/typing/populate_spec.ml @@ -441,9 +441,8 @@ let get_config_default () = let get_config () = let default = get_config_default () in - let custom_map = Kernel.GeneratedSpecCustom.get () in - let apply_custom k v conf = - let mode = get_mode v in + let collect (k,v) conf = + let mode = get_mode (Option.get v) in match k with | "exits" -> {conf with exits = mode} | "assigns" -> {conf with assigns = mode} @@ -452,10 +451,10 @@ let get_config () = | "terminates" -> {conf with terminates = mode} | s -> Kernel.abort - "\'%s\' is not a valid clause for spec generation, accepted \ - values are 'exits', 'assigns', 'allocates' and 'terminates'" s + "\'%s\' is not a valid key for -generated-spec-custom, accepted keys \ + are 'exits', 'assigns', 'requires', 'allocates' and 'terminates'" s in - Datatype.String.Map.fold apply_custom custom_map default + Kernel.GeneratedSpecCustom.fold collect default let do_populate kf original_spec = let config = get_config () in @@ -500,7 +499,7 @@ module Is_populated = let () = Ast.add_linked_state Is_populated.self let populate_funspec kf spec = - if Is_populated.mem kf then false + if not @@ Kernel.GenerateDefaultSpec.get() || Is_populated.mem kf then false else begin do_populate kf spec; Is_populated.add kf (); diff --git a/src/kernel_services/ast_data/annotations.ml b/src/kernel_services/ast_data/annotations.ml index 4f049e0bf0d..dd0e4788566 100644 --- a/src/kernel_services/ast_data/annotations.ml +++ b/src/kernel_services/ast_data/annotations.ml @@ -164,7 +164,8 @@ let () = let populate_spec_ref = Extlib.mk_fun "Annotations.populate_spec" -let populate_spec populate kf spec = match kf.fundec with +let populate_spec populate kf spec = + match kf.fundec with | Definition _ -> false | Declaration _ -> if populate then begin diff --git a/src/kernel_services/plugin_entry_points/kernel.ml b/src/kernel_services/plugin_entry_points/kernel.ml index f019256d85f..f2ab22958f0 100644 --- a/src/kernel_services/plugin_entry_points/kernel.ml +++ b/src/kernel_services/plugin_entry_points/kernel.ml @@ -1455,8 +1455,22 @@ module DoCollapseCallCast = and the lvalue it is assigned to." end) + let () = Parameter_customize.set_group normalisation let () = Parameter_customize.do_not_reset_on_copy () +module GenerateDefaultSpec = + Bool + (struct + let module_name = "GenerateDefaultSpec" + let option_name = "-generate-default-spec" + let default = true + let help = "Generates missing specifications according to options \ + -generated-spec-mode and -generated-spec-custom (activated \ + by default)" + end) +let () = Parameter_customize.set_group normalisation +let () = Parameter_customize.do_not_reset_on_copy () + module GeneratedSpecMode = String (struct diff --git a/src/kernel_services/plugin_entry_points/kernel.mli b/src/kernel_services/plugin_entry_points/kernel.mli index e19abe85b6f..db612487462 100644 --- a/src/kernel_services/plugin_entry_points/kernel.mli +++ b/src/kernel_services/plugin_entry_points/kernel.mli @@ -556,10 +556,11 @@ module DoCollapseCallCast: Parameter_sig.Bool This is false by default. Set to true to replicate the behavior of CIL 1.3.5 and earlier. *) - +module GenerateDefaultSpec: Parameter_sig.Bool module GeneratedSpecMode: Parameter_sig.String -module GeneratedSpecCustom: - Parameter_sig.Map with type t = string Datatype.String.Map.t +module GeneratedSpecCustom: Parameter_sig.Map + with type key = string + and type value = string (* ************************************************************************* *) (** {2 Analysis Behavior of options} *) -- GitLab