diff --git a/src/plugins/e-acsl/.gitlab-ci.yml b/src/plugins/e-acsl/.gitlab-ci.yml
index 087f91d184fdd9203d47e51f0d002b793a4b914d..5aa854a9ec762fe73b1bd57c78e708762e8317b3 100644
--- a/src/plugins/e-acsl/.gitlab-ci.yml
+++ b/src/plugins/e-acsl/.gitlab-ci.yml
@@ -5,3 +5,7 @@ Tests:
   - "./configure"
   - make -j 12
   - make PTESTS_OPTS="-error-code -j 4" tests -j 12
+  - make clean
+  tags:
+  except:
+  - tags
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/compound_initializers.c b/src/plugins/e-acsl/tests/e-acsl-runtime/compound_initializers.c
new file mode 100644
index 0000000000000000000000000000000000000000..c83b3eb4eff1bcd7dcd75889e050f0d26e044f61
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/compound_initializers.c
@@ -0,0 +1,47 @@
+/* run.config
+   COMMENT: Compound initializers
+   EXECNOW: LOG gen_compound_initializers.c  BIN gen_compound_initializers.out  @frama-c@ -machdep x86_64 -cpp-extra-args="-I`@frama-c@ -print-share-path`/libc" -e-acsl-share ./share/e-acsl ./tests/e-acsl-runtime/compound_initializers.c -e-acsl -then-on e-acsl -print -ocode ./tests/e-acsl-runtime/result/gen_compound_initializers.c > /dev/null && ./gcc_runtime.sh compound_initializers
+   EXECNOW: LOG gen_compound_initializers2.c BIN gen_compound_initializers2.out @frama-c@ -machdep x86_64 -cpp-extra-args="-I`@frama-c@ -print-share-path`/libc" -e-acsl-share ./share/e-acsl ./tests/e-acsl-runtime/compound_initializers.c -e-acsl-gmp-only -e-acsl -then-on e-acsl -print -ocode ./tests/e-acsl-runtime/result/gen_compound_initializers2.c > /dev/null && ./gcc_runtime.sh compound_initializers2
+*/
+
+
+
+int _F;
+
+char *_A[2] = { "XX", "YY" };
+char *_B = "ZZ";
+char *_C;
+int _D[] = { 44, 88 };
+int _E = 44;
+int _F = 9;;
+
+struct ST {
+    char *str;
+    int num;
+};
+
+struct ST _G[] = {
+    {
+        .str = "First",
+        .num = 99
+    },
+    {
+        .str = "Second",
+        .num = 147
+    }
+};
+
+int main(int argc, char **argv) {
+    /*@ assert \valid(_A); */
+    /*@ assert \valid_read(_A[0]); */
+    /*@ assert \valid_read(_A[1]); */
+    /*@ assert \valid_read(_B); */
+    /*@ assert \valid(&_C); */
+    /*@ assert \valid(_D); */
+    /*@ assert \valid(&_E); */
+    /*@ assert \valid(&_F); */
+    /*@ assert _E == 44; */
+    /*@ assert \valid(&_G); */
+    /*@ assert _G[0].num == 99; */
+    return 0;
+}
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.0.err.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.0.err.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.0.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.0.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..f8184dd9d7f961f26e8c6a45a6b414e94727def2
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.0.res.oracle
@@ -0,0 +1,52 @@
+[e-acsl] beginning translation.
+[e-acsl] translation done in project "e-acsl".
+[value] Analyzing a complete application starting at main
+[value] Computing initial state
+[value] Initial state computed
+[value] Values of globals at initialization
+  __fc_random_counter ∈ {0}
+  __fc_rand_max ∈ {32767}
+  __fc_heap_status ∈ [--..--]
+  __e_acsl_init ∈ [--..--]
+  __e_acsl_internal_heap ∈ [--..--]
+  __memory_size ∈ [--..--]
+  _F ∈ {9}
+  _A[0] ∈ {{ "XX" }}
+    [1] ∈ {{ "YY" }}
+  _B ∈ {{ "ZZ" }}
+  _C ∈ {0}
+  _D[0] ∈ {44}
+    [1] ∈ {88}
+  _E ∈ {44}
+  _G[0].str ∈ {{ "First" }}
+    [0].num ∈ {99}
+    [1].str ∈ {{ "Second" }}
+    [1].num ∈ {147}
+  __e_acsl_literal_string ∈ {0}
+  __e_acsl_literal_string_2 ∈ {0}
+  __e_acsl_literal_string_3 ∈ {0}
+  __e_acsl_literal_string_4 ∈ {0}
+  __e_acsl_literal_string_5 ∈ {0}
+[value] using specification for function __store_block
+[value] using specification for function __full_init
+[value] using specification for function __literal_string
+tests/e-acsl-runtime/compound_initializers.c:35:[value] Assertion got status valid.
+[value] using specification for function __valid
+[value] using specification for function e_acsl_assert
+FRAMAC_SHARE/e-acsl/e_acsl.h:34:[value] Function e_acsl_assert: precondition got status unknown.
+tests/e-acsl-runtime/compound_initializers.c:36:[value] Assertion got status valid.
+[value] using specification for function __initialized
+[value] using specification for function __valid_read
+tests/e-acsl-runtime/compound_initializers.c:37:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:38:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:39:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:40:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:41:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:42:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:43:[value] Assertion got status valid.
+FRAMAC_SHARE/e-acsl/e_acsl.h:34:[value] Function e_acsl_assert: precondition got status valid.
+tests/e-acsl-runtime/compound_initializers.c:44:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:45:[value] Assertion got status valid.
+[value] using specification for function __delete_block
+[value] using specification for function __e_acsl_memory_clean
+[value] done for function main
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.1.err.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.1.err.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.1.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.1.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..f170948d04d2eeaab43e6d9d08fe2e928d3a2abe
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/compound_initializers.1.res.oracle
@@ -0,0 +1,58 @@
+[e-acsl] beginning translation.
+[e-acsl] translation done in project "e-acsl".
+[value] Analyzing a complete application starting at main
+[value] Computing initial state
+[value] Initial state computed
+[value] Values of globals at initialization
+  __fc_random_counter ∈ {0}
+  __fc_rand_max ∈ {32767}
+  __fc_heap_status ∈ [--..--]
+  __e_acsl_init ∈ [--..--]
+  __e_acsl_internal_heap ∈ [--..--]
+  __memory_size ∈ [--..--]
+  _F ∈ {9}
+  _A[0] ∈ {{ "XX" }}
+    [1] ∈ {{ "YY" }}
+  _B ∈ {{ "ZZ" }}
+  _C ∈ {0}
+  _D[0] ∈ {44}
+    [1] ∈ {88}
+  _E ∈ {44}
+  _G[0].str ∈ {{ "First" }}
+    [0].num ∈ {99}
+    [1].str ∈ {{ "Second" }}
+    [1].num ∈ {147}
+  __e_acsl_literal_string ∈ {0}
+  __e_acsl_literal_string_2 ∈ {0}
+  __e_acsl_literal_string_3 ∈ {0}
+  __e_acsl_literal_string_4 ∈ {0}
+  __e_acsl_literal_string_5 ∈ {0}
+[value] using specification for function __store_block
+[value] using specification for function __full_init
+[value] using specification for function __literal_string
+tests/e-acsl-runtime/compound_initializers.c:35:[value] Assertion got status valid.
+[value] using specification for function __valid
+[value] using specification for function e_acsl_assert
+FRAMAC_SHARE/e-acsl/e_acsl.h:34:[value] Function e_acsl_assert: precondition got status unknown.
+tests/e-acsl-runtime/compound_initializers.c:36:[value] Assertion got status valid.
+[value] using specification for function __initialized
+[value] using specification for function __valid_read
+tests/e-acsl-runtime/compound_initializers.c:37:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:38:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:39:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:40:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:41:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:42:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:43:[value] Assertion got status valid.
+[value] using specification for function __gmpz_init_set_si
+FRAMAC_SHARE/e-acsl/e_acsl_gmp.h:64:[value] Function __gmpz_init_set_si: precondition got status valid.
+[value] using specification for function __gmpz_cmp
+FRAMAC_SHARE/e-acsl/e_acsl_gmp.h:127:[value] Function __gmpz_cmp: precondition got status valid.
+FRAMAC_SHARE/e-acsl/e_acsl_gmp.h:128:[value] Function __gmpz_cmp: precondition got status valid.
+[value] using specification for function __gmpz_clear
+FRAMAC_SHARE/e-acsl/e_acsl_gmp.h:117:[value] Function __gmpz_clear: precondition got status valid.
+tests/e-acsl-runtime/compound_initializers.c:44:[value] Assertion got status valid.
+tests/e-acsl-runtime/compound_initializers.c:45:[value] Assertion got status valid.
+[value] using specification for function __delete_block
+[value] using specification for function __e_acsl_memory_clean
+[value] done for function main
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_compound_initializers.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_compound_initializers.c
new file mode 100644
index 0000000000000000000000000000000000000000..27996ac8709e0d0fd748d7e102da690d3722b5af
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_compound_initializers.c
@@ -0,0 +1,243 @@
+/* Generated by Frama-C */
+char *__e_acsl_literal_string_3;
+char *__e_acsl_literal_string;
+char *__e_acsl_literal_string_2;
+char *__e_acsl_literal_string_4;
+char *__e_acsl_literal_string_5;
+struct __anonstruct___mpz_struct_1 {
+   int _mp_alloc ;
+   int _mp_size ;
+   unsigned long *_mp_d ;
+};
+typedef struct __anonstruct___mpz_struct_1 __mpz_struct;
+typedef __mpz_struct ( __attribute__((__FC_BUILTIN__)) mpz_t)[1];
+typedef unsigned long size_t;
+struct ST {
+   char *str ;
+   int num ;
+};
+/*@ requires predicate ≢ 0;
+    assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void e_acsl_assert(int predicate,
+                                                           char *kind,
+                                                           char *fct,
+                                                           char *pred_txt,
+                                                           int line);
+
+/*@
+model __mpz_struct { ℤ n };
+*/
+int __fc_random_counter __attribute__((__unused__, __FRAMA_C_MODEL__));
+unsigned long const __fc_rand_max = (unsigned long)32767;
+/*@ ghost extern int __fc_heap_status __attribute__((__FRAMA_C_MODEL__)); */
+
+/*@
+axiomatic dynamic_allocation {
+  predicate is_allocable{L}(size_t n) 
+    reads __fc_heap_status;
+  
+  }
+ */
+/*@ ghost extern int __e_acsl_init; */
+
+/*@ assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1)); */
+extern  __attribute__((__FC_BUILTIN__)) void *__store_block(void *ptr,
+                                                            size_t size);
+
+/*@ assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void __delete_block(void *ptr);
+
+/*@ assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void __full_init(void *ptr);
+
+/*@ assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void __literal_string(void *ptr);
+
+/*@ ensures \result ≡ 0 ∨ \result ≡ 1;
+    ensures \result ≡ 1 ⇒ \valid((char *)\old(ptr)+(0 .. \old(size)-1));
+    assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1));
+ */
+extern  __attribute__((__FC_BUILTIN__)) int __valid(void *ptr, size_t size);
+
+/*@ ensures \result ≡ 0 ∨ \result ≡ 1;
+    ensures
+      \result ≡ 1 ⇒ \valid_read((char *)\old(ptr)+(0 .. \old(size)-1));
+    assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1));
+ */
+extern  __attribute__((__FC_BUILTIN__)) int __valid_read(void *ptr,
+                                                         size_t size);
+
+/*@ ensures \result ≡ 0 ∨ \result ≡ 1;
+    ensures
+      \result ≡ 1 ⇒ \initialized((char *)\old(ptr)+(0 .. \old(size)-1));
+    assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1));
+ */
+extern  __attribute__((__FC_BUILTIN__)) int __initialized(void *ptr,
+                                                          size_t size);
+
+/*@ ghost extern int __e_acsl_internal_heap; */
+
+/*@ assigns __e_acsl_internal_heap;
+    assigns __e_acsl_internal_heap \from __e_acsl_internal_heap;
+ */
+extern  __attribute__((__FC_BUILTIN__)) void __e_acsl_memory_clean(void);
+
+extern size_t __memory_size;
+
+/*@
+predicate diffSize{L1, L2}(ℤ i) =
+  \at(__memory_size,L1)-\at(__memory_size,L2) ≡ i;
+ */
+int _F;
+
+char *_A[2] = {(char *)"XX", (char *)"YY"};
+char *_B = (char *)"ZZ";
+char *_C;
+int _D[2] = {44, 88};
+int _E = 44;
+int _F = 9;
+struct ST _G[2] =
+  {{.str = (char *)"First", .num = 99}, {.str = (char *)"Second", .num = 147}};
+void __e_acsl_memory_init(void)
+{
+  __e_acsl_literal_string_3 = "ZZ";
+  __store_block((void *)__e_acsl_literal_string_3,sizeof("ZZ"));
+  __full_init((void *)__e_acsl_literal_string_3);
+  __literal_string((void *)__e_acsl_literal_string_3);
+  __e_acsl_literal_string = "YY";
+  __store_block((void *)__e_acsl_literal_string,sizeof("YY"));
+  __full_init((void *)__e_acsl_literal_string);
+  __literal_string((void *)__e_acsl_literal_string);
+  __e_acsl_literal_string_2 = "XX";
+  __store_block((void *)__e_acsl_literal_string_2,sizeof("XX"));
+  __full_init((void *)__e_acsl_literal_string_2);
+  __literal_string((void *)__e_acsl_literal_string_2);
+  __e_acsl_literal_string_4 = "Second";
+  __store_block((void *)__e_acsl_literal_string_4,sizeof("Second"));
+  __full_init((void *)__e_acsl_literal_string_4);
+  __literal_string((void *)__e_acsl_literal_string_4);
+  __e_acsl_literal_string_5 = "First";
+  __store_block((void *)__e_acsl_literal_string_5,sizeof("First"));
+  __full_init((void *)__e_acsl_literal_string_5);
+  __literal_string((void *)__e_acsl_literal_string_5);
+  __store_block((void *)(_G),32UL);
+  __full_init((void *)(& _G));
+  __store_block((void *)(& _E),4UL);
+  __full_init((void *)(& _E));
+  __store_block((void *)(_D),8UL);
+  __full_init((void *)(& _D));
+  __store_block((void *)(& _C),8UL);
+  __full_init((void *)(& _C));
+  __store_block((void *)(& _B),8UL);
+  __full_init((void *)(& _B));
+  __store_block((void *)(_A),16UL);
+  __full_init((void *)(& _A));
+  __store_block((void *)(& _F),4UL);
+  __full_init((void *)(& _F));
+  return;
+}
+
+int main(int argc, char **argv)
+{
+  int __retres;
+  __e_acsl_memory_init();
+  /*@ assert \valid((char **)_A); */
+  {
+    int __e_acsl_valid;
+    __e_acsl_valid = __valid((void *)(_A),sizeof(char *));
+    e_acsl_assert(__e_acsl_valid,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid((char **)_A)",35);
+  }
+  /*@ assert \valid_read(_A[0]); */
+  {
+    int __e_acsl_initialized;
+    int __e_acsl_and;
+    __e_acsl_initialized = __initialized((void *)(_A),sizeof(char *));
+    if (__e_acsl_initialized) {
+      int __e_acsl_valid_read;
+      __e_acsl_valid_read = __valid_read((void *)_A[0],sizeof(char));
+      __e_acsl_and = __e_acsl_valid_read;
+    }
+    else __e_acsl_and = 0;
+    e_acsl_assert(__e_acsl_and,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid_read(_A[0])",36);
+  }
+  /*@ assert \valid_read(_A[1]); */
+  {
+    int __e_acsl_initialized_2;
+    int __e_acsl_and_2;
+    __e_acsl_initialized_2 = __initialized((void *)(& _A[1]),sizeof(char *));
+    if (__e_acsl_initialized_2) {
+      int __e_acsl_valid_read_2;
+      __e_acsl_valid_read_2 = __valid_read((void *)_A[1],sizeof(char));
+      __e_acsl_and_2 = __e_acsl_valid_read_2;
+    }
+    else __e_acsl_and_2 = 0;
+    e_acsl_assert(__e_acsl_and_2,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid_read(_A[1])",37);
+  }
+  /*@ assert \valid_read(_B); */
+  {
+    int __e_acsl_valid_read_3;
+    __e_acsl_valid_read_3 = __valid_read((void *)_B,sizeof(char));
+    e_acsl_assert(__e_acsl_valid_read_3,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid_read(_B)",38);
+  }
+  /*@ assert \valid(&_C); */
+  {
+    int __e_acsl_valid_2;
+    __e_acsl_valid_2 = __valid((void *)(& _C),sizeof(char *));
+    e_acsl_assert(__e_acsl_valid_2,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(&_C)",39);
+  }
+  /*@ assert \valid((int *)_D); */
+  {
+    int __e_acsl_valid_3;
+    __e_acsl_valid_3 = __valid((void *)(_D),sizeof(int));
+    e_acsl_assert(__e_acsl_valid_3,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid((int *)_D)",40);
+  }
+  /*@ assert \valid(&_E); */
+  {
+    int __e_acsl_valid_4;
+    __e_acsl_valid_4 = __valid((void *)(& _E),sizeof(int));
+    e_acsl_assert(__e_acsl_valid_4,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(&_E)",41);
+  }
+  /*@ assert \valid(&_F); */
+  {
+    int __e_acsl_valid_5;
+    __e_acsl_valid_5 = __valid((void *)(& _F),sizeof(int));
+    e_acsl_assert(__e_acsl_valid_5,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(&_F)",42);
+  }
+  /*@ assert _E ≡ 44; */
+  e_acsl_assert(_E == 44,(char *)"Assertion",(char *)"main",
+                (char *)"_E == 44",43);
+  /*@ assert \valid(&_G); */
+  {
+    int __e_acsl_valid_6;
+    __e_acsl_valid_6 = __valid((void *)(& _G),sizeof(struct ST [2]));
+    e_acsl_assert(__e_acsl_valid_6,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(&_G)",44);
+  }
+  /*@ assert _G[0].num ≡ 99; */
+  e_acsl_assert(_G[0].num == 99,(char *)"Assertion",(char *)"main",
+                (char *)"_G[0].num == 99",45);
+  __retres = 0;
+  __delete_block((void *)(_G));
+  __delete_block((void *)(& _E));
+  __delete_block((void *)(_D));
+  __delete_block((void *)(& _C));
+  __delete_block((void *)(& _B));
+  __delete_block((void *)(_A));
+  __delete_block((void *)(& _F));
+  __e_acsl_memory_clean();
+  return __retres;
+}
+
+
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_compound_initializers2.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_compound_initializers2.c
new file mode 100644
index 0000000000000000000000000000000000000000..006f7b2a248b4d8f1c819547710bd269f940c1d1
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_compound_initializers2.c
@@ -0,0 +1,288 @@
+/* Generated by Frama-C */
+char *__e_acsl_literal_string_3;
+char *__e_acsl_literal_string;
+char *__e_acsl_literal_string_2;
+char *__e_acsl_literal_string_4;
+char *__e_acsl_literal_string_5;
+struct __anonstruct___mpz_struct_1 {
+   int _mp_alloc ;
+   int _mp_size ;
+   unsigned long *_mp_d ;
+};
+typedef struct __anonstruct___mpz_struct_1 __mpz_struct;
+typedef __mpz_struct ( __attribute__((__FC_BUILTIN__)) mpz_t)[1];
+typedef unsigned long size_t;
+struct ST {
+   char *str ;
+   int num ;
+};
+/*@ requires predicate ≢ 0;
+    assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void e_acsl_assert(int predicate,
+                                                           char *kind,
+                                                           char *fct,
+                                                           char *pred_txt,
+                                                           int line);
+
+/*@
+model __mpz_struct { ℤ n };
+*/
+int __fc_random_counter __attribute__((__unused__, __FRAMA_C_MODEL__));
+unsigned long const __fc_rand_max = (unsigned long)32767;
+/*@ ghost extern int __fc_heap_status __attribute__((__FRAMA_C_MODEL__)); */
+
+/*@
+axiomatic dynamic_allocation {
+  predicate is_allocable{L}(size_t n) 
+    reads __fc_heap_status;
+  
+  }
+ */
+/*@ ghost extern int __e_acsl_init; */
+
+/*@ requires ¬\initialized(z);
+    ensures \valid(\old(z));
+    ensures \initialized(\old(z));
+    assigns *z;
+    assigns *z \from n;
+    allocates \old(z);
+ */
+extern  __attribute__((__FC_BUILTIN__)) void __gmpz_init_set_si(__mpz_struct * /*[1]*/ z,
+                                                                long n);
+
+/*@ requires \valid(x);
+    assigns *x;
+    assigns *x \from *x; */
+extern  __attribute__((__FC_BUILTIN__)) void __gmpz_clear(__mpz_struct * /*[1]*/ x);
+
+/*@ requires \valid_read(z1);
+    requires \valid_read(z2);
+    assigns \result;
+    assigns \result \from *z1, *z2;
+ */
+extern  __attribute__((__FC_BUILTIN__)) int __gmpz_cmp(__mpz_struct const * /*[1]*/ z1,
+                                                       __mpz_struct const * /*[1]*/ z2);
+
+/*@ assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1)); */
+extern  __attribute__((__FC_BUILTIN__)) void *__store_block(void *ptr,
+                                                            size_t size);
+
+/*@ assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void __delete_block(void *ptr);
+
+/*@ assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void __full_init(void *ptr);
+
+/*@ assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void __literal_string(void *ptr);
+
+/*@ ensures \result ≡ 0 ∨ \result ≡ 1;
+    ensures \result ≡ 1 ⇒ \valid((char *)\old(ptr)+(0 .. \old(size)-1));
+    assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1));
+ */
+extern  __attribute__((__FC_BUILTIN__)) int __valid(void *ptr, size_t size);
+
+/*@ ensures \result ≡ 0 ∨ \result ≡ 1;
+    ensures
+      \result ≡ 1 ⇒ \valid_read((char *)\old(ptr)+(0 .. \old(size)-1));
+    assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1));
+ */
+extern  __attribute__((__FC_BUILTIN__)) int __valid_read(void *ptr,
+                                                         size_t size);
+
+/*@ ensures \result ≡ 0 ∨ \result ≡ 1;
+    ensures
+      \result ≡ 1 ⇒ \initialized((char *)\old(ptr)+(0 .. \old(size)-1));
+    assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1));
+ */
+extern  __attribute__((__FC_BUILTIN__)) int __initialized(void *ptr,
+                                                          size_t size);
+
+/*@ ghost extern int __e_acsl_internal_heap; */
+
+/*@ assigns __e_acsl_internal_heap;
+    assigns __e_acsl_internal_heap \from __e_acsl_internal_heap;
+ */
+extern  __attribute__((__FC_BUILTIN__)) void __e_acsl_memory_clean(void);
+
+extern size_t __memory_size;
+
+/*@
+predicate diffSize{L1, L2}(ℤ i) =
+  \at(__memory_size,L1)-\at(__memory_size,L2) ≡ i;
+ */
+int _F;
+
+char *_A[2] = {(char *)"XX", (char *)"YY"};
+char *_B = (char *)"ZZ";
+char *_C;
+int _D[2] = {44, 88};
+int _E = 44;
+int _F = 9;
+struct ST _G[2] =
+  {{.str = (char *)"First", .num = 99}, {.str = (char *)"Second", .num = 147}};
+void __e_acsl_memory_init(void)
+{
+  __e_acsl_literal_string_3 = "ZZ";
+  __store_block((void *)__e_acsl_literal_string_3,sizeof("ZZ"));
+  __full_init((void *)__e_acsl_literal_string_3);
+  __literal_string((void *)__e_acsl_literal_string_3);
+  __e_acsl_literal_string = "YY";
+  __store_block((void *)__e_acsl_literal_string,sizeof("YY"));
+  __full_init((void *)__e_acsl_literal_string);
+  __literal_string((void *)__e_acsl_literal_string);
+  __e_acsl_literal_string_2 = "XX";
+  __store_block((void *)__e_acsl_literal_string_2,sizeof("XX"));
+  __full_init((void *)__e_acsl_literal_string_2);
+  __literal_string((void *)__e_acsl_literal_string_2);
+  __e_acsl_literal_string_4 = "Second";
+  __store_block((void *)__e_acsl_literal_string_4,sizeof("Second"));
+  __full_init((void *)__e_acsl_literal_string_4);
+  __literal_string((void *)__e_acsl_literal_string_4);
+  __e_acsl_literal_string_5 = "First";
+  __store_block((void *)__e_acsl_literal_string_5,sizeof("First"));
+  __full_init((void *)__e_acsl_literal_string_5);
+  __literal_string((void *)__e_acsl_literal_string_5);
+  __store_block((void *)(_G),32UL);
+  __full_init((void *)(& _G));
+  __store_block((void *)(& _E),4UL);
+  __full_init((void *)(& _E));
+  __store_block((void *)(_D),8UL);
+  __full_init((void *)(& _D));
+  __store_block((void *)(& _C),8UL);
+  __full_init((void *)(& _C));
+  __store_block((void *)(& _B),8UL);
+  __full_init((void *)(& _B));
+  __store_block((void *)(_A),16UL);
+  __full_init((void *)(& _A));
+  __store_block((void *)(& _F),4UL);
+  __full_init((void *)(& _F));
+  return;
+}
+
+int main(int argc, char **argv)
+{
+  int __retres;
+  __e_acsl_memory_init();
+  /*@ assert \valid((char **)_A); */
+  {
+    int __e_acsl_valid;
+    __e_acsl_valid = __valid((void *)(_A),sizeof(char *));
+    e_acsl_assert(__e_acsl_valid,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid((char **)_A)",35);
+  }
+  /*@ assert \valid_read(_A[0]); */
+  {
+    int __e_acsl_initialized;
+    int __e_acsl_and;
+    __e_acsl_initialized = __initialized((void *)(_A),sizeof(char *));
+    if (__e_acsl_initialized) {
+      int __e_acsl_valid_read;
+      __e_acsl_valid_read = __valid_read((void *)_A[0],sizeof(char));
+      __e_acsl_and = __e_acsl_valid_read;
+    }
+    else __e_acsl_and = 0;
+    e_acsl_assert(__e_acsl_and,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid_read(_A[0])",36);
+  }
+  /*@ assert \valid_read(_A[1]); */
+  {
+    int __e_acsl_initialized_2;
+    int __e_acsl_and_2;
+    __e_acsl_initialized_2 = __initialized((void *)(& _A[1]),sizeof(char *));
+    if (__e_acsl_initialized_2) {
+      int __e_acsl_valid_read_2;
+      __e_acsl_valid_read_2 = __valid_read((void *)_A[1],sizeof(char));
+      __e_acsl_and_2 = __e_acsl_valid_read_2;
+    }
+    else __e_acsl_and_2 = 0;
+    e_acsl_assert(__e_acsl_and_2,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid_read(_A[1])",37);
+  }
+  /*@ assert \valid_read(_B); */
+  {
+    int __e_acsl_valid_read_3;
+    __e_acsl_valid_read_3 = __valid_read((void *)_B,sizeof(char));
+    e_acsl_assert(__e_acsl_valid_read_3,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid_read(_B)",38);
+  }
+  /*@ assert \valid(&_C); */
+  {
+    int __e_acsl_valid_2;
+    __e_acsl_valid_2 = __valid((void *)(& _C),sizeof(char *));
+    e_acsl_assert(__e_acsl_valid_2,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(&_C)",39);
+  }
+  /*@ assert \valid((int *)_D); */
+  {
+    int __e_acsl_valid_3;
+    __e_acsl_valid_3 = __valid((void *)(_D),sizeof(int));
+    e_acsl_assert(__e_acsl_valid_3,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid((int *)_D)",40);
+  }
+  /*@ assert \valid(&_E); */
+  {
+    int __e_acsl_valid_4;
+    __e_acsl_valid_4 = __valid((void *)(& _E),sizeof(int));
+    e_acsl_assert(__e_acsl_valid_4,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(&_E)",41);
+  }
+  /*@ assert \valid(&_F); */
+  {
+    int __e_acsl_valid_5;
+    __e_acsl_valid_5 = __valid((void *)(& _F),sizeof(int));
+    e_acsl_assert(__e_acsl_valid_5,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(&_F)",42);
+  }
+  /*@ assert _E ≡ 44; */
+  {
+    mpz_t __e_acsl__E;
+    mpz_t __e_acsl;
+    int __e_acsl_eq;
+    __gmpz_init_set_si(__e_acsl__E,(long)_E);
+    __gmpz_init_set_si(__e_acsl,(long)44);
+    __e_acsl_eq = __gmpz_cmp((__mpz_struct const *)(__e_acsl__E),
+                             (__mpz_struct const *)(__e_acsl));
+    e_acsl_assert(__e_acsl_eq == 0,(char *)"Assertion",(char *)"main",
+                  (char *)"_E == 44",43);
+    __gmpz_clear(__e_acsl__E);
+    __gmpz_clear(__e_acsl);
+  }
+  /*@ assert \valid(&_G); */
+  {
+    int __e_acsl_valid_6;
+    __e_acsl_valid_6 = __valid((void *)(& _G),sizeof(struct ST [2]));
+    e_acsl_assert(__e_acsl_valid_6,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(&_G)",44);
+  }
+  /*@ assert _G[0].num ≡ 99; */
+  {
+    mpz_t __e_acsl_2;
+    mpz_t __e_acsl_3;
+    int __e_acsl_eq_2;
+    __gmpz_init_set_si(__e_acsl_2,(long)_G[0].num);
+    __gmpz_init_set_si(__e_acsl_3,(long)99);
+    __e_acsl_eq_2 = __gmpz_cmp((__mpz_struct const *)(__e_acsl_2),
+                               (__mpz_struct const *)(__e_acsl_3));
+    e_acsl_assert(__e_acsl_eq_2 == 0,(char *)"Assertion",(char *)"main",
+                  (char *)"_G[0].num == 99",45);
+    __gmpz_clear(__e_acsl_2);
+    __gmpz_clear(__e_acsl_3);
+  }
+  __retres = 0;
+  __delete_block((void *)(_G));
+  __delete_block((void *)(& _E));
+  __delete_block((void *)(_D));
+  __delete_block((void *)(& _C));
+  __delete_block((void *)(& _B));
+  __delete_block((void *)(_A));
+  __delete_block((void *)(& _F));
+  __e_acsl_memory_clean();
+  return __retres;
+}
+
+