From 821d828e56d1b3e74a1a5cdfaebe71866517f96f Mon Sep 17 00:00:00 2001 From: Basile Desloges <basile.desloges@cea.fr> Date: Mon, 20 Sep 2021 16:08:34 +0200 Subject: [PATCH] [eacsl] Move the check and initialization of options in a dedicated function --- src/plugins/e-acsl/src/main.ml | 14 +-------- src/plugins/e-acsl/src/options.ml | 29 +++++++++++++++++++ src/plugins/e-acsl/src/options.mli | 5 ++++ .../e-acsl/src/project_initializer/rtl.ml | 6 +--- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/plugins/e-acsl/src/main.ml b/src/plugins/e-acsl/src/main.ml index 194e1e54f8e..179208761e5 100644 --- a/src/plugins/e-acsl/src/main.ml +++ b/src/plugins/e-acsl/src/main.ml @@ -40,19 +40,7 @@ let generate_code = (fun name -> Options.feedback "beginning translation."; Temporal.enable (Options.Temporal_validity.get ()); - if Plugin.is_present "variadic" then begin - let opt_name = "-variadic-translation" in - if Dynamic.Parameter.Bool.get opt_name () && - Options.Validate_format_strings.get () then begin - if Ast.is_computed () then - Options.abort - "The variadic translation is incompatible with E-ACSL option \ - '%s'.@ Please use option '-variadic-no-translation'." - Options.Validate_format_strings.option_name; - Options.warning "deactivating variadic translation"; - Dynamic.Parameter.Bool.off opt_name (); - end - end; + Options.setup (); (* slightly more efficient to copy the project before computing the AST if it is not yet computed *) let rtl_prj_name = Options.Project_name.get () ^ " RTL" in diff --git a/src/plugins/e-acsl/src/options.ml b/src/plugins/e-acsl/src/options.ml index e4f6bdddd94..cc172a073cc 100644 --- a/src/plugins/e-acsl/src/options.ml +++ b/src/plugins/e-acsl/src/options.ml @@ -177,6 +177,35 @@ let dkey_prepare = register_category "preparation" let dkey_translation = register_category "translation" let dkey_typing = register_category "typing" +let setup ?(rtl=false) () = + (* Variadic translation *) + if Plugin.is_present "variadic" then begin + let opt_name = "-variadic-translation" in + if Dynamic.Parameter.Bool.get opt_name () then begin + if rtl then + (* If we are translating the RTL project, then we need to deactivate the + variadic translation. Indeed since we are translating the RTL in + isolation, we do not now if the variadic functions are used by the + user project and we cannot monomorphise them accordingly. *) + Dynamic.Parameter.Bool.off opt_name () + else if Validate_format_strings.get () then begin + if Ast.is_computed () then + abort + "The variadic translation is incompatible with E-ACSL option \ + '%s'.@ Please use option '-variadic-no-translation'." + Validate_format_strings.option_name; + warning ~once:true "deactivating variadic translation"; + Dynamic.Parameter.Bool.off opt_name (); + end + end + end; + (* Additionnal kernel options while parsing the RTL project. *) + if rtl then begin + Kernel.Keep_unused_specified_functions.off (); + Kernel.CppExtraArgs.add + (Format.asprintf " -DE_ACSL_MACHDEP=%s" (Kernel.Machdep.get ())); + end + (* Local Variables: compile-command: "make -C ../../../.." diff --git a/src/plugins/e-acsl/src/options.mli b/src/plugins/e-acsl/src/options.mli index eda2b4a31e1..ec3f385c089 100644 --- a/src/plugins/e-acsl/src/options.mli +++ b/src/plugins/e-acsl/src/options.mli @@ -46,6 +46,11 @@ val dkey_prepare: category val dkey_translation: category val dkey_typing: category +val setup: ?rtl:bool -> unit -> unit +(** Verify and initialize the options of the current project according to the + options set by the user. + If [rtl] is true, then the project being modified is the RTL project. *) + (* Local Variables: compile-command: "make -C ../../../.." diff --git a/src/plugins/e-acsl/src/project_initializer/rtl.ml b/src/plugins/e-acsl/src/project_initializer/rtl.ml index 2666f703499..c48aa7a7e8f 100644 --- a/src/plugins/e-acsl/src/project_initializer/rtl.ml +++ b/src/plugins/e-acsl/src/project_initializer/rtl.ml @@ -31,11 +31,7 @@ let create_rtl_ast prj = prj (fun () -> (* compute the RTL AST in the standard E-ACSL setting *) - if Plugin.is_present "variadic" then - Dynamic.Parameter.Bool.off "-variadic-translation" (); - Kernel.Keep_unused_specified_functions.off (); - Kernel.CppExtraArgs.add - (Format.asprintf " -DE_ACSL_MACHDEP=%s" (Kernel.Machdep.get ())); + Options.setup ~rtl:true (); Kernel.Files.set [ rtl_file () ]; Ast.get ()) () -- GitLab