From bec92f6ad181659ec0cc85e68371b029f356d8dd Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Wed, 5 Feb 2020 14:19:36 +0100 Subject: [PATCH] [RENAME PLUGIN] Builtin -> Instantiate --- headers/header_spec.txt | 56 +++++++++---------- src/plugins/builtin/tests/options/test_config | 1 - src/plugins/builtin/tests/stdlib/test_config | 1 - src/plugins/builtin/tests/string/test_config | 1 - .../{builtin => instantiate}/.gitignore | 0 .../Instantiate.mli} | 20 +++---- .../{builtin => instantiate}/Makefile.in | 8 +-- .../{builtin => instantiate}/README.md | 36 ++++++------ .../{builtin => instantiate}/basic_blocks.ml | 0 .../{builtin => instantiate}/basic_blocks.mli | 0 .../{builtin => instantiate}/configure.ac | 6 +- .../instantiator_builder.ml} | 8 +-- .../instantiator_builder.mli} | 22 ++++---- .../{builtin => instantiate}/options.ml | 10 ++-- .../{builtin => instantiate}/options.mli | 8 +-- .../{builtin => instantiate}/register.ml | 2 +- .../stdlib/basic_alloc.ml | 0 .../stdlib/basic_alloc.mli | 0 .../{builtin => instantiate}/stdlib/calloc.ml | 0 .../stdlib/calloc.mli | 0 .../{builtin => instantiate}/stdlib/free.ml | 0 .../{builtin => instantiate}/stdlib/free.mli | 0 .../{builtin => instantiate}/stdlib/malloc.ml | 0 .../stdlib/malloc.mli | 0 .../{builtin => instantiate}/string/memcmp.ml | 4 +- .../string/memcmp.mli | 0 .../{builtin => instantiate}/string/memcpy.ml | 4 +- .../string/memcpy.mli | 0 .../string/memmove.ml | 4 +- .../string/memmove.mli | 0 .../{builtin => instantiate}/string/memset.ml | 10 ++-- .../string/memset.mli | 0 .../api/external_instantiator_registration.c} | 4 +- .../external_instantiator_registration.ml} | 4 +- ...rnal_instantiator_registration.res.oracle} | 2 +- .../tests/options/ignore-functions.c | 4 +- .../tests/options/ignore-instantiator.c} | 4 +- .../tests/options/only-functions.c | 4 +- .../oracle/ignore-functions.res.oracle | 0 .../oracle/ignore-instantiator.res.oracle} | 2 +- .../options/oracle/only-functions.res.oracle | 0 .../instantiate/tests/options/test_config | 1 + .../tests/stdlib/calloc.c | 0 .../tests/stdlib/free.c | 0 .../tests/stdlib/malloc.c | 0 .../tests/stdlib/oracle/calloc.res.oracle | 2 +- .../tests/stdlib/oracle/free.res.oracle | 2 +- .../tests/stdlib/oracle/malloc.res.oracle | 2 +- .../instantiate/tests/stdlib/test_config | 1 + .../tests/string/memcmp.c | 0 .../tests/string/memcpy.c | 0 .../tests/string/memmove.c | 0 .../tests/string/memset_0.c | 0 .../tests/string/memset_FF.c | 0 .../tests/string/memset_value.c | 0 .../tests/string/oracle/memcmp.res.oracle | 2 +- .../tests/string/oracle/memcpy.res.oracle | 4 +- .../tests/string/oracle/memmove.res.oracle | 4 +- .../tests/string/oracle/memset_0.res.oracle | 4 +- .../tests/string/oracle/memset_FF.res.oracle | 4 +- .../string/oracle/memset_value.res.oracle | 36 ++++++++---- .../instantiate/tests/string/test_config | 1 + .../{builtin => instantiate}/transform.ml | 50 ++++++++--------- .../{builtin => instantiate}/transform.mli | 9 ++- 64 files changed, 179 insertions(+), 168 deletions(-) delete mode 100644 src/plugins/builtin/tests/options/test_config delete mode 100644 src/plugins/builtin/tests/stdlib/test_config delete mode 100644 src/plugins/builtin/tests/string/test_config rename src/plugins/{builtin => instantiate}/.gitignore (100%) rename src/plugins/{builtin/Builtin.mli => instantiate/Instantiate.mli} (87%) rename src/plugins/{builtin => instantiate}/Makefile.in (93%) rename src/plugins/{builtin => instantiate}/README.md (72%) rename src/plugins/{builtin => instantiate}/basic_blocks.ml (100%) rename src/plugins/{builtin => instantiate}/basic_blocks.mli (100%) rename src/plugins/{builtin => instantiate}/configure.ac (93%) rename src/plugins/{builtin/builtin_builder.ml => instantiate/instantiator_builder.ml} (96%) rename src/plugins/{builtin/builtin_builder.mli => instantiate/instantiator_builder.mli} (90%) rename src/plugins/{builtin => instantiate}/options.ml (89%) rename src/plugins/{builtin => instantiate}/options.mli (89%) rename src/plugins/{builtin => instantiate}/register.ml (96%) rename src/plugins/{builtin => instantiate}/stdlib/basic_alloc.ml (100%) rename src/plugins/{builtin => instantiate}/stdlib/basic_alloc.mli (100%) rename src/plugins/{builtin => instantiate}/stdlib/calloc.ml (100%) rename src/plugins/{builtin => instantiate}/stdlib/calloc.mli (100%) rename src/plugins/{builtin => instantiate}/stdlib/free.ml (100%) rename src/plugins/{builtin => instantiate}/stdlib/free.mli (100%) rename src/plugins/{builtin => instantiate}/stdlib/malloc.ml (100%) rename src/plugins/{builtin => instantiate}/stdlib/malloc.mli (100%) rename src/plugins/{builtin => instantiate}/string/memcmp.ml (98%) rename src/plugins/{builtin => instantiate}/string/memcmp.mli (100%) rename src/plugins/{builtin => instantiate}/string/memcpy.ml (98%) rename src/plugins/{builtin => instantiate}/string/memcpy.mli (100%) rename src/plugins/{builtin => instantiate}/string/memmove.ml (98%) rename src/plugins/{builtin => instantiate}/string/memmove.mli (100%) rename src/plugins/{builtin => instantiate}/string/memset.ml (97%) rename src/plugins/{builtin => instantiate}/string/memset.mli (100%) rename src/plugins/{builtin/tests/api/external_builtin_registration.c => instantiate/tests/api/external_instantiator_registration.c} (53%) rename src/plugins/{builtin/tests/api/external_builtin_registration.ml => instantiate/tests/api/external_instantiator_registration.ml} (95%) rename src/plugins/{builtin/tests/api/oracle/external_builtin_registration.res.oracle => instantiate/tests/api/oracle/external_instantiator_registration.res.oracle} (75%) rename src/plugins/{builtin => instantiate}/tests/options/ignore-functions.c (87%) rename src/plugins/{builtin/tests/options/ignore-builtin.c => instantiate/tests/options/ignore-instantiator.c} (80%) rename src/plugins/{builtin => instantiate}/tests/options/only-functions.c (89%) rename src/plugins/{builtin => instantiate}/tests/options/oracle/ignore-functions.res.oracle (100%) rename src/plugins/{builtin/tests/options/oracle/ignore-builtin.res.oracle => instantiate/tests/options/oracle/ignore-instantiator.res.oracle} (91%) rename src/plugins/{builtin => instantiate}/tests/options/oracle/only-functions.res.oracle (100%) create mode 100644 src/plugins/instantiate/tests/options/test_config rename src/plugins/{builtin => instantiate}/tests/stdlib/calloc.c (100%) rename src/plugins/{builtin => instantiate}/tests/stdlib/free.c (100%) rename src/plugins/{builtin => instantiate}/tests/stdlib/malloc.c (100%) rename src/plugins/{builtin => instantiate}/tests/stdlib/oracle/calloc.res.oracle (99%) rename src/plugins/{builtin => instantiate}/tests/stdlib/oracle/free.res.oracle (98%) rename src/plugins/{builtin => instantiate}/tests/stdlib/oracle/malloc.res.oracle (99%) create mode 100644 src/plugins/instantiate/tests/stdlib/test_config rename src/plugins/{builtin => instantiate}/tests/string/memcmp.c (100%) rename src/plugins/{builtin => instantiate}/tests/string/memcpy.c (100%) rename src/plugins/{builtin => instantiate}/tests/string/memmove.c (100%) rename src/plugins/{builtin => instantiate}/tests/string/memset_0.c (100%) rename src/plugins/{builtin => instantiate}/tests/string/memset_FF.c (100%) rename src/plugins/{builtin => instantiate}/tests/string/memset_value.c (100%) rename src/plugins/{builtin => instantiate}/tests/string/oracle/memcmp.res.oracle (99%) rename src/plugins/{builtin => instantiate}/tests/string/oracle/memcpy.res.oracle (98%) rename src/plugins/{builtin => instantiate}/tests/string/oracle/memmove.res.oracle (98%) rename src/plugins/{builtin => instantiate}/tests/string/oracle/memset_0.res.oracle (98%) rename src/plugins/{builtin => instantiate}/tests/string/oracle/memset_FF.res.oracle (99%) rename src/plugins/{builtin => instantiate}/tests/string/oracle/memset_value.res.oracle (89%) create mode 100644 src/plugins/instantiate/tests/string/test_config rename src/plugins/{builtin => instantiate}/transform.ml (79%) rename src/plugins/{builtin => instantiate}/transform.mli (86%) diff --git a/headers/header_spec.txt b/headers/header_spec.txt index 422e78690a6..1a83a710a5b 100644 --- a/headers/header_spec.txt +++ b/headers/header_spec.txt @@ -938,34 +938,34 @@ src/plugins/occurrence/options.mli: CEA_LGPL_OR_PROPRIETARY src/plugins/occurrence/register.ml: CEA_LGPL_OR_PROPRIETARY src/plugins/occurrence/register_gui.ml: CEA_LGPL_OR_PROPRIETARY src/plugins/occurrence/register_gui.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/basic_blocks.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/basic_blocks.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/Builtin.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/builtin_builder.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/builtin_builder.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/configure.ac: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/Makefile.in: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/stdlib/basic_alloc.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/stdlib/basic_alloc.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/stdlib/calloc.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/stdlib/calloc.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/stdlib/free.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/stdlib/free.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/stdlib/malloc.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/stdlib/malloc.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/string/memcmp.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/string/memcmp.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/string/memcpy.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/string/memcpy.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/string/memmove.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/string/memmove.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/string/memset.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/string/memset.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/options.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/options.mli: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/register.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/transform.ml: CEA_LGPL_OR_PROPRIETARY -src/plugins/builtin/transform.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/basic_blocks.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/basic_blocks.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/Instantiate.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/instantiator_builder.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/instantiator_builder.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/configure.ac: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/Makefile.in: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/stdlib/basic_alloc.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/stdlib/basic_alloc.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/stdlib/calloc.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/stdlib/calloc.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/stdlib/free.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/stdlib/free.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/stdlib/malloc.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/stdlib/malloc.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/string/memcmp.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/string/memcmp.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/string/memcpy.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/string/memcpy.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/string/memmove.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/string/memmove.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/string/memset.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/string/memset.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/options.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/options.mli: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/register.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/transform.ml: CEA_LGPL_OR_PROPRIETARY +src/plugins/instantiate/transform.mli: CEA_LGPL_OR_PROPRIETARY src/plugins/pdg/Pdg.mli: CEA_LGPL_OR_PROPRIETARY src/plugins/pdg/annot.ml: CEA_LGPL_OR_PROPRIETARY src/plugins/pdg/annot.mli: CEA_LGPL_OR_PROPRIETARY diff --git a/src/plugins/builtin/tests/options/test_config b/src/plugins/builtin/tests/options/test_config deleted file mode 100644 index 23385de5335..00000000000 --- a/src/plugins/builtin/tests/options/test_config +++ /dev/null @@ -1 +0,0 @@ -OPT: @PTEST_FILE@ -builtin -print \ No newline at end of file diff --git a/src/plugins/builtin/tests/stdlib/test_config b/src/plugins/builtin/tests/stdlib/test_config deleted file mode 100644 index 467fffb4bcb..00000000000 --- a/src/plugins/builtin/tests/stdlib/test_config +++ /dev/null @@ -1 +0,0 @@ -OPT: @PTEST_FILE@ -builtin -print -check -then -ocode @PTEST_DIR@/result/@PTEST_NAME@.c -print -then -no-builtin @PTEST_DIR@/result/@PTEST_NAME@.c @PTEST_FILE@ -ocode="" -print \ No newline at end of file diff --git a/src/plugins/builtin/tests/string/test_config b/src/plugins/builtin/tests/string/test_config deleted file mode 100644 index 467fffb4bcb..00000000000 --- a/src/plugins/builtin/tests/string/test_config +++ /dev/null @@ -1 +0,0 @@ -OPT: @PTEST_FILE@ -builtin -print -check -then -ocode @PTEST_DIR@/result/@PTEST_NAME@.c -print -then -no-builtin @PTEST_DIR@/result/@PTEST_NAME@.c @PTEST_FILE@ -ocode="" -print \ No newline at end of file diff --git a/src/plugins/builtin/.gitignore b/src/plugins/instantiate/.gitignore similarity index 100% rename from src/plugins/builtin/.gitignore rename to src/plugins/instantiate/.gitignore diff --git a/src/plugins/builtin/Builtin.mli b/src/plugins/instantiate/Instantiate.mli similarity index 87% rename from src/plugins/builtin/Builtin.mli rename to src/plugins/instantiate/Instantiate.mli index a41f4c5c3d8..603ab3e7650 100644 --- a/src/plugins/builtin/Builtin.mli +++ b/src/plugins/instantiate/Instantiate.mli @@ -22,23 +22,23 @@ open Cil_types -module Builtin_builder: sig - (** Builds a [Builtin] module (used by [Transform]) from a [Generator_sig] *) +module Instantiator_builder: sig + (** Builds a [Instantiator] module (used by [Transform]) from a [Generator_sig] *) - (** Signature for a new builtin generator. + (** Signature for a new instantiator generator. In order to support a new function, this module must be implemented and registered to the [Transform] module. *) module type Generator_sig = sig - (** [Hashtbl] module used by the [Make_builtin] module to generate the + (** [Hashtbl] module used by the [Make_instantiator] module to generate the function cache. The [key] ([override_key]) must identify a function override. *) module Hashtbl: Datatype.Hashtbl type override_key = Hashtbl.key - (** Name of the implemented builtin function *) + (** Name of the implemented instantiator function *) val function_name: string (** [well_typed_call ret args] must return true if and only if the @@ -68,13 +68,13 @@ module Builtin_builder: sig override function such that the new list can be given to the original function. For example, if for a call: [foo(x, 0, z)] - The [Builtin] module generates an override: + The [Instantiator] module generates an override: [void foo_spec(int p1, int p3);] The received list of expression is [ p1 ; p3 ] and thus the returned list should be [ p1 ; 0 ; p3 ] (so that the replaced call [foo_spec(x, z)] has the same behavior). Note that there is no need to introduce casts to the original type, it is - introduced by [Make_builtin]. + introduced by [Make_instantiator]. *) val args_for_original: override_key -> exp list -> exp list @@ -93,9 +93,9 @@ module Builtin_builder: sig end module Transform: sig - (** Registers a new [Builtin] to the visitor from the [Generator_sig] module - of this builtin. Each new builtin function generator should call this + (** Registers a new [Instantiator] to the visitor from the [Generator_sig] module + of this instantiator. Each new instantiator function generator should call this globally. *) - val register: (module Builtin_builder.Generator_sig) -> unit + val register: (module Instantiator_builder.Generator_sig) -> unit end diff --git a/src/plugins/builtin/Makefile.in b/src/plugins/instantiate/Makefile.in similarity index 93% rename from src/plugins/builtin/Makefile.in rename to src/plugins/instantiate/Makefile.in index 79b968e99a9..1ab35d905cf 100644 --- a/src/plugins/builtin/Makefile.in +++ b/src/plugins/instantiate/Makefile.in @@ -48,14 +48,14 @@ SRC_STDLIB:=$(addprefix stdlib/, $(SRC_STDLIB)) ################### PLUGIN_DIR ?= . -PLUGIN_ENABLE := @ENABLE_BUILTIN@ -PLUGIN_NAME := Builtin +PLUGIN_ENABLE := @ENABLE_INSTANTIATE@ +PLUGIN_NAME := Instantiate PLUGIN_EXTRA_DIRS:=\ string\ stdlib PLUGIN_CMI := PLUGIN_CMO := \ - basic_blocks options builtin_builder transform register \ + basic_blocks options instantiator_builder transform register \ $(SRC_STRING) \ $(SRC_STDLIB) @@ -80,6 +80,6 @@ else CONFIG_STATUS_DIR=. endif -$(Builtin_DIR)/Makefile: $(Builtin_DIR)/Makefile.in \ +$(Instantiate_DIR)/Makefile: $(Instantiate_DIR)/Makefile.in \ $(CONFIG_STATUS_DIR)/config.status cd $(CONFIG_STATUS_DIR) && ./config.status --file $@ diff --git a/src/plugins/builtin/README.md b/src/plugins/instantiate/README.md similarity index 72% rename from src/plugins/builtin/README.md rename to src/plugins/instantiate/README.md index ffdc7099383..bf55ae2cf31 100644 --- a/src/plugins/builtin/README.md +++ b/src/plugins/instantiate/README.md @@ -1,10 +1,10 @@ -# Builtin plugin +# Instantiate plugin ## Description -The builtin plugin is meant to build function specialization to C functions in -a project when the original specification (or prototype of the function) cannot -be efficiently used by some plugins. +The instantiate plugin is meant to build function specialization to C functions +in a project when the original specification (or prototype of the function) +cannot be efficiently used by some plugins. For example, the specification of a function like `memcpy` cannot be efficiently used by a plugin like `WP` because it involves `void*` pointers and requires to @@ -26,20 +26,20 @@ int *memcpy_int(int *dest, int const *src, size_t len); That can be easily used by WP. -The role of the Builtin plugin is to find each call for which a builtin -generator is available and if the call is well-typed according to the generator -(for example for `memcpy` if `dest` and `src` are both pointers to integers), to -replace this call with a call to an automatically generated specialization -corresponding to the call. +The role of the Instantiate plugin is to find each call for which an +instantiation generator is available and if the call is well-typed according to +the generator (for example for `memcpy` if `dest` and `src` are both pointers to +integers), to replace this call with a call to an automatically generated +specialization corresponding to the call. ## Options -- `-builtin` activate builtin replacement -- `-builtin-fct=f,...` only replace calls in specified functions (default to all) -- `-builtin-(no-)<function_name>` activate or deactivate a particular builtin +- `-instantiate` activate function replacement +- `-instantiate-fct=f,...` only replace calls in specified functions (default to all) +- `-instantiate-(no-)<function_name>` activate or deactivate a particular function, defaults to true. -## Available builtin functions +## Available functions ### `string.h` @@ -106,10 +106,10 @@ void* malloc(size_t num, size_t size); `malloc` is typed according to the variable that receives its result. It must be a pointer type different from `void*`. -## Adding a new builtin +## Adding a new instantiator -To add a new builtin, one has to register a new module implementing the -`Builtin_builder.Generator_sig` module type to the `Transform` module. The +To add a new instantiator, one has to register a new module implementing the +`Instantiator_builder.Generator_sig` module type to the `Transform` module. The lasts steps of the code should look like: ```ocaml @@ -117,7 +117,7 @@ let () = Transform.register (module struct module Hashtbl = ... type override_key = ... - let function_name = "my_builtin_function" + let function_name = "my_function" let well_typed_call = ... let key_from_call = ... let retype_args = ... @@ -127,4 +127,4 @@ let () = Transform.register (module struct end) ``` -The role and types of each function is documented in `Builtin_builder.mli`. \ No newline at end of file +The role and types of each function is documented in `Instantiator_builder.mli`. \ No newline at end of file diff --git a/src/plugins/builtin/basic_blocks.ml b/src/plugins/instantiate/basic_blocks.ml similarity index 100% rename from src/plugins/builtin/basic_blocks.ml rename to src/plugins/instantiate/basic_blocks.ml diff --git a/src/plugins/builtin/basic_blocks.mli b/src/plugins/instantiate/basic_blocks.mli similarity index 100% rename from src/plugins/builtin/basic_blocks.mli rename to src/plugins/instantiate/basic_blocks.mli diff --git a/src/plugins/builtin/configure.ac b/src/plugins/instantiate/configure.ac similarity index 93% rename from src/plugins/builtin/configure.ac rename to src/plugins/instantiate/configure.ac index 706c8832b25..718ec18eaf4 100644 --- a/src/plugins/builtin/configure.ac +++ b/src/plugins/instantiate/configure.ac @@ -21,7 +21,7 @@ ########################################################################## ########################################## -# Builtin stdlib C plugin # +# Instantiate plugin # ########################################## m4_define([plugin_file],Makefile.in) @@ -35,8 +35,8 @@ m4_define([FRAMAC_SHARE], m4_ifndef([FRAMAC_M4_MACROS], [m4_include(FRAMAC_SHARE/configure.ac)]) -check_plugin(builtin,PLUGIN_RELATIVE_PATH(plugin_file), - [support for builtin plug-in],yes) +check_plugin(instantiate,PLUGIN_RELATIVE_PATH(plugin_file), + [support for instantiate plug-in],yes) ####################### # Generating Makefile # diff --git a/src/plugins/builtin/builtin_builder.ml b/src/plugins/instantiate/instantiator_builder.ml similarity index 96% rename from src/plugins/builtin/builtin_builder.ml rename to src/plugins/instantiate/instantiator_builder.ml index 15952538624..7471c8a8351 100644 --- a/src/plugins/builtin/builtin_builder.ml +++ b/src/plugins/instantiate/instantiator_builder.ml @@ -36,7 +36,7 @@ module type Generator_sig = sig val generate_spec: override_key -> fundec -> location -> funspec end -module type Builtin = sig +module type Instantiator = sig module Enabled: Parameter_sig.Bool type override_key @@ -65,14 +65,14 @@ let build_body caller callee args_generator = let ret = Cil.mkStmt (Return ( (opt_map Cil.evar ret_var), loc)) in { (Cil.mkBlock [call ; ret]) with blocals = list_of_opt ret_var } -module Make_builtin (G: Generator_sig) = struct +module Make_instantiator (G: Generator_sig) = struct include G - module Enabled = Options.NewBuiltin (G) + module Enabled = Options.NewInstantiator (G) module Cache = State_builder.Hashtbl (G.Hashtbl) (Cil_datatype.Fundec) (struct let size = 5 let dependencies = [] - let name = "Builtins." ^ G.function_name + let name = "Instantiator." ^ G.function_name end) let make_fundec key = diff --git a/src/plugins/builtin/builtin_builder.mli b/src/plugins/instantiate/instantiator_builder.mli similarity index 90% rename from src/plugins/builtin/builtin_builder.mli rename to src/plugins/instantiate/instantiator_builder.mli index 82924b9e8ed..fd5f42e26ba 100644 --- a/src/plugins/builtin/builtin_builder.mli +++ b/src/plugins/instantiate/instantiator_builder.mli @@ -22,22 +22,22 @@ open Cil_types -(** Builds a [Builtin] module (used by [Transform]) from a [Generator_sig] *) +(** Builds a [Instantiator] module (used by [Transform]) from a [Generator_sig] *) -(** Signature for a new builtin generator. +(** Signature for a new instantiator generator. In order to support a new function, this module must be implemented and registered to the [Transform] module. *) module type Generator_sig = sig - (** [Hashtbl] module used by the [Make_builtin] module to generate the + (** [Hashtbl] module used by the [Make_instantiator] module to generate the function cache. The [key] ([override_key]) must identify a function override. *) module Hashtbl: Datatype.Hashtbl type override_key = Hashtbl.key - (** Name of the implemented builtin function *) + (** Name of the implemented function *) val function_name: string (** [well_typed_call ret args] must return true if and only if the @@ -67,13 +67,13 @@ module type Generator_sig = sig override function such that the new list can be given to the original function. For example, if for a call: [foo(x, 0, z)] - The [Builtin] module generates an override: + The [Instantiator] module generates an override: [void foo_spec(int p1, int p3);] The received list of expression is [ p1 ; p3 ] and thus the returned list should be [ p1 ; 0 ; p3 ] (so that the replaced call [foo_spec(x, z)] has the same behavior). Note that there is no need to introduce casts to the original type, it is - introduced by [Make_builtin]. + introduced by [Make_instantiator]. *) val args_for_original: override_key -> exp list -> exp list @@ -90,14 +90,14 @@ module type Generator_sig = sig val generate_spec: override_key -> fundec -> location -> funspec end -(** Signature of a builtin. +(** Signature of a instantiator. Module built by the [Transform] module from a [Generator_sig]. Used to perform the different replacements in the AST. This should be only used by the [Transform] module. *) -module type Builtin = sig - (** Plugin option that allows to check whether the builtin is enabled. *) +module type Instantiator = sig + (** Plugin option that allows to check whether the instantiator is enabled. *) module Enabled: Parameter_sig.Bool (** Same as [Generator_sig.override_key] *) type override_key @@ -129,8 +129,8 @@ module type Builtin = sig val mark_as_computed: ?project:Project.t -> unit -> unit end -(** Generates a [Builtin] from a [Generator_sig] adding all necessary stuff for +(** Generates a [Instantiator] from a [Generator_sig] adding all necessary stuff for cache and function definition generation, as well as specification registration. This should only be used by [Transform]. *) -module Make_builtin (G: Generator_sig) : Builtin +module Make_instantiator (G: Generator_sig) : Instantiator diff --git a/src/plugins/builtin/options.ml b/src/plugins/instantiate/options.ml similarity index 89% rename from src/plugins/builtin/options.ml rename to src/plugins/instantiate/options.ml index f4e7e8b813b..a094dde9d23 100644 --- a/src/plugins/builtin/options.ml +++ b/src/plugins/instantiate/options.ml @@ -20,8 +20,8 @@ (* *) (**************************************************************************) -let name = "Builtin" -let shortname = "builtin" +let name = "Instantiate" +let shortname = "instantiate" include Plugin.Register (struct @@ -44,10 +44,10 @@ module Kfs = let help = "Override stdlib functions only into the specified functions (defaults to all)." end) -module NewBuiltin (B: sig val function_name: string end) = True +module NewInstantiator (I: sig val function_name: string end) = True (struct - let option_name = "-" ^ shortname ^ "-" ^ B.function_name - let help = "Activate replacement for function '" ^ B.function_name ^ "'" + let option_name = "-" ^ shortname ^ "-" ^ I.function_name + let help = "Activate replacement for function '" ^ I.function_name ^ "'" end) let emitter = Emitter.create shortname [Emitter.Funspec] ~correctness:[] ~tuning:[] diff --git a/src/plugins/builtin/options.mli b/src/plugins/instantiate/options.mli similarity index 89% rename from src/plugins/builtin/options.mli rename to src/plugins/instantiate/options.mli index 8086aca2afe..320e1bbc1c2 100644 --- a/src/plugins/builtin/options.mli +++ b/src/plugins/instantiate/options.mli @@ -22,17 +22,17 @@ include Plugin.General_services -(** Builtin transformtion enabled *) +(** Instantiate transformation enabled *) module Enabled : Parameter_sig.Bool (** Set of kernel function provided for transformation *) module Kfs : Parameter_sig.Kernel_function_set -(** Used by [Builtin_builder] to generate builtin options. For a given builtin, - the module generate an option "-builtin-(no-)<function_name>" that defaults +(** Used by [Instantiator_builder] to generate options. For a given instantiator + the module generates an option "-instantiate-(no-)<function_name>" that defaults to true. *) -module NewBuiltin +module NewInstantiator (B : sig val function_name: string end) : Parameter_sig.Bool val emitter: Emitter.t diff --git a/src/plugins/builtin/register.ml b/src/plugins/instantiate/register.ml similarity index 96% rename from src/plugins/builtin/register.ml rename to src/plugins/instantiate/register.ml index 67719835d82..4bd18168ac5 100644 --- a/src/plugins/builtin/register.ml +++ b/src/plugins/instantiate/register.ml @@ -20,7 +20,7 @@ (* *) (**************************************************************************) -let category = File.register_code_transformation_category "builtin" +let category = File.register_code_transformation_category "instantiate" let () = let perform file = diff --git a/src/plugins/builtin/stdlib/basic_alloc.ml b/src/plugins/instantiate/stdlib/basic_alloc.ml similarity index 100% rename from src/plugins/builtin/stdlib/basic_alloc.ml rename to src/plugins/instantiate/stdlib/basic_alloc.ml diff --git a/src/plugins/builtin/stdlib/basic_alloc.mli b/src/plugins/instantiate/stdlib/basic_alloc.mli similarity index 100% rename from src/plugins/builtin/stdlib/basic_alloc.mli rename to src/plugins/instantiate/stdlib/basic_alloc.mli diff --git a/src/plugins/builtin/stdlib/calloc.ml b/src/plugins/instantiate/stdlib/calloc.ml similarity index 100% rename from src/plugins/builtin/stdlib/calloc.ml rename to src/plugins/instantiate/stdlib/calloc.ml diff --git a/src/plugins/builtin/stdlib/calloc.mli b/src/plugins/instantiate/stdlib/calloc.mli similarity index 100% rename from src/plugins/builtin/stdlib/calloc.mli rename to src/plugins/instantiate/stdlib/calloc.mli diff --git a/src/plugins/builtin/stdlib/free.ml b/src/plugins/instantiate/stdlib/free.ml similarity index 100% rename from src/plugins/builtin/stdlib/free.ml rename to src/plugins/instantiate/stdlib/free.ml diff --git a/src/plugins/builtin/stdlib/free.mli b/src/plugins/instantiate/stdlib/free.mli similarity index 100% rename from src/plugins/builtin/stdlib/free.mli rename to src/plugins/instantiate/stdlib/free.mli diff --git a/src/plugins/builtin/stdlib/malloc.ml b/src/plugins/instantiate/stdlib/malloc.ml similarity index 100% rename from src/plugins/builtin/stdlib/malloc.ml rename to src/plugins/instantiate/stdlib/malloc.ml diff --git a/src/plugins/builtin/stdlib/malloc.mli b/src/plugins/instantiate/stdlib/malloc.mli similarity index 100% rename from src/plugins/builtin/stdlib/malloc.mli rename to src/plugins/instantiate/stdlib/malloc.mli diff --git a/src/plugins/builtin/string/memcmp.ml b/src/plugins/instantiate/string/memcmp.ml similarity index 98% rename from src/plugins/builtin/string/memcmp.ml rename to src/plugins/instantiate/string/memcmp.ml index a8edb6e540b..c08fab9d5c3 100644 --- a/src/plugins/builtin/string/memcmp.ml +++ b/src/plugins/instantiate/string/memcmp.ml @@ -102,7 +102,7 @@ let well_typed_call _ret = function let key_from_call _ret = function | [ s1 ; _ ; _ ] -> type_from_arg s1 - | _ -> failwith "Call to Memmove.key_from_call on an ill-typed builtin call" + | _ -> failwith "Call to Memmove.key_from_call on an ill-typed call" let retype_args override_key = function | [ s1 ; s2 ; len ] -> @@ -113,7 +113,7 @@ let retype_args override_key = function Cil_datatype.Typ.equal (type_from_arg s2) override_key ) ; [ s1 ; s2 ; len ] - | _ -> failwith "Call to Memmove.retype_args on an ill-typed builtin call" + | _ -> failwith "Call to Memmove.retype_args on an ill-typed call" let args_for_original _t args = args diff --git a/src/plugins/builtin/string/memcmp.mli b/src/plugins/instantiate/string/memcmp.mli similarity index 100% rename from src/plugins/builtin/string/memcmp.mli rename to src/plugins/instantiate/string/memcmp.mli diff --git a/src/plugins/builtin/string/memcpy.ml b/src/plugins/instantiate/string/memcpy.ml similarity index 98% rename from src/plugins/builtin/string/memcpy.ml rename to src/plugins/instantiate/string/memcpy.ml index 31eee35d2b4..6a88daa2bb8 100644 --- a/src/plugins/builtin/string/memcpy.ml +++ b/src/plugins/instantiate/string/memcpy.ml @@ -108,7 +108,7 @@ let well_typed_call _ret = function let key_from_call _ret = function | [ dest ; _ ; _ ] -> type_from_arg dest - | _ -> failwith "Call to Memcpy.key_from_call on an ill-typed builtin call" + | _ -> failwith "Call to Memcpy.key_from_call on an ill-typed call" let retype_args override_key = function | [ dest ; src ; len ] -> @@ -119,7 +119,7 @@ let retype_args override_key = function Cil_datatype.Typ.equal (type_from_arg src) override_key ) ; [ dest ; src ; len ] - | _ -> failwith "Call to Memcpy.retype_args on an ill-typed builtin call" + | _ -> failwith "Call to Memcpy.retype_args on an ill-typed call" let args_for_original _t args = args diff --git a/src/plugins/builtin/string/memcpy.mli b/src/plugins/instantiate/string/memcpy.mli similarity index 100% rename from src/plugins/builtin/string/memcpy.mli rename to src/plugins/instantiate/string/memcpy.mli diff --git a/src/plugins/builtin/string/memmove.ml b/src/plugins/instantiate/string/memmove.ml similarity index 98% rename from src/plugins/builtin/string/memmove.ml rename to src/plugins/instantiate/string/memmove.ml index dd3104d45c5..a987e8cf5e2 100644 --- a/src/plugins/builtin/string/memmove.ml +++ b/src/plugins/instantiate/string/memmove.ml @@ -102,7 +102,7 @@ let well_typed_call _ret = function let key_from_call _ret = function | [ dest ; _ ; _ ] -> type_from_arg dest - | _ -> failwith "Call to Memmove.key_from_call on an ill-typed builtin call" + | _ -> failwith "Call to Memmove.key_from_call on an ill-typed call" let retype_args override_key = function | [ dest ; src ; len ] -> @@ -113,7 +113,7 @@ let retype_args override_key = function Cil_datatype.Typ.equal (type_from_arg src) override_key ) ; [ dest ; src ; len ] - | _ -> failwith "Call to Memmove.retype_args on an ill-typed builtin call" + | _ -> failwith "Call to Memmove.retype_args on an ill-typed call" let args_for_original _t args = args diff --git a/src/plugins/builtin/string/memmove.mli b/src/plugins/instantiate/string/memmove.mli similarity index 100% rename from src/plugins/builtin/string/memmove.mli rename to src/plugins/instantiate/string/memmove.mli diff --git a/src/plugins/builtin/string/memset.ml b/src/plugins/instantiate/string/memset.ml similarity index 97% rename from src/plugins/builtin/string/memset.ml rename to src/plugins/instantiate/string/memset.ml index 6da6545f3b0..afee4f55a21 100644 --- a/src/plugins/builtin/string/memset.ml +++ b/src/plugins/instantiate/string/memset.ml @@ -29,11 +29,11 @@ type key = (typ * int option) module With_collection = struct module OptIntInfo = struct - let module_name = String.capitalize_ascii "Builtin.Memset.OptInt.Datatype" + let module_name = String.capitalize_ascii "Instantiate.Memset.OptInt.Datatype" end module OptInt = Datatype.Option_with_collections (Datatype.Int)(OptIntInfo) module MemsetKeyInfo = struct - let module_name = String.capitalize_ascii "Builtin.Memset.Key.Datatype" + let module_name = String.capitalize_ascii "Instantiate.Memset.Key.Datatype" end include Datatype.Pair_with_collections (Cil_datatype.Typ) (OptInt) (MemsetKeyInfo) @@ -203,7 +203,7 @@ let key_from_call _ret = function (type_from_arg ptr), None | [ ptr ; value ; _ ] when not (is_union_type (type_from_arg ptr)) -> (type_from_arg ptr), (memset_value value) - | _ -> failwith "Call to Memset.key_from_call on an ill-typed builtin call" + | _ -> failwith "Call to Memset.key_from_call on an ill-typed call" let char_prototype t = assert (any_char_composed_type t) ; @@ -232,7 +232,7 @@ let generate_prototype = function let fun_type = non_char_prototype t in name, fun_type | _, _ -> - failwith "Call to Memset.generate_prototype on an ill-typed builtin call" + failwith "Call to Memset.generate_prototype on an ill-typed call" let retype_args (t, e) args = match e, args with @@ -248,7 +248,7 @@ let retype_args (t, e) args = assert (match memset_value v with Some x when x = fv -> true | _ -> false) ; [ ptr ; n ] | _ -> - failwith "Call to Memset.retype_args on an ill-typed builtin call" + failwith "Call to Memset.retype_args on an ill-typed call" let args_for_original (_t , e) args = match e with diff --git a/src/plugins/builtin/string/memset.mli b/src/plugins/instantiate/string/memset.mli similarity index 100% rename from src/plugins/builtin/string/memset.mli rename to src/plugins/instantiate/string/memset.mli diff --git a/src/plugins/builtin/tests/api/external_builtin_registration.c b/src/plugins/instantiate/tests/api/external_instantiator_registration.c similarity index 53% rename from src/plugins/builtin/tests/api/external_builtin_registration.c rename to src/plugins/instantiate/tests/api/external_instantiator_registration.c index d74dd0fcee3..e7366b98169 100644 --- a/src/plugins/builtin/tests/api/external_builtin_registration.c +++ b/src/plugins/instantiate/tests/api/external_instantiator_registration.c @@ -1,5 +1,5 @@ /* run.config - OPT: -load-script tests/api/external_builtin_registration.ml -builtin -check -print + OPT: -load-script tests/api/external_instantiator_registration.ml -instantiate -check -print */ void mine(void* parameter) ; @@ -10,4 +10,4 @@ void foo(void){ mine(i); mine(f); -} \ No newline at end of file +} diff --git a/src/plugins/builtin/tests/api/external_builtin_registration.ml b/src/plugins/instantiate/tests/api/external_instantiator_registration.ml similarity index 95% rename from src/plugins/builtin/tests/api/external_builtin_registration.ml rename to src/plugins/instantiate/tests/api/external_instantiator_registration.ml index b69388b5e95..b800bd1efbd 100644 --- a/src/plugins/builtin/tests/api/external_builtin_registration.ml +++ b/src/plugins/instantiate/tests/api/external_instantiator_registration.ml @@ -35,7 +35,7 @@ let generate_spec _ _ _ = Cil.empty_funspec () let args_for_original _ x = x -let () = Builtin.Transform.register (module struct +let () = Instantiate.Transform.register (module struct module Hashtbl = Cil_datatype.Typ.Hashtbl type override_key = Hashtbl.key @@ -46,4 +46,4 @@ let () = Builtin.Transform.register (module struct let generate_prototype = generate_prototype let generate_spec = generate_spec let args_for_original = args_for_original - end) \ No newline at end of file + end) diff --git a/src/plugins/builtin/tests/api/oracle/external_builtin_registration.res.oracle b/src/plugins/instantiate/tests/api/oracle/external_instantiator_registration.res.oracle similarity index 75% rename from src/plugins/builtin/tests/api/oracle/external_builtin_registration.res.oracle rename to src/plugins/instantiate/tests/api/oracle/external_instantiator_registration.res.oracle index aca41b9d574..c4fceec9316 100644 --- a/src/plugins/builtin/tests/api/oracle/external_builtin_registration.res.oracle +++ b/src/plugins/instantiate/tests/api/oracle/external_instantiator_registration.res.oracle @@ -1,4 +1,4 @@ -[kernel] Parsing tests/api/external_builtin_registration.c (with preprocessing) +[kernel] Parsing tests/api/external_instantiator_registration.c (with preprocessing) /* Generated by Frama-C */ void mine(void *parameter); diff --git a/src/plugins/builtin/tests/options/ignore-functions.c b/src/plugins/instantiate/tests/options/ignore-functions.c similarity index 87% rename from src/plugins/builtin/tests/options/ignore-functions.c rename to src/plugins/instantiate/tests/options/ignore-functions.c index 5cec9a3a2ee..3edee39dd08 100644 --- a/src/plugins/builtin/tests/options/ignore-functions.c +++ b/src/plugins/instantiate/tests/options/ignore-functions.c @@ -1,5 +1,5 @@ /* run.config - STDOPT: +"-builtin-fct=@all,-foo" + STDOPT: +"-instantiate-fct=@all,-foo" */ #include <string.h> @@ -20,4 +20,4 @@ void baz(){ int src[10] = {0} ; int dest[10] ; memcpy(dest, src, sizeof(src)) ; -} \ No newline at end of file +} diff --git a/src/plugins/builtin/tests/options/ignore-builtin.c b/src/plugins/instantiate/tests/options/ignore-instantiator.c similarity index 80% rename from src/plugins/builtin/tests/options/ignore-builtin.c rename to src/plugins/instantiate/tests/options/ignore-instantiator.c index e9312d8ec98..7c883eb2911 100644 --- a/src/plugins/builtin/tests/options/ignore-builtin.c +++ b/src/plugins/instantiate/tests/options/ignore-instantiator.c @@ -1,5 +1,5 @@ /* run.config - STDOPT:+"-builtin-no-memcpy" + STDOPT:+"-instantiate-no-memcpy" */ #include <string.h> @@ -9,4 +9,4 @@ void foo(){ int dest[10] ; memset(src, 0, sizeof(src)) ; memcpy(dest, src, sizeof(src)) ; -} \ No newline at end of file +} diff --git a/src/plugins/builtin/tests/options/only-functions.c b/src/plugins/instantiate/tests/options/only-functions.c similarity index 89% rename from src/plugins/builtin/tests/options/only-functions.c rename to src/plugins/instantiate/tests/options/only-functions.c index 9ad8836a67a..c92cc19b766 100644 --- a/src/plugins/builtin/tests/options/only-functions.c +++ b/src/plugins/instantiate/tests/options/only-functions.c @@ -1,5 +1,5 @@ /* run.config - STDOPT: +"-builtin-fct=foo" + STDOPT: +"-instantiate-fct=foo" */ #include <string.h> @@ -20,4 +20,4 @@ void baz(){ int src[10] = {0} ; int dest[10] ; memcpy(dest, src, sizeof(src)) ; -} \ No newline at end of file +} diff --git a/src/plugins/builtin/tests/options/oracle/ignore-functions.res.oracle b/src/plugins/instantiate/tests/options/oracle/ignore-functions.res.oracle similarity index 100% rename from src/plugins/builtin/tests/options/oracle/ignore-functions.res.oracle rename to src/plugins/instantiate/tests/options/oracle/ignore-functions.res.oracle diff --git a/src/plugins/builtin/tests/options/oracle/ignore-builtin.res.oracle b/src/plugins/instantiate/tests/options/oracle/ignore-instantiator.res.oracle similarity index 91% rename from src/plugins/builtin/tests/options/oracle/ignore-builtin.res.oracle rename to src/plugins/instantiate/tests/options/oracle/ignore-instantiator.res.oracle index 69cf5e09ef7..3c17c3dc05f 100644 --- a/src/plugins/builtin/tests/options/oracle/ignore-builtin.res.oracle +++ b/src/plugins/instantiate/tests/options/oracle/ignore-instantiator.res.oracle @@ -1,4 +1,4 @@ -[kernel] Parsing tests/options/ignore-builtin.c (with preprocessing) +[kernel] Parsing tests/options/ignore-instantiator.c (with preprocessing) /* Generated by Frama-C */ #include "stddef.h" #include "string.h" diff --git a/src/plugins/builtin/tests/options/oracle/only-functions.res.oracle b/src/plugins/instantiate/tests/options/oracle/only-functions.res.oracle similarity index 100% rename from src/plugins/builtin/tests/options/oracle/only-functions.res.oracle rename to src/plugins/instantiate/tests/options/oracle/only-functions.res.oracle diff --git a/src/plugins/instantiate/tests/options/test_config b/src/plugins/instantiate/tests/options/test_config new file mode 100644 index 00000000000..01d3ae76752 --- /dev/null +++ b/src/plugins/instantiate/tests/options/test_config @@ -0,0 +1 @@ +OPT: @PTEST_FILE@ -instantiate -print \ No newline at end of file diff --git a/src/plugins/builtin/tests/stdlib/calloc.c b/src/plugins/instantiate/tests/stdlib/calloc.c similarity index 100% rename from src/plugins/builtin/tests/stdlib/calloc.c rename to src/plugins/instantiate/tests/stdlib/calloc.c diff --git a/src/plugins/builtin/tests/stdlib/free.c b/src/plugins/instantiate/tests/stdlib/free.c similarity index 100% rename from src/plugins/builtin/tests/stdlib/free.c rename to src/plugins/instantiate/tests/stdlib/free.c diff --git a/src/plugins/builtin/tests/stdlib/malloc.c b/src/plugins/instantiate/tests/stdlib/malloc.c similarity index 100% rename from src/plugins/builtin/tests/stdlib/malloc.c rename to src/plugins/instantiate/tests/stdlib/malloc.c diff --git a/src/plugins/builtin/tests/stdlib/oracle/calloc.res.oracle b/src/plugins/instantiate/tests/stdlib/oracle/calloc.res.oracle similarity index 99% rename from src/plugins/builtin/tests/stdlib/oracle/calloc.res.oracle rename to src/plugins/instantiate/tests/stdlib/oracle/calloc.res.oracle index aad87a80a21..5fb370ab29a 100644 --- a/src/plugins/builtin/tests/stdlib/oracle/calloc.res.oracle +++ b/src/plugins/instantiate/tests/stdlib/oracle/calloc.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing tests/stdlib/calloc.c (with preprocessing) -[builtin] tests/stdlib/calloc.c:21: Warning: Ignore call: not well typed +[instantiate] tests/stdlib/calloc.c:21: Warning: Ignore call: not well typed /* Generated by Frama-C */ #include "stdlib.h" struct X { diff --git a/src/plugins/builtin/tests/stdlib/oracle/free.res.oracle b/src/plugins/instantiate/tests/stdlib/oracle/free.res.oracle similarity index 98% rename from src/plugins/builtin/tests/stdlib/oracle/free.res.oracle rename to src/plugins/instantiate/tests/stdlib/oracle/free.res.oracle index 830b23cefbf..1e764fcd7c6 100644 --- a/src/plugins/builtin/tests/stdlib/oracle/free.res.oracle +++ b/src/plugins/instantiate/tests/stdlib/oracle/free.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing tests/stdlib/free.c (with preprocessing) -[builtin] tests/stdlib/free.c:13: Warning: Ignore call: not well typed +[instantiate] tests/stdlib/free.c:13: Warning: Ignore call: not well typed /* Generated by Frama-C */ #include "stdlib.h" /*@ requires freeable: ptr ≡ \null ∨ \freeable(ptr); diff --git a/src/plugins/builtin/tests/stdlib/oracle/malloc.res.oracle b/src/plugins/instantiate/tests/stdlib/oracle/malloc.res.oracle similarity index 99% rename from src/plugins/builtin/tests/stdlib/oracle/malloc.res.oracle rename to src/plugins/instantiate/tests/stdlib/oracle/malloc.res.oracle index a43a99fddf6..feb0c41909d 100644 --- a/src/plugins/builtin/tests/stdlib/oracle/malloc.res.oracle +++ b/src/plugins/instantiate/tests/stdlib/oracle/malloc.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing tests/stdlib/malloc.c (with preprocessing) -[builtin] tests/stdlib/malloc.c:21: Warning: Ignore call: not well typed +[instantiate] tests/stdlib/malloc.c:21: Warning: Ignore call: not well typed /* Generated by Frama-C */ #include "stdlib.h" struct X { diff --git a/src/plugins/instantiate/tests/stdlib/test_config b/src/plugins/instantiate/tests/stdlib/test_config new file mode 100644 index 00000000000..dba5b7b5f4a --- /dev/null +++ b/src/plugins/instantiate/tests/stdlib/test_config @@ -0,0 +1 @@ +OPT: @PTEST_FILE@ -instantiate -print -check -then -ocode @PTEST_DIR@/result/@PTEST_NAME@.c -print -then -no-instantiate @PTEST_DIR@/result/@PTEST_NAME@.c @PTEST_FILE@ -ocode="" -print \ No newline at end of file diff --git a/src/plugins/builtin/tests/string/memcmp.c b/src/plugins/instantiate/tests/string/memcmp.c similarity index 100% rename from src/plugins/builtin/tests/string/memcmp.c rename to src/plugins/instantiate/tests/string/memcmp.c diff --git a/src/plugins/builtin/tests/string/memcpy.c b/src/plugins/instantiate/tests/string/memcpy.c similarity index 100% rename from src/plugins/builtin/tests/string/memcpy.c rename to src/plugins/instantiate/tests/string/memcpy.c diff --git a/src/plugins/builtin/tests/string/memmove.c b/src/plugins/instantiate/tests/string/memmove.c similarity index 100% rename from src/plugins/builtin/tests/string/memmove.c rename to src/plugins/instantiate/tests/string/memmove.c diff --git a/src/plugins/builtin/tests/string/memset_0.c b/src/plugins/instantiate/tests/string/memset_0.c similarity index 100% rename from src/plugins/builtin/tests/string/memset_0.c rename to src/plugins/instantiate/tests/string/memset_0.c diff --git a/src/plugins/builtin/tests/string/memset_FF.c b/src/plugins/instantiate/tests/string/memset_FF.c similarity index 100% rename from src/plugins/builtin/tests/string/memset_FF.c rename to src/plugins/instantiate/tests/string/memset_FF.c diff --git a/src/plugins/builtin/tests/string/memset_value.c b/src/plugins/instantiate/tests/string/memset_value.c similarity index 100% rename from src/plugins/builtin/tests/string/memset_value.c rename to src/plugins/instantiate/tests/string/memset_value.c diff --git a/src/plugins/builtin/tests/string/oracle/memcmp.res.oracle b/src/plugins/instantiate/tests/string/oracle/memcmp.res.oracle similarity index 99% rename from src/plugins/builtin/tests/string/oracle/memcmp.res.oracle rename to src/plugins/instantiate/tests/string/oracle/memcmp.res.oracle index 83f1e8a4fba..9a3d0e63811 100644 --- a/src/plugins/builtin/tests/string/oracle/memcmp.res.oracle +++ b/src/plugins/instantiate/tests/string/oracle/memcmp.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing tests/string/memcmp.c (with preprocessing) -[builtin] tests/string/memcmp.c:31: Warning: Ignore call: not well typed +[instantiate] tests/string/memcmp.c:31: Warning: Ignore call: not well typed /* Generated by Frama-C */ #include "stddef.h" #include "string.h" diff --git a/src/plugins/builtin/tests/string/oracle/memcpy.res.oracle b/src/plugins/instantiate/tests/string/oracle/memcpy.res.oracle similarity index 98% rename from src/plugins/builtin/tests/string/oracle/memcpy.res.oracle rename to src/plugins/instantiate/tests/string/oracle/memcpy.res.oracle index 5a9013b038d..63bd23cf23c 100644 --- a/src/plugins/builtin/tests/string/oracle/memcpy.res.oracle +++ b/src/plugins/instantiate/tests/string/oracle/memcpy.res.oracle @@ -1,6 +1,6 @@ [kernel] Parsing tests/string/memcpy.c (with preprocessing) -[builtin] tests/string/memcpy.c:36: Warning: Ignore call: not well typed -[builtin] tests/string/memcpy.c:37: Warning: Ignore call: not well typed +[instantiate] tests/string/memcpy.c:36: Warning: Ignore call: not well typed +[instantiate] tests/string/memcpy.c:37: Warning: Ignore call: not well typed /* Generated by Frama-C */ #include "stddef.h" #include "string.h" diff --git a/src/plugins/builtin/tests/string/oracle/memmove.res.oracle b/src/plugins/instantiate/tests/string/oracle/memmove.res.oracle similarity index 98% rename from src/plugins/builtin/tests/string/oracle/memmove.res.oracle rename to src/plugins/instantiate/tests/string/oracle/memmove.res.oracle index 193a3f96dbc..6023a30c6bf 100644 --- a/src/plugins/builtin/tests/string/oracle/memmove.res.oracle +++ b/src/plugins/instantiate/tests/string/oracle/memmove.res.oracle @@ -1,6 +1,6 @@ [kernel] Parsing tests/string/memmove.c (with preprocessing) -[builtin] tests/string/memmove.c:36: Warning: Ignore call: not well typed -[builtin] tests/string/memmove.c:37: Warning: Ignore call: not well typed +[instantiate] tests/string/memmove.c:36: Warning: Ignore call: not well typed +[instantiate] tests/string/memmove.c:37: Warning: Ignore call: not well typed /* Generated by Frama-C */ #include "stddef.h" #include "string.h" diff --git a/src/plugins/builtin/tests/string/oracle/memset_0.res.oracle b/src/plugins/instantiate/tests/string/oracle/memset_0.res.oracle similarity index 98% rename from src/plugins/builtin/tests/string/oracle/memset_0.res.oracle rename to src/plugins/instantiate/tests/string/oracle/memset_0.res.oracle index 84e0ba0e23d..8936d80df52 100644 --- a/src/plugins/builtin/tests/string/oracle/memset_0.res.oracle +++ b/src/plugins/instantiate/tests/string/oracle/memset_0.res.oracle @@ -1,6 +1,6 @@ [kernel] Parsing tests/string/memset_0.c (with preprocessing) -[builtin] tests/string/memset_0.c:56: Warning: Ignore call: not well typed -[builtin] tests/string/memset_0.c:57: Warning: Ignore call: not well typed +[instantiate] tests/string/memset_0.c:56: Warning: Ignore call: not well typed +[instantiate] tests/string/memset_0.c:57: Warning: Ignore call: not well typed /* Generated by Frama-C */ #include "stddef.h" #include "string.h" diff --git a/src/plugins/builtin/tests/string/oracle/memset_FF.res.oracle b/src/plugins/instantiate/tests/string/oracle/memset_FF.res.oracle similarity index 99% rename from src/plugins/builtin/tests/string/oracle/memset_FF.res.oracle rename to src/plugins/instantiate/tests/string/oracle/memset_FF.res.oracle index e45698fc0a3..c64a99baf96 100644 --- a/src/plugins/builtin/tests/string/oracle/memset_FF.res.oracle +++ b/src/plugins/instantiate/tests/string/oracle/memset_FF.res.oracle @@ -1,6 +1,6 @@ [kernel] Parsing tests/string/memset_FF.c (with preprocessing) -[builtin] tests/string/memset_FF.c:82: Warning: Ignore call: not well typed -[builtin] tests/string/memset_FF.c:83: Warning: Ignore call: not well typed +[instantiate] tests/string/memset_FF.c:82: Warning: Ignore call: not well typed +[instantiate] tests/string/memset_FF.c:83: Warning: Ignore call: not well typed /* Generated by Frama-C */ #include "stddef.h" #include "string.h" diff --git a/src/plugins/builtin/tests/string/oracle/memset_value.res.oracle b/src/plugins/instantiate/tests/string/oracle/memset_value.res.oracle similarity index 89% rename from src/plugins/builtin/tests/string/oracle/memset_value.res.oracle rename to src/plugins/instantiate/tests/string/oracle/memset_value.res.oracle index 50858d41d3c..26ed27864cc 100644 --- a/src/plugins/builtin/tests/string/oracle/memset_value.res.oracle +++ b/src/plugins/instantiate/tests/string/oracle/memset_value.res.oracle @@ -1,16 +1,28 @@ [kernel] Parsing tests/string/memset_value.c (with preprocessing) -[builtin] tests/string/memset_value.c:26: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:27: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:31: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:32: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:36: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:37: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:41: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:42: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:46: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:47: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:51: Warning: Ignore call: not well typed -[builtin] tests/string/memset_value.c:52: Warning: Ignore call: not well typed +[instantiate] tests/string/memset_value.c:26: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:27: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:31: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:32: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:36: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:37: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:41: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:42: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:46: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:47: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:51: Warning: + Ignore call: not well typed +[instantiate] tests/string/memset_value.c:52: Warning: + Ignore call: not well typed /* Generated by Frama-C */ #include "stddef.h" #include "string.h" diff --git a/src/plugins/instantiate/tests/string/test_config b/src/plugins/instantiate/tests/string/test_config new file mode 100644 index 00000000000..dba5b7b5f4a --- /dev/null +++ b/src/plugins/instantiate/tests/string/test_config @@ -0,0 +1 @@ +OPT: @PTEST_FILE@ -instantiate -print -check -then -ocode @PTEST_DIR@/result/@PTEST_NAME@.c -print -then -no-instantiate @PTEST_DIR@/result/@PTEST_NAME@.c @PTEST_FILE@ -ocode="" -print \ No newline at end of file diff --git a/src/plugins/builtin/transform.ml b/src/plugins/instantiate/transform.ml similarity index 79% rename from src/plugins/builtin/transform.ml rename to src/plugins/instantiate/transform.ml index acb0ac63b60..797f1ac1bae 100644 --- a/src/plugins/builtin/transform.ml +++ b/src/plugins/instantiate/transform.ml @@ -21,24 +21,24 @@ (**************************************************************************) open Cil_types -open Builtin_builder +open Instantiator_builder -let base : (string, (module Builtin)) Hashtbl.t = Hashtbl.create 17 +let base : (string, (module Instantiator)) Hashtbl.t = Hashtbl.create 17 let register (module G: Generator_sig) = - let module Builtin = Make_builtin(G) in - Hashtbl.add base G.function_name (module Builtin) + let module Instantiator = Make_instantiator(G) in + Hashtbl.add base G.function_name (module Instantiator) let mark_as_computed () = - let mark_as_computed _ builtin = - let module B = (val builtin: Builtin) in B.mark_as_computed () + let mark_as_computed _ instantiator = + let module I = (val instantiator: Instantiator) in I.mark_as_computed () in Hashtbl.iter mark_as_computed base let get_kfs () = - let get_kfs _ builtin = - let module B = (val builtin: Builtin) in - let res = B.get_kfs () in + let get_kfs _ instantiator = + let module I = (val instantiator: Instantiator) in + let res = I.get_kfs () in res in Hashtbl.fold (fun k v l -> (get_kfs k v) @ l) base [] @@ -48,8 +48,8 @@ module VISet = Cil_datatype.Varinfo.Hptset class transformer = object(self) inherit Visitor.frama_c_inplace - val introduced_builtins = ref VISet.empty - val used_builtin_last_kf = Queue.create () + val introduced_instantiators = ref VISet.empty + val used_instantiator_last_kf = Queue.create () method! vfile _ = let post f = @@ -64,13 +64,13 @@ class transformer = object(self) let post g = let loc = Cil.CurrentLoc.get() in let folding l fd = - if VISet.mem fd.svar !introduced_builtins then l + if VISet.mem fd.svar !introduced_instantiators then l else begin - introduced_builtins := VISet.add fd.svar !introduced_builtins ; + introduced_instantiators := VISet.add fd.svar !introduced_instantiators ; GFun (fd, loc) :: l end in - Queue.fold folding g used_builtin_last_kf + Queue.fold folding g used_instantiator_last_kf in Cil.DoChildrenPost post @@ -81,20 +81,20 @@ class transformer = object(self) else Cil.SkipChildren - method private find_enabled_builtin fct = - let builtin = Hashtbl.find base fct.vname in - let module B = (val builtin: Builtin) in - if not (B.Enabled.get ()) then raise Not_found ; - builtin + method private find_enabled_instantiator fct = + let instantiator = Hashtbl.find base fct.vname in + let module I = (val instantiator: Instantiator) in + if not (I.Enabled.get ()) then raise Not_found ; + instantiator method private replace_call (lval, fct, args) = try - let module B = (val (self#find_enabled_builtin fct): Builtin) in - if B.well_typed_call lval args then - let key = B.key_from_call lval args in - let fundec = B.get_override key in - let new_args = B.retype_args key args in - Queue.add fundec used_builtin_last_kf ; + let module I = (val (self#find_enabled_instantiator fct): Instantiator) in + if I.well_typed_call lval args then + let key = I.key_from_call lval args in + let fundec = I.get_override key in + let new_args = I.retype_args key args in + Queue.add fundec used_instantiator_last_kf ; (fundec.svar), new_args else begin Options.warning ~current:true "Ignore call: not well typed" ; diff --git a/src/plugins/builtin/transform.mli b/src/plugins/instantiate/transform.mli similarity index 86% rename from src/plugins/builtin/transform.mli rename to src/plugins/instantiate/transform.mli index 72800ee3426..bd924473c5d 100644 --- a/src/plugins/builtin/transform.mli +++ b/src/plugins/instantiate/transform.mli @@ -22,14 +22,13 @@ (** Module for AST transformation *) -(** Registers a new [Builtin] to the visitor from the [Generator_sig] module - of this builtin. Each new builtin function generator should call this - globally. +(** Registers a new [Instantiator] to the visitor from the [Generator_sig] + module. Each new instantiator generator should call this globally. *) -val register: (module Builtin_builder.Generator_sig) -> unit +val register: (module Instantiator_builder.Generator_sig) -> unit (** In all selected functions of the given file, for all function call, if there - exists a builtin module for this function, and the call is well-typed, + exists a instantiator module for this function, and the call is well-typed, replaces it with a call to the generated override function and inserted the generated function in the AST. *) -- GitLab