From 9b68391bc40e29ab1149fb1d5c5ff371deb76ac4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Fri, 4 Sep 2020 16:34:15 +0200
Subject: [PATCH] [Eva] Removes state_import.ml and options
 -eva-[save|load]-fun-state.

---
 Makefile                                      |   1 -
 src/plugins/value/engine/compute_functions.ml |   7 +-
 src/plugins/value/register.ml                 |   3 +-
 src/plugins/value/utils/state_import.ml       | 308 --------
 src/plugins/value/utils/state_import.mli      |  43 -
 src/plugins/value/value_parameters.ml         |  93 ---
 src/plugins/value/value_parameters.mli        |   9 -
 tests/builtins/Longinit_sequencer.i           |   4 -
 tests/builtins/Longinit_sequencer.ml          |  67 --
 .../oracle/Longinit_sequencer.res.oracle      | 733 ------------------
 10 files changed, 3 insertions(+), 1265 deletions(-)
 delete mode 100644 src/plugins/value/utils/state_import.ml
 delete mode 100644 src/plugins/value/utils/state_import.mli
 delete mode 100644 tests/builtins/Longinit_sequencer.i
 delete mode 100644 tests/builtins/Longinit_sequencer.ml
 delete mode 100644 tests/builtins/oracle/Longinit_sequencer.res.oracle

diff --git a/Makefile b/Makefile
index 7f7d6c9d995..31c65947753 100644
--- a/Makefile
+++ b/Makefile
@@ -899,7 +899,6 @@ PLUGIN_CMO:= partitioning/split_strategy domains/domain_mode value_parameters \
 	domains/cvalue/builtins_watchpoint \
 	domains/cvalue/builtins_float domains/cvalue/builtins_split \
 	domains/inout_domain \
-	utils/state_import \
 	legacy/eval_terms legacy/eval_annots \
 	domains/powerset engine/transfer_logic \
 	domains/cvalue/cvalue_transfer domains/cvalue/cvalue_init \
diff --git a/src/plugins/value/engine/compute_functions.ml b/src/plugins/value/engine/compute_functions.ml
index 6fbf9dbd503..e7d1b0f5a42 100644
--- a/src/plugins/value/engine/compute_functions.ml
+++ b/src/plugins/value/engine/compute_functions.ml
@@ -91,12 +91,9 @@ let post_analysis_cleanup ~aborted =
   if Value_parameters.JoinResults.get () then
     Db.Value.Table_By_Callstack.iter
       (fun s _ -> ignore (Db.Value.get_stmt_state s));
-  if not aborted then begin
+  if not aborted then
     (* Keep memexec results for users that want to resume the analysis *)
-    Mem_exec.cleanup_results ();
-    if not (Value_parameters.SaveFunctionState.is_empty ()) then
-      State_import.save_globals_state ();
-  end
+    Mem_exec.cleanup_results ()
 
 let post_analysis () =
   (* Garbled mix must be dumped here -- at least before the call to
diff --git a/src/plugins/value/register.ml b/src/plugins/value/register.ml
index 1a396420b8e..00dc42fad17 100644
--- a/src/plugins/value/register.ml
+++ b/src/plugins/value/register.ml
@@ -138,8 +138,7 @@ let use_spec_instead_of_definition kf =
   not (Kernel_function.is_definition kf) ||
   Ast_info.is_frama_c_builtin (Kernel_function.get_name kf) ||
   Builtins.is_builtin_overridden kf ||
-  Kernel_function.Set.mem kf (Value_parameters.UsePrototype.get ()) ||
-  Value_parameters.LoadFunctionState.mem kf
+  Kernel_function.Set.mem kf (Value_parameters.UsePrototype.get ())
 
 let eval_predicate ~pre ~here p =
   let open Eval_terms in
diff --git a/src/plugins/value/utils/state_import.ml b/src/plugins/value/utils/state_import.ml
deleted file mode 100644
index f20c361e991..00000000000
--- a/src/plugins/value/utils/state_import.ml
+++ /dev/null
@@ -1,308 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  This file is part of Frama-C.                                         *)
-(*                                                                        *)
-(*  Copyright (C) 2007-2020                                               *)
-(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
-(*         alternatives)                                                  *)
-(*                                                                        *)
-(*  you can redistribute it and/or modify it under the terms of the GNU   *)
-(*  Lesser General Public License as published by the Free Software       *)
-(*  Foundation, version 2.1.                                              *)
-(*                                                                        *)
-(*  It is distributed in the hope that it will be useful,                 *)
-(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
-(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
-(*  GNU Lesser General Public License for more details.                   *)
-(*                                                                        *)
-(*  See the GNU Lesser General Public License version 2.1                 *)
-(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Cvalue
-open Cil_types
-
-let dkey = Value_parameters.register_category "restart"
-
-let base_cache : (int, Base.t) Hashtbl.t = Hashtbl.create 41
-let v_cache = V.Hashtbl.create 53
-
-(* Used to identify and remove escaping values from globals *)
-exception Possibly_escaping_value
-
-let import_varinfo (vi : varinfo) ~importing_value =
-  try
-    if Cil.isFunctionType vi.vtype then
-      let kf = Globals.Functions.find_by_name vi.vname in
-      Kernel_function.get_vi kf
-    else begin
-      let vi' = Globals.Vars.find_from_astinfo vi.vname VGlobal in
-      if vi.vstorage = Static then
-        Value_parameters.warning ~once:true
-          "loaded state contains static variables;@ AST ordering@ \
-           cannot be enforced and must be manually checked for soundness@ \
-           (e.g. ensure that files are processed in the same order)";
-      vi'
-    end
-  with Not_found ->
-    (* search in the state *)
-    if importing_value then begin
-      (* Variable may be an escaping local value *)
-      Value_parameters.warning "variable `%a' is not global, \
-                                possibly an escaping value; ignoring"
-        Printer.pp_varinfo vi;
-      raise Possibly_escaping_value
-    end else
-      Value_parameters.abort "global not found: `%a'"
-        Printer.pp_varinfo vi
-
-let import_validity = function
-  | Base.Empty | Base.Known _ | Base.Unknown _ | Base.Invalid as v -> v
-  | Base.Variable { Base.weak; min_alloc; max_alloc; max_allocable } ->
-    let var = Base.create_variable_validity ~weak ~min_alloc ~max_alloc in
-    if Integer.equal max_allocable var.Base.max_allocable then
-      Base.Variable var
-    else Kernel.abort "Incompatible maximum size for variable %a vs. %a"
-        Abstract_interp.Int.pretty max_allocable
-        Abstract_interp.Int.pretty var.Base.max_allocable
-
-let import_base (base : Base.t) ~importing_value =
-  let make_base = function
-    | Base.Var (vi, _validity) ->
-      Base.of_varinfo (import_varinfo vi ~importing_value)
-    | Base.CLogic_Var (lv, _ty, _validity) ->
-      (* Value states do not contain logic variables anyway
-         (except when evaluating ACSL clauses, which is not the case here *)
-      Value_parameters.fatal "importing logic variables (%a) is unsupported"
-        Printer.pp_logic_var lv
-    | Base.Null -> Base.null
-    | Base.String (_, s) ->
-      (* TODO: currently, we recreate a new string unrelated to the original
-         one. This is probably not the good solution *)
-      let c = match s with
-        | Base.CSString s -> Const (CStr s)
-        | Base.CSWstring s -> Const (CWStr s)
-      in
-      let e = Cil.new_exp Cil_datatype.Location.unknown c in
-      Base.of_string_exp e
-    | Base.Allocated (vi, deallocation, validity) ->
-      Value_parameters.feedback ~dkey "recreating allocated base for alloc: `%a'"
-        Printer.pp_varinfo vi;
-      let new_vi = Value_util.create_new_var vi.vname vi.vtype in
-      let validity = import_validity validity in
-      let new_base = Base.register_allocated_var new_vi deallocation validity in
-      Builtins_malloc.register_malloced_base new_base;
-      new_base
-  in
-  let id = Base.id base in
-  try
-    let res = Hashtbl.find base_cache id in
-    res
-  with Not_found ->
-    let base' = make_base base in
-    Hashtbl.replace base_cache id base';
-    base'
-
-let import_base_setlattice (sl : Base.SetLattice.t) ~importing_value =
-  Base.SetLattice.fold (fun base acc ->
-      let b' = import_base base ~importing_value in
-      Base.Hptset.add b' acc
-    ) sl Base.Hptset.empty
-
-let import_ival = Ival.rehash
-
-let import_map (m : Cvalue.V.M.t) =
-  let add base ival m =
-    let new_base = import_base base ~importing_value:true in
-    let new_ival = import_ival ival in
-    Cvalue.V.add new_base new_ival m
-  in
-  Cvalue.V.M.fold add m Cvalue.V.bottom
-
-let import_v (v : Cvalue.V.t) =
-  match v with
-  | Cvalue.V.Top (sl, o) ->
-    Value_parameters.warning ~once:true
-      "importing garbled mix, locations may have changed";
-    (*let o' = import_origin o in*)
-    let s = import_base_setlattice sl ~importing_value:true in
-    Cvalue.V.inject_top_origin o s
-  | Cvalue.V.Map m ->
-    import_map m
-
-let import_v_or_uninit (vu : Cvalue.V_Or_Uninitialized.t) =
-  let find v =
-    try
-      let res = V.Hashtbl.find v_cache v in
-      res
-    with Not_found ->
-      let v' = import_v v
-      in
-      V.Hashtbl.replace v_cache v v';
-      v'
-  in
-  try
-    V_Or_Uninitialized.map find vu
-  with Possibly_escaping_value ->
-    (* replace variable with ESCAPINGADDR *)
-    Cvalue.V_Or_Uninitialized.C_init_esc V.bottom
-
-let import_offsetmap (offsetmap : V_Offsetmap.t) =
-  V_Offsetmap.map_on_values import_v_or_uninit offsetmap
-
-let import_model (state : Model.t) =
-  match state with
-  | Model.Bottom -> Model.bottom
-  | Model.Top -> Model.top
-  | Model.Map map ->
-    let add base offsetmap map =
-      let new_offsetmap = import_offsetmap offsetmap in
-      let new_base = import_base base ~importing_value:false in
-      Model.add_base new_base new_offsetmap map
-    in
-    Model.fold add map Model.empty_map
-
-(*and import_origin (o : Origin.t) =
-  (* the "new" origin location is arbitrary, since no guarantees about the
-     actual location can be given *)
-  let loc = Origin.LocationSetLattice.currentloc_singleton () in
-  match o with
-  | Origin.Misalign_read _ -> Origin.Misalign_read loc
-  | Origin.Leaf _ -> Origin.Leaf loc
-  | Origin.Merge _ -> Origin.Merge loc
-  | Origin.Arith _ -> Origin.Arith loc
-  | Origin.Well | Origin.Unknown -> o*)
-
-let load_globals_from_file filename : Model.t =
-  let ic = open_in_bin filename in
-  let (state : Model.t) = Marshal.from_channel ic in
-  close_in ic;
-  Value_parameters.feedback ~dkey "DE-MARSHALLED STATE (before import):@.%a"
-    Cvalue.Model.pretty state;
-  import_model state
-
-let save_globals_to_file kf state_with_locals filename =
-  Value_parameters.feedback "Saving globals state after call to function: %a"
-    Kernel_function.pretty kf;
-  let state = Model.filter_base Base.is_global state_with_locals in
-  Value_parameters.feedback ~dkey "SAVED STATE:@.%a" Model.pretty state;
-  let oc = open_out_bin filename in
-  Marshal.to_channel oc state [];
-  close_out oc
-
-let load_and_merge_function_state state : Model.t =
-  let (kf, filename) = Value_parameters.get_LoadFunctionState () in
-  Value_parameters.feedback
-    "@[<hov 0>Skipping call to %a,@ loading globals state from file:@ %s@]"
-    Kernel_function.pretty kf filename;
-  let saved_state = load_globals_from_file filename in
-  Value_parameters.debug ~dkey "LOADED STATE:@.%a"
-    Cvalue.Model.pretty saved_state;
-  (* warn about missing globals in the new AST, and add new globals that were
-     not present before *)
-  let saved_map = match saved_state with
-    | Model.Map m -> m
-    | _ -> assert false
-  in
-  let locals =
-    Model.filter_base (fun base -> not (Base.is_global base)) state
-  in
-  let state_without_locals =
-    Model.filter_base (fun base -> Base.is_global base) state
-  in
-  Value_parameters.debug ~dkey "Merging state with locals: %a@."
-    Model.pretty locals;
-  let new_globals =
-    Model.filter_base
-      (fun base ->
-         try
-           let _ = Model.find_base base saved_state in
-           false (* previously existing global *)
-         with
-         | Not_found ->
-           Value_parameters.warning "found new global variable `%a'"
-             Base.pretty base;
-           true (* new global *)
-      ) state_without_locals
-  in
-  let merged_globals_state =
-    Model.fold (fun new_base offsm acc ->
-        Model.add_base new_base offsm acc
-      ) saved_map new_globals
-  in
-  let map_with_globals = match merged_globals_state with
-    | Model.Map m -> m
-    | _ -> Value_parameters.fatal "invalid saved state: %a"
-             Model.pretty saved_state
-  in
-  let merged_globals_and_locals =
-    Model.fold (fun new_base offsm acc ->
-        Model.add_base new_base offsm acc
-      ) map_with_globals locals
-  in
-  merged_globals_and_locals
-
-let save_globals_state () : unit =
-  let (kf, filename) = Value_parameters.get_SaveFunctionState () in
-  let ret_stmt = Kernel_function.find_return kf in
-  try
-    let ret_state = Db.Value.get_stmt_state ret_stmt in
-    match ret_state with
-    | Model.Top ->
-      Value_parameters.abort "cannot save state at return statement of %a \
-                              (too imprecise)" Kernel_function.pretty kf
-    | Model.Bottom ->
-      Value_parameters.abort "cannot save state at return statement of %a \
-                              (bottom)" Kernel_function.pretty kf
-    | Model.Map _ -> save_globals_to_file kf ret_state filename
-  with Not_found ->
-    if Value_parameters.LoadFunctionState.is_set () then
-      let (load_kf, _) = Value_parameters.get_LoadFunctionState () in
-      Value_parameters.abort "could not find saved state for function `%a';@ \
-                              this can happen if it is called from `%a'"
-        Kernel_function.pretty kf Kernel_function.pretty load_kf;
-    else
-      Value_parameters.failure "could not find saved state for function `%a'"
-        Kernel_function.pretty kf
-
-
-exception Warn_local_addresses
-(* visitor used by frama_c_load_state *)
-class locals_visitor = object(_self) inherit Visitor.frama_c_inplace
-  method! vlval (lhost, _) =
-    match lhost with
-    | Var vi ->
-      if not vi.vglob then raise Warn_local_addresses;
-      Cil.DoChildren
-    | Mem _ -> Cil.DoChildren
-end
-
-
-(* Builtin to load a saved analysis state *)
-let frama_c_load_state state actuals =
-  (* Warn if arguments contain pointers to local variables,
-     in which case the loaded state may be unsound. *)
-  begin
-    try
-      List.iter (fun (exp_arg, arg, _) ->
-          let vis = new locals_visitor in
-          if Cil.isPointerType (Cil.typeOf exp_arg) then
-            ignore (Visitor.visitFramacExpr vis exp_arg);
-          if Cvalue.V.contains_addresses_of_any_locals arg then
-            raise Warn_local_addresses
-        ) actuals;
-    with Warn_local_addresses ->
-      Value_parameters.warning ~current:true ~once:true
-        "arguments to loaded function state contain local addresses,@ \
-         possible unsoundness";
-  end;
-  let merged_loaded_state = load_and_merge_function_state state in
-  {
-    Value_types.c_values = [None, merged_loaded_state];
-    c_clobbered = Base.SetLattice.empty;
-    c_cacheable = Value_types.NoCacheCallers;
-    c_from = None
-  }
-
-let () = Builtins.register_builtin "Frama_C_load_state" frama_c_load_state
diff --git a/src/plugins/value/utils/state_import.mli b/src/plugins/value/utils/state_import.mli
deleted file mode 100644
index b1c140858e2..00000000000
--- a/src/plugins/value/utils/state_import.mli
+++ /dev/null
@@ -1,43 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  This file is part of Frama-C.                                         *)
-(*                                                                        *)
-(*  Copyright (C) 2007-2020                                               *)
-(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
-(*         alternatives)                                                  *)
-(*                                                                        *)
-(*  you can redistribute it and/or modify it under the terms of the GNU   *)
-(*  Lesser General Public License as published by the Free Software       *)
-(*  Foundation, version 2.1.                                              *)
-(*                                                                        *)
-(*  It is distributed in the hope that it will be useful,                 *)
-(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
-(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
-(*  GNU Lesser General Public License for more details.                   *)
-(*                                                                        *)
-(*  See the GNU Lesser General Public License version 2.1                 *)
-(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(** Saving/loading of Value states, possibly among different ASTs.
-    Used by the command-line options defined by
-    [Value_parameters.SaveFunctionState] and
-    [Value_parameters.LoadFunctionState].
-    @since Aluminium-20160501 *)
-
-(** Loads the saved initial global state, and merges it with the given state
-    (locals plus new globals which were not present in the original AST).
-    The saved state may come from a different project.
-    Note that, to ensure soundness of the merge, some constraints must be
-    respected according to where the merge takes place.
-    The intended use is to replace costly function calls, in which case
-    the state of local variables should not be modified by the function. *)
-val load_and_merge_function_state: Cvalue.Model.t -> Cvalue.Model.t
-
-(** Saves the final state of globals variables after the return statement of
-    the function defined via [Value_parameters.SaveFunctionState]. The result
-    is saved in the file defined by the same option.
-    The function must have been called exactly once during the value analysis,
-    otherwise the saved state is unspecified. *)
-val save_globals_state: unit -> unit
diff --git a/src/plugins/value/value_parameters.ml b/src/plugins/value/value_parameters.ml
index f3bd9c4baed..97e54167787 100644
--- a/src/plugins/value/value_parameters.ml
+++ b/src/plugins/value/value_parameters.ml
@@ -1035,99 +1035,6 @@ let () = add_precision_dep ArrayPrecisionLevel.parameter
 let () = ArrayPrecisionLevel.add_update_hook
     (fun _ v -> Offsetmap.set_plevel v)
 
-(* Options SaveFunctionState and LoadFunctionState are related
-   and mutually dependent for sanity checking.
-   Also, they depend on BuiltinsOverrides, so they cannot be defined before it. *)
-let () = Parameter_customize.set_group initial_context
-let () = Parameter_customize.is_invisible ()
-module SaveFunctionState =
-  Kernel_function_map
-    (struct
-      include Datatype.String
-      type key = Cil_types.kernel_function
-      let of_string ~key:_ ~prev:_ file = file
-      let to_string ~key:_ file = file
-    end)
-    (struct
-      let option_name = "-eva-save-fun-state"
-      let arg_name = "function:filename"
-      let help = "Experimental. Save state of function <function> in file <filename>"
-      let default = Kernel_function.Map.empty
-    end)
-let () = SaveFunctionState.add_aliases ["-val-save-fun-state"]
-let () = Parameter_customize.set_group initial_context
-let () = Parameter_customize.is_invisible ()
-module LoadFunctionState =
-  Kernel_function_map
-    (struct
-      include Datatype.String
-      type key = Cil_types.kernel_function
-      let of_string ~key:_ ~prev:_ file = file
-      let to_string ~key:_ file = file
-    end)
-    (struct
-      let option_name = "-eva-load-fun-state"
-      let arg_name = "function:filename"
-      let help = "Experimental. Load state of function <function> from file <filename>"
-      let default = Kernel_function.Map.empty
-    end)
-let () = LoadFunctionState.add_aliases ["-val-load-fun-state"]
-let () = add_correctness_dep SaveFunctionState.parameter
-let () = add_correctness_dep LoadFunctionState.parameter
-(* checks that SaveFunctionState has a unique argument pair, and returns it. *)
-let get_SaveFunctionState () =
-  let is_first = ref true in
-  let (kf, filename) = SaveFunctionState.fold
-      (fun (kf, opt_filename) _acc ->
-         if !is_first then is_first := false
-         else abort "option `%s' requires a single function:filename pair"
-             SaveFunctionState.name;
-         let filename = Extlib.the opt_filename in
-         kf, filename
-      ) (Kernel_function.dummy (), "")
-  in
-  if filename = "" then abort "option `%s' requires a function:filename pair"
-      SaveFunctionState.name
-  else kf, filename
-(* checks that LoadFunctionState has a unique argument pair, and returns it. *)
-let get_LoadFunctionState () =
-  let is_first = ref true in
-  let (kf, filename) = LoadFunctionState.fold
-      (fun (kf, opt_filename) _acc ->
-         if !is_first then is_first := false
-         else abort "option `%s' requires a single function:filename pair"
-             LoadFunctionState.name;
-         let filename = Extlib.the opt_filename in
-         kf, filename
-      ) (Kernel_function.dummy (), "")
-  in
-  if filename = "" then abort "option `%s' requires a function:filename pair"
-      LoadFunctionState.name
-  else kf, filename
-(* perform early sanity checks to avoid aborting the analysis only at the end *)
-let () = Ast.apply_after_computed (fun _ ->
-    (* check the function to save returns 'void' *)
-    if SaveFunctionState.is_set () then begin
-      let (kf, _) = get_SaveFunctionState () in
-      if not (Kernel_function.returns_void kf) then
-        abort "option `%s': function `%a' must return void"
-          SaveFunctionState.name Kernel_function.pretty kf
-    end;
-    if SaveFunctionState.is_set () && LoadFunctionState.is_set () then begin
-      (* check that if both save and load are set, they do not specify the
-         same function name (note: cannot compare using function ids) *)
-      let (save_kf, _) = get_SaveFunctionState () in
-      let (load_kf, _) = get_LoadFunctionState () in
-      if Kernel_function.equal save_kf load_kf then
-        abort "options `%s' and `%s' cannot save/load the same function `%a'"
-          SaveFunctionState.name LoadFunctionState.name
-          Kernel_function.pretty save_kf
-    end;
-    if LoadFunctionState.is_set () then
-      let (kf, _) = get_LoadFunctionState () in
-      BuiltinsOverrides.add (kf, Some "Frama_C_load_state");
-  )
-
 (* ------------------------------------------------------------------------- *)
 (* --- Messages                                                          --- *)
 (* ------------------------------------------------------------------------- *)
diff --git a/src/plugins/value/value_parameters.mli b/src/plugins/value/value_parameters.mli
index 8e5d5161ad5..6e126920273 100644
--- a/src/plugins/value/value_parameters.mli
+++ b/src/plugins/value/value_parameters.mli
@@ -91,15 +91,6 @@ module ArrayPrecisionLevel: Parameter_sig.Int
 module AllocatedContextValid: Parameter_sig.Bool
 module InitializationPaddingGlobals: Parameter_sig.String
 
-module SaveFunctionState:
-  Parameter_sig.Map with type key = Cil_types.kernel_function
-                     and type value = string
-module LoadFunctionState:
-  Parameter_sig.Map with type key = Cil_types.kernel_function
-                     and type value = string
-val get_SaveFunctionState : unit -> Cil_types.kernel_function * string
-val get_LoadFunctionState : unit -> Cil_types.kernel_function * string
-
 module Numerors_Real_Size : Parameter_sig.Int
 module Numerors_Mode : Parameter_sig.String
 
diff --git a/tests/builtins/Longinit_sequencer.i b/tests/builtins/Longinit_sequencer.i
deleted file mode 100644
index 919f247cf5d..00000000000
--- a/tests/builtins/Longinit_sequencer.i
+++ /dev/null
@@ -1,4 +0,0 @@
-/* run.config*
-   EXECNOW: make -s @PTEST_DIR@/@PTEST_NAME@.cmxs
-   OPT: @EVA_OPTIONS@ -load-module @PTEST_DIR@/@PTEST_NAME@.cmxs -res-file @PTEST_RESULT@
-*/
diff --git a/tests/builtins/Longinit_sequencer.ml b/tests/builtins/Longinit_sequencer.ml
deleted file mode 100644
index e08e24d518d..00000000000
--- a/tests/builtins/Longinit_sequencer.ml
+++ /dev/null
@@ -1,67 +0,0 @@
-(* Small script to test long_init*.c files, which require one test to run
-   before the other. *)
-
-open Kernel
-
-include Plugin.Register
-(struct
-  let name = "long init testing module"
-  let shortname = "test-long-init"
-  let help = "utility script for tests"
- end)
-
-module Res = String(struct
-    let option_name = "-res-file"
-    let help = ""
-    let arg_name = "file"
-    let default = "result"
-  end)
-
-let ok = ref false
-
-let tmpfile () = Res.get () ^ "/Longinit_sequencer.sav"
-
-let () =
-  at_exit (fun () ->
-    let tmpfile = tmpfile () in
-    if Debug.get () >= 1 || not !ok then
-      result "Keeping temp file %s" tmpfile
-    else
-      try Sys.remove tmpfile with Sys_error _ -> ())
-
-let main () =
-  let tmpfile = tmpfile () in
-  let fmt = Format.std_formatter in
-  let display_results state = Format.fprintf fmt "@[%a@]@\n" !Db.Value.display state in
-  Dynamic.Parameter.String.set "" "tests/builtins/long_init.c";
-  Dynamic.Parameter.String.set "-eva-save-fun-state" ("init_inner:" ^ tmpfile);
-  Dynamic.Parameter.String.set "-eva-alloc-builtin" "fresh";
-  Dynamic.Parameter.Bool.set "-eva-alloc-returns-null" false;
-  Dynamic.Parameter.String.set "-eva-warn-key" "builtins:override=inactive";
-  !Db.Value.compute ();
-  Callgraph.Uses.iter_in_rev_order display_results;
-  Files.clear ();
-  Dynamic.Parameter.String.set "" "tests/builtins/long_init2.c";
-  (* clear and set parameters to the same value to recompute
-     kernel function IDs *)
-  Dynamic.Parameter.String.clear "-eva-save-fun-state" ();
-  Dynamic.Parameter.String.set "-eva-save-fun-state" ("init_outer:" ^ tmpfile);
-  Dynamic.Parameter.String.set "-eva-load-fun-state" ("init_inner:" ^ tmpfile);
-  (* set builtins in a different order to force kernel to recompute
-     kernel function IDs *)
-  Dynamic.Parameter.String.set "-eva-alloc-builtin" "fresh";
-  !Db.Value.compute ();
-  Callgraph.Uses.iter_in_rev_order display_results;
-  Files.clear ();
-  Dynamic.Parameter.String.set "" "tests/builtins/long_init3.c";
-  Dynamic.Parameter.String.clear "-eva-save-fun-state" ();
-  Dynamic.Parameter.String.clear "-eva-load-fun-state" ();
-  Dynamic.Parameter.String.set "-eva-load-fun-state" ("init_outer:" ^ tmpfile);
-  (* set builtins in a different order to force kernel to recompute
-     kernel function IDs *)
-  Dynamic.Parameter.String.set "-eva-alloc-builtin" "fresh";
-  !Db.Value.compute ();
-  Callgraph.Uses.iter_in_rev_order display_results;
-  ok:=true (* no error, we can erase the file *)
-
-let () = Db.Main.extend main
diff --git a/tests/builtins/oracle/Longinit_sequencer.res.oracle b/tests/builtins/oracle/Longinit_sequencer.res.oracle
deleted file mode 100644
index c07049acaa7..00000000000
--- a/tests/builtins/oracle/Longinit_sequencer.res.oracle
+++ /dev/null
@@ -1,733 +0,0 @@
-[kernel] Parsing tests/builtins/Longinit_sequencer.i (no preprocessing)
-[kernel] Parsing tests/builtins/long_init.c (with preprocessing)
-[eva] Analyzing a complete application starting at main
-[eva] Computing initial state
-[eva:alarm] tests/builtins/long_init.c:34: Warning: 
-  pointer downcast. assert (unsigned int)"abc" ≤ 127;
-[eva] Initial state computed
-[eva:initial-state] Values of globals at initialization
-  nondet ∈ [--..--]
-  a1[0..9] ∈ {0}
-  stuff ∈ {0}
-  garbled_mix ∈ {{ "abc" }}
-  s ∈ {{ "abc" }}
-  pr ∈ {0}
-  pr2 ∈ {0}
-  pr_escaping ∈ {0}
-  ppr ∈ {0}
-  alloc1 ∈ {0}
-  alloc2 ∈ {0}
-  alloc3 ∈ {0}
-  fp ∈ {{ &fun }}
-  inited ∈ {0}
-[eva] computing for function init_outer <- main.
-  Called from tests/builtins/long_init.c:90.
-[eva] computing for function init_inner <- init_outer <- main.
-  Called from tests/builtins/long_init.c:85.
-[eva] tests/builtins/long_init.c:61: starting to merge loop iterations
-[eva] computing for function analyze <- init_inner <- init_outer <- main.
-  Called from tests/builtins/long_init.c:68.
-[eva] computing for function subanalyze <- analyze <- init_inner <- init_outer <- 
-                          main.
-  Called from tests/builtins/long_init.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- init_inner <- init_outer <- 
-                          main.
-  Called from tests/builtins/long_init.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- init_inner <- init_outer <- 
-                          main.
-  Called from tests/builtins/long_init.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- init_inner <- init_outer <- 
-                          main.
-  Called from tests/builtins/long_init.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- init_inner <- init_outer <- 
-                          main.
-  Called from tests/builtins/long_init.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] Recording results for analyze
-[eva] Done for function analyze
-[eva] computing for function analyze <- init_inner <- init_outer <- main.
-  Called from tests/builtins/long_init.c:69.
-[eva] tests/builtins/long_init.c:29: Reusing old results for call to subanalyze
-[eva] tests/builtins/long_init.c:29: Reusing old results for call to subanalyze
-[eva] tests/builtins/long_init.c:29: Reusing old results for call to subanalyze
-[eva] tests/builtins/long_init.c:29: Reusing old results for call to subanalyze
-[eva] computing for function subanalyze <- analyze <- init_inner <- init_outer <- 
-                          main.
-  Called from tests/builtins/long_init.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] Recording results for analyze
-[eva] Done for function analyze
-[eva] tests/builtins/long_init.c:73: Call to builtin malloc
-[eva] tests/builtins/long_init.c:73: allocating variable __malloc_init_inner_l73
-[eva:alarm] tests/builtins/long_init.c:74: Warning: 
-  pointer downcast. assert (unsigned int)alloc1 ≤ 2147483647;
-[eva] tests/builtins/long_init.c:75: Call to builtin malloc
-[eva] tests/builtins/long_init.c:75: allocating variable __malloc_init_inner_l75
-[eva] tests/builtins/long_init.c:77: Call to builtin free
-[eva] tests/builtins/long_init.c:77: 
-  function free: precondition 'freeable' got status valid.
-[eva:malloc] tests/builtins/long_init.c:77: 
-  strong free on bases: {__malloc_init_inner_l75}
-[eva] Recording results for init_inner
-[eva] Done for function init_inner
-[eva:locals-escaping] tests/builtins/long_init.c:85: Warning: 
-  locals {r, r2} escaping the scope of init_inner through pr
-[eva:locals-escaping] tests/builtins/long_init.c:85: Warning: 
-  locals {r2} escaping the scope of init_inner through pr2
-[eva:locals-escaping] tests/builtins/long_init.c:85: Warning: 
-  locals {r2} escaping the scope of init_inner through pr_escaping
-[eva] Recording results for init_outer
-[eva] Done for function init_outer
-[eva] tests/builtins/long_init.c:92: 
-  Frama_C_dump_each:
-  # Cvalue domain:
-  __fc_heap_status ∈ [--..--]
-  __fc_random_counter ∈ [--..--]
-  __fc_rand_max ∈ {32767}
-  __fc_random48_init ∈ {0}
-  __fc_random48_counter[0..2] ∈ [--..--]
-  __fc_p_random48_counter ∈ {{ &__fc_random48_counter[0] }}
-  __fc_env[0] ∈ {{ NULL ; &S_0___fc_env[0] }}
-          [1] ∈ {{ NULL ; &S_1___fc_env[0] }}
-          [2..4095] ∈ {{ NULL ; &S_0___fc_env[0] ; &S_1___fc_env[0] }}
-  __fc_mblen_state ∈ [--..--]
-  __fc_mbtowc_state ∈ [--..--]
-  __fc_wctomb_state ∈ [--..--]
-  nondet ∈ [--..--]
-  a1[0] ∈ {0}
-    [1] ∈ {1}
-    [2] ∈ {2}
-    [3] ∈ {3}
-    [4] ∈ {4}
-    [5] ∈ {5}
-    [6] ∈ {6}
-    [7] ∈ {7}
-    [8] ∈ {8}
-    [9] ∈ {9}
-  stuff.t[0..4] ∈ {3}
-       .t[5..9] ∈ {4}
-       .t[10..49] ∈ [0..12]
-       .d[0] ∈ {0}
-       .d[1] ∈ {3.125}
-       .d[2] ∈ {6.25}
-       .d[3] ∈ {9.375}
-       .d[4] ∈ {12.5}
-       .d[5] ∈ {15.625}
-       .d[6] ∈ {18.75}
-       .d[7] ∈ {21.875}
-       .d[8] ∈ {25.}
-       .d[9] ∈ {28.125}
-  garbled_mix ∈ {{ "abc" }}
-  s ∈ {{ "abc" }}
-  pr ∈ ESCAPINGADDR
-  pr2 ∈ ESCAPINGADDR
-  pr_escaping ∈ ESCAPINGADDR
-  ppr ∈ {0}
-  alloc1 ∈ {{ &__malloc_init_inner_l73 }}
-  alloc2 ∈ ESCAPINGADDR
-  alloc3 ∈ {0}
-  fp ∈ {{ &fun }}
-  inited ∈ {1}
-  sa ∈ {{ "abc" }}
-  tmp_2 ∈ UNINITIALIZED
-  __retres ∈ UNINITIALIZED
-  S_0___fc_env[0..1] ∈ [--..--]
-  S_1___fc_env[0..1] ∈ [--..--]
-  __malloc_init_inner_l73 ∈ {{ (int)&__malloc_init_inner_l73 }}
-  ==END OF DUMP==
-[eva] tests/builtins/long_init.c:93: Reusing old results for call to analyze
-[eva] tests/builtins/long_init.c:94: Reusing old results for call to analyze
-[eva] computing for function dmin <- main.
-  Called from tests/builtins/long_init.c:98.
-[eva] Recording results for dmin
-[eva] Done for function dmin
-[eva] computing for function fun <- main.
-  Called from tests/builtins/long_init.c:99.
-[eva] Recording results for fun
-[eva] Done for function fun
-[eva] tests/builtins/long_init.c:103: Call to builtin free
-[eva] tests/builtins/long_init.c:103: 
-  function free: precondition 'freeable' got status valid.
-[eva:malloc] tests/builtins/long_init.c:103: 
-  strong free on bases: {__malloc_init_inner_l73}
-[eva] tests/builtins/long_init.c:104: Call to builtin malloc
-[eva] tests/builtins/long_init.c:104: allocating variable __malloc_main_l104
-[eva] Recording results for main
-[eva] done for function main
-[eva] tests/builtins/long_init.c:34: 
-  cannot evaluate ACSL term, unsupported ACSL construct: constant strings
-[eva] Saving globals state after call to function: init_inner
-Values at end of function dmin:
-  __retres ∈ [93.9166666667 .. 110.791666667]
-
-
-Values at end of function fun:
-  __retres ∈ {32}
-
-
-Values at end of function subanalyze:
-  
-
-Values at end of function analyze:
-  i ∈ {5}
-  res ∈ [93.9166666667 .. 110.791666667]
-
-Values at end of function init_inner:
-  __fc_heap_status ∈ [--..--]
-  a1[0] ∈ {0}
-    [1] ∈ {1}
-    [2] ∈ {2}
-    [3] ∈ {3}
-    [4] ∈ {4}
-    [5] ∈ {5}
-    [6] ∈ {6}
-    [7] ∈ {7}
-    [8] ∈ {8}
-    [9] ∈ {9}
-  stuff.t[0..4] ∈ {3}
-       .t[5..9] ∈ {4}
-       .t[10..49] ∈ [0..12]
-       .d[0] ∈ {0}
-       .d[1] ∈ {3.125}
-       .d[2] ∈ {6.25}
-       .d[3] ∈ {9.375}
-       .d[4] ∈ {12.5}
-       .d[5] ∈ {15.625}
-       .d[6] ∈ {18.75}
-       .d[7] ∈ {21.875}
-       .d[8] ∈ {25.}
-       .d[9] ∈ {28.125}
-  pr ∈ {{ &r ; &r2 }}
-  pr2 ∈ {{ &r2 }}
-  pr_escaping ∈ {{ &r2 }}
-  alloc1 ∈ {{ &__malloc_init_inner_l73 }}
-  alloc2 ∈ ESCAPINGADDR
-  i ∈ {10}
-  r ∈ {93.9166666667}
-  r2 ∈ {110.791666667}
-  __malloc_init_inner_l73 ∈ {{ (int)&__malloc_init_inner_l73 }}
-
-Values at end of function init_outer:
-  __fc_heap_status ∈ [--..--]
-  a1[0] ∈ {0}
-    [1] ∈ {1}
-    [2] ∈ {2}
-    [3] ∈ {3}
-    [4] ∈ {4}
-    [5] ∈ {5}
-    [6] ∈ {6}
-    [7] ∈ {7}
-    [8] ∈ {8}
-    [9] ∈ {9}
-  stuff.t[0..4] ∈ {3}
-       .t[5..9] ∈ {4}
-       .t[10..49] ∈ [0..12]
-       .d[0] ∈ {0}
-       .d[1] ∈ {3.125}
-       .d[2] ∈ {6.25}
-       .d[3] ∈ {9.375}
-       .d[4] ∈ {12.5}
-       .d[5] ∈ {15.625}
-       .d[6] ∈ {18.75}
-       .d[7] ∈ {21.875}
-       .d[8] ∈ {25.}
-       .d[9] ∈ {28.125}
-  pr ∈ ESCAPINGADDR
-  pr2 ∈ ESCAPINGADDR
-  pr_escaping ∈ ESCAPINGADDR
-  alloc1 ∈ {{ &__malloc_init_inner_l73 }}
-  alloc2 ∈ ESCAPINGADDR
-  inited ∈ {1}
-  __malloc_init_inner_l73 ∈ {{ (int)&__malloc_init_inner_l73 }}
-
-Values at end of function main:
-  __fc_heap_status ∈ [--..--]
-  a1[0] ∈ {0}
-    [1] ∈ {1}
-    [2] ∈ {2}
-    [3] ∈ {3}
-    [4] ∈ {4}
-    [5] ∈ {5}
-    [6] ∈ {6}
-    [7] ∈ {7}
-    [8] ∈ {8}
-    [9] ∈ {9}
-  stuff.t[0..4] ∈ {3}
-       .t[5..9] ∈ {4}
-       .t[10..49] ∈ [0..12]
-       .d[0] ∈ {0}
-       .d[1] ∈ {3.125}
-       .d[2] ∈ {6.25}
-       .d[3] ∈ {9.375}
-       .d[4] ∈ {12.5}
-       .d[5] ∈ {15.625}
-       .d[6] ∈ {18.75}
-       .d[7] ∈ {21.875}
-       .d[8] ∈ {25.}
-       .d[9] ∈ {28.125}
-  pr ∈ {{ &r ; &r2 }}
-  pr2 ∈ {{ &r ; &r2 }}
-  pr_escaping ∈ ESCAPINGADDR
-  ppr ∈ {{ &pr ; &pr2 }}
-  alloc1 ∈ ESCAPINGADDR
-  alloc2 ∈ ESCAPINGADDR
-  alloc3 ∈ {{ &__malloc_main_l104 }}
-  inited ∈ {1}
-  sa ∈ {{ "abc" }}
-  r ∈ {93.9166666667}
-  r2 ∈ {110.791666667}
-  dm ∈ [93.9166666667 .. 110.791666667]
-  res_from_fp ∈ {32}
-  res ∈ {93}
-  local ∈ {1}
-  __retres ∈ {0}[kernel] Parsing tests/builtins/long_init2.c (with preprocessing)
-[eva] Analyzing a complete application starting at main
-[eva] Computing initial state
-[eva:alarm] tests/builtins/long_init2.c:34: Warning: 
-  pointer downcast. assert (unsigned int)"abc" ≤ 127;
-[eva] Initial state computed
-[eva:initial-state] Values of globals at initialization
-  nondet ∈ [--..--]
-  a1[0..9] ∈ {0}
-  stuff ∈ {0}
-  garbled_mix ∈ {{ "abc" }}
-  s ∈ {{ "abc" }}
-  another_global ∈ {42}
-  pr ∈ {0}
-  pr2 ∈ {0}
-  pr_escaping ∈ {0}
-  ppr ∈ {0}
-  alloc1 ∈ {0}
-  alloc2 ∈ {0}
-  alloc3 ∈ {0}
-  fp ∈ {{ &fun }}
-  inited ∈ {0}
-[eva] computing for function init_outer <- main.
-  Called from tests/builtins/long_init2.c:90.
-[eva] tests/builtins/long_init2.c:85: 
-  Call to builtin Frama_C_load_state for function init_inner
-[eva] Skipping call to init_inner, loading globals state from file:
-  tests/builtins/result/Longinit_sequencer.sav
-[eva] Warning: variable `r' is not global, possibly an escaping value; ignoring
-[eva] Warning: variable `r2' is not global, possibly an escaping value; ignoring
-[eva] Warning: variable `r2' is not global, possibly an escaping value; ignoring
-[eva] Warning: found new global variable `another_global'
-[eva] Recording results for init_outer
-[eva] Done for function init_outer
-[eva] tests/builtins/long_init2.c:92: 
-  Frama_C_dump_each:
-  # Cvalue domain:
-  __fc_heap_status ∈ [--..--]
-  __fc_random_counter ∈ [--..--]
-  __fc_rand_max ∈ {32767}
-  __fc_random48_init ∈ {0}
-  __fc_random48_counter[0..2] ∈ [--..--]
-  __fc_p_random48_counter ∈ {{ &__fc_random48_counter[0] }}
-  __fc_env[0] ∈ {{ NULL ; &S_0___fc_env[0] }}
-          [1] ∈ {{ NULL ; &S_1___fc_env[0] }}
-          [2..4095] ∈ {{ NULL ; &S_0___fc_env[0] ; &S_1___fc_env[0] }}
-  __fc_mblen_state ∈ [--..--]
-  __fc_mbtowc_state ∈ [--..--]
-  __fc_wctomb_state ∈ [--..--]
-  nondet ∈ [--..--]
-  a1[0] ∈ {0}
-    [1] ∈ {1}
-    [2] ∈ {2}
-    [3] ∈ {3}
-    [4] ∈ {4}
-    [5] ∈ {5}
-    [6] ∈ {6}
-    [7] ∈ {7}
-    [8] ∈ {8}
-    [9] ∈ {9}
-  stuff.t[0..4] ∈ {3}
-       .t[5..9] ∈ {4}
-       .t[10..49] ∈ [0..12]
-       .d[0] ∈ {0}
-       .d[1] ∈ {3.125}
-       .d[2] ∈ {6.25}
-       .d[3] ∈ {9.375}
-       .d[4] ∈ {12.5}
-       .d[5] ∈ {15.625}
-       .d[6] ∈ {18.75}
-       .d[7] ∈ {21.875}
-       .d[8] ∈ {25.}
-       .d[9] ∈ {28.125}
-  garbled_mix ∈ {{ "abc" }}
-  s ∈ {{ "abc" }}
-  another_global ∈ {42}
-  pr ∈ ESCAPINGADDR
-  pr2 ∈ ESCAPINGADDR
-  pr_escaping ∈ ESCAPINGADDR
-  ppr ∈ {0}
-  alloc1 ∈ {{ &__malloc_init_inner_l73 }}
-  alloc2 ∈ ESCAPINGADDR
-  alloc3 ∈ {0}
-  fp ∈ {{ &fun }}
-  inited ∈ {1}
-  sa ∈ {{ "abc" }}
-  tmp_2 ∈ UNINITIALIZED
-  __retres ∈ UNINITIALIZED
-  S_0___fc_env[0..1] ∈ [--..--]
-  S_1___fc_env[0..1] ∈ [--..--]
-  __malloc_init_inner_l73 ∈ {{ (int)&__malloc_init_inner_l73 }}
-  ==END OF DUMP==
-[eva] computing for function analyze <- main.
-  Called from tests/builtins/long_init2.c:93.
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init2.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init2.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init2.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init2.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init2.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] Recording results for analyze
-[eva] Done for function analyze
-[eva] computing for function analyze <- main.
-  Called from tests/builtins/long_init2.c:94.
-[eva] tests/builtins/long_init2.c:29: Reusing old results for call to subanalyze
-[eva] tests/builtins/long_init2.c:29: Reusing old results for call to subanalyze
-[eva] tests/builtins/long_init2.c:29: Reusing old results for call to subanalyze
-[eva] tests/builtins/long_init2.c:29: Reusing old results for call to subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init2.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] Recording results for analyze
-[eva] Done for function analyze
-[eva] computing for function dmin <- main.
-  Called from tests/builtins/long_init2.c:98.
-[eva] Recording results for dmin
-[eva] Done for function dmin
-[eva] computing for function fun <- main.
-  Called from tests/builtins/long_init2.c:99.
-[eva] Recording results for fun
-[eva] Done for function fun
-[eva] tests/builtins/long_init2.c:103: Call to builtin free
-[eva] tests/builtins/long_init2.c:103: 
-  function free: precondition 'freeable' got status valid.
-[eva:malloc] tests/builtins/long_init2.c:103: 
-  strong free on bases: {__malloc_init_inner_l73}
-[eva] tests/builtins/long_init2.c:104: Call to builtin malloc
-[eva] tests/builtins/long_init2.c:104: allocating variable __malloc_main_l104
-[eva] Recording results for main
-[eva] done for function main
-[eva] tests/builtins/long_init2.c:34: 
-  cannot evaluate ACSL term, unsupported ACSL construct: constant strings
-[eva] Saving globals state after call to function: init_outer
-
-
-Values at end of function dmin:
-  __retres ∈ [93.9166666667 .. 110.791666667]
-
-
-Values at end of function fun:
-  __retres ∈ {32}
-
-
-Values at end of function init_outer:
-  a1[0] ∈ {0}
-    [1] ∈ {1}
-    [2] ∈ {2}
-    [3] ∈ {3}
-    [4] ∈ {4}
-    [5] ∈ {5}
-    [6] ∈ {6}
-    [7] ∈ {7}
-    [8] ∈ {8}
-    [9] ∈ {9}
-  stuff.t[0..4] ∈ {3}
-       .t[5..9] ∈ {4}
-       .t[10..49] ∈ [0..12]
-       .d[0] ∈ {0}
-       .d[1] ∈ {3.125}
-       .d[2] ∈ {6.25}
-       .d[3] ∈ {9.375}
-       .d[4] ∈ {12.5}
-       .d[5] ∈ {15.625}
-       .d[6] ∈ {18.75}
-       .d[7] ∈ {21.875}
-       .d[8] ∈ {25.}
-       .d[9] ∈ {28.125}
-  pr ∈ ESCAPINGADDR
-  pr2 ∈ ESCAPINGADDR
-  pr_escaping ∈ ESCAPINGADDR
-  alloc1 ∈ {{ &__malloc_init_inner_l73 }}
-  alloc2 ∈ ESCAPINGADDR
-  inited ∈ {1}
-
-
-Values at end of function subanalyze:
-  
-
-Values at end of function analyze:
-  i ∈ {5}
-  res ∈ [93.9166666667 .. 110.791666667]
-
-Values at end of function main:
-  __fc_heap_status ∈ [--..--]
-  a1[0] ∈ {0}
-    [1] ∈ {1}
-    [2] ∈ {2}
-    [3] ∈ {3}
-    [4] ∈ {4}
-    [5] ∈ {5}
-    [6] ∈ {6}
-    [7] ∈ {7}
-    [8] ∈ {8}
-    [9] ∈ {9}
-  stuff.t[0..4] ∈ {3}
-       .t[5..9] ∈ {4}
-       .t[10..49] ∈ [0..12]
-       .d[0] ∈ {0}
-       .d[1] ∈ {3.125}
-       .d[2] ∈ {6.25}
-       .d[3] ∈ {9.375}
-       .d[4] ∈ {12.5}
-       .d[5] ∈ {15.625}
-       .d[6] ∈ {18.75}
-       .d[7] ∈ {21.875}
-       .d[8] ∈ {25.}
-       .d[9] ∈ {28.125}
-  pr ∈ {{ &r ; &r2 }}
-  pr2 ∈ {{ &r ; &r2 }}
-  pr_escaping ∈ ESCAPINGADDR
-  ppr ∈ {{ &pr ; &pr2 }}
-  alloc1 ∈ ESCAPINGADDR
-  alloc2 ∈ ESCAPINGADDR
-  alloc3 ∈ {{ &__malloc_main_l104 }}
-  inited ∈ {1}
-  sa ∈ {{ "abc" }}
-  r ∈ {93.9166666667}
-  r2 ∈ {110.791666667}
-  dm ∈ [93.9166666667 .. 110.791666667]
-  res_from_fp ∈ {32}
-  res ∈ {93}
-  local ∈ {42}
-  __retres ∈ {0}[kernel] Parsing tests/builtins/long_init3.c (with preprocessing)
-[eva] Analyzing a complete application starting at main
-[eva] Computing initial state
-[eva:alarm] tests/builtins/long_init3.c:34: Warning: 
-  pointer downcast. assert (unsigned int)"abc" ≤ 127;
-[eva] Initial state computed
-[eva:initial-state] Values of globals at initialization
-  nondet ∈ [--..--]
-  a1[0..9] ∈ {0}
-  stuff ∈ {0}
-  garbled_mix ∈ {{ "abc" }}
-  s ∈ {{ "abc" }}
-  another_global ∈ {42}
-  yet_another_global ∈ {43}
-  pr ∈ {0}
-  pr2 ∈ {0}
-  pr_escaping ∈ {0}
-  ppr ∈ {0}
-  alloc1 ∈ {0}
-  alloc2 ∈ {0}
-  alloc3 ∈ {0}
-  fp ∈ {{ &fun }}
-  inited ∈ {0}
-[eva] tests/builtins/long_init3.c:90: 
-  Call to builtin Frama_C_load_state for function init_outer
-[eva] Skipping call to init_outer, loading globals state from file:
-  tests/builtins/result/Longinit_sequencer.sav
-[eva] Warning: found new global variable `yet_another_global'
-[eva] tests/builtins/long_init3.c:92: 
-  Frama_C_dump_each:
-  # Cvalue domain:
-  __fc_heap_status ∈ [--..--]
-  __fc_random_counter ∈ [--..--]
-  __fc_rand_max ∈ {32767}
-  __fc_random48_init ∈ {0}
-  __fc_random48_counter[0..2] ∈ [--..--]
-  __fc_p_random48_counter ∈ {{ &__fc_random48_counter[0] }}
-  __fc_env[0] ∈ {{ NULL ; &S_0___fc_env[0] }}
-          [1] ∈ {{ NULL ; &S_1___fc_env[0] }}
-          [2..4095] ∈ {{ NULL ; &S_0___fc_env[0] ; &S_1___fc_env[0] }}
-  __fc_mblen_state ∈ [--..--]
-  __fc_mbtowc_state ∈ [--..--]
-  __fc_wctomb_state ∈ [--..--]
-  nondet ∈ [--..--]
-  a1[0] ∈ {0}
-    [1] ∈ {1}
-    [2] ∈ {2}
-    [3] ∈ {3}
-    [4] ∈ {4}
-    [5] ∈ {5}
-    [6] ∈ {6}
-    [7] ∈ {7}
-    [8] ∈ {8}
-    [9] ∈ {9}
-  stuff.t[0..4] ∈ {3}
-       .t[5..9] ∈ {4}
-       .t[10..49] ∈ [0..12]
-       .d[0] ∈ {0}
-       .d[1] ∈ {3.125}
-       .d[2] ∈ {6.25}
-       .d[3] ∈ {9.375}
-       .d[4] ∈ {12.5}
-       .d[5] ∈ {15.625}
-       .d[6] ∈ {18.75}
-       .d[7] ∈ {21.875}
-       .d[8] ∈ {25.}
-       .d[9] ∈ {28.125}
-  garbled_mix ∈ {{ "abc" }}
-  s ∈ {{ "abc" }}
-  another_global ∈ {42}
-  yet_another_global ∈ {43}
-  pr ∈ ESCAPINGADDR
-  pr2 ∈ ESCAPINGADDR
-  pr_escaping ∈ ESCAPINGADDR
-  ppr ∈ {0}
-  alloc1 ∈ {{ &__malloc_init_inner_l73 }}
-  alloc2 ∈ ESCAPINGADDR
-  alloc3 ∈ {0}
-  fp ∈ {{ &fun }}
-  inited ∈ {1}
-  sa ∈ {{ "abc" }}
-  tmp_2 ∈ UNINITIALIZED
-  __retres ∈ UNINITIALIZED
-  S_0___fc_env[0..1] ∈ [--..--]
-  S_1___fc_env[0..1] ∈ [--..--]
-  __malloc_init_inner_l73 ∈ {{ (int)&__malloc_init_inner_l73 }}
-  ==END OF DUMP==
-[eva] computing for function analyze <- main.
-  Called from tests/builtins/long_init3.c:93.
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init3.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init3.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init3.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init3.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init3.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] Recording results for analyze
-[eva] Done for function analyze
-[eva] computing for function analyze <- main.
-  Called from tests/builtins/long_init3.c:94.
-[eva] tests/builtins/long_init3.c:29: Reusing old results for call to subanalyze
-[eva] tests/builtins/long_init3.c:29: Reusing old results for call to subanalyze
-[eva] tests/builtins/long_init3.c:29: Reusing old results for call to subanalyze
-[eva] tests/builtins/long_init3.c:29: Reusing old results for call to subanalyze
-[eva] computing for function subanalyze <- analyze <- main.
-  Called from tests/builtins/long_init3.c:29.
-[eva] Recording results for subanalyze
-[eva] Done for function subanalyze
-[eva] Recording results for analyze
-[eva] Done for function analyze
-[eva] computing for function dmin <- main.
-  Called from tests/builtins/long_init3.c:98.
-[eva] Recording results for dmin
-[eva] Done for function dmin
-[eva] computing for function fun <- main.
-  Called from tests/builtins/long_init3.c:99.
-[eva] Recording results for fun
-[eva] Done for function fun
-[eva] tests/builtins/long_init3.c:103: Call to builtin free
-[eva] tests/builtins/long_init3.c:103: 
-  function free: precondition 'freeable' got status valid.
-[eva:malloc] tests/builtins/long_init3.c:103: 
-  strong free on bases: {__malloc_init_inner_l73}
-[eva] tests/builtins/long_init3.c:104: Call to builtin malloc
-[eva] tests/builtins/long_init3.c:104: allocating variable __malloc_main_l104
-[eva] Recording results for main
-[eva] done for function main
-[eva] tests/builtins/long_init3.c:34: 
-  cannot evaluate ACSL term, unsupported ACSL construct: constant strings
-
-
-Values at end of function dmin:
-  __retres ∈ [93.9166666667 .. 110.791666667]
-
-
-Values at end of function fun:
-  __retres ∈ {32}
-
-
-
-
-Values at end of function subanalyze:
-  
-
-Values at end of function analyze:
-  i ∈ {5}
-  res ∈ [93.9166666667 .. 110.791666667]
-
-Values at end of function main:
-  __fc_heap_status ∈ [--..--]
-  a1[0] ∈ {0}
-    [1] ∈ {1}
-    [2] ∈ {2}
-    [3] ∈ {3}
-    [4] ∈ {4}
-    [5] ∈ {5}
-    [6] ∈ {6}
-    [7] ∈ {7}
-    [8] ∈ {8}
-    [9] ∈ {9}
-  stuff.t[0..4] ∈ {3}
-       .t[5..9] ∈ {4}
-       .t[10..49] ∈ [0..12]
-       .d[0] ∈ {0}
-       .d[1] ∈ {3.125}
-       .d[2] ∈ {6.25}
-       .d[3] ∈ {9.375}
-       .d[4] ∈ {12.5}
-       .d[5] ∈ {15.625}
-       .d[6] ∈ {18.75}
-       .d[7] ∈ {21.875}
-       .d[8] ∈ {25.}
-       .d[9] ∈ {28.125}
-  pr ∈ {{ &r ; &r2 }}
-  pr2 ∈ {{ &r ; &r2 }}
-  pr_escaping ∈ ESCAPINGADDR
-  ppr ∈ {{ &pr ; &pr2 }}
-  alloc1 ∈ ESCAPINGADDR
-  alloc2 ∈ ESCAPINGADDR
-  alloc3 ∈ {{ &__malloc_main_l104 }}
-  inited ∈ {1}
-  sa ∈ {{ "abc" }}
-  r ∈ {93.9166666667}
-  r2 ∈ {110.791666667}
-  dm ∈ [93.9166666667 .. 110.791666667]
-  res_from_fp ∈ {32}
-  res ∈ {93}
-  local ∈ {42}
-  local2 ∈ {43}
-  __retres ∈ {0}
-
-- 
GitLab