diff --git a/src/plugins/e-acsl/src/analyses/memory_tracking.ml b/src/plugins/e-acsl/src/analyses/memory_tracking.ml
index f4c318a3f636251c9efc7a27e51920348fe06877..34c3eedf2810292cd710f11a00fb73a8fa03c704 100644
--- a/src/plugins/e-acsl/src/analyses/memory_tracking.ml
+++ b/src/plugins/e-acsl/src/analyses/memory_tracking.ml
@@ -28,6 +28,48 @@ module Dataflow = Dataflow2
 let dkey = Options.Dkey.mtracking
 module Error = Error.Make(struct let phase = dkey end)
 
+(* Some pointers (stdin, stdout, stderr, &errno) are special in the sense that
+   they need not be allocated, initialized, and in that they are not freeable,
+   and that some of them are statically known to be writeable/read-only.
+   There is no need to monitor the corresponding memory regions. *)
+module SpecialPointers = struct
+  type spec = {pointer : bool; freeable : bool; writeable : bool; initialized : bool}
+
+  let specs = [
+    "errno",  {pointer = false; freeable = false; writeable = true;  initialized = true};
+    "stdin",  {pointer = true;  freeable = false; writeable = false; initialized = true};
+    "stdout", {pointer = true;  freeable = false; writeable = true;  initialized = true};
+    "stderr", {pointer = true;  freeable = false; writeable = true;  initialized = true}
+  ]
+
+  let tbl = Varinfo.Hashtbl.create 5
+
+  let initialize () =
+    let add_builtin (name, spec) =
+      let name = if Kernel.FramaCStdLib.get () then "__fc_" ^ name else name in
+      let vi_o = Globals.Syntactic_search.find_in_scope name Global in
+      Option.iter (fun vi -> Varinfo.Hashtbl.add tbl vi spec) vi_o
+    in List.iter add_builtin specs
+
+  let clear () = Varinfo.Hashtbl.clear tbl
+
+  let mem = Varinfo.Hashtbl.mem tbl
+
+  let find_opt = Varinfo.Hashtbl.find_opt tbl
+
+  let pointer_of_term t =
+    let filter_opt f = function
+      | None -> None
+      | Some x -> if f x then Some x else None
+    in
+    match t.term_node with
+    | TLval (TVar {lv_origin = Some v}, TNoOffset) ->
+      filter_opt (fun spec -> spec.pointer) (find_opt v)
+    | TAddrOf (TVar {lv_origin = Some v}, TNoOffset) ->
+      filter_opt (fun spec -> not @@ spec.pointer) (find_opt v)
+    | _ -> None
+end
+
 let must_never_monitor vi =
   (* E-ACSL, please do not monitor yourself! *)
   Rtl.Symbols.mem_vi vi.vname
@@ -42,6 +84,8 @@ let must_never_monitor vi =
   ||
   (* function pointers are not yet supported. *)
   Cil.isFunctionType vi.vtype
+  ||
+  SpecialPointers.mem vi
 
 (* ********************************************************************** *)
 (* Backward dataflow analysis to compute a sound over-approximation of what
@@ -163,6 +207,7 @@ end
 
 let reset () =
   Options.feedback ~dkey ~level:2 "clearing environment.";
+  SpecialPointers.clear ();
   Env.clear ()
 
 module rec Transfer
diff --git a/src/plugins/e-acsl/src/analyses/memory_tracking.mli b/src/plugins/e-acsl/src/analyses/memory_tracking.mli
index d66ae805534b9ba2d4cc9803273df12f9b31b239..b4bd046673882e068d8286104f3ebe49d0d7deb3 100644
--- a/src/plugins/e-acsl/src/analyses/memory_tracking.mli
+++ b/src/plugins/e-acsl/src/analyses/memory_tracking.mli
@@ -25,6 +25,14 @@ open Cil_types
 (** Compute a sound over-approximation of what left-values must be tracked by
     the memory model library *)
 
+module SpecialPointers : sig
+  type spec = {pointer : bool; freeable : bool; writeable : bool; initialized : bool}
+  val initialize : unit -> unit
+
+  (* is this one of stdin/stdout/stderr/&errno? If so, return spec *)
+  val pointer_of_term : term -> spec option
+end
+
 val reset: unit -> unit
 (** Must be called to redo the analysis *)
 
diff --git a/src/plugins/e-acsl/src/code_generator/translate_predicates.ml b/src/plugins/e-acsl/src/code_generator/translate_predicates.ml
index a1fe17a9c9f8d6ed658fcfb018a7419b815b4186..018742d7921846ce388ccbaf369140289f01fd5e 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_predicates.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_predicates.ml
@@ -74,6 +74,7 @@ let rec predicate_content_to_exp ~adata ?(inplace=false) ?name kf env p =
   let loc = p.pred_loc in
   let logic_env = Env.Logic_env.get env in
   Current_loc.set loc;
+  let of_bool = function true -> Cil.one ~loc | false -> Cil.zero ~loc in
   match p.pred_content with
   | Pfalse -> Cil.zero ~loc, adata, env
   | Ptrue -> Cil.one ~loc, adata, env
@@ -216,21 +217,29 @@ let rec predicate_content_to_exp ~adata ?(inplace=false) ?name kf env p =
       Translate_ats.to_exp ~loc ~adata kf env (PoT_pred p) label
   | Pvalid_read(BuiltinLabel Here, t) as pc
   | (Pvalid(BuiltinLabel Here, t) as pc) ->
-    let call_valid ~adata t p =
-      let name = match pc with
-        | Pvalid _ -> "valid"
-        | Pvalid_read _ -> "valid_read"
-        | _ -> assert false
-      in
-      let e, adata, env =
-        Memory_translate.call_valid ~adata ~loc kf name Cil.intType env t p
-      in
-      let adata = Assert.register_pred ~loc env p e adata in
-      e, adata, env
-    in
-    (* we already transformed \valid(t) into \initialized(&t) && \valid(t):
-       now convert this right-most valid. *)
-    call_valid ~adata t p
+    begin
+      match pc, Memory_tracking.SpecialPointers.pointer_of_term t with
+      (* static resolution: \valid(stdout) ≡ 1; \valid(stdin) ≡ 0; etc. *)
+      | Pvalid _, Some spec -> of_bool spec.writeable, adata, env
+      (* static resolution: \valid_read(stdin) ≡ 1; \valid_read(&errno) ≡ 1; etc. *)
+      | Pvalid_read _, Some _spec -> of_bool true, adata, env
+      | _ ->
+        let call_valid ~adata t p =
+          let name = match pc with
+            | Pvalid _ -> "valid"
+            | Pvalid_read _ -> "valid_read"
+            | _ -> assert false
+          in
+          let e, adata, env =
+            Memory_translate.call_valid ~adata ~loc kf name Cil.intType env t p
+          in
+          let adata = Assert.register_pred ~loc env p e adata in
+          e, adata, env
+        in
+        (* we already transformed \valid(t) into \initialized(&t) && \valid(t):
+           now convert this right-most valid. *)
+        call_valid ~adata t p
+    end
   | Pvalid _ -> Env.not_yet env "labeled \\valid"
   | Pvalid_read _ -> Env.not_yet env "labeled \\valid_read"
   | Pseparated tlist ->
@@ -267,38 +276,46 @@ let rec predicate_content_to_exp ~adata ?(inplace=false) ?name kf env p =
     let adata = Assert.register_pred ~loc env p e adata in
     e, adata, env
   | Pinitialized(BuiltinLabel Here, t) ->
-    let e, adata, env =
-      (match t.term_node with
-       (* optimisation when we know that the initialisation is ok *)
-       | TAddrOf (TResult _, TNoOffset) -> Cil.one ~loc, adata, env
-       | TAddrOf (TVar { lv_origin = Some vi }, TNoOffset)
-         when
-           vi.vformal || vi.vglob || Functions.RTL.is_generated_name vi.vname ->
-         Cil.one ~loc, adata, env
-       | _ ->
-         let e, adata, env =
-           Memory_translate.call_with_size
-             ~adata
-             ~loc
-             kf
-             "initialized"
-             Cil.intType
-             env
-             [ t ]
-             p
-         in
-         let adata = Assert.register_pred ~loc env p e adata in
-         e, adata, env)
-    in
-    e, adata, env
+    begin
+      match Memory_tracking.SpecialPointers.pointer_of_term t with
+      (* static resolutions: \initialized(stdout) ≡ 1; etc. *)
+      | Some spec -> of_bool spec.initialized, adata, env
+      | None ->
+        match t.term_node with
+        (* optimisation when we know that the initialisation is ok *)
+        | TAddrOf (TResult _, TNoOffset) -> Cil.one ~loc, adata, env
+        | TAddrOf (TVar { lv_origin = Some vi }, TNoOffset)
+          when
+            vi.vformal || vi.vglob || Functions.RTL.is_generated_name vi.vname ->
+          Cil.one ~loc, adata, env
+        | _ ->
+          let e, adata, env =
+            Memory_translate.call_with_size
+              ~adata
+              ~loc
+              kf
+              "initialized"
+              Cil.intType
+              env
+              [ t ]
+              p
+          in
+          let adata = Assert.register_pred ~loc env p e adata in
+          e, adata, env
+    end
   | Pinitialized _ -> Env.not_yet env "labeled \\initialized"
   | Pallocable _ -> Env.not_yet env "\\allocate"
-  | Pfreeable(BuiltinLabel Here, t) ->
-    let e, adata, env =
-      Memory_translate.call ~adata ~loc kf "freeable" Cil.intType env t
-    in
-    let adata = Assert.register_pred ~loc env p e adata in
-    e, adata, env
+  | Pfreeable(BuiltinLabel Here, t) -> begin
+      match Memory_tracking.SpecialPointers.pointer_of_term t with
+      (* static resolutions: \freeable(stdout) ≡ 0; etc. *)
+      | Some spec -> of_bool spec.freeable, adata, env
+      | None ->
+        let e, adata, env =
+          Memory_translate.call ~adata ~loc kf "freeable" Cil.intType env t
+        in
+        let adata = Assert.register_pred ~loc env p e adata in
+        e, adata, env
+    end
   | Pfreeable _ -> Env.not_yet env "labeled \\freeable"
   | Pfresh _ -> Env.not_yet env "\\fresh"
 
diff --git a/src/plugins/e-acsl/src/main.ml b/src/plugins/e-acsl/src/main.ml
index a4e5e85d31f4fcf406c56278beb2757a7f0e9eb1..8cbd69646da818e9f9622157211b90e1b91c5167 100644
--- a/src/plugins/e-acsl/src/main.ml
+++ b/src/plugins/e-acsl/src/main.ml
@@ -49,6 +49,7 @@ let generate_code =
             (* preparation of the AST does not concern the E-ACSL RTL:
                do it first *)
             Prepare_ast.prepare ();
+            Memory_tracking.SpecialPointers.initialize ();
             Rtl.link rtl_prj;
             (* the E-ACSL type system ensures the soundness of the generated
                arithmetic operations. Therefore, deactivate the corresponding
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/gen_parallel_threads.c b/src/plugins/e-acsl/tests/concurrency/oracle/gen_parallel_threads.c
index 6726aca133c0489dd71bb29ae3d6510298ad409b..0b015a34965af1b60854b2680b95718c1bb533c1 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/gen_parallel_threads.c
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/gen_parallel_threads.c
@@ -1683,10 +1683,6 @@ void __e_acsl_globals_init(void)
     __e_acsl_full_init((void *)(& __fc_p_fopen));
     __e_acsl_store_block((void *)(__fc_fopen),128UL);
     __e_acsl_full_init((void *)(& __fc_fopen));
-    __e_acsl_store_block((void *)(& stdout),8UL);
-    __e_acsl_full_init((void *)(& stdout));
-    __e_acsl_store_block((void *)(& stdin),8UL);
-    __e_acsl_full_init((void *)(& stdin));
     __e_acsl_store_block((void *)(& __fc_interrupted),4UL);
     __e_acsl_full_init((void *)(& __fc_interrupted));
     __e_acsl_store_block((void *)(& __fc_p_time_tm),8UL);
@@ -1703,8 +1699,6 @@ void __e_acsl_globals_init(void)
     __e_acsl_full_init((void *)(& __fc_p_sigaction));
     __e_acsl_store_block((void *)(sigaction),2080UL);
     __e_acsl_full_init((void *)(& sigaction));
-    __e_acsl_store_block((void *)(& errno),4UL);
-    __e_acsl_full_init((void *)(& errno));
   }
   return;
 }
@@ -1729,8 +1723,6 @@ void __e_acsl_globals_clean(void)
   __e_acsl_delete_block((void *)(__fc_tmpnam));
   __e_acsl_delete_block((void *)(& __fc_p_fopen));
   __e_acsl_delete_block((void *)(__fc_fopen));
-  __e_acsl_delete_block((void *)(& stdout));
-  __e_acsl_delete_block((void *)(& stdin));
   __e_acsl_delete_block((void *)(& __fc_interrupted));
   __e_acsl_delete_block((void *)(& __fc_p_time_tm));
   __e_acsl_delete_block((void *)(& __fc_time_tm));
@@ -1739,7 +1731,6 @@ void __e_acsl_globals_clean(void)
   __e_acsl_delete_block((void *)(& __fc_time));
   __e_acsl_delete_block((void *)(& __fc_p_sigaction));
   __e_acsl_delete_block((void *)(sigaction));
-  __e_acsl_delete_block((void *)(& errno));
   return;
 }
 
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_debug.c b/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_debug.c
index 680fcfdaecb6ecc4c123bc0ae24a8f484bf77d7e..038e1ab49bf714a185ab8ca15229e8be3d610bd8 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_debug.c
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_debug.c
@@ -1365,10 +1365,6 @@ void __e_acsl_globals_init(void)
     __e_acsl_full_init((void *)(& __fc_p_fopen));
     __e_acsl_store_block((void *)(__fc_fopen),128UL);
     __e_acsl_full_init((void *)(& __fc_fopen));
-    __e_acsl_store_block((void *)(& stdout),8UL);
-    __e_acsl_full_init((void *)(& stdout));
-    __e_acsl_store_block((void *)(& stdin),8UL);
-    __e_acsl_full_init((void *)(& stdin));
     __e_acsl_store_block((void *)(& __fc_interrupted),4UL);
     __e_acsl_full_init((void *)(& __fc_interrupted));
     __e_acsl_store_block((void *)(& __fc_p_time_tm),8UL);
@@ -1385,8 +1381,6 @@ void __e_acsl_globals_init(void)
     __e_acsl_full_init((void *)(& __fc_p_sigaction));
     __e_acsl_store_block((void *)(sigaction),2080UL);
     __e_acsl_full_init((void *)(& sigaction));
-    __e_acsl_store_block((void *)(& errno),4UL);
-    __e_acsl_full_init((void *)(& errno));
   }
   return;
 }
@@ -1411,8 +1405,6 @@ void __e_acsl_globals_clean(void)
   __e_acsl_delete_block((void *)(__fc_tmpnam));
   __e_acsl_delete_block((void *)(& __fc_p_fopen));
   __e_acsl_delete_block((void *)(__fc_fopen));
-  __e_acsl_delete_block((void *)(& stdout));
-  __e_acsl_delete_block((void *)(& stdin));
   __e_acsl_delete_block((void *)(& __fc_interrupted));
   __e_acsl_delete_block((void *)(& __fc_p_time_tm));
   __e_acsl_delete_block((void *)(& __fc_time_tm));
@@ -1421,7 +1413,6 @@ void __e_acsl_globals_clean(void)
   __e_acsl_delete_block((void *)(& __fc_time));
   __e_acsl_delete_block((void *)(& __fc_p_sigaction));
   __e_acsl_delete_block((void *)(sigaction));
-  __e_acsl_delete_block((void *)(& errno));
   return;
 }
 
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_safe_locations.c b/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_safe_locations.c
index e1865e3750f8492648ae105f11bf4ee9a467b7e3..6713347b1c7fa5b3986d3b51d485eb65c798ccd3 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_safe_locations.c
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_safe_locations.c
@@ -51,155 +51,77 @@ void *thread_start(void *arg)
   void *__retres;
   __e_acsl_store_block((void *)(& __retres),8UL);
   {
-    int __gen_e_acsl_valid;
-    int __gen_e_acsl_and;
     __e_acsl_store_block((void *)(& arg),8UL);
     __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
-    __gen_e_acsl_valid = __e_acsl_valid((void *)stdout,sizeof(FILE),
-                                        (void *)stdout,(void *)(& stdout));
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"__fc_stdout",
-                                 (void *)stdout);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"sizeof(FILE)",
-                                   0,sizeof(FILE));
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,
-                                 "\\valid(__fc_stdout)",0,__gen_e_acsl_valid);
-    if (__gen_e_acsl_valid) {
-      int __gen_e_acsl_initialized;
-      __gen_e_acsl_initialized = __e_acsl_initialized((void *)stdout,
-                                                      sizeof(FILE));
-      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"__fc_stdout",
-                                   (void *)stdout);
-      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,
-                                     "sizeof(FILE)",0,sizeof(FILE));
-      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,
-                                   "\\initialized(__fc_stdout)",0,
-                                   __gen_e_acsl_initialized);
-      __gen_e_acsl_and = __gen_e_acsl_initialized;
-    }
-    else __gen_e_acsl_and = 0;
     __gen_e_acsl_assert_data.blocking = 1;
     __gen_e_acsl_assert_data.kind = "Assertion";
     __gen_e_acsl_assert_data.pred_txt = "\\valid(__fc_stdout) && \\initialized(__fc_stdout)";
     __gen_e_acsl_assert_data.file = "threads_safe_locations.c";
     __gen_e_acsl_assert_data.fct = "thread_start";
     __gen_e_acsl_assert_data.line = 6;
-    __e_acsl_assert(__gen_e_acsl_and,& __gen_e_acsl_assert_data);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
+    __e_acsl_assert(1,& __gen_e_acsl_assert_data);
   }
   /*@ assert \valid(__fc_stdout) && \initialized(__fc_stdout); */ ;
   {
-    int __gen_e_acsl_valid_2;
-    int __gen_e_acsl_and_2;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
       {.values = (void *)0};
-    __gen_e_acsl_valid_2 = __e_acsl_valid((void *)stderr,sizeof(FILE),
-                                          (void *)stderr,(void *)(& stderr));
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_2,"__fc_stderr",
-                                 (void *)stderr);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,
-                                   "sizeof(FILE)",0,sizeof(FILE));
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,
-                                 "\\valid(__fc_stderr)",0,
-                                 __gen_e_acsl_valid_2);
-    if (__gen_e_acsl_valid_2) {
-      int __gen_e_acsl_initialized_2;
-      __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)stderr,
-                                                        sizeof(FILE));
-      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_2,
-                                   "__fc_stderr",(void *)stderr);
-      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,
-                                     "sizeof(FILE)",0,sizeof(FILE));
-      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,
-                                   "\\initialized(__fc_stderr)",0,
-                                   __gen_e_acsl_initialized_2);
-      __gen_e_acsl_and_2 = __gen_e_acsl_initialized_2;
-    }
-    else __gen_e_acsl_and_2 = 0;
     __gen_e_acsl_assert_data_2.blocking = 1;
     __gen_e_acsl_assert_data_2.kind = "Assertion";
     __gen_e_acsl_assert_data_2.pred_txt = "\\valid(__fc_stderr) && \\initialized(__fc_stderr)";
     __gen_e_acsl_assert_data_2.file = "threads_safe_locations.c";
     __gen_e_acsl_assert_data_2.fct = "thread_start";
     __gen_e_acsl_assert_data_2.line = 7;
-    __e_acsl_assert(__gen_e_acsl_and_2,& __gen_e_acsl_assert_data_2);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
+    __e_acsl_assert(1,& __gen_e_acsl_assert_data_2);
   }
   /*@ assert \valid(__fc_stderr) && \initialized(__fc_stderr); */ ;
   {
-    int __gen_e_acsl_valid_read;
-    int __gen_e_acsl_and_3;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 =
       {.values = (void *)0};
-    __gen_e_acsl_valid_read = __e_acsl_valid_read((void *)stdin,sizeof(FILE),
-                                                  (void *)stdin,
-                                                  (void *)(& stdin));
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_3,"__fc_stdin",
-                                 (void *)stdin);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,
-                                   "sizeof(FILE)",0,sizeof(FILE));
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,
-                                 "\\valid_read(__fc_stdin)",0,
-                                 __gen_e_acsl_valid_read);
-    if (__gen_e_acsl_valid_read) {
-      int __gen_e_acsl_initialized_3;
-      __gen_e_acsl_initialized_3 = __e_acsl_initialized((void *)stdin,
-                                                        sizeof(FILE));
-      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_3,"__fc_stdin",
-                                   (void *)stdin);
-      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,
-                                     "sizeof(FILE)",0,sizeof(FILE));
-      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,
-                                   "\\initialized(__fc_stdin)",0,
-                                   __gen_e_acsl_initialized_3);
-      __gen_e_acsl_and_3 = __gen_e_acsl_initialized_3;
-    }
-    else __gen_e_acsl_and_3 = 0;
     __gen_e_acsl_assert_data_3.blocking = 1;
     __gen_e_acsl_assert_data_3.kind = "Assertion";
     __gen_e_acsl_assert_data_3.pred_txt = "\\valid_read(__fc_stdin) && \\initialized(__fc_stdin)";
     __gen_e_acsl_assert_data_3.file = "threads_safe_locations.c";
     __gen_e_acsl_assert_data_3.fct = "thread_start";
     __gen_e_acsl_assert_data_3.line = 8;
-    __e_acsl_assert(__gen_e_acsl_and_3,& __gen_e_acsl_assert_data_3);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
+    __e_acsl_assert(1,& __gen_e_acsl_assert_data_3);
   }
   /*@ assert \valid_read(__fc_stdin) && \initialized(__fc_stdin); */ ;
   int *addrof_errno = & errno;
   __e_acsl_store_block((void *)(& addrof_errno),8UL);
   __e_acsl_full_init((void *)(& addrof_errno));
   {
-    int __gen_e_acsl_initialized_4;
-    int __gen_e_acsl_and_4;
-    int __gen_e_acsl_and_5;
+    int __gen_e_acsl_initialized;
+    int __gen_e_acsl_and;
+    int __gen_e_acsl_and_2;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
       {.values = (void *)0};
-    __gen_e_acsl_initialized_4 = __e_acsl_initialized((void *)(& addrof_errno),
-                                                      sizeof(int *));
+    __gen_e_acsl_initialized = __e_acsl_initialized((void *)(& addrof_errno),
+                                                    sizeof(int *));
     __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,
                                  "&addrof_errno",(void *)(& addrof_errno));
     __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,
                                    "sizeof(int *)",0,sizeof(int *));
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,
                                  "\\initialized(&addrof_errno)",0,
-                                 __gen_e_acsl_initialized_4);
-    if (__gen_e_acsl_initialized_4) {
-      int __gen_e_acsl_valid_3;
-      __gen_e_acsl_valid_3 = __e_acsl_valid((void *)addrof_errno,sizeof(int),
-                                            (void *)addrof_errno,
-                                            (void *)(& addrof_errno));
+                                 __gen_e_acsl_initialized);
+    if (__gen_e_acsl_initialized) {
+      int __gen_e_acsl_valid;
+      __gen_e_acsl_valid = __e_acsl_valid((void *)addrof_errno,sizeof(int),
+                                          (void *)addrof_errno,
+                                          (void *)(& addrof_errno));
       __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,
                                    "addrof_errno",(void *)addrof_errno);
       __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,
                                      "sizeof(int)",0,sizeof(int));
       __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,
                                    "\\valid(addrof_errno)",0,
-                                   __gen_e_acsl_valid_3);
-      __gen_e_acsl_and_4 = __gen_e_acsl_valid_3;
+                                   __gen_e_acsl_valid);
+      __gen_e_acsl_and = __gen_e_acsl_valid;
     }
-    else __gen_e_acsl_and_4 = 0;
-    if (__gen_e_acsl_and_4) {
-      int __gen_e_acsl_initialized_5;
-      __gen_e_acsl_initialized_5 = __e_acsl_initialized((void *)addrof_errno,
+    else __gen_e_acsl_and = 0;
+    if (__gen_e_acsl_and) {
+      int __gen_e_acsl_initialized_2;
+      __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)addrof_errno,
                                                         sizeof(int));
       __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,
                                    "addrof_errno",(void *)addrof_errno);
@@ -207,17 +129,17 @@ void *thread_start(void *arg)
                                      "sizeof(int)",0,sizeof(int));
       __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,
                                    "\\initialized(addrof_errno)",0,
-                                   __gen_e_acsl_initialized_5);
-      __gen_e_acsl_and_5 = __gen_e_acsl_initialized_5;
+                                   __gen_e_acsl_initialized_2);
+      __gen_e_acsl_and_2 = __gen_e_acsl_initialized_2;
     }
-    else __gen_e_acsl_and_5 = 0;
+    else __gen_e_acsl_and_2 = 0;
     __gen_e_acsl_assert_data_4.blocking = 1;
     __gen_e_acsl_assert_data_4.kind = "Assertion";
     __gen_e_acsl_assert_data_4.pred_txt = "\\valid(addrof_errno) && \\initialized(addrof_errno)";
     __gen_e_acsl_assert_data_4.file = "threads_safe_locations.c";
     __gen_e_acsl_assert_data_4.fct = "thread_start";
     __gen_e_acsl_assert_data_4.line = 10;
-    __e_acsl_assert(__gen_e_acsl_and_5,& __gen_e_acsl_assert_data_4);
+    __e_acsl_assert(__gen_e_acsl_and_2,& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
   }
   /*@ assert \valid(addrof_errno) && \initialized(addrof_errno); */ ;
@@ -493,12 +415,6 @@ void __e_acsl_globals_init(void)
     __e_acsl_full_init((void *)(& __fc_p_fopen));
     __e_acsl_store_block((void *)(__fc_fopen),128UL);
     __e_acsl_full_init((void *)(& __fc_fopen));
-    __e_acsl_store_block((void *)(& stdout),8UL);
-    __e_acsl_full_init((void *)(& stdout));
-    __e_acsl_store_block((void *)(& stdin),8UL);
-    __e_acsl_full_init((void *)(& stdin));
-    __e_acsl_store_block((void *)(& stderr),8UL);
-    __e_acsl_full_init((void *)(& stderr));
     __e_acsl_store_block((void *)(& __fc_interrupted),4UL);
     __e_acsl_full_init((void *)(& __fc_interrupted));
     __e_acsl_store_block((void *)(& __fc_p_time_tm),8UL);
@@ -515,8 +431,6 @@ void __e_acsl_globals_init(void)
     __e_acsl_full_init((void *)(& __fc_p_sigaction));
     __e_acsl_store_block((void *)(sigaction),2080UL);
     __e_acsl_full_init((void *)(& sigaction));
-    __e_acsl_store_block((void *)(& errno),4UL);
-    __e_acsl_full_init((void *)(& errno));
   }
   return;
 }
@@ -527,9 +441,6 @@ void __e_acsl_globals_clean(void)
   __e_acsl_delete_block((void *)(__fc_tmpnam));
   __e_acsl_delete_block((void *)(& __fc_p_fopen));
   __e_acsl_delete_block((void *)(__fc_fopen));
-  __e_acsl_delete_block((void *)(& stdout));
-  __e_acsl_delete_block((void *)(& stdin));
-  __e_acsl_delete_block((void *)(& stderr));
   __e_acsl_delete_block((void *)(& __fc_interrupted));
   __e_acsl_delete_block((void *)(& __fc_p_time_tm));
   __e_acsl_delete_block((void *)(& __fc_time_tm));
@@ -538,7 +449,6 @@ void __e_acsl_globals_clean(void)
   __e_acsl_delete_block((void *)(& __fc_time));
   __e_acsl_delete_block((void *)(& __fc_p_sigaction));
   __e_acsl_delete_block((void *)(sigaction));
-  __e_acsl_delete_block((void *)(& errno));
   return;
 }
 
diff --git a/src/plugins/e-acsl/tests/memory/oracle/gen_errno.c b/src/plugins/e-acsl/tests/memory/oracle/gen_errno.c
index 7541386aef45bf1ad4008d0a5323371adb062bba..81dd33d16813be56c8e3b47f9c2e9a8209f2522c 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/gen_errno.c
+++ b/src/plugins/e-acsl/tests/memory/oracle/gen_errno.c
@@ -10,28 +10,10 @@
 #include "time.h"
 extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;
 
-void __e_acsl_globals_init(void)
-{
-  static char __e_acsl_already_run = 0;
-  if (! __e_acsl_already_run) {
-    __e_acsl_already_run = 1;
-    __e_acsl_store_block((void *)(& errno),4UL);
-    __e_acsl_full_init((void *)(& errno));
-  }
-  return;
-}
-
-void __e_acsl_globals_clean(void)
-{
-  __e_acsl_delete_block((void *)(& errno));
-  return;
-}
-
 int main(int argc, char const **argv)
 {
   int __retres;
   __e_acsl_memory_init(& argc,(char ***)(& argv),8UL);
-  __e_acsl_globals_init();
   int *p = & errno;
   __e_acsl_store_block((void *)(& p),8UL);
   __e_acsl_full_init((void *)(& p));
@@ -72,7 +54,6 @@ int main(int argc, char const **argv)
   /*@ assert \valid(p); */ ;
   __retres = 0;
   __e_acsl_delete_block((void *)(& p));
-  __e_acsl_globals_clean();
   __e_acsl_memory_clean();
   return __retres;
 }
diff --git a/src/plugins/e-acsl/tests/memory/oracle/gen_stdout.c b/src/plugins/e-acsl/tests/memory/oracle/gen_stdout.c
index 07f3bc147ab6946873b871aee042604f92bf743e..e5024cc5bf4e059efe502608899188d5aebc3b28 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/gen_stdout.c
+++ b/src/plugins/e-acsl/tests/memory/oracle/gen_stdout.c
@@ -8,104 +8,46 @@
 #include "time.h"
 extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;
 
-void __e_acsl_globals_init(void)
-{
-  static char __e_acsl_already_run = 0;
-  if (! __e_acsl_already_run) {
-    __e_acsl_already_run = 1;
-    __e_acsl_store_block((void *)(& stdout),8UL);
-    __e_acsl_full_init((void *)(& stdout));
-    __e_acsl_store_block((void *)(& stdin),8UL);
-    __e_acsl_full_init((void *)(& stdin));
-    __e_acsl_store_block((void *)(& stderr),8UL);
-    __e_acsl_full_init((void *)(& stderr));
-  }
-  return;
-}
-
-void __e_acsl_globals_clean(void)
-{
-  __e_acsl_delete_block((void *)(& stdout));
-  __e_acsl_delete_block((void *)(& stdin));
-  __e_acsl_delete_block((void *)(& stderr));
-  return;
-}
-
 int main(void)
 {
   int __retres;
   __e_acsl_memory_init((int *)0,(char ***)0,8UL);
-  __e_acsl_globals_init();
   {
-    int __gen_e_acsl_valid;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
-    __gen_e_acsl_valid = __e_acsl_valid((void *)stderr,sizeof(FILE),
-                                        (void *)stderr,(void *)(& stderr));
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"__fc_stderr",
-                                 (void *)stderr);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"sizeof(FILE)",
-                                   0,sizeof(FILE));
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,
-                                 "\\valid(__fc_stderr)",0,__gen_e_acsl_valid);
     __gen_e_acsl_assert_data.blocking = 1;
     __gen_e_acsl_assert_data.kind = "Assertion";
     __gen_e_acsl_assert_data.pred_txt = "\\valid(__fc_stderr)";
     __gen_e_acsl_assert_data.file = "stdout.c";
     __gen_e_acsl_assert_data.fct = "main";
     __gen_e_acsl_assert_data.line = 8;
-    __e_acsl_assert(__gen_e_acsl_valid,& __gen_e_acsl_assert_data);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
+    __e_acsl_assert(1,& __gen_e_acsl_assert_data);
   }
   /*@ assert \valid(__fc_stderr); */ ;
   {
-    int __gen_e_acsl_valid_read;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
       {.values = (void *)0};
-    __gen_e_acsl_valid_read = __e_acsl_valid_read((void *)stdin,sizeof(FILE),
-                                                  (void *)stdin,
-                                                  (void *)(& stdin));
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_2,"__fc_stdin",
-                                 (void *)stdin);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,
-                                   "sizeof(FILE)",0,sizeof(FILE));
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,
-                                 "\\valid_read(__fc_stdin)",0,
-                                 __gen_e_acsl_valid_read);
     __gen_e_acsl_assert_data_2.blocking = 1;
     __gen_e_acsl_assert_data_2.kind = "Assertion";
     __gen_e_acsl_assert_data_2.pred_txt = "\\valid_read(__fc_stdin)";
     __gen_e_acsl_assert_data_2.file = "stdout.c";
     __gen_e_acsl_assert_data_2.fct = "main";
     __gen_e_acsl_assert_data_2.line = 9;
-    __e_acsl_assert(__gen_e_acsl_valid_read,& __gen_e_acsl_assert_data_2);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
+    __e_acsl_assert(1,& __gen_e_acsl_assert_data_2);
   }
   /*@ assert \valid_read(__fc_stdin); */ ;
   {
-    int __gen_e_acsl_valid_2;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 =
       {.values = (void *)0};
-    __gen_e_acsl_valid_2 = __e_acsl_valid((void *)stdout,sizeof(FILE),
-                                          (void *)stdout,(void *)(& stdout));
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_3,"__fc_stdout",
-                                 (void *)stdout);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,
-                                   "sizeof(FILE)",0,sizeof(FILE));
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,
-                                 "\\valid(__fc_stdout)",0,
-                                 __gen_e_acsl_valid_2);
     __gen_e_acsl_assert_data_3.blocking = 1;
     __gen_e_acsl_assert_data_3.kind = "Assertion";
     __gen_e_acsl_assert_data_3.pred_txt = "\\valid(__fc_stdout)";
     __gen_e_acsl_assert_data_3.file = "stdout.c";
     __gen_e_acsl_assert_data_3.fct = "main";
     __gen_e_acsl_assert_data_3.line = 10;
-    __e_acsl_assert(__gen_e_acsl_valid_2,& __gen_e_acsl_assert_data_3);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
+    __e_acsl_assert(1,& __gen_e_acsl_assert_data_3);
   }
   /*@ assert \valid(__fc_stdout); */ ;
   __retres = 0;
-  __e_acsl_globals_clean();
   __e_acsl_memory_clean();
   return __retres;
 }
diff --git a/src/plugins/e-acsl/tests/memory/oracle/stdout.res.oracle b/src/plugins/e-acsl/tests/memory/oracle/stdout.res.oracle
index dc148d6a1b66770b41ccef0bdb51409a401a3914..db5643b8380fabd98a67a8220d18ef355e345d85 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/stdout.res.oracle
+++ b/src/plugins/e-acsl/tests/memory/oracle/stdout.res.oracle
@@ -1,29 +1,5 @@
 [e-acsl] beginning translation.
 [e-acsl] translation done in project "e-acsl".
-[eva:alarm] stdout.c:8: Warning: 
-  function __e_acsl_assert_register_ulong: precondition data->values == \null ||
-                                                        \valid(data->values) got status unknown.
-[eva:alarm] stdout.c:8: Warning: 
-  function __e_acsl_assert_register_int: precondition data->values == \null ||
-                                                      \valid(data->values) got status unknown.
-[eva:alarm] stdout.c:8: Warning: 
-  function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] stdout.c:8: Warning: assertion got status unknown.
-[eva:alarm] stdout.c:9: Warning: 
-  function __e_acsl_assert_register_ulong: precondition data->values == \null ||
-                                                        \valid(data->values) got status unknown.
-[eva:alarm] stdout.c:9: Warning: 
-  function __e_acsl_assert_register_int: precondition data->values == \null ||
-                                                      \valid(data->values) got status unknown.
-[eva:alarm] stdout.c:9: Warning: 
-  function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] stdout.c:9: Warning: assertion got status unknown.
-[eva:alarm] stdout.c:10: Warning: 
-  function __e_acsl_assert_register_ulong: precondition data->values == \null ||
-                                                        \valid(data->values) got status unknown.
-[eva:alarm] stdout.c:10: Warning: 
-  function __e_acsl_assert_register_int: precondition data->values == \null ||
-                                                      \valid(data->values) got status unknown.
-[eva:alarm] stdout.c:10: Warning: 
-  function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] stdout.c:10: Warning: assertion got status unknown.