From 8e00fc0e8ac560db2b34063c003cc9413dd7e471 Mon Sep 17 00:00:00 2001
From: Kostyantyn Vorobyov <kostyantyn.vorobyov@cea.fr>
Date: Fri, 19 Feb 2016 12:42:49 +0100
Subject: [PATCH] [RTL] Dynamic guard against compilation using different
 pointer size

---
 .../e-acsl/share/e-acsl/adt_models/e_acsl_adt_mmodel.h |  9 +++++++--
 src/plugins/e-acsl/share/e-acsl/e_acsl_assert.h        | 10 ++++++++++
 src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel_api.h    |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1304.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1307.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1324.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1326.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1390.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1399.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1478.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1700.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1717.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1718.c      |  2 +-
 src/plugins/e-acsl/tests/bts/oracle/gen_bts1837.c      |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_addrOf.c    |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_alias.c     |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_call.c      |  2 +-
 .../e-acsl-runtime/oracle/gen_compound_initializers.c  |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_freeable.c  |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_ghost.c     |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_init.c      |  2 +-
 .../tests/e-acsl-runtime/oracle/gen_literal_string.c   |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_localvar.c  |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_mainargs.c  |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_memsize.c   |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_ptr.c       |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_ptr_init.c  |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_stdout.c    |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_valid.c     |  2 +-
 .../tests/e-acsl-runtime/oracle/gen_valid_alias.c      |  2 +-
 .../e-acsl-runtime/oracle/gen_valid_in_contract.c      |  2 +-
 .../e-acsl/tests/e-acsl-runtime/oracle/gen_vector.c    |  2 +-
 src/plugins/e-acsl/tests/gmp/oracle/gen_at.c           |  2 +-
 src/plugins/e-acsl/tests/gmp/oracle/gen_at2.c          |  2 +-
 src/plugins/e-acsl/visit.ml                            |  4 +++-
 35 files changed, 52 insertions(+), 35 deletions(-)

diff --git a/src/plugins/e-acsl/share/e-acsl/adt_models/e_acsl_adt_mmodel.h b/src/plugins/e-acsl/share/e-acsl/adt_models/e_acsl_adt_mmodel.h
index 5a25bb7eacc..49a7416378f 100644
--- a/src/plugins/e-acsl/share/e-acsl/adt_models/e_acsl_adt_mmodel.h
+++ b/src/plugins/e-acsl/share/e-acsl/adt_models/e_acsl_adt_mmodel.h
@@ -384,8 +384,13 @@ void __init_argv(int argc, char **argv) {
   }
 }
 
-/* initialize contents of the abstract structure and record arguments */
-void __e_acsl_memory_init(int *argc_ref, char ***argv_ref) { }
+/* initialize contents of the abstract structure and record arguments
+ *  argc_ref address the variable holding the argc parameter
+ *  argv_ref address the variable holding the argv parameter
+ *  ptr_size the size of the pointer computed during instrumentation. */
+void __e_acsl_memory_init(int *argc_ref, char ***argv_ref, size_t ptr_size) {
+  arch_assert(ptr_size);
+}
 
 /**********************/
 /* DEBUG              */
diff --git a/src/plugins/e-acsl/share/e-acsl/e_acsl_assert.h b/src/plugins/e-acsl/share/e-acsl/e_acsl_assert.h
index 2eec3a56cb9..9e0f59c4f91 100644
--- a/src/plugins/e-acsl/share/e-acsl/e_acsl_assert.h
+++ b/src/plugins/e-acsl/share/e-acsl/e_acsl_assert.h
@@ -87,4 +87,14 @@ static void runtime_assert(int predicate, char *kind,
 void __e_acsl_assert(int pred, char *kind, char *fct, char *pred_txt, int line)
   __attribute__ ((weak, alias ("runtime_assert")));
 
+/* Instances of assertions shared accross different memory models */
+
+/* Abort the execution if the size of the pointer computed during
+ * instrumentation (_ptr_sz) does not match the size of the pointer used
+ * by a compiler (void*) */
+#define arch_assert(_ptr_sz) \
+  vassert(_ptr_sz == sizeof(void*), \
+    "Mismatch of instrumentation- and compile-time pointer sizes: " \
+    "%lu vs %lu\n", _ptr_sz, sizeof(void*))
+
 #endif
diff --git a/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel_api.h b/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel_api.h
index 75170c64f89..4e72384efed 100644
--- a/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel_api.h
+++ b/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel_api.h
@@ -155,7 +155,7 @@ void __e_acsl_memory_clean(void)
 /* initialize the abstract structure
  * have to be called before any other statement in `main` */
 /*@ assigns __e_acsl_internal_heap \from __e_acsl_internal_heap; */
-void __e_acsl_memory_init(int *argc_ref, char ***argv)
+void __e_acsl_memory_init(int *argc_ref, char ***argv, size_t ptr_size)
   __attribute__((FC_BUILTIN));
 
 /* return the number of bytes dynamically allocated */
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1304.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1304.c
index 442d3f47cb9..41db747839a 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1304.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1304.c
@@ -29,7 +29,7 @@ int main(void)
   int __retres;
   unsigned char buf[sizeof(union msg)];
   int i;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(buf),16UL);
   i = 0;
   while ((unsigned long)i < sizeof(buf) / (unsigned long)4) {
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1307.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1307.c
index b2ea1116c98..27ae31be343 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1307.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1307.c
@@ -216,7 +216,7 @@ int main(void)
   float f;
   float g;
   float h;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& h),4UL);
   __store_block((void *)(& g),4UL);
   __store_block((void *)(& f),4UL);
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1324.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1324.c
index fdf7dd6b65a..e218608d325 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1324.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1324.c
@@ -83,7 +83,7 @@ int main(void)
   int __retres;
   int t[7];
   int n;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(t),28UL);
   __initialize((void *)(t),sizeof(int));
   t[0] = 1;
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1326.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1326.c
index 85f2b90c94b..67e2c8d506a 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1326.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1326.c
@@ -103,7 +103,7 @@ int main(void)
   int __retres;
   ArrayInt Accel;
   int av;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& av),4UL);
   __store_block((void *)(Accel),20UL);
   __initialize((void *)(Accel),sizeof(int));
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1390.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1390.c
index b4bea7fed88..299751ff83c 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1390.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1390.c
@@ -184,7 +184,7 @@ void __e_acsl_globals_init(void)
 int main(void)
 {
   int __retres;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_globals_init();
   __e_acsl_memchr((void const *)__e_acsl_literal_string,'o',(unsigned long)4);
   __e_acsl_memchr((void const *)__e_acsl_literal_string_2,'o',
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1399.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1399.c
index e243f9fc36f..8a94ba5b38d 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1399.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1399.c
@@ -9,7 +9,7 @@ int main(void)
 {
   int __retres;
   spongeState *state;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& state),8UL);
   __full_init((void *)(& state));
   state = (spongeState *)__e_acsl_malloc(sizeof(spongeState));
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1478.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1478.c
index fcb1c63d95e..b36de9b0ede 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1478.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1478.c
@@ -44,7 +44,7 @@ void __e_acsl_globals_init(void)
 int main(void)
 {
   int __retres;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_globals_init();
   __e_acsl_loop();
   __retres = 0;
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1700.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1700.c
index cdff0a19b95..1f7dcd91b03 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1700.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1700.c
@@ -7,7 +7,7 @@ int main(void)
   int __retres;
   struct toto s;
   struct toto *p;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& p),8UL);
   __store_block((void *)(& s),0UL);
   /*@ assert \valid(&s); */
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1717.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1717.c
index 80fffbde75d..f925f71a738 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1717.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1717.c
@@ -4,7 +4,7 @@ int main(void)
   int __retres;
   int a;
   int *p;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& p),8UL);
   __store_block((void *)(& a),4UL);
   __full_init((void *)(& a));
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1718.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1718.c
index 020ae8cae1f..947d3ff3898 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1718.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1718.c
@@ -4,7 +4,7 @@ int main(void)
   int __retres;
   int a;
   int *p;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& p),8UL);
   __store_block((void *)(& a),4UL);
   __full_init((void *)(& a));
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1837.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1837.c
index 3575487d540..8d8070a212c 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts1837.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts1837.c
@@ -78,7 +78,7 @@ int main(void)
 {
   int __retres;
   int i;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_globals_init();
   i = 4;
   while (1) {
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_addrOf.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_addrOf.c
index b9a4f8ec8ef..71eb9845e69 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_addrOf.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_addrOf.c
@@ -30,7 +30,7 @@ int main(void)
 {
   int __retres;
   int x;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   x = 0;
   f();
   /*@ assert &x ≡ &x; */
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_alias.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_alias.c
index 8c932b2ee89..4b3a9dd0073 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_alias.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_alias.c
@@ -17,7 +17,7 @@ int main(void)
 {
   int __retres;
   int i;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& i),4UL);
   f(& i,255);
   /*@ assert \initialized(&i); */
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_call.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_call.c
index ec503fdfcf7..11d16adfb95 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_call.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_call.c
@@ -38,7 +38,7 @@ int main(void)
   int *p;
   int *q;
   int *r;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& q),8UL);
   __store_block((void *)(& p),8UL);
   __store_block((void *)(& x),4UL);
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
index 86de3ec5d85..e414f7e2244 100644
--- 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
@@ -60,7 +60,7 @@ void __e_acsl_globals_init(void)
 int main(int argc, char **argv)
 {
   int __retres;
-  __e_acsl_memory_init(& argc,& argv);
+  __e_acsl_memory_init(& argc,& argv,8UL);
   __e_acsl_globals_init();
   /*@ assert \valid((char **)_A); */
   {
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_freeable.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_freeable.c
index cfeb1f025b2..533330efbb6 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_freeable.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_freeable.c
@@ -3,7 +3,7 @@ int main(void)
 {
   int __retres;
   int *p;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& p),8UL);
   /*@ assert ¬\freeable(p); */
   {
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ghost.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ghost.c
index c315dd036e5..7ebafbc24c1 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ghost.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ghost.c
@@ -14,7 +14,7 @@ int main(void)
 {
   int __retres;
   int *q;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_globals_init();
   __store_block((void *)(& q),8UL);
   P = & G;
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_init.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_init.c
index 497d521190c..509bb30af84 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_init.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_init.c
@@ -15,7 +15,7 @@ int main(void)
   int __retres;
   int *p;
   int *q;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_globals_init();
   __store_block((void *)(& q),8UL);
   __store_block((void *)(& p),8UL);
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_literal_string.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_literal_string.c
index 6fd0d619df3..5103efe8310 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_literal_string.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_literal_string.c
@@ -58,7 +58,7 @@ int main(void)
 {
   int __retres;
   char *SS;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_globals_init();
   __store_block((void *)(& SS),8UL);
   __full_init((void *)(& SS));
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_localvar.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_localvar.c
index 6332163e50d..0a35857a17a 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_localvar.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_localvar.c
@@ -38,7 +38,7 @@ int main(void)
 {
   int __retres;
   struct list *l;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& l),8UL);
   __full_init((void *)(& l));
   l = (struct list *)0;
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_mainargs.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_mainargs.c
index 10ef1b6904f..7a93e7c7397 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_mainargs.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_mainargs.c
@@ -3,7 +3,7 @@ int main(int argc, char **argv)
 {
   int __retres;
   int i;
-  __e_acsl_memory_init(& argc,& argv);
+  __e_acsl_memory_init(& argc,& argv,8UL);
   __init_argv(argc,argv);
   /*@ assert \valid(&argc); */
   {
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_memsize.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_memsize.c
index d1187032500..1cf25804fad 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_memsize.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_memsize.c
@@ -4,7 +4,7 @@ int main(int argc, char **argv)
   int __retres;
   char *a;
   char *b;
-  __e_acsl_memory_init(& argc,& argv);
+  __e_acsl_memory_init(& argc,& argv,8UL);
   __store_block((void *)(& b),8UL);
   __store_block((void *)(& a),8UL);
   __full_init((void *)(& a));
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr.c
index 33227a51671..a5d213aa979 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr.c
@@ -5,7 +5,7 @@ int main(void)
   int x;
   int t[3];
   int *p;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& p),8UL);
   __store_block((void *)(t),12UL);
   __store_block((void *)(& x),4UL);
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr_init.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr_init.c
index 1335fd7a99d..0b3e6de4726 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr_init.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr_init.c
@@ -31,7 +31,7 @@ int main(void)
   int __retres;
   int *x;
   int *y;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_globals_init();
   __store_block((void *)(& y),8UL);
   __store_block((void *)(& x),8UL);
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_stdout.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_stdout.c
index c06645e0656..2f12c0aa085 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_stdout.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_stdout.c
@@ -21,7 +21,7 @@ int main(void)
   int __retres;
   FILE *f;
   FILE *f2;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_globals_init();
   __store_block((void *)(& f),8UL);
   __full_init((void *)(& f));
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid.c
index e020e1dc08d..c3b7d26d52a 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid.c
@@ -123,7 +123,7 @@ int main(void)
   int **c;
   int ***d;
   int n;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_globals_init();
   __store_block((void *)(& n),4UL);
   __store_block((void *)(& d),8UL);
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid_alias.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid_alias.c
index 8b9cd8c84b1..a9820f674bd 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid_alias.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid_alias.c
@@ -5,7 +5,7 @@ int main(void)
   int *a;
   int *b;
   int n;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& b),8UL);
   __store_block((void *)(& a),8UL);
   n = 0;
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid_in_contract.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid_in_contract.c
index df39cdbf53c..c734d6606bb 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid_in_contract.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_valid_in_contract.c
@@ -107,7 +107,7 @@ struct list *__e_acsl_f(struct list *l)
 int main(void)
 {
   int __retres;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __e_acsl_f((struct list *)0);
   __retres = 0;
   __e_acsl_memory_clean();
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_vector.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_vector.c
index eafb9f7e38b..c89a44fee11 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_vector.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_vector.c
@@ -23,7 +23,7 @@ int main(void)
   int x;
   int v1[3];
   int *v2;
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(& v2),8UL);
   __store_block((void *)(v1),12UL);
   x = 3;
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/gen_at.c b/src/plugins/e-acsl/tests/gmp/oracle/gen_at.c
index aa715235387..32a3edd81cc 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/gen_at.c
+++ b/src/plugins/e-acsl/tests/gmp/oracle/gen_at.c
@@ -140,7 +140,7 @@ int main(void)
   int __retres;
   int x;
   int t[2];
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(t),8UL);
   __store_block((void *)(& x),4UL);
   __full_init((void *)(& x));
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/gen_at2.c b/src/plugins/e-acsl/tests/gmp/oracle/gen_at2.c
index e9933d90555..4ed21e95ef3 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/gen_at2.c
+++ b/src/plugins/e-acsl/tests/gmp/oracle/gen_at2.c
@@ -221,7 +221,7 @@ int main(void)
   int __retres;
   int x;
   int t[2];
-  __e_acsl_memory_init((int *)0,(char ***)0);
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   __store_block((void *)(t),8UL);
   __store_block((void *)(& x),4UL);
   __full_init((void *)(& x));
diff --git a/src/plugins/e-acsl/visit.ml b/src/plugins/e-acsl/visit.ml
index 119f8d0914e..af39f0ae319 100644
--- a/src/plugins/e-acsl/visit.ml
+++ b/src/plugins/e-acsl/visit.ml
@@ -275,6 +275,7 @@ you must call function `%s' and `__e_acsl_memory_clean by yourself.@]"
       match main_fct with
         | Some main ->
           let charPtrPtrType = TPtr(Cil.charPtrType,[]) in
+          let ptrSz = (Cil.sizeOf loc Cil.voidPtrType) in
           let args =
             (* Record arguments only if the first one has int type and the
               second one is an array of char pointers of equivalent. This is
@@ -293,7 +294,8 @@ you must call function `%s' and `__e_acsl_memory_clean by yourself.@]"
                   initialization function, i.e., [__e_acsl_memory_init] *)
                   List.map Cil.mkAddrOfVi main.sformals;
               | _ -> let null = Cil.integer loc 0
-            in [ null ; null ] in
+            in [ null ; null  ] in
+          let args = args @ [ptrSz] in
           let init = Misc.mk_call
             Location.unknown "__e_acsl_memory_init" args in
           main.sbody.bstmts <- init :: main.sbody.bstmts;
-- 
GitLab