diff --git a/src/plugins/e-acsl/doc/Changelog b/src/plugins/e-acsl/doc/Changelog
index bdd66e6ceacff29e6a49b27351ea8d2c1e790b3d..f5f780dd7d02bf57a3c44434d4fb7f2e60cd61f2 100644
--- a/src/plugins/e-acsl/doc/Changelog
+++ b/src/plugins/e-acsl/doc/Changelog
@@ -27,6 +27,8 @@ Plugin E-ACSL <next-release>
 
 -* E-ACSL       [2024-09-16] fix logic variable escaping its scope
 -* E-ACSL       [2024-09-03] handle negative integers generated by RTE
+- E-ACSL        [2024-09-03] add support for labelled logic functions in case
+                they are called only with the Here label.
 -* E-ACSL       [2024-08-30] fix typing exception occurring for applications
                 of axiomatically defined premises and logic functions
 -* E-ACSL       [2024-08-22] fix arity confusion of generated functions.
diff --git a/src/plugins/e-acsl/src/analyses/logic_normalizer.ml b/src/plugins/e-acsl/src/analyses/logic_normalizer.ml
index a6fd74c101fa752d845c2383249fb3fa07a01e4e..9d89e6d9279e643fb7460d8af131b8241e83df9a 100644
--- a/src/plugins/e-acsl/src/analyses/logic_normalizer.ml
+++ b/src/plugins/e-acsl/src/analyses/logic_normalizer.ml
@@ -21,13 +21,14 @@
 (**************************************************************************)
 
 open Cil_types
+open Cil_datatype
 
 let dkey = Options.Dkey.logic_normalizer
 
 module Id_predicate =
   Datatype.Make_with_collections
     (struct
-      include Cil_datatype.Predicate
+      include Predicate
       let name = "E_ACSL.Id_predicate"
       (* The function compare should never be used since we only use this
          datatype for hashtables *)
@@ -82,8 +83,180 @@ end
 
 module Predicates = Memo (Id_predicate.Hashtbl)
 module Terms = Memo (Misc.Id_term.Hashtbl)
+module Here_specialized = Memo (Logic_info.Hashtbl)
+
+let pp_logic_info fmt li =
+  Printer.pp_global_annotation fmt (Dfun_or_pred (li, Location.unknown))
+
+module Logic_infos : sig
+  val origin_of_lv : logic_var -> logic_var
+  val generated_of : logic_info -> logic_info list
+end = struct
+  let original_of_lv lv =
+    Here_specialized.original_opt
+      {l_var_info = lv;
+       l_labels = [];
+       l_tparams = [];
+       l_type = None;
+       l_profile = [];
+       l_body = LBnone}
+
+  let rec origin_of_lv lv =
+    match original_of_lv lv with
+    | None -> lv
+    | Some origin -> origin_of_lv origin.l_var_info
+
+  let generated_of li = Option.to_list @@ Here_specialized.normalized_opt li
+end
+
+(** E-ACSL currently is not in general capable of translationg predicates and
+    logic functions with labels. However often such functions are used
+    while supplying the Here label.
+    In this case we can specialize the logic function, such that it has no
+    labels, substituting all occurrences of the original labels by the Here
+    label. Then the specialized function can be used instead of the original
+    one whenever all labels are Here. *)
+module Here_inliner : sig
+  val preprocess_pred : predicate -> predicate option
+  val preprocess_term : term -> term option
+
+  (** apply a preprocessor to the result of another *)
+  val bind : ('a -> 'a option) -> 'a -> 'a option -> 'a option
+end = struct
+
+  let here = BuiltinLabel Here
+  let is_here = (=) here
+  let are_all_here labels = List.length labels > 0 && List.for_all is_here labels
+
+  (** substitute occurrences of li_old by li_new; also substitute occurrences
+      of li_old's formal parameters by li_new's parameters; li_new does not
+      have any labels so substitute occurrences of li_old's labels by Here *)
+  let substitute li_old li_new =
+    let formal_substitutions =
+      Logic_var.Map.of_seq
+        (List.to_seq @@ List.combine li_old.l_profile li_new.l_profile)
+    in
+    let is_obsolete_label =
+      let obsolete_labels =
+        Logic_label.Set.of_seq @@ List.to_seq @@ here :: li_old.l_labels
+      in
+      fun l -> Logic_label.Set.mem l obsolete_labels
+    in
+    object
+      inherit Visitor.frama_c_inplace
+
+      method! vlogic_var_use lv =
+        match Logic_var.Map.find_opt lv formal_substitutions with
+        | None -> DoChildren
+        | Some lv' -> ChangeTo lv'
+
+      method !vpredicate p =
+        match p.pred_content with
+        | Papp (li, labels, args) when
+            Logic_info.equal li li_old && List.for_all is_obsolete_label labels ->
+          let p = {p with pred_content = Papp (li_new, [], args)} in
+          ChangeDoChildrenPost (p, fun x -> x)
+        | _ -> DoChildren
+
+      method !vterm t =
+        match t.term_node with
+        | Tat (body, label) when is_obsolete_label label ->
+          ChangeDoChildrenPost (body, fun x -> x)
+        | Tapp (li, labels, args) when
+            Logic_info.equal li li_old && List.for_all is_obsolete_label labels ->
+          let t = {t with term_node = Tapp (li_new, [], args)} in
+          ChangeDoChildrenPost (t, fun x -> x)
+        | _ -> DoChildren
+
+      method !vlogic_info_use l =
+        if Logic_info.equal l li_old
+        then ChangeTo li_new
+        else DoChildren
+
+      method !vlogic_label l =
+        if is_obsolete_label l then ChangeTo here else DoChildren
+    end
+
+  let specialize li =
+    let f li =
+      let lv_name = Functions.RTL.mk_gen_name (li.l_var_info.lv_name ^ "_here") in
+      let vi = {li.l_var_info with lv_name; lv_id = Cil_const.new_raw_id ()} in
+      let li' = {
+        li with
+        l_var_info = vi;
+        l_labels = [];
+        l_profile =
+          List.map (fun lv -> {lv with lv_id = Cil_const.new_raw_id ()}) li.l_profile
+      } in
+      let li' = Visitor.visitFramacLogicInfo (substitute li li') li' in
+      let pred_or_term =
+        match li.l_type with None -> "predicate" | Some _ -> "logic function"
+      in
+      Options.feedback ~dkey ~level:2
+        "specializing %s %a for use cases using the Here label"
+        pred_or_term
+        Printer.pp_logic_info li;
+      Options.feedback ~dkey ~level:3
+        "specialized version of %s %a:@ @[%a@]"
+        pred_or_term
+        Printer.pp_logic_info li
+        pp_logic_info li';
+      Some li'
+    in
+    Option.get @@ Here_specialized.memoize f li
+
+  let inliner = object (self)
+    inherit Visitor.frama_c_inplace
+
+    method !vpredicate p =
+      match p.pred_content with
+      | Papp (li, labels, args) when are_all_here labels ->
+        Options.feedback ~dkey ~level:3
+          "inlining Here labels for predicate: @[%a@]"
+          Printer.pp_predicate p;
+        let li = specialize li in
+        (* The Cil visitor does not descend into [logic_info] definitions. *)
+        let li = Visitor.visitFramacLogicInfo self li in
+        let p = {p with pred_content = Papp(li, [], args)} in
+        ChangeDoChildrenPost (p, fun x -> x)
+      | _ -> DoChildren
+
+    method !vterm t =
+      match t.term_node with
+      | Tapp(li, labels, args) when are_all_here labels ->
+        Options.feedback ~dkey ~level:3
+          "inlining Here labels for term: %a"
+          Printer.pp_term t;
+        let li = specialize li in
+        (* The Cil visitor does not descend into [logic_info] definitions. *)
+        let li = Visitor.visitFramacLogicInfo self li in
+        let t = {t with term_node = Tapp(li, [], args)} in
+        ChangeDoChildrenPost (t, fun x -> x)
+      | _ -> DoChildren
+  end
+
+  let preprocess_pred p =
+    match p.pred_content with
+    | Papp(_li, labels, _args) when are_all_here labels ->
+      Some (Visitor.visitFramacPredicate inliner p)
+    | _ -> None
+
+  let preprocess_term t =
+    match t.term_node with
+    | Tapp(_li, labels, _args) when are_all_here labels ->
+      Some (Visitor.visitFramacTerm inliner t)
+    | _ -> None
+
+  (* apply to the result of a first preprocessor a second one *)
+  let bind f orig = function
+    | None -> f orig (* first preprocessor yields nothing, use original value *)
+    | Some p -> match f p with
+      | None -> Some p (* second preprocessor yields nothing *)
+      | Some p -> Some p
+end
 
 let preprocess_pred ~loc p =
+  Here_inliner.(bind preprocess_pred) p @@
   match p.pred_content with
   | Pvalid_read(BuiltinLabel Here as llabel, t)
   | Pvalid(BuiltinLabel Here as llabel, t) -> begin
@@ -108,6 +281,7 @@ let preprocess_pred ~loc p =
   | _ -> None
 
 let preprocess_term ~loc t =
+  Here_inliner.(bind preprocess_term) t @@
   match t.term_node with
   | Tapp(li, lst, [ t1; t2; {term_node = Tlambda([ k ], predicate)}])
     when li.l_body = LBnone && li.l_var_info.lv_name = "\\numof" ->
@@ -163,4 +337,5 @@ let get_orig_term = Terms.original
 
 let clear () =
   Terms.clear ();
-  Predicates.clear ()
+  Predicates.clear ();
+  Here_specialized.clear ()
diff --git a/src/plugins/e-acsl/src/analyses/logic_normalizer.mli b/src/plugins/e-acsl/src/analyses/logic_normalizer.mli
index e081f4da94962c7aa74f83db97b788a95b7f1aad..f44075f1407cdc02e2ee07b3bb17508f96039d76 100644
--- a/src/plugins/e-acsl/src/analyses/logic_normalizer.mli
+++ b/src/plugins/e-acsl/src/analyses/logic_normalizer.mli
@@ -41,6 +41,22 @@ val preprocess_annot : code_annotation -> unit
 val preprocess_predicate : predicate -> unit
 (** Preprocess a predicate and its children and store the results  *)
 
+(** The analyses in [Logic_normalizer] may:
+    - create new auxiliary predicates and logic functions
+    - transform inductively and axiomatically defined logic functions and
+      predicates into recursively defined ones
+      This module provides functions to inquire about their status. *)
+module Logic_infos : sig
+  val generated_of : logic_info -> logic_info list
+  (** auxiliary [logic_info]s generated from the given [logic_info]. *)
+
+  val origin_of_lv : logic_var -> logic_var
+  (** Identify the [logic_info] from which the [logic_info] identified by the
+      given argument stems from. This is required in order to create meaningful
+      feedback messages for the user who should not be confronted with the
+      names of generated logic functions. *)
+end
+
 val get_pred : predicate -> predicate
 (** Retrieve the preprocessed form of a predicate *)
 
diff --git a/src/plugins/e-acsl/src/code_generator/assigns.ml b/src/plugins/e-acsl/src/code_generator/assigns.ml
index f33b65bf6e1f4a50acd12245e858f5356b07c3f6..22bc5c1b8565be6684a590add64198b882c5a794 100644
--- a/src/plugins/e-acsl/src/code_generator/assigns.ml
+++ b/src/plugins/e-acsl/src/code_generator/assigns.ml
@@ -75,7 +75,8 @@ let rec get_assigns_from ~loc env lprofile lv =
       Options.warning ~current:true "no assigns clause generated for \
                                      function %a because pointers as arguments \
                                      is not yet supported"
-        Printer.pp_logic_var lv;
+        Printer.pp_logic_var
+        (Logic_normalizer.Logic_infos.origin_of_lv lv);
       raise NoAssigns
     end
 
diff --git a/src/plugins/e-acsl/src/code_generator/logic_functions.ml b/src/plugins/e-acsl/src/code_generator/logic_functions.ml
index 289cc2bb6f4e7fddee0a8e05350577e88c39165a..8a004c3669c2c09f0f7119020ae2a9145889b872 100644
--- a/src/plugins/e-acsl/src/code_generator/logic_functions.ml
+++ b/src/plugins/e-acsl/src/code_generator/logic_functions.ml
@@ -374,10 +374,16 @@ end
 let reset () = Gen_functions.clear ()
 
 let add_generated_functions_to_file file =
+  let rec decls_of_li ?(loc = Location.unknown) li =
+    let dependencies =
+      List.concat_map (decls_of_li ~loc)
+        (Logic_normalizer.Logic_infos.generated_of li)
+    in
+    let kfs = Gen_functions.kernel_functions_of_logic_info li in
+    dependencies @ List.map (fun kf -> GFunDecl (Cil.empty_funspec (), kf, loc)) kfs
+  in
   let generated_decls_of_global = function
-    | GAnnot(Dfun_or_pred(li, loc), _) ->
-      let kfs = Gen_functions.kernel_functions_of_logic_info li in
-      List.map (fun kf -> GFunDecl (Cil.empty_funspec (), kf, loc)) kfs
+    | GAnnot(Dfun_or_pred(li, loc), _) -> decls_of_li ~loc li
     | _ -> []
   in
   (* add declarations of generated functions just below the logic
diff --git a/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c b/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c
index c1e35f6afa59bc1aedf39e16abebe356cb49344f..6bf27aa86ccbd5e29bca87ef93b766e1005fd29b 100644
--- a/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c
+++ b/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c
@@ -85,11 +85,11 @@ double __gen_e_acsl_f2(double x);
 
 /*@ predicate p_here{L}(integer x) = x > 0;
  */
-int __gen_e_acsl_p_here(int x);
+int __gen_e_acsl_p_here_here(int x);
 
 /*@ logic integer f_here{L}(integer x) = x;
  */
-int __gen_e_acsl_f_here(int x);
+int __gen_e_acsl_f_here_here(int x);
 
 /*@ logic integer f_sum(integer x) = \sum(1, x, \lambda integer y; 1);
  */
@@ -113,7 +113,7 @@ int z = 8;
 /*@ logic integer f3{L}(integer y) = \at(z + y,L);
 
 */
-long __gen_e_acsl_f3(int y);
+long __gen_e_acsl_f3_here(int y);
 
 int main(void)
 {
@@ -454,54 +454,58 @@ int main(void)
   }
   /*@ assert over(1., 2.) == 0.5; */ ;
   {
-    int __gen_e_acsl_p_here_2;
+    int __gen_e_acsl_p_here_here_2;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_16 =
       {.values = (void *)0};
-    __gen_e_acsl_p_here_2 = __gen_e_acsl_p_here(27);
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_16,"p_here(27)",
-                                 0,__gen_e_acsl_p_here_2);
+    __gen_e_acsl_p_here_here_2 = __gen_e_acsl_p_here_here(27);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_16,
+                                 "__gen_e_acsl_p_here_here(27)",0,
+                                 __gen_e_acsl_p_here_here_2);
     __gen_e_acsl_assert_data_16.blocking = 1;
     __gen_e_acsl_assert_data_16.kind = "Assertion";
     __gen_e_acsl_assert_data_16.pred_txt = "p_here(27)";
     __gen_e_acsl_assert_data_16.file = "functions.c";
     __gen_e_acsl_assert_data_16.fct = "main";
     __gen_e_acsl_assert_data_16.line = 93;
-    __e_acsl_assert(__gen_e_acsl_p_here_2,& __gen_e_acsl_assert_data_16);
+    __e_acsl_assert(__gen_e_acsl_p_here_here_2,& __gen_e_acsl_assert_data_16);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_16);
   }
   /*@ assert p_here(27); */ ;
   {
-    int __gen_e_acsl_f_here_2;
+    int __gen_e_acsl_f_here_here_2;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_17 =
       {.values = (void *)0};
-    __gen_e_acsl_f_here_2 = __gen_e_acsl_f_here(27);
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_17,"f_here(27)",
-                                 0,__gen_e_acsl_f_here_2);
+    __gen_e_acsl_f_here_here_2 = __gen_e_acsl_f_here_here(27);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_17,
+                                 "__gen_e_acsl_f_here_here(27)",0,
+                                 __gen_e_acsl_f_here_here_2);
     __gen_e_acsl_assert_data_17.blocking = 1;
     __gen_e_acsl_assert_data_17.kind = "Assertion";
     __gen_e_acsl_assert_data_17.pred_txt = "f_here(27) == 27";
     __gen_e_acsl_assert_data_17.file = "functions.c";
     __gen_e_acsl_assert_data_17.fct = "main";
     __gen_e_acsl_assert_data_17.line = 94;
-    __e_acsl_assert(__gen_e_acsl_f_here_2 == 27,
+    __e_acsl_assert(__gen_e_acsl_f_here_here_2 == 27,
                     & __gen_e_acsl_assert_data_17);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_17);
   }
   /*@ assert f_here(27) == 27; */ ;
   {
-    long __gen_e_acsl_f3_2;
+    long __gen_e_acsl_f3_here_2;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_18 =
       {.values = (void *)0};
-    __gen_e_acsl_f3_2 = __gen_e_acsl_f3(5);
-    __e_acsl_assert_register_long(& __gen_e_acsl_assert_data_18,"f3(5)",0,
-                                  __gen_e_acsl_f3_2);
+    __gen_e_acsl_f3_here_2 = __gen_e_acsl_f3_here(5);
+    __e_acsl_assert_register_long(& __gen_e_acsl_assert_data_18,
+                                  "__gen_e_acsl_f3_here(5)",0,
+                                  __gen_e_acsl_f3_here_2);
     __gen_e_acsl_assert_data_18.blocking = 1;
     __gen_e_acsl_assert_data_18.kind = "Assertion";
     __gen_e_acsl_assert_data_18.pred_txt = "f3(5) == 13";
     __gen_e_acsl_assert_data_18.file = "functions.c";
     __gen_e_acsl_assert_data_18.fct = "main";
     __gen_e_acsl_assert_data_18.line = 96;
-    __e_acsl_assert(__gen_e_acsl_f3_2 == 13L,& __gen_e_acsl_assert_data_18);
+    __e_acsl_assert(__gen_e_acsl_f3_here_2 == 13L,
+                    & __gen_e_acsl_assert_data_18);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_18);
   }
   /*@ assert f3(5) == 13; */ ;
@@ -805,21 +809,6 @@ double __gen_e_acsl_f2(double x)
   return __gen_e_acsl__8;
 }
 
-/*@ assigns \result;
-    assigns \result \from x; */
-int __gen_e_acsl_p_here(int x)
-{
-  int __retres = x > 0;
-  return __retres;
-}
-
-/*@ assigns \result;
-    assigns \result \from x; */
-int __gen_e_acsl_f_here(int x)
-{
-  return x;
-}
-
 /*@ assigns \result;
     assigns \result \from x; */
 int __gen_e_acsl_f_sum(int x)
@@ -926,14 +915,6 @@ int __gen_e_acsl_signum_3(__e_acsl_mpq_t x)
   return __gen_e_acsl_if_4;
 }
 
-/*@ assigns \result;
-    assigns \result \from y; */
-long __gen_e_acsl_f3(int y)
-{
-  long __retres = z + (long)y;
-  return __retres;
-}
-
 /*@ assigns \result;
     assigns \result \from *((__e_acsl_mpz_struct *)x); */
 int __gen_e_acsl_f4(__e_acsl_mpz_struct * x)
@@ -1105,4 +1086,27 @@ void __gen_e_acsl_f4_2(__e_acsl_mpz_t *__retres_arg, __e_acsl_mpz_struct * x)
   return;
 }
 
+/*@ assigns \result;
+    assigns \result \from x; */
+int __gen_e_acsl_p_here_here(int x)
+{
+  int __retres = x > 0;
+  return __retres;
+}
+
+/*@ assigns \result;
+    assigns \result \from x; */
+int __gen_e_acsl_f_here_here(int x)
+{
+  return x;
+}
+
+/*@ assigns \result;
+    assigns \result \from y; */
+long __gen_e_acsl_f3_here(int y)
+{
+  long __retres = z + (long)y;
+  return __retres;
+}
+
 
diff --git a/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle b/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle
index 1397e624078c0700e7bf18faf078bdeb20a83da9..af0ce5a8cf2ea6d83c5d80046abcf396c8134b22 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle
+++ b/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle
@@ -1,8 +1,11 @@
 [e-acsl] beginning translation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:431: Warning: 
   no assigns clause generated for function valid_read_nstring because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:280: Warning: 
-  E-ACSL construct `labeled \valid_read' is not yet supported.
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+  no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
+  E-ACSL construct `logic functions or predicates performing read accesses'
+  is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:440: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c
index 8be695d45b22f463ff59f911800447ce33636a1e..e6397626eec5ed493b37b2127175735ac0c77c8c 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c
@@ -54,66 +54,68 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
                            size_t n)
 {
   __e_acsl_contract_t *__gen_e_acsl_contract;
-  __e_acsl_mpz_t __gen_e_acsl_at_2;
+  __e_acsl_mpz_t __gen_e_acsl_at_3;
+  char const *__gen_e_acsl_at_2;
   char *__gen_e_acsl_at;
   char *__retres;
   {
     __e_acsl_mpz_t __gen_e_acsl_n;
-    unsigned long __gen_e_acsl_size;
-    __e_acsl_mpz_t __gen_e_acsl_n_2;
-    __e_acsl_mpz_t __gen_e_acsl_;
-    __e_acsl_mpz_t __gen_e_acsl_sub;
-    __e_acsl_mpz_t __gen_e_acsl__2;
-    __e_acsl_mpz_t __gen_e_acsl_sub_2;
-    __e_acsl_mpz_t __gen_e_acsl_add;
-    unsigned long __gen_e_acsl__3;
-    unsigned long __gen_e_acsl_if;
-    int __gen_e_acsl_valid;
-    unsigned long __gen_e_acsl_size_2;
-    unsigned long __gen_e_acsl__4;
-    unsigned long __gen_e_acsl_if_2;
-    int __gen_e_acsl_valid_read;
     unsigned long __gen_e_acsl_size_3;
-    unsigned long __gen_e_acsl__5;
+    __e_acsl_mpz_t __gen_e_acsl_n_4;
+    __e_acsl_mpz_t __gen_e_acsl__7;
+    __e_acsl_mpz_t __gen_e_acsl_sub_5;
+    __e_acsl_mpz_t __gen_e_acsl__8;
+    __e_acsl_mpz_t __gen_e_acsl_sub_6;
+    __e_acsl_mpz_t __gen_e_acsl_add_3;
+    unsigned long __gen_e_acsl__9;
     unsigned long __gen_e_acsl_if_3;
-    int __gen_e_acsl_valid_read_2;
+    int __gen_e_acsl_valid;
     unsigned long __gen_e_acsl_size_4;
-    unsigned long __gen_e_acsl__6;
+    unsigned long __gen_e_acsl__10;
     unsigned long __gen_e_acsl_if_4;
+    int __gen_e_acsl_valid_read_2;
     unsigned long __gen_e_acsl_size_5;
-    unsigned long __gen_e_acsl__7;
+    unsigned long __gen_e_acsl__11;
     unsigned long __gen_e_acsl_if_5;
+    int __gen_e_acsl_valid_read_3;
+    unsigned long __gen_e_acsl_size_6;
+    unsigned long __gen_e_acsl__12;
+    unsigned long __gen_e_acsl_if_6;
+    unsigned long __gen_e_acsl_size_7;
+    unsigned long __gen_e_acsl__13;
+    unsigned long __gen_e_acsl_if_7;
     int __gen_e_acsl_separated;
     __e_acsl_store_block((void *)(& src),8UL);
     __e_acsl_store_block((void *)(& dest),8UL);
     __gen_e_acsl_at = dest;
+    __gen_e_acsl_at_2 = src;
     __gmpz_init_set_ui(__gen_e_acsl_n,n);
-    __gmpz_init_set(__gen_e_acsl_at_2,
+    __gmpz_init_set(__gen_e_acsl_at_3,
                     (__e_acsl_mpz_struct const *)(__gen_e_acsl_n));
     __gen_e_acsl_contract = __e_acsl_contract_init(2UL);
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
       {.values = (void *)0};
-    __gmpz_init_set_ui(__gen_e_acsl_n_2,n);
-    __gmpz_init_set_si(__gen_e_acsl_,1L);
-    __gmpz_init(__gen_e_acsl_sub);
-    __gmpz_sub(__gen_e_acsl_sub,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_2),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
-    __gmpz_init_set_si(__gen_e_acsl__2,0L);
-    __gmpz_init(__gen_e_acsl_sub_2);
-    __gmpz_sub(__gen_e_acsl_sub_2,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
-    __gmpz_init(__gen_e_acsl_add);
-    __gmpz_add(__gen_e_acsl_add,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_2),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
-    __gen_e_acsl__3 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
-    __gen_e_acsl_size = 1UL * __gen_e_acsl__3;
-    if (__gen_e_acsl_size <= 0UL) __gen_e_acsl_if = 0UL;
-    else __gen_e_acsl_if = __gen_e_acsl_size;
+    __gmpz_init_set_ui(__gen_e_acsl_n_4,n);
+    __gmpz_init_set_si(__gen_e_acsl__7,1L);
+    __gmpz_init(__gen_e_acsl_sub_5);
+    __gmpz_sub(__gen_e_acsl_sub_5,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_4),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__7));
+    __gmpz_init_set_si(__gen_e_acsl__8,0L);
+    __gmpz_init(__gen_e_acsl_sub_6);
+    __gmpz_sub(__gen_e_acsl_sub_6,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_5),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__8));
+    __gmpz_init(__gen_e_acsl_add_3);
+    __gmpz_add(__gen_e_acsl_add_3,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_6),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__7));
+    __gen_e_acsl__9 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3));
+    __gen_e_acsl_size_3 = 1UL * __gen_e_acsl__9;
+    if (__gen_e_acsl_size_3 <= 0UL) __gen_e_acsl_if_3 = 0UL;
+    else __gen_e_acsl_if_3 = __gen_e_acsl_size_3;
     __gen_e_acsl_valid = __e_acsl_valid((void *)(dest + 1 * 0),
-                                        __gen_e_acsl_if,(void *)dest,
+                                        __gen_e_acsl_if_3,(void *)dest,
                                         (void *)(& dest));
     __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_2,"dest",
                                  (void *)dest);
@@ -123,9 +125,9 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
                                  0,1);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,"n",0,n);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,"size",0,
-                                   __gen_e_acsl_size);
+                                   __gen_e_acsl_size_3);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,"size",0,
-                                   __gen_e_acsl_size);
+                                   __gen_e_acsl_size_3);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,
                                  "room_nstring: \\valid(dest + (0 .. n - 1))",
                                  0,__gen_e_acsl_valid);
@@ -142,14 +144,14 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
       {.values = (void *)0};
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
       {.values = (void *)0};
-    __gen_e_acsl__4 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
-    __gen_e_acsl_size_2 = 1UL * __gen_e_acsl__4;
-    if (__gen_e_acsl_size_2 <= 0UL) __gen_e_acsl_if_2 = 0UL;
-    else __gen_e_acsl_if_2 = __gen_e_acsl_size_2;
-    __gen_e_acsl_valid_read = __e_acsl_valid_read((void *)(dest + 1 * 0),
-                                                  __gen_e_acsl_if_2,
-                                                  (void *)dest,
-                                                  (void *)(& dest));
+    __gen_e_acsl__10 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3));
+    __gen_e_acsl_size_4 = 1UL * __gen_e_acsl__10;
+    if (__gen_e_acsl_size_4 <= 0UL) __gen_e_acsl_if_4 = 0UL;
+    else __gen_e_acsl_if_4 = __gen_e_acsl_size_4;
+    __gen_e_acsl_valid_read_2 = __e_acsl_valid_read((void *)(dest + 1 * 0),
+                                                    __gen_e_acsl_if_4,
+                                                    (void *)dest,
+                                                    (void *)(& dest));
     __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,"dest",
                                  (void *)dest);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"sizeof(char)",
@@ -158,9 +160,9 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
                                  0,1);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"n",0,n);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"size",0,
-                                   __gen_e_acsl_size_2);
+                                   __gen_e_acsl_size_4);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"size",0,
-                                   __gen_e_acsl_size_2);
+                                   __gen_e_acsl_size_4);
     __gen_e_acsl_assert_data_4.blocking = 1;
     __gen_e_acsl_assert_data_4.kind = "RTE";
     __gen_e_acsl_assert_data_4.pred_txt = "\\valid_read(dest + (0 .. n - 1))";
@@ -168,16 +170,16 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_4.fct = "strncpy";
     __gen_e_acsl_assert_data_4.line = 434;
     __gen_e_acsl_assert_data_4.name = "separated_guard";
-    __e_acsl_assert(__gen_e_acsl_valid_read,& __gen_e_acsl_assert_data_4);
+    __e_acsl_assert(__gen_e_acsl_valid_read_2,& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_5 =
       {.values = (void *)0};
-    __gen_e_acsl__5 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
-    __gen_e_acsl_size_3 = 1UL * __gen_e_acsl__5;
-    if (__gen_e_acsl_size_3 <= 0UL) __gen_e_acsl_if_3 = 0UL;
-    else __gen_e_acsl_if_3 = __gen_e_acsl_size_3;
-    __gen_e_acsl_valid_read_2 = __e_acsl_valid_read((void *)(src + 1 * 0),
-                                                    __gen_e_acsl_if_3,
+    __gen_e_acsl__11 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3));
+    __gen_e_acsl_size_5 = 1UL * __gen_e_acsl__11;
+    if (__gen_e_acsl_size_5 <= 0UL) __gen_e_acsl_if_5 = 0UL;
+    else __gen_e_acsl_if_5 = __gen_e_acsl_size_5;
+    __gen_e_acsl_valid_read_3 = __e_acsl_valid_read((void *)(src + 1 * 0),
+                                                    __gen_e_acsl_if_5,
                                                     (void *)src,
                                                     (void *)(& src));
     __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,"src",
@@ -188,9 +190,9 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
                                  "sizeof(char const)",0,1);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,"n",0,n);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,"size",0,
-                                   __gen_e_acsl_size_3);
+                                   __gen_e_acsl_size_5);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,"size",0,
-                                   __gen_e_acsl_size_3);
+                                   __gen_e_acsl_size_5);
     __gen_e_acsl_assert_data_5.blocking = 1;
     __gen_e_acsl_assert_data_5.kind = "RTE";
     __gen_e_acsl_assert_data_5.pred_txt = "\\valid_read(src + (0 .. n - 1))";
@@ -198,20 +200,20 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_5.fct = "strncpy";
     __gen_e_acsl_assert_data_5.line = 434;
     __gen_e_acsl_assert_data_5.name = "separated_guard";
-    __e_acsl_assert(__gen_e_acsl_valid_read_2,& __gen_e_acsl_assert_data_5);
+    __e_acsl_assert(__gen_e_acsl_valid_read_3,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
-    __gen_e_acsl__6 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
-    __gen_e_acsl_size_4 = 1UL * __gen_e_acsl__6;
-    if (__gen_e_acsl_size_4 <= 0UL) __gen_e_acsl_if_4 = 0UL;
-    else __gen_e_acsl_if_4 = __gen_e_acsl_size_4;
-    __gen_e_acsl__7 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
-    __gen_e_acsl_size_5 = 1UL * __gen_e_acsl__7;
-    if (__gen_e_acsl_size_5 <= 0UL) __gen_e_acsl_if_5 = 0UL;
-    else __gen_e_acsl_if_5 = __gen_e_acsl_size_5;
+    __gen_e_acsl__12 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3));
+    __gen_e_acsl_size_6 = 1UL * __gen_e_acsl__12;
+    if (__gen_e_acsl_size_6 <= 0UL) __gen_e_acsl_if_6 = 0UL;
+    else __gen_e_acsl_if_6 = __gen_e_acsl_size_6;
+    __gen_e_acsl__13 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3));
+    __gen_e_acsl_size_7 = 1UL * __gen_e_acsl__13;
+    if (__gen_e_acsl_size_7 <= 0UL) __gen_e_acsl_if_7 = 0UL;
+    else __gen_e_acsl_if_7 = __gen_e_acsl_size_7;
     __gen_e_acsl_separated = __e_acsl_separated(2UL,dest + 1 * 0,
-                                                __gen_e_acsl_if_4,
+                                                __gen_e_acsl_if_6,
                                                 src + 1 * 0,
-                                                __gen_e_acsl_if_5);
+                                                __gen_e_acsl_if_7);
     __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_3,"dest",
                                  (void *)dest);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,"sizeof(char)",
@@ -220,9 +222,9 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
                                  0,1);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"n",0,n);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"size",0,
-                                   __gen_e_acsl_size_4);
+                                   __gen_e_acsl_size_6);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"size",0,
-                                   __gen_e_acsl_size_4);
+                                   __gen_e_acsl_size_6);
     __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_3,"src",
                                  (void *)src);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,
@@ -231,9 +233,9 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
                                  "sizeof(char const)",0,1);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"n",0,n);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"size",0,
-                                   __gen_e_acsl_size_5);
+                                   __gen_e_acsl_size_7);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"size",0,
-                                   __gen_e_acsl_size_5);
+                                   __gen_e_acsl_size_7);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,
                                  "separation: \\separated(dest + (0 .. n - 1), src + (0 .. n - 1))",
                                  0,__gen_e_acsl_separated);
@@ -247,25 +249,25 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __e_acsl_assert(__gen_e_acsl_separated,& __gen_e_acsl_assert_data_3);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
     __gmpz_clear(__gen_e_acsl_n);
-    __gmpz_clear(__gen_e_acsl_n_2);
-    __gmpz_clear(__gen_e_acsl_);
-    __gmpz_clear(__gen_e_acsl_sub);
-    __gmpz_clear(__gen_e_acsl__2);
-    __gmpz_clear(__gen_e_acsl_sub_2);
-    __gmpz_clear(__gen_e_acsl_add);
+    __gmpz_clear(__gen_e_acsl_n_4);
+    __gmpz_clear(__gen_e_acsl__7);
+    __gmpz_clear(__gen_e_acsl_sub_5);
+    __gmpz_clear(__gen_e_acsl__8);
+    __gmpz_clear(__gen_e_acsl_sub_6);
+    __gmpz_clear(__gen_e_acsl_add_3);
   }
   __retres = strncpy(dest,src,n);
   __e_acsl_initialize((void *)dest,n);
   {
-    unsigned long __gen_e_acsl_size_6;
-    __e_acsl_mpz_t __gen_e_acsl__8;
-    __e_acsl_mpz_t __gen_e_acsl_sub_3;
-    __e_acsl_mpz_t __gen_e_acsl__9;
-    __e_acsl_mpz_t __gen_e_acsl_sub_4;
-    __e_acsl_mpz_t __gen_e_acsl_add_2;
-    unsigned long __gen_e_acsl__10;
-    unsigned long __gen_e_acsl_if_6;
-    int __gen_e_acsl_initialized;
+    unsigned long __gen_e_acsl_size_8;
+    __e_acsl_mpz_t __gen_e_acsl__14;
+    __e_acsl_mpz_t __gen_e_acsl_sub_7;
+    __e_acsl_mpz_t __gen_e_acsl__15;
+    __e_acsl_mpz_t __gen_e_acsl_sub_8;
+    __e_acsl_mpz_t __gen_e_acsl_add_4;
+    unsigned long __gen_e_acsl__16;
+    unsigned long __gen_e_acsl_if_8;
+    int __gen_e_acsl_initialized_2;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_6 =
       {.values = (void *)0};
     __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_6,"\\result",
@@ -283,27 +285,27 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_7 =
       {.values = (void *)0};
-    __gmpz_init_set_si(__gen_e_acsl__8,1L);
-    __gmpz_init(__gen_e_acsl_sub_3);
-    __gmpz_sub(__gen_e_acsl_sub_3,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_2),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl__8));
-    __gmpz_init_set_si(__gen_e_acsl__9,0L);
-    __gmpz_init(__gen_e_acsl_sub_4);
-    __gmpz_sub(__gen_e_acsl_sub_4,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_3),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl__9));
-    __gmpz_init(__gen_e_acsl_add_2);
-    __gmpz_add(__gen_e_acsl_add_2,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_4),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl__8));
-    __gen_e_acsl__10 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
-    __gen_e_acsl_size_6 = 1UL * __gen_e_acsl__10;
-    if (__gen_e_acsl_size_6 <= 0UL) __gen_e_acsl_if_6 = 0UL;
-    else __gen_e_acsl_if_6 = __gen_e_acsl_size_6;
-    __gen_e_acsl_initialized = __e_acsl_initialized((void *)(__gen_e_acsl_at + 
-                                                             1 * 0),
-                                                    __gen_e_acsl_if_6);
+    __gmpz_init_set_si(__gen_e_acsl__14,1L);
+    __gmpz_init(__gen_e_acsl_sub_7);
+    __gmpz_sub(__gen_e_acsl_sub_7,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_3),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__14));
+    __gmpz_init_set_si(__gen_e_acsl__15,0L);
+    __gmpz_init(__gen_e_acsl_sub_8);
+    __gmpz_sub(__gen_e_acsl_sub_8,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_7),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__15));
+    __gmpz_init(__gen_e_acsl_add_4);
+    __gmpz_add(__gen_e_acsl_add_4,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_8),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__14));
+    __gen_e_acsl__16 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_4));
+    __gen_e_acsl_size_8 = 1UL * __gen_e_acsl__16;
+    if (__gen_e_acsl_size_8 <= 0UL) __gen_e_acsl_if_8 = 0UL;
+    else __gen_e_acsl_if_8 = __gen_e_acsl_size_8;
+    __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)(__gen_e_acsl_at + 
+                                                               1 * 0),
+                                                      __gen_e_acsl_if_8);
     __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_7,"\\old(dest)",
                                  (void *)__gen_e_acsl_at);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_7,"sizeof(char)",
@@ -311,14 +313,14 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_7,"sizeof(char)",
                                  0,1);
     __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_7,"\\old(n)",0,
-                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_2));
+                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_3));
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_7,"size",0,
-                                   __gen_e_acsl_size_6);
+                                   __gen_e_acsl_size_8);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_7,"size",0,
-                                   __gen_e_acsl_size_6);
+                                   __gen_e_acsl_size_8);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_7,
                                  "initialization: \\initialized(\\old(dest) + (0 .. \\old(n) - 1))",
-                                 0,__gen_e_acsl_initialized);
+                                 0,__gen_e_acsl_initialized_2);
     __gen_e_acsl_assert_data_7.blocking = 1;
     __gen_e_acsl_assert_data_7.kind = "Postcondition";
     __gen_e_acsl_assert_data_7.pred_txt = "\\initialized(\\old(dest) + (0 .. \\old(n) - 1))";
@@ -326,17 +328,17 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_7.fct = "strncpy";
     __gen_e_acsl_assert_data_7.line = 438;
     __gen_e_acsl_assert_data_7.name = "initialization";
-    __e_acsl_assert(__gen_e_acsl_initialized,& __gen_e_acsl_assert_data_7);
+    __e_acsl_assert(__gen_e_acsl_initialized_2,& __gen_e_acsl_assert_data_7);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
     __e_acsl_contract_clean(__gen_e_acsl_contract);
     __e_acsl_delete_block((void *)(& src));
     __e_acsl_delete_block((void *)(& dest));
-    __gmpz_clear(__gen_e_acsl__8);
-    __gmpz_clear(__gen_e_acsl_sub_3);
-    __gmpz_clear(__gen_e_acsl__9);
-    __gmpz_clear(__gen_e_acsl_sub_4);
-    __gmpz_clear(__gen_e_acsl_add_2);
-    __gmpz_clear(__gen_e_acsl_at_2);
+    __gmpz_clear(__gen_e_acsl__14);
+    __gmpz_clear(__gen_e_acsl_sub_7);
+    __gmpz_clear(__gen_e_acsl__15);
+    __gmpz_clear(__gen_e_acsl_sub_8);
+    __gmpz_clear(__gen_e_acsl_add_4);
+    __gmpz_clear(__gen_e_acsl_at_3);
     return __retres;
   }
 }
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcmp.c b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcmp.c
index 22861bb8b860502478a963a058939debbb3fe233..22c523cc0e400b2f2d32a346ef8fafb958ff87f6 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcmp.c
+++ b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcmp.c
@@ -158,7 +158,9 @@ __inline static void fail_ncomp(int cond, char *fmt, int l, int r)
 char *__gen_e_acsl_strdup(char const *s)
 {
   __e_acsl_contract_t *__gen_e_acsl_contract;
+  char const *__gen_e_acsl_at;
   char *__retres;
+  __gen_e_acsl_at = s;
   __gen_e_acsl_contract = __e_acsl_contract_init(2UL);
   __retres = strdup(s);
   {
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c
index 9c38744e026b52389077dae64f7fe875e17a8dd0..08a859cae3870b75595d0c5de2dc1ed0efd8a12f 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c
+++ b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c
@@ -571,7 +571,9 @@ void test_memory_tracking(void)
 char *__gen_e_acsl_strdup(char const *s)
 {
   __e_acsl_contract_t *__gen_e_acsl_contract;
+  char const *__gen_e_acsl_at;
   char *__retres;
+  __gen_e_acsl_at = s;
   __gen_e_acsl_contract = __e_acsl_contract_init(2UL);
   __retres = strdup(s);
   {
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/gen_strlen.c b/src/plugins/e-acsl/tests/builtin/oracle/gen_strlen.c
index fbde72d4e6bb3694690b2025904cbcf9a5e49a5f..72856675c7256d5ff38179c189fcb2ddcbc1675e 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/gen_strlen.c
+++ b/src/plugins/e-acsl/tests/builtin/oracle/gen_strlen.c
@@ -132,7 +132,9 @@ char *__gen_e_acsl_strdup(char const *s);
 char *__gen_e_acsl_strdup(char const *s)
 {
   __e_acsl_contract_t *__gen_e_acsl_contract;
+  char const *__gen_e_acsl_at;
   char *__retres;
+  __gen_e_acsl_at = s;
   __gen_e_acsl_contract = __e_acsl_contract_init(2UL);
   __retres = strdup(s);
   {
diff --git a/src/plugins/e-acsl/tests/examples/functions_contiki.c b/src/plugins/e-acsl/tests/examples/functions_contiki.c
index 2ff9daebd5d78c03b9fa541bf0fc71461d27285b..45ff25a313aaf719bd2f8d529571f18707ada62e 100644
--- a/src/plugins/e-acsl/tests/examples/functions_contiki.c
+++ b/src/plugins/e-acsl/tests/examples/functions_contiki.c
@@ -1,4 +1,5 @@
 /* run.config
+   STDOPT: +"-eva-unroll-recursive-calls 5"
    COMMENT: functions used in Contiki
 */
 
diff --git a/src/plugins/e-acsl/tests/examples/oracle/functions_contiki.res.oracle b/src/plugins/e-acsl/tests/examples/oracle/functions_contiki.res.oracle
index 7becfbbc7834eb8af9c7dc3946ae0b88d8d1a0b0..df1002f83e4a186ee2c81c4bec178b2b1663353b 100644
--- a/src/plugins/e-acsl/tests/examples/oracle/functions_contiki.res.oracle
+++ b/src/plugins/e-acsl/tests/examples/oracle/functions_contiki.res.oracle
@@ -1,8 +1,8 @@
 [e-acsl] beginning translation.
-[e-acsl] functions_contiki.c:27: Warning: 
+[e-acsl] functions_contiki.c:28: Warning: 
   no assigns clause generated for function length because pointers as arguments is not yet supported
-[e-acsl] functions_contiki.c:27: Warning: 
-  E-ACSL construct `logic functions with labels' is not yet supported.
-  Ignoring annotation.
+[e-acsl] functions_contiki.c:28: Warning: 
+  no assigns clause generated for function length_aux because pointers as arguments is not yet supported
 [e-acsl] translation done in project "e-acsl".
-[eva:alarm] functions_contiki.c:27: Warning: assertion got status unknown.
+[eva:alarm] functions_contiki.c:18: Warning: 
+  accessing uninitialized left-value. assert \initialized(&l->next);
diff --git a/src/plugins/e-acsl/tests/examples/oracle/gen_functions_contiki.c b/src/plugins/e-acsl/tests/examples/oracle/gen_functions_contiki.c
index 0c529b0a24a4ede16794536a1fce067e84579189..e7954636ad487616bd571772f858217ff2a5769e 100644
--- a/src/plugins/e-acsl/tests/examples/oracle/gen_functions_contiki.c
+++ b/src/plugins/e-acsl/tests/examples/oracle/gen_functions_contiki.c
@@ -20,9 +20,13 @@ logic integer length_aux{L}(struct list *l, integer n) =
            (n < 2147483647? length_aux(l->next, n + 1): -1)),
       L);
  */
+long __gen_e_acsl_length_aux_here(struct list *l, unsigned int n);
+
 /*@ logic integer length{L}(struct list *l) = \at(length_aux(l, 0),L);
 
 */
+long __gen_e_acsl_length_here(struct list *l);
+
 int main(void)
 {
   int __retres;
@@ -40,6 +44,24 @@ int main(void)
   struct list *l = & node1;
   __e_acsl_store_block((void *)(& l),8UL);
   __e_acsl_full_init((void *)(& l));
+  {
+    long __gen_e_acsl_length_here_2;
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
+    __gen_e_acsl_length_here_2 = __gen_e_acsl_length_here(l);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"l",(void *)l);
+    __e_acsl_assert_register_long(& __gen_e_acsl_assert_data,
+                                  "__gen_e_acsl_length_here(l)",0,
+                                  __gen_e_acsl_length_here_2);
+    __gen_e_acsl_assert_data.blocking = 1;
+    __gen_e_acsl_assert_data.kind = "Assertion";
+    __gen_e_acsl_assert_data.pred_txt = "length(l) == 3";
+    __gen_e_acsl_assert_data.file = "functions_contiki.c";
+    __gen_e_acsl_assert_data.fct = "main";
+    __gen_e_acsl_assert_data.line = 28;
+    __e_acsl_assert(__gen_e_acsl_length_here_2 == 3L,
+                    & __gen_e_acsl_assert_data);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
+  }
   /*@ assert length(l) == 3; */ ;
   __retres = 0;
   __e_acsl_delete_block((void *)(& l));
@@ -50,4 +72,35 @@ int main(void)
   return __retres;
 }
 
+long __gen_e_acsl_length_here(struct list *l)
+{
+  long __gen_e_acsl_length_aux_here_4;
+  __gen_e_acsl_length_aux_here_4 = __gen_e_acsl_length_aux_here(l,0U);
+  return __gen_e_acsl_length_aux_here_4;
+}
+
+long __gen_e_acsl_length_aux_here(struct list *l, unsigned int n)
+{
+  long __gen_e_acsl_if_3;
+  if (n < 0U) __gen_e_acsl_if_3 = -1;
+  else {
+    long __gen_e_acsl_if_2;
+    if (l == (struct list *)0) __gen_e_acsl_if_2 = n;
+    else {
+      long __gen_e_acsl_if;
+      if (n < 2147483647U) {
+        long __gen_e_acsl_length_aux_here_3;
+        /*@ assert Eva: initialization: \initialized(&l->next); */
+        __gen_e_acsl_length_aux_here_3 = __gen_e_acsl_length_aux_here
+        (l->next,n + 1U);
+        __gen_e_acsl_if = __gen_e_acsl_length_aux_here_3;
+      }
+      else __gen_e_acsl_if = -1;
+      __gen_e_acsl_if_2 = __gen_e_acsl_if;
+    }
+    __gen_e_acsl_if_3 = __gen_e_acsl_if_2;
+  }
+  return __gen_e_acsl_if_3;
+}
+
 
diff --git a/src/plugins/e-acsl/tests/format/oracle/gen_printf.c b/src/plugins/e-acsl/tests/format/oracle/gen_printf.c
index 0fd82086aff53183bb5c5a2f320a2fb4a147469d..498e8881d33844d2151eea6f3457761ecf70eb49 100644
--- a/src/plugins/e-acsl/tests/format/oracle/gen_printf.c
+++ b/src/plugins/e-acsl/tests/format/oracle/gen_printf.c
@@ -736,11 +736,13 @@ void test_specifier_application(char const *allowed, char const *fmt,
 char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src)
 {
   unsigned long __gen_e_acsl_strcpy_src_size;
+  char const *__gen_e_acsl_at_2;
   char *__gen_e_acsl_at;
   char *__retres;
   __e_acsl_store_block((void *)(& src),8UL);
   __e_acsl_store_block((void *)(& dest),8UL);
   __gen_e_acsl_at = dest;
+  __gen_e_acsl_at_2 = src;
   __gen_e_acsl_strcpy_src_size = __e_acsl_builtin_strlen(src);
   __retres = strcpy(dest,src);
   {
@@ -945,8 +947,10 @@ char *__gen_e_acsl_strchr(char const *s, int c)
  */
 size_t __gen_e_acsl_strlen(char const *s)
 {
+  char const *__gen_e_acsl_at;
   size_t __retres;
   __e_acsl_store_block((void *)(& s),8UL);
+  __gen_e_acsl_at = s;
   __retres = strlen(s);
   __e_acsl_delete_block((void *)(& s));
   return __retres;
diff --git a/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c b/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c
index 32abf0b9b66fd9826f2f2341ac33d477707ef7e4..483dbf2f421fe71d14ed5a5f7d81ad1ce620b7d0 100644
--- a/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c
+++ b/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c
@@ -9,6 +9,12 @@
 #include "time.h"
 extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;
 
+int ( __gen_e_acsl_empty_block_here)(void *s);
+
+int ( __gen_e_acsl_valid_or_empty_here)(void *s, unsigned long n);
+
+int ( __gen_e_acsl_valid_read_or_empty_here)(void *s, unsigned long n);
+
 /*@ requires valid_dest: valid_or_empty(dest, n);
     requires valid_src: valid_read_or_empty(src, n);
     requires
@@ -398,10 +404,35 @@ int main(void)
  */
 void *__gen_e_acsl_memset(void *s, int c, size_t n)
 {
+  size_t __gen_e_acsl_at_3;
+  int __gen_e_acsl_at_2;
   void *__gen_e_acsl_at;
   void *__retres;
-  __e_acsl_store_block((void *)(& s),8UL);
-  __gen_e_acsl_at = s;
+  {
+    int __gen_e_acsl_valid_or_empty_here_2;
+    __e_acsl_store_block((void *)(& s),8UL);
+    __gen_e_acsl_at = s;
+    __gen_e_acsl_at_2 = c;
+    __gen_e_acsl_at_3 = n;
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
+    __gen_e_acsl_valid_or_empty_here_2 = __gen_e_acsl_valid_or_empty_here
+    (s,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"n",0,n);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"s",s);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,
+                                 "valid_s: __gen_e_acsl_valid_or_empty_here(s, n)",
+                                 0,__gen_e_acsl_valid_or_empty_here_2);
+    __gen_e_acsl_assert_data.blocking = 1;
+    __gen_e_acsl_assert_data.kind = "Precondition";
+    __gen_e_acsl_assert_data.pred_txt = "valid_or_empty(s, n)";
+    __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data.fct = "memset";
+    __gen_e_acsl_assert_data.line = 148;
+    __gen_e_acsl_assert_data.name = "valid_s";
+    __e_acsl_assert(__gen_e_acsl_valid_or_empty_here_2,
+                    & __gen_e_acsl_assert_data);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
+  }
   __retres = memset(s,c,n);
   __e_acsl_initialize(s,n);
   {
@@ -441,27 +472,69 @@ void *__gen_e_acsl_memmove(void *dest, void const *src, size_t n)
 {
   void *__gen_e_acsl_at;
   void *__retres;
-  __e_acsl_store_block((void *)(& src),8UL);
-  __e_acsl_store_block((void *)(& dest),8UL);
-  __gen_e_acsl_at = dest;
+  {
+    int __gen_e_acsl_valid_or_empty_here_3;
+    int __gen_e_acsl_valid_read_or_empty_here_2;
+    __e_acsl_store_block((void *)(& src),8UL);
+    __e_acsl_store_block((void *)(& dest),8UL);
+    __gen_e_acsl_at = dest;
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
+    __gen_e_acsl_valid_or_empty_here_3 = __gen_e_acsl_valid_or_empty_here
+    (dest,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"n",0,n);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"dest",dest);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,
+                                 "valid_dest: __gen_e_acsl_valid_or_empty_here(dest, n)",
+                                 0,__gen_e_acsl_valid_or_empty_here_3);
+    __gen_e_acsl_assert_data.blocking = 1;
+    __gen_e_acsl_assert_data.kind = "Precondition";
+    __gen_e_acsl_assert_data.pred_txt = "valid_or_empty(dest, n)";
+    __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data.fct = "memmove";
+    __gen_e_acsl_assert_data.line = 137;
+    __gen_e_acsl_assert_data.name = "valid_dest";
+    __e_acsl_assert(__gen_e_acsl_valid_or_empty_here_3,
+                    & __gen_e_acsl_assert_data);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
+      {.values = (void *)0};
+    __gen_e_acsl_valid_read_or_empty_here_2 = __gen_e_acsl_valid_read_or_empty_here
+    ((void *)src,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,"n",0,n);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_2,"src",
+                                 (void *)src);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,
+                                 "valid_src: __gen_e_acsl_valid_read_or_empty_here(src, n)",
+                                 0,__gen_e_acsl_valid_read_or_empty_here_2);
+    __gen_e_acsl_assert_data_2.blocking = 1;
+    __gen_e_acsl_assert_data_2.kind = "Precondition";
+    __gen_e_acsl_assert_data_2.pred_txt = "valid_read_or_empty(src, n)";
+    __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_2.fct = "memmove";
+    __gen_e_acsl_assert_data_2.line = 138;
+    __gen_e_acsl_assert_data_2.name = "valid_src";
+    __e_acsl_assert(__gen_e_acsl_valid_read_or_empty_here_2,
+                    & __gen_e_acsl_assert_data_2);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
+  }
   __retres = memmove(dest,src,n);
   __e_acsl_initialize(dest,n);
   {
-    __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_5 =
       {.values = (void *)0};
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,"\\result",
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,"\\result",
                                  __retres);
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,"\\old(dest)",
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,"\\old(dest)",
                                  __gen_e_acsl_at);
-    __gen_e_acsl_assert_data_4.blocking = 1;
-    __gen_e_acsl_assert_data_4.kind = "Postcondition";
-    __gen_e_acsl_assert_data_4.pred_txt = "\\result == \\old(dest)";
-    __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
-    __gen_e_acsl_assert_data_4.fct = "memmove";
-    __gen_e_acsl_assert_data_4.line = 142;
-    __gen_e_acsl_assert_data_4.name = "result_ptr";
-    __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_4);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
+    __gen_e_acsl_assert_data_5.blocking = 1;
+    __gen_e_acsl_assert_data_5.kind = "Postcondition";
+    __gen_e_acsl_assert_data_5.pred_txt = "\\result == \\old(dest)";
+    __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_5.fct = "memmove";
+    __gen_e_acsl_assert_data_5.line = 142;
+    __gen_e_acsl_assert_data_5.name = "result_ptr";
+    __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_5);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
     __e_acsl_delete_block((void *)(& src));
     __e_acsl_delete_block((void *)(& dest));
     return __retres;
@@ -489,6 +562,8 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
   void *__gen_e_acsl_at;
   void *__retres;
   {
+    int __gen_e_acsl_valid_or_empty_here_4;
+    int __gen_e_acsl_valid_read_or_empty_here_3;
     unsigned long __gen_e_acsl_size;
     __e_acsl_mpz_t __gen_e_acsl_n;
     __e_acsl_mpz_t __gen_e_acsl_;
@@ -513,6 +588,44 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
     __e_acsl_store_block((void *)(& src),8UL);
     __e_acsl_store_block((void *)(& dest),8UL);
     __gen_e_acsl_at = dest;
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
+    __gen_e_acsl_valid_or_empty_here_4 = __gen_e_acsl_valid_or_empty_here
+    (dest,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"n",0,n);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"dest",dest);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,
+                                 "valid_dest: __gen_e_acsl_valid_or_empty_here(dest, n)",
+                                 0,__gen_e_acsl_valid_or_empty_here_4);
+    __gen_e_acsl_assert_data.blocking = 1;
+    __gen_e_acsl_assert_data.kind = "Precondition";
+    __gen_e_acsl_assert_data.pred_txt = "valid_or_empty(dest, n)";
+    __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data.fct = "memcpy";
+    __gen_e_acsl_assert_data.line = 112;
+    __gen_e_acsl_assert_data.name = "valid_dest";
+    __e_acsl_assert(__gen_e_acsl_valid_or_empty_here_4,
+                    & __gen_e_acsl_assert_data);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
+      {.values = (void *)0};
+    __gen_e_acsl_valid_read_or_empty_here_3 = __gen_e_acsl_valid_read_or_empty_here
+    ((void *)src,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,"n",0,n);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_2,"src",
+                                 (void *)src);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,
+                                 "valid_src: __gen_e_acsl_valid_read_or_empty_here(src, n)",
+                                 0,__gen_e_acsl_valid_read_or_empty_here_3);
+    __gen_e_acsl_assert_data_2.blocking = 1;
+    __gen_e_acsl_assert_data_2.kind = "Precondition";
+    __gen_e_acsl_assert_data_2.pred_txt = "valid_read_or_empty(src, n)";
+    __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_2.fct = "memcpy";
+    __gen_e_acsl_assert_data_2.line = 113;
+    __gen_e_acsl_assert_data_2.name = "valid_src";
+    __e_acsl_assert(__gen_e_acsl_valid_read_or_empty_here_3,
+                    & __gen_e_acsl_assert_data_2);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 =
       {.values = (void *)0};
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
@@ -666,4 +779,176 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
   }
 }
 
+int ( __gen_e_acsl_valid_or_empty_here)(void *s, unsigned long n)
+{
+  int __gen_e_acsl_empty_block_here_2;
+  int __gen_e_acsl_or;
+  int __gen_e_acsl_and_2;
+  __gen_e_acsl_empty_block_here_2 = __gen_e_acsl_empty_block_here(s);
+  if (__gen_e_acsl_empty_block_here_2) __gen_e_acsl_or = 1;
+  else {
+    int __gen_e_acsl_valid_read;
+    __gen_e_acsl_valid_read = __e_acsl_valid_read(s,sizeof(char),s,
+                                                  (void *)(& s));
+    __gen_e_acsl_or = __gen_e_acsl_valid_read;
+  }
+  if (__gen_e_acsl_or) {
+    unsigned long __gen_e_acsl_size;
+    __e_acsl_mpz_t __gen_e_acsl_n;
+    __e_acsl_mpz_t __gen_e_acsl_;
+    __e_acsl_mpz_t __gen_e_acsl_sub;
+    __e_acsl_mpz_t __gen_e_acsl__2;
+    __e_acsl_mpz_t __gen_e_acsl_sub_2;
+    __e_acsl_mpz_t __gen_e_acsl_add;
+    unsigned long __gen_e_acsl__3;
+    unsigned long __gen_e_acsl_if;
+    int __gen_e_acsl_valid;
+    __gmpz_init_set_ui(__gen_e_acsl_n,n);
+    __gmpz_init_set_si(__gen_e_acsl_,1L);
+    __gmpz_init(__gen_e_acsl_sub);
+    __gmpz_sub(__gen_e_acsl_sub,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gmpz_init_set_si(__gen_e_acsl__2,0L);
+    __gmpz_init(__gen_e_acsl_sub_2);
+    __gmpz_sub(__gen_e_acsl_sub_2,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
+    __gmpz_init(__gen_e_acsl_add);
+    __gmpz_add(__gen_e_acsl_add,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_2),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gen_e_acsl__3 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
+    __gen_e_acsl_size = 1UL * __gen_e_acsl__3;
+    if (__gen_e_acsl_size <= 0UL) __gen_e_acsl_if = 0UL;
+    else __gen_e_acsl_if = __gen_e_acsl_size;
+    __gen_e_acsl_valid = __e_acsl_valid((void *)((char *)s + 1 * 0),
+                                        __gen_e_acsl_if,s,(void *)(& s));
+    __gen_e_acsl_and_2 = __gen_e_acsl_valid;
+    __gmpz_clear(__gen_e_acsl_n);
+    __gmpz_clear(__gen_e_acsl_);
+    __gmpz_clear(__gen_e_acsl_sub);
+    __gmpz_clear(__gen_e_acsl__2);
+    __gmpz_clear(__gen_e_acsl_sub_2);
+    __gmpz_clear(__gen_e_acsl_add);
+  }
+  else __gen_e_acsl_and_2 = 0;
+  return __gen_e_acsl_and_2;
+}
+
+int ( __gen_e_acsl_empty_block_here)(void *s)
+{
+  unsigned long __gen_e_acsl_block_length;
+  int __gen_e_acsl_and;
+  __gen_e_acsl_block_length = __e_acsl_block_length(s);
+  if (__gen_e_acsl_block_length == 0UL) {
+    unsigned long __gen_e_acsl_offset;
+    __gen_e_acsl_offset = __e_acsl_offset(s);
+    __gen_e_acsl_and = __gen_e_acsl_offset == 0UL;
+  }
+  else __gen_e_acsl_and = 0;
+  return __gen_e_acsl_and;
+}
+
+int ( __gen_e_acsl_valid_read_or_empty_here)(void *s, unsigned long n)
+{
+  int __gen_e_acsl_empty_block_here_3;
+  int __gen_e_acsl_or;
+  int __gen_e_acsl_and;
+  __gen_e_acsl_empty_block_here_3 = __gen_e_acsl_empty_block_here(s);
+  if (__gen_e_acsl_empty_block_here_3) __gen_e_acsl_or = 1;
+  else {
+    int __gen_e_acsl_valid_read;
+    __gen_e_acsl_valid_read = __e_acsl_valid_read(s,sizeof(char),s,
+                                                  (void *)(& s));
+    __gen_e_acsl_or = __gen_e_acsl_valid_read;
+  }
+  if (__gen_e_acsl_or) {
+    __e_acsl_mpz_t __gen_e_acsl_size;
+    __e_acsl_mpz_t __gen_e_acsl_sizeof;
+    __e_acsl_mpz_t __gen_e_acsl_n;
+    __e_acsl_mpz_t __gen_e_acsl_;
+    __e_acsl_mpz_t __gen_e_acsl_sub;
+    __e_acsl_mpz_t __gen_e_acsl_sub_2;
+    __e_acsl_mpz_t __gen_e_acsl_add;
+    __e_acsl_mpz_t __gen_e_acsl_mul;
+    __e_acsl_mpz_t __gen_e_acsl__2;
+    int __gen_e_acsl_le;
+    __e_acsl_mpz_t __gen_e_acsl_if;
+    __e_acsl_mpz_t __gen_e_acsl__4;
+    int __gen_e_acsl_le_2;
+    unsigned long __gen_e_acsl_size_2;
+    int __gen_e_acsl_valid_read_2;
+    __gmpz_init_set_si(__gen_e_acsl_sizeof,1L);
+    __gmpz_init_set_ui(__gen_e_acsl_n,n);
+    __gmpz_init_set_si(__gen_e_acsl_,1L);
+    __gmpz_init(__gen_e_acsl_sub);
+    __gmpz_sub(__gen_e_acsl_sub,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gmpz_init(__gen_e_acsl_sub_2);
+    __gmpz_sub(__gen_e_acsl_sub_2,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gmpz_init(__gen_e_acsl_add);
+    __gmpz_add(__gen_e_acsl_add,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_2),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gmpz_init(__gen_e_acsl_mul);
+    __gmpz_mul(__gen_e_acsl_mul,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sizeof),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
+    __gmpz_init_set(__gen_e_acsl_size,
+                    (__e_acsl_mpz_struct const *)(__gen_e_acsl_mul));
+    __gmpz_init_set_si(__gen_e_acsl__2,0L);
+    __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_size),
+                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
+    if (__gen_e_acsl_le <= 0) {
+      __e_acsl_mpz_t __gen_e_acsl__3;
+      __gmpz_init_set_si(__gen_e_acsl__3,0L);
+      __gmpz_init_set(__gen_e_acsl_if,
+                      (__e_acsl_mpz_struct const *)(__gen_e_acsl__3));
+      __gmpz_clear(__gen_e_acsl__3);
+    }
+    else __gmpz_init_set(__gen_e_acsl_if,
+                         (__e_acsl_mpz_struct const *)(__gen_e_acsl_size));
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 =
+      {.values = (void *)0};
+    __gmpz_init_set_ui(__gen_e_acsl__4,18446744073709551615UL);
+    __gen_e_acsl_le_2 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_if),
+                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__4));
+    __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_3,
+                                 "__gen_e_acsl_if",0,
+                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_if));
+    __gen_e_acsl_assert_data_3.blocking = 1;
+    __gen_e_acsl_assert_data_3.kind = "RTE";
+    __gen_e_acsl_assert_data_3.pred_txt = "(\\let size = sizeof(char) * (((n - 1) - 1) + 1); size <= 0? 0: size) <=\n18446744073709551615";
+    __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_3.fct = "valid_read_or_empty_here";
+    __gen_e_acsl_assert_data_3.line = 52;
+    __gen_e_acsl_assert_data_3.name = "offset_lesser_or_eq_than_SIZE_MAX";
+    __e_acsl_assert(__gen_e_acsl_le_2 <= 0,& __gen_e_acsl_assert_data_3);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
+    __gen_e_acsl_size_2 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_if));
+    __gen_e_acsl_valid_read_2 = __e_acsl_valid_read((void *)((char *)s + 
+                                                             1 * 1),
+                                                    __gen_e_acsl_size_2,s,
+                                                    (void *)(& s));
+    __gen_e_acsl_and = __gen_e_acsl_valid_read_2;
+    __gmpz_clear(__gen_e_acsl_size);
+    __gmpz_clear(__gen_e_acsl_sizeof);
+    __gmpz_clear(__gen_e_acsl_n);
+    __gmpz_clear(__gen_e_acsl_);
+    __gmpz_clear(__gen_e_acsl_sub);
+    __gmpz_clear(__gen_e_acsl_sub_2);
+    __gmpz_clear(__gen_e_acsl_add);
+    __gmpz_clear(__gen_e_acsl_mul);
+    __gmpz_clear(__gen_e_acsl__2);
+    __gmpz_clear(__gen_e_acsl_if);
+    __gmpz_clear(__gen_e_acsl__4);
+  }
+  else __gen_e_acsl_and = 0;
+  return __gen_e_acsl_and;
+}
+
 
diff --git a/src/plugins/e-acsl/tests/libc/oracle/gen_str.c b/src/plugins/e-acsl/tests/libc/oracle/gen_str.c
index 3489f579ec4b0249d9064a074072cae93e37035c..2c95285a9e9a2b94308334229801130e12d514ce 100644
--- a/src/plugins/e-acsl/tests/libc/oracle/gen_str.c
+++ b/src/plugins/e-acsl/tests/libc/oracle/gen_str.c
@@ -182,30 +182,30 @@ char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
   {
     __e_acsl_mpz_t __gen_e_acsl_strcat_src_size_2;
     __e_acsl_mpz_t __gen_e_acsl_strcat_dest_size_2;
-    __e_acsl_mpz_t __gen_e_acsl_add;
-    __e_acsl_mpz_t __gen_e_acsl_;
-    __e_acsl_mpz_t __gen_e_acsl_add_2;
-    __e_acsl_mpz_t __gen_e_acsl__2;
+    __e_acsl_mpz_t __gen_e_acsl_add_3;
+    __e_acsl_mpz_t __gen_e_acsl__7;
+    __e_acsl_mpz_t __gen_e_acsl_add_4;
+    __e_acsl_mpz_t __gen_e_acsl__8;
     int __gen_e_acsl_le;
-    unsigned long __gen_e_acsl_size_2;
+    unsigned long __gen_e_acsl_size_4;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_8 =
       {.values = (void *)0};
     __gmpz_init_set_ui(__gen_e_acsl_strcat_src_size_2,
                        __gen_e_acsl_strcat_src_size);
     __gmpz_init_set_ui(__gen_e_acsl_strcat_dest_size_2,
                        __gen_e_acsl_strcat_dest_size);
-    __gmpz_init(__gen_e_acsl_add);
-    __gmpz_add(__gen_e_acsl_add,
+    __gmpz_init(__gen_e_acsl_add_3);
+    __gmpz_add(__gen_e_acsl_add_3,
                (__e_acsl_mpz_struct const *)(__gen_e_acsl_strcat_src_size_2),
                (__e_acsl_mpz_struct const *)(__gen_e_acsl_strcat_dest_size_2));
-    __gmpz_init_set_si(__gen_e_acsl_,1L);
-    __gmpz_init(__gen_e_acsl_add_2);
-    __gmpz_add(__gen_e_acsl_add_2,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_add),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
-    __gmpz_init_set_ui(__gen_e_acsl__2,18446744073709551615UL);
-    __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2),
-                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
+    __gmpz_init_set_si(__gen_e_acsl__7,1L);
+    __gmpz_init(__gen_e_acsl_add_4);
+    __gmpz_add(__gen_e_acsl_add_4,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__7));
+    __gmpz_init_set_ui(__gen_e_acsl__8,18446744073709551615UL);
+    __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_4),
+                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl__8));
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_8,
                                    "__gen_e_acsl_strcat_src_size",0,
                                    __gen_e_acsl_strcat_src_size);
@@ -221,14 +221,14 @@ char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_8.name = "size_lesser_or_eq_than_SIZE_MAX";
     __e_acsl_assert(__gen_e_acsl_le <= 0,& __gen_e_acsl_assert_data_8);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8);
-    __gen_e_acsl_size_2 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
-    __e_acsl_initialize((void *)dest,__gen_e_acsl_size_2);
+    __gen_e_acsl_size_4 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_4));
+    __e_acsl_initialize((void *)dest,__gen_e_acsl_size_4);
     __gmpz_clear(__gen_e_acsl_strcat_src_size_2);
     __gmpz_clear(__gen_e_acsl_strcat_dest_size_2);
-    __gmpz_clear(__gen_e_acsl_add);
-    __gmpz_clear(__gen_e_acsl_);
-    __gmpz_clear(__gen_e_acsl_add_2);
-    __gmpz_clear(__gen_e_acsl__2);
+    __gmpz_clear(__gen_e_acsl_add_3);
+    __gmpz_clear(__gen_e_acsl__7);
+    __gmpz_clear(__gen_e_acsl_add_4);
+    __gmpz_clear(__gen_e_acsl__8);
   }
   {
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_9 =
@@ -386,7 +386,8 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
                            size_t n)
 {
   __e_acsl_contract_t *__gen_e_acsl_contract;
-  __e_acsl_mpz_t __gen_e_acsl_at_2;
+  __e_acsl_mpz_t __gen_e_acsl_at_3;
+  char const *__gen_e_acsl_at_2;
   char *__gen_e_acsl_at;
   char *__retres;
   {
@@ -419,8 +420,9 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __e_acsl_store_block((void *)(& src),8UL);
     __e_acsl_store_block((void *)(& dest),8UL);
     __gen_e_acsl_at = dest;
+    __gen_e_acsl_at_2 = src;
     __gmpz_init_set_ui(__gen_e_acsl_n,n);
-    __gmpz_init_set(__gen_e_acsl_at_2,
+    __gmpz_init_set(__gen_e_acsl_at_3,
                     (__e_acsl_mpz_struct const *)(__gen_e_acsl_n));
     __gen_e_acsl_contract = __e_acsl_contract_init(2UL);
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
@@ -618,7 +620,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gmpz_init_set_si(__gen_e_acsl__8,1L);
     __gmpz_init(__gen_e_acsl_sub_3);
     __gmpz_sub(__gen_e_acsl_sub_3,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_2),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_3),
                (__e_acsl_mpz_struct const *)(__gen_e_acsl__8));
     __gmpz_init_set_si(__gen_e_acsl__9,0L);
     __gmpz_init(__gen_e_acsl_sub_4);
@@ -643,7 +645,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_7,"sizeof(char)",
                                  0,1);
     __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_7,"\\old(n)",0,
-                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_2));
+                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_3));
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_7,"size",0,
                                    __gen_e_acsl_size_6);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_7,"size",0,
@@ -668,7 +670,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gmpz_clear(__gen_e_acsl__9);
     __gmpz_clear(__gen_e_acsl_sub_4);
     __gmpz_clear(__gen_e_acsl_add_2);
-    __gmpz_clear(__gen_e_acsl_at_2);
+    __gmpz_clear(__gen_e_acsl_at_3);
     return __retres;
   }
 }
@@ -688,11 +690,13 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
 char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src)
 {
   unsigned long __gen_e_acsl_strcpy_src_size;
+  char const *__gen_e_acsl_at_2;
   char *__gen_e_acsl_at;
   char *__retres;
   __e_acsl_store_block((void *)(& src),8UL);
   __e_acsl_store_block((void *)(& dest),8UL);
   __gen_e_acsl_at = dest;
+  __gen_e_acsl_at_2 = src;
   __gen_e_acsl_strcpy_src_size = __e_acsl_builtin_strlen(src);
   __retres = strcpy(dest,src);
   {
diff --git a/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle b/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle
index 3391277a9a4a8c700164541d29032b764d6a0904..d6ab15b134feef6c04847d8603b2d0b999f4f181 100644
--- a/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle
+++ b/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle
@@ -2,21 +2,14 @@
 [e-acsl] FRAMAC_SHARE/libc/string.h:148: Warning: 
   no assigns clause generated for function valid_or_empty because pointers as arguments is not yet supported
 [e-acsl] FRAMAC_SHARE/libc/string.h:49: Warning: 
-  E-ACSL construct `predicates with labels' is not yet supported.
-  Ignoring annotation.
+  no assigns clause generated for function empty_block because pointers as arguments is not yet supported
 [e-acsl] FRAMAC_SHARE/libc/string.h:148: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:151: Warning: 
   E-ACSL construct `datacons' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:137: Warning: 
-  E-ACSL construct `predicates with labels' is not yet supported.
-  Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:138: Warning: 
   no assigns clause generated for function valid_read_or_empty because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/string.h:52: Warning: 
-  E-ACSL construct `predicates with labels' is not yet supported.
-  Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:137: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
@@ -24,12 +17,6 @@
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:112: Warning: 
-  E-ACSL construct `predicates with labels' is not yet supported.
-  Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:113: Warning: 
-  E-ACSL construct `predicates with labels' is not yet supported.
-  Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:112: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
@@ -38,6 +25,14 @@
   is not yet supported.
   Ignoring annotation.
 [e-acsl] translation done in project "e-acsl".
+[eva:alarm] FRAMAC_SHARE/libc/string.h:148: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:148: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:148: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/string.h:152: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
@@ -82,6 +77,24 @@
 [eva:alarm] mem.c:19: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:112: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:112: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:112: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:52: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:113: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:113: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:113: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
@@ -119,6 +132,22 @@
 [eva:alarm] mem.c:25: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:137: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:137: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:137: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:138: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:138: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:138: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/string.h:142: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
diff --git a/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle b/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle
index 00c9e9bab1d0642c1b664b698c697135bcdc5456..d35a4002aa1ad8679db90991595af70652d7e4b4 100644
--- a/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle
+++ b/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle
@@ -1,8 +1,11 @@
 [e-acsl] beginning translation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:497: Warning: 
   no assigns clause generated for function valid_read_nstring because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:280: Warning: 
-  E-ACSL construct `labeled \valid_read' is not yet supported.
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+  no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
+  E-ACSL construct `logic functions or predicates performing read accesses'
+  is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:498: Warning: 
   no assigns clause generated for function valid_string because pointers as arguments is not yet supported
@@ -60,8 +63,6 @@
   is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:476: Warning: 
-  no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
@@ -93,7 +94,8 @@
   is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:431: Warning: 
-  E-ACSL construct `labeled \valid_read' is not yet supported.
+  E-ACSL construct `logic functions or predicates performing read accesses'
+  is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:440: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
diff --git a/src/plugins/e-acsl/tests/memory/oracle/gen_mainargs.c b/src/plugins/e-acsl/tests/memory/oracle/gen_mainargs.c
index 7244509fa59a1d36e166341d9f8c317efc1f5c3e..06a7c0bcdb3ba3d204cd384176359e57c23508e1 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/gen_mainargs.c
+++ b/src/plugins/e-acsl/tests/memory/oracle/gen_mainargs.c
@@ -392,8 +392,10 @@ int main(int argc, char **argv)
  */
 size_t __gen_e_acsl_strlen(char const *s)
 {
+  char const *__gen_e_acsl_at;
   size_t __retres;
   __e_acsl_store_block((void *)(& s),8UL);
+  __gen_e_acsl_at = s;
   __retres = strlen(s);
   __e_acsl_delete_block((void *)(& s));
   return __retres;
diff --git a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c
index 5284f282963682e4507a2e0de7aa871255547eff..efad32ac68e962ae59e21a54dedcd551f37959b1 100644
--- a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c
+++ b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c
@@ -10,6 +10,12 @@
 #include "time.h"
 extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;
 
+int ( __gen_e_acsl_empty_block_here)(void *s);
+
+int ( __gen_e_acsl_valid_or_empty_here)(void *s, unsigned long n);
+
+int ( __gen_e_acsl_valid_read_or_empty_here)(void *s, unsigned long n);
+
 /*@ requires valid_dest: valid_or_empty(dest, n);
     requires valid_src: valid_read_or_empty(src, n);
     requires
@@ -733,15 +739,40 @@ int main(void)
  */
 void *__gen_e_acsl_memset(void *s, int c, size_t n)
 {
+  size_t __gen_e_acsl_at_3;
+  int __gen_e_acsl_at_2;
   void *__gen_e_acsl_at;
   void *__retres;
-  __e_acsl_store_block((void *)(& s),8UL);
-  __e_acsl_temporal_pull_parameter((void *)(& s),0U,8UL);
-  __gen_e_acsl_at = s;
-  __e_acsl_temporal_reset_parameters();
-  __e_acsl_temporal_reset_return();
-  __e_acsl_temporal_save_nreferent_parameter((void *)(& s),0U);
-  __e_acsl_temporal_memset(s,c,n);
+  {
+    int __gen_e_acsl_valid_or_empty_here_2;
+    __e_acsl_store_block((void *)(& s),8UL);
+    __e_acsl_temporal_pull_parameter((void *)(& s),0U,8UL);
+    __gen_e_acsl_at = s;
+    __gen_e_acsl_at_2 = c;
+    __gen_e_acsl_at_3 = n;
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
+    __gen_e_acsl_valid_or_empty_here_2 = __gen_e_acsl_valid_or_empty_here
+    (s,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"n",0,n);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"s",s);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,
+                                 "valid_s: __gen_e_acsl_valid_or_empty_here(s, n)",
+                                 0,__gen_e_acsl_valid_or_empty_here_2);
+    __gen_e_acsl_assert_data.blocking = 1;
+    __gen_e_acsl_assert_data.kind = "Precondition";
+    __gen_e_acsl_assert_data.pred_txt = "valid_or_empty(s, n)";
+    __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data.fct = "memset";
+    __gen_e_acsl_assert_data.line = 148;
+    __gen_e_acsl_assert_data.name = "valid_s";
+    __e_acsl_assert(__gen_e_acsl_valid_or_empty_here_2,
+                    & __gen_e_acsl_assert_data);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
+    __e_acsl_temporal_reset_parameters();
+    __e_acsl_temporal_reset_return();
+    __e_acsl_temporal_save_nreferent_parameter((void *)(& s),0U);
+    __e_acsl_temporal_memset(s,c,n);
+  }
   __retres = memset(s,c,n);
   __e_acsl_initialize(s,n);
   {
@@ -786,188 +817,400 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
   void *__gen_e_acsl_at;
   void *__retres;
   {
-    unsigned long __gen_e_acsl_size;
-    __e_acsl_mpz_t __gen_e_acsl_n;
-    __e_acsl_mpz_t __gen_e_acsl_;
-    __e_acsl_mpz_t __gen_e_acsl_sub;
-    __e_acsl_mpz_t __gen_e_acsl__2;
-    __e_acsl_mpz_t __gen_e_acsl_sub_2;
-    __e_acsl_mpz_t __gen_e_acsl_add;
-    unsigned long __gen_e_acsl__3;
-    unsigned long __gen_e_acsl_if;
-    int __gen_e_acsl_valid_read;
-    unsigned long __gen_e_acsl_size_2;
-    unsigned long __gen_e_acsl__4;
-    unsigned long __gen_e_acsl_if_2;
-    int __gen_e_acsl_valid_read_2;
+    int __gen_e_acsl_valid_or_empty_here_3;
+    int __gen_e_acsl_valid_read_or_empty_here_2;
     unsigned long __gen_e_acsl_size_3;
-    unsigned long __gen_e_acsl__5;
-    unsigned long __gen_e_acsl_if_3;
+    __e_acsl_mpz_t __gen_e_acsl_n_2;
+    __e_acsl_mpz_t __gen_e_acsl__5;
+    __e_acsl_mpz_t __gen_e_acsl_sub_3;
+    __e_acsl_mpz_t __gen_e_acsl__6;
+    __e_acsl_mpz_t __gen_e_acsl_sub_4;
+    __e_acsl_mpz_t __gen_e_acsl_add_2;
+    unsigned long __gen_e_acsl__7;
+    unsigned long __gen_e_acsl_if_2;
+    int __gen_e_acsl_valid_read_3;
     unsigned long __gen_e_acsl_size_4;
-    unsigned long __gen_e_acsl__6;
+    unsigned long __gen_e_acsl__8;
+    unsigned long __gen_e_acsl_if_3;
+    int __gen_e_acsl_valid_read_4;
+    unsigned long __gen_e_acsl_size_5;
+    unsigned long __gen_e_acsl__9;
     unsigned long __gen_e_acsl_if_4;
+    unsigned long __gen_e_acsl_size_6;
+    unsigned long __gen_e_acsl__10;
+    unsigned long __gen_e_acsl_if_5;
     int __gen_e_acsl_separated;
     __e_acsl_store_block((void *)(& src),8UL);
     __e_acsl_store_block((void *)(& dest),8UL);
     __e_acsl_temporal_pull_parameter((void *)(& dest),0U,8UL);
     __e_acsl_temporal_pull_parameter((void *)(& src),1U,8UL);
     __gen_e_acsl_at = dest;
-    __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 =
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
+    __gen_e_acsl_valid_or_empty_here_3 = __gen_e_acsl_valid_or_empty_here
+    (dest,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"n",0,n);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"dest",dest);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,
+                                 "valid_dest: __gen_e_acsl_valid_or_empty_here(dest, n)",
+                                 0,__gen_e_acsl_valid_or_empty_here_3);
+    __gen_e_acsl_assert_data.blocking = 1;
+    __gen_e_acsl_assert_data.kind = "Precondition";
+    __gen_e_acsl_assert_data.pred_txt = "valid_or_empty(dest, n)";
+    __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data.fct = "memcpy";
+    __gen_e_acsl_assert_data.line = 112;
+    __gen_e_acsl_assert_data.name = "valid_dest";
+    __e_acsl_assert(__gen_e_acsl_valid_or_empty_here_3,
+                    & __gen_e_acsl_assert_data);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
       {.values = (void *)0};
+    __gen_e_acsl_valid_read_or_empty_here_2 = __gen_e_acsl_valid_read_or_empty_here
+    ((void *)src,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,"n",0,n);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_2,"src",
+                                 (void *)src);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,
+                                 "valid_src: __gen_e_acsl_valid_read_or_empty_here(src, n)",
+                                 0,__gen_e_acsl_valid_read_or_empty_here_2);
+    __gen_e_acsl_assert_data_2.blocking = 1;
+    __gen_e_acsl_assert_data_2.kind = "Precondition";
+    __gen_e_acsl_assert_data_2.pred_txt = "valid_read_or_empty(src, n)";
+    __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_2.fct = "memcpy";
+    __gen_e_acsl_assert_data_2.line = 113;
+    __gen_e_acsl_assert_data_2.name = "valid_src";
+    __e_acsl_assert(__gen_e_acsl_valid_read_or_empty_here_2,
+                    & __gen_e_acsl_assert_data_2);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
       {.values = (void *)0};
-    __gmpz_init_set_ui(__gen_e_acsl_n,n);
-    __gmpz_init_set_si(__gen_e_acsl_,1L);
-    __gmpz_init(__gen_e_acsl_sub);
-    __gmpz_sub(__gen_e_acsl_sub,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
-    __gmpz_init_set_si(__gen_e_acsl__2,0L);
-    __gmpz_init(__gen_e_acsl_sub_2);
-    __gmpz_sub(__gen_e_acsl_sub_2,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
-    __gmpz_init(__gen_e_acsl_add);
-    __gmpz_add(__gen_e_acsl_add,
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_2),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
-    __gen_e_acsl__3 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
-    __gen_e_acsl_size = 1UL * __gen_e_acsl__3;
-    if (__gen_e_acsl_size <= 0UL) __gen_e_acsl_if = 0UL;
-    else __gen_e_acsl_if = __gen_e_acsl_size;
-    __gen_e_acsl_valid_read = __e_acsl_valid_read((void *)((char *)dest + 
-                                                           1 * 0),
-                                                  __gen_e_acsl_if,dest,
-                                                  (void *)(& dest));
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,"dest",dest);
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"sizeof(char)",
-                                 0,1);
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"sizeof(char)",
-                                 0,1);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"n",0,n);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"size",0,
-                                   __gen_e_acsl_size);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"size",0,
-                                   __gen_e_acsl_size);
-    __gen_e_acsl_assert_data_4.blocking = 1;
-    __gen_e_acsl_assert_data_4.kind = "RTE";
-    __gen_e_acsl_assert_data_4.pred_txt = "\\valid_read((char *)dest + (0 .. n - 1))";
-    __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
-    __gen_e_acsl_assert_data_4.fct = "memcpy";
-    __gen_e_acsl_assert_data_4.line = 115;
-    __gen_e_acsl_assert_data_4.name = "separated_guard";
-    __e_acsl_assert(__gen_e_acsl_valid_read,& __gen_e_acsl_assert_data_4);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_5 =
       {.values = (void *)0};
-    __gen_e_acsl__4 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
-    __gen_e_acsl_size_2 = 1UL * __gen_e_acsl__4;
-    if (__gen_e_acsl_size_2 <= 0UL) __gen_e_acsl_if_2 = 0UL;
-    else __gen_e_acsl_if_2 = __gen_e_acsl_size_2;
-    __gen_e_acsl_valid_read_2 = __e_acsl_valid_read((void *)((char *)src + 
+    __gmpz_init_set_ui(__gen_e_acsl_n_2,n);
+    __gmpz_init_set_si(__gen_e_acsl__5,1L);
+    __gmpz_init(__gen_e_acsl_sub_3);
+    __gmpz_sub(__gen_e_acsl_sub_3,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_2),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__5));
+    __gmpz_init_set_si(__gen_e_acsl__6,0L);
+    __gmpz_init(__gen_e_acsl_sub_4);
+    __gmpz_sub(__gen_e_acsl_sub_4,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_3),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__6));
+    __gmpz_init(__gen_e_acsl_add_2);
+    __gmpz_add(__gen_e_acsl_add_2,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_4),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__5));
+    __gen_e_acsl__7 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
+    __gen_e_acsl_size_3 = 1UL * __gen_e_acsl__7;
+    if (__gen_e_acsl_size_3 <= 0UL) __gen_e_acsl_if_2 = 0UL;
+    else __gen_e_acsl_if_2 = __gen_e_acsl_size_3;
+    __gen_e_acsl_valid_read_3 = __e_acsl_valid_read((void *)((char *)dest + 
                                                              1 * 0),
-                                                    __gen_e_acsl_if_2,
-                                                    (void *)src,
-                                                    (void *)(& src));
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,"src",
-                                 (void *)src);
+                                                    __gen_e_acsl_if_2,dest,
+                                                    (void *)(& dest));
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,"dest",dest);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"sizeof(char)",
                                  0,1);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"sizeof(char)",
                                  0,1);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,"n",0,n);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,"size",0,
-                                   __gen_e_acsl_size_2);
+                                   __gen_e_acsl_size_3);
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,"size",0,
-                                   __gen_e_acsl_size_2);
+                                   __gen_e_acsl_size_3);
     __gen_e_acsl_assert_data_5.blocking = 1;
     __gen_e_acsl_assert_data_5.kind = "RTE";
-    __gen_e_acsl_assert_data_5.pred_txt = "\\valid_read((char *)src + (0 .. n - 1))";
+    __gen_e_acsl_assert_data_5.pred_txt = "\\valid_read((char *)dest + (0 .. n - 1))";
     __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_5.fct = "memcpy";
     __gen_e_acsl_assert_data_5.line = 115;
     __gen_e_acsl_assert_data_5.name = "separated_guard";
-    __e_acsl_assert(__gen_e_acsl_valid_read_2,& __gen_e_acsl_assert_data_5);
+    __e_acsl_assert(__gen_e_acsl_valid_read_3,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
-    __gen_e_acsl__5 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
-    __gen_e_acsl_size_3 = 1UL * __gen_e_acsl__5;
-    if (__gen_e_acsl_size_3 <= 0UL) __gen_e_acsl_if_3 = 0UL;
-    else __gen_e_acsl_if_3 = __gen_e_acsl_size_3;
-    __gen_e_acsl__6 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
-    __gen_e_acsl_size_4 = 1UL * __gen_e_acsl__6;
-    if (__gen_e_acsl_size_4 <= 0UL) __gen_e_acsl_if_4 = 0UL;
-    else __gen_e_acsl_if_4 = __gen_e_acsl_size_4;
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_6 =
+      {.values = (void *)0};
+    __gen_e_acsl__8 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
+    __gen_e_acsl_size_4 = 1UL * __gen_e_acsl__8;
+    if (__gen_e_acsl_size_4 <= 0UL) __gen_e_acsl_if_3 = 0UL;
+    else __gen_e_acsl_if_3 = __gen_e_acsl_size_4;
+    __gen_e_acsl_valid_read_4 = __e_acsl_valid_read((void *)((char *)src + 
+                                                             1 * 0),
+                                                    __gen_e_acsl_if_3,
+                                                    (void *)src,
+                                                    (void *)(& src));
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_6,"src",
+                                 (void *)src);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_6,"sizeof(char)",
+                                 0,1);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_6,"sizeof(char)",
+                                 0,1);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_6,"n",0,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_6,"size",0,
+                                   __gen_e_acsl_size_4);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_6,"size",0,
+                                   __gen_e_acsl_size_4);
+    __gen_e_acsl_assert_data_6.blocking = 1;
+    __gen_e_acsl_assert_data_6.kind = "RTE";
+    __gen_e_acsl_assert_data_6.pred_txt = "\\valid_read((char *)src + (0 .. n - 1))";
+    __gen_e_acsl_assert_data_6.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_6.fct = "memcpy";
+    __gen_e_acsl_assert_data_6.line = 115;
+    __gen_e_acsl_assert_data_6.name = "separated_guard";
+    __e_acsl_assert(__gen_e_acsl_valid_read_4,& __gen_e_acsl_assert_data_6);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
+    __gen_e_acsl__9 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
+    __gen_e_acsl_size_5 = 1UL * __gen_e_acsl__9;
+    if (__gen_e_acsl_size_5 <= 0UL) __gen_e_acsl_if_4 = 0UL;
+    else __gen_e_acsl_if_4 = __gen_e_acsl_size_5;
+    __gen_e_acsl__10 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
+    __gen_e_acsl_size_6 = 1UL * __gen_e_acsl__10;
+    if (__gen_e_acsl_size_6 <= 0UL) __gen_e_acsl_if_5 = 0UL;
+    else __gen_e_acsl_if_5 = __gen_e_acsl_size_6;
     __gen_e_acsl_separated = __e_acsl_separated(2UL,(char *)dest + 1 * 0,
-                                                __gen_e_acsl_if_3,
+                                                __gen_e_acsl_if_4,
                                                 (char *)src + 1 * 0,
-                                                __gen_e_acsl_if_4);
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_3,"dest",dest);
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,"sizeof(char)",
+                                                __gen_e_acsl_if_5);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,"dest",dest);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"sizeof(char)",
                                  0,1);
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,"sizeof(char)",
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"sizeof(char)",
                                  0,1);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"n",0,n);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"size",0,
-                                   __gen_e_acsl_size_3);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"size",0,
-                                   __gen_e_acsl_size_3);
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_3,"src",
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"n",0,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"size",0,
+                                   __gen_e_acsl_size_5);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"size",0,
+                                   __gen_e_acsl_size_5);
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,"src",
                                  (void *)src);
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,"sizeof(char)",
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"sizeof(char)",
                                  0,1);
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,"sizeof(char)",
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"sizeof(char)",
                                  0,1);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"n",0,n);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"size",0,
-                                   __gen_e_acsl_size_4);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,"size",0,
-                                   __gen_e_acsl_size_4);
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"n",0,n);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"size",0,
+                                   __gen_e_acsl_size_6);
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,"size",0,
+                                   __gen_e_acsl_size_6);
+    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,
                                  "separation:\n  \\separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1))",
                                  0,__gen_e_acsl_separated);
-    __gen_e_acsl_assert_data_3.blocking = 1;
-    __gen_e_acsl_assert_data_3.kind = "Precondition";
-    __gen_e_acsl_assert_data_3.pred_txt = "\\separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1))";
-    __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
-    __gen_e_acsl_assert_data_3.fct = "memcpy";
-    __gen_e_acsl_assert_data_3.line = 115;
-    __gen_e_acsl_assert_data_3.name = "separation";
-    __e_acsl_assert(__gen_e_acsl_separated,& __gen_e_acsl_assert_data_3);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
+    __gen_e_acsl_assert_data_4.blocking = 1;
+    __gen_e_acsl_assert_data_4.kind = "Precondition";
+    __gen_e_acsl_assert_data_4.pred_txt = "\\separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1))";
+    __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_4.fct = "memcpy";
+    __gen_e_acsl_assert_data_4.line = 115;
+    __gen_e_acsl_assert_data_4.name = "separation";
+    __e_acsl_assert(__gen_e_acsl_separated,& __gen_e_acsl_assert_data_4);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
     __e_acsl_temporal_reset_parameters();
     __e_acsl_temporal_reset_return();
     __e_acsl_temporal_save_nreferent_parameter((void *)(& dest),0U);
     __e_acsl_temporal_save_nreferent_parameter((void *)(& src),1U);
     __e_acsl_temporal_memcpy(dest,(void *)src,n);
-    __gmpz_clear(__gen_e_acsl_n);
-    __gmpz_clear(__gen_e_acsl_);
-    __gmpz_clear(__gen_e_acsl_sub);
-    __gmpz_clear(__gen_e_acsl__2);
-    __gmpz_clear(__gen_e_acsl_sub_2);
-    __gmpz_clear(__gen_e_acsl_add);
+    __gmpz_clear(__gen_e_acsl_n_2);
+    __gmpz_clear(__gen_e_acsl__5);
+    __gmpz_clear(__gen_e_acsl_sub_3);
+    __gmpz_clear(__gen_e_acsl__6);
+    __gmpz_clear(__gen_e_acsl_sub_4);
+    __gmpz_clear(__gen_e_acsl_add_2);
   }
   __retres = memcpy(dest,src,n);
   __e_acsl_initialize(dest,n);
   {
-    __e_acsl_assert_data_t __gen_e_acsl_assert_data_7 =
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_8 =
       {.values = (void *)0};
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_7,"\\result",
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_8,"\\result",
                                  __retres);
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_7,"\\old(dest)",
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_8,"\\old(dest)",
                                  __gen_e_acsl_at);
-    __gen_e_acsl_assert_data_7.blocking = 1;
-    __gen_e_acsl_assert_data_7.kind = "Postcondition";
-    __gen_e_acsl_assert_data_7.pred_txt = "\\result == \\old(dest)";
-    __gen_e_acsl_assert_data_7.file = "FRAMAC_SHARE/libc/string.h";
-    __gen_e_acsl_assert_data_7.fct = "memcpy";
-    __gen_e_acsl_assert_data_7.line = 119;
-    __gen_e_acsl_assert_data_7.name = "result_ptr";
-    __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_7);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
+    __gen_e_acsl_assert_data_8.blocking = 1;
+    __gen_e_acsl_assert_data_8.kind = "Postcondition";
+    __gen_e_acsl_assert_data_8.pred_txt = "\\result == \\old(dest)";
+    __gen_e_acsl_assert_data_8.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_8.fct = "memcpy";
+    __gen_e_acsl_assert_data_8.line = 119;
+    __gen_e_acsl_assert_data_8.name = "result_ptr";
+    __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_8);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8);
     __e_acsl_delete_block((void *)(& src));
     __e_acsl_delete_block((void *)(& dest));
     return __retres;
   }
 }
 
+int ( __gen_e_acsl_valid_or_empty_here)(void *s, unsigned long n)
+{
+  int __gen_e_acsl_empty_block_here_2;
+  int __gen_e_acsl_or;
+  int __gen_e_acsl_and_2;
+  __gen_e_acsl_empty_block_here_2 = __gen_e_acsl_empty_block_here(s);
+  if (__gen_e_acsl_empty_block_here_2) __gen_e_acsl_or = 1;
+  else {
+    int __gen_e_acsl_valid_read;
+    __gen_e_acsl_valid_read = __e_acsl_valid_read(s,sizeof(char),s,
+                                                  (void *)(& s));
+    __gen_e_acsl_or = __gen_e_acsl_valid_read;
+  }
+  if (__gen_e_acsl_or) {
+    unsigned long __gen_e_acsl_size;
+    __e_acsl_mpz_t __gen_e_acsl_n;
+    __e_acsl_mpz_t __gen_e_acsl_;
+    __e_acsl_mpz_t __gen_e_acsl_sub;
+    __e_acsl_mpz_t __gen_e_acsl__2;
+    __e_acsl_mpz_t __gen_e_acsl_sub_2;
+    __e_acsl_mpz_t __gen_e_acsl_add;
+    unsigned long __gen_e_acsl__3;
+    unsigned long __gen_e_acsl_if;
+    int __gen_e_acsl_valid;
+    __gmpz_init_set_ui(__gen_e_acsl_n,n);
+    __gmpz_init_set_si(__gen_e_acsl_,1L);
+    __gmpz_init(__gen_e_acsl_sub);
+    __gmpz_sub(__gen_e_acsl_sub,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gmpz_init_set_si(__gen_e_acsl__2,0L);
+    __gmpz_init(__gen_e_acsl_sub_2);
+    __gmpz_sub(__gen_e_acsl_sub_2,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
+    __gmpz_init(__gen_e_acsl_add);
+    __gmpz_add(__gen_e_acsl_add,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_2),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gen_e_acsl__3 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
+    __gen_e_acsl_size = 1UL * __gen_e_acsl__3;
+    if (__gen_e_acsl_size <= 0UL) __gen_e_acsl_if = 0UL;
+    else __gen_e_acsl_if = __gen_e_acsl_size;
+    __gen_e_acsl_valid = __e_acsl_valid((void *)((char *)s + 1 * 0),
+                                        __gen_e_acsl_if,s,(void *)(& s));
+    __gen_e_acsl_and_2 = __gen_e_acsl_valid;
+    __gmpz_clear(__gen_e_acsl_n);
+    __gmpz_clear(__gen_e_acsl_);
+    __gmpz_clear(__gen_e_acsl_sub);
+    __gmpz_clear(__gen_e_acsl__2);
+    __gmpz_clear(__gen_e_acsl_sub_2);
+    __gmpz_clear(__gen_e_acsl_add);
+  }
+  else __gen_e_acsl_and_2 = 0;
+  return __gen_e_acsl_and_2;
+}
+
+int ( __gen_e_acsl_empty_block_here)(void *s)
+{
+  unsigned long __gen_e_acsl_block_length;
+  int __gen_e_acsl_and;
+  __gen_e_acsl_block_length = __e_acsl_block_length(s);
+  if (__gen_e_acsl_block_length == 0UL) {
+    unsigned long __gen_e_acsl_offset;
+    __gen_e_acsl_offset = __e_acsl_offset(s);
+    __gen_e_acsl_and = __gen_e_acsl_offset == 0UL;
+  }
+  else __gen_e_acsl_and = 0;
+  return __gen_e_acsl_and;
+}
+
+int ( __gen_e_acsl_valid_read_or_empty_here)(void *s, unsigned long n)
+{
+  int __gen_e_acsl_empty_block_here_3;
+  int __gen_e_acsl_or;
+  int __gen_e_acsl_and;
+  __gen_e_acsl_empty_block_here_3 = __gen_e_acsl_empty_block_here(s);
+  if (__gen_e_acsl_empty_block_here_3) __gen_e_acsl_or = 1;
+  else {
+    int __gen_e_acsl_valid_read;
+    __gen_e_acsl_valid_read = __e_acsl_valid_read(s,sizeof(char),s,
+                                                  (void *)(& s));
+    __gen_e_acsl_or = __gen_e_acsl_valid_read;
+  }
+  if (__gen_e_acsl_or) {
+    __e_acsl_mpz_t __gen_e_acsl_size;
+    __e_acsl_mpz_t __gen_e_acsl_sizeof;
+    __e_acsl_mpz_t __gen_e_acsl_n;
+    __e_acsl_mpz_t __gen_e_acsl_;
+    __e_acsl_mpz_t __gen_e_acsl_sub;
+    __e_acsl_mpz_t __gen_e_acsl_sub_2;
+    __e_acsl_mpz_t __gen_e_acsl_add;
+    __e_acsl_mpz_t __gen_e_acsl_mul;
+    __e_acsl_mpz_t __gen_e_acsl__2;
+    int __gen_e_acsl_le;
+    __e_acsl_mpz_t __gen_e_acsl_if;
+    __e_acsl_mpz_t __gen_e_acsl__4;
+    int __gen_e_acsl_le_2;
+    unsigned long __gen_e_acsl_size_2;
+    int __gen_e_acsl_valid_read_2;
+    __gmpz_init_set_si(__gen_e_acsl_sizeof,1L);
+    __gmpz_init_set_ui(__gen_e_acsl_n,n);
+    __gmpz_init_set_si(__gen_e_acsl_,1L);
+    __gmpz_init(__gen_e_acsl_sub);
+    __gmpz_sub(__gen_e_acsl_sub,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gmpz_init(__gen_e_acsl_sub_2);
+    __gmpz_sub(__gen_e_acsl_sub_2,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gmpz_init(__gen_e_acsl_add);
+    __gmpz_add(__gen_e_acsl_add,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_2),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gmpz_init(__gen_e_acsl_mul);
+    __gmpz_mul(__gen_e_acsl_mul,
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_sizeof),
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
+    __gmpz_init_set(__gen_e_acsl_size,
+                    (__e_acsl_mpz_struct const *)(__gen_e_acsl_mul));
+    __gmpz_init_set_si(__gen_e_acsl__2,0L);
+    __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_size),
+                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
+    if (__gen_e_acsl_le <= 0) {
+      __e_acsl_mpz_t __gen_e_acsl__3;
+      __gmpz_init_set_si(__gen_e_acsl__3,0L);
+      __gmpz_init_set(__gen_e_acsl_if,
+                      (__e_acsl_mpz_struct const *)(__gen_e_acsl__3));
+      __gmpz_clear(__gen_e_acsl__3);
+    }
+    else __gmpz_init_set(__gen_e_acsl_if,
+                         (__e_acsl_mpz_struct const *)(__gen_e_acsl_size));
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 =
+      {.values = (void *)0};
+    __gmpz_init_set_ui(__gen_e_acsl__4,18446744073709551615UL);
+    __gen_e_acsl_le_2 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_if),
+                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__4));
+    __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_3,
+                                 "__gen_e_acsl_if",0,
+                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_if));
+    __gen_e_acsl_assert_data_3.blocking = 1;
+    __gen_e_acsl_assert_data_3.kind = "RTE";
+    __gen_e_acsl_assert_data_3.pred_txt = "(\\let size = sizeof(char) * (((n - 1) - 1) + 1); size <= 0? 0: size) <=\n18446744073709551615";
+    __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_3.fct = "valid_read_or_empty_here";
+    __gen_e_acsl_assert_data_3.line = 52;
+    __gen_e_acsl_assert_data_3.name = "offset_lesser_or_eq_than_SIZE_MAX";
+    __e_acsl_assert(__gen_e_acsl_le_2 <= 0,& __gen_e_acsl_assert_data_3);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
+    __gen_e_acsl_size_2 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_if));
+    __gen_e_acsl_valid_read_2 = __e_acsl_valid_read((void *)((char *)s + 
+                                                             1 * 1),
+                                                    __gen_e_acsl_size_2,s,
+                                                    (void *)(& s));
+    __gen_e_acsl_and = __gen_e_acsl_valid_read_2;
+    __gmpz_clear(__gen_e_acsl_size);
+    __gmpz_clear(__gen_e_acsl_sizeof);
+    __gmpz_clear(__gen_e_acsl_n);
+    __gmpz_clear(__gen_e_acsl_);
+    __gmpz_clear(__gen_e_acsl_sub);
+    __gmpz_clear(__gen_e_acsl_sub_2);
+    __gmpz_clear(__gen_e_acsl_add);
+    __gmpz_clear(__gen_e_acsl_mul);
+    __gmpz_clear(__gen_e_acsl__2);
+    __gmpz_clear(__gen_e_acsl_if);
+    __gmpz_clear(__gen_e_acsl__4);
+  }
+  else __gen_e_acsl_and = 0;
+  return __gen_e_acsl_and;
+}
+
 
diff --git a/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle b/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle
index d421a5613b26293031f99c2f68eb452ebc82d9f2..c9851298903b4367411d8b16bb63c8b09e3a5e65 100644
--- a/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle
+++ b/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle
@@ -2,21 +2,14 @@
 [e-acsl] FRAMAC_SHARE/libc/string.h:148: Warning: 
   no assigns clause generated for function valid_or_empty because pointers as arguments is not yet supported
 [e-acsl] FRAMAC_SHARE/libc/string.h:49: Warning: 
-  E-ACSL construct `predicates with labels' is not yet supported.
-  Ignoring annotation.
+  no assigns clause generated for function empty_block because pointers as arguments is not yet supported
 [e-acsl] FRAMAC_SHARE/libc/string.h:148: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:151: Warning: 
   E-ACSL construct `datacons' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:112: Warning: 
-  E-ACSL construct `predicates with labels' is not yet supported.
-  Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:113: Warning: 
   no assigns clause generated for function valid_read_or_empty because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/string.h:52: Warning: 
-  E-ACSL construct `predicates with labels' is not yet supported.
-  Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:112: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
@@ -49,6 +42,24 @@
 [eva:alarm] t_memcpy.c:21: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:112: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:112: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:112: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:52: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:113: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:113: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:113: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
@@ -95,6 +106,14 @@
 [eva:alarm] t_memcpy.c:26: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:148: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:148: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:148: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/string.h:152: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.