diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/base_addr.c b/src/plugins/e-acsl/tests/e-acsl-runtime/base_addr.c
new file mode 100644
index 0000000000000000000000000000000000000000..cd0a17aa618ce73afe4939baaa8ecb66ac70f259
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/base_addr.c
@@ -0,0 +1,62 @@
+/* run.config
+   COMMENT: Behaviours of the \base_addr E-ACSL predicate
+*/
+
+#include <stdlib.h>
+
+int A[] = { 1, 2, 3, 4};
+int *PA;
+
+int main(void) {
+  /* Global memory */
+  PA = (int*)&A;
+  /*@ assert \base_addr(A) == \base_addr(PA); */
+  /*@ assert \base_addr(A+3) == \base_addr(PA); */
+  PA++;
+  /*@ assert \base_addr(PA) == \base_addr(A); */
+  /*@ assert \base_addr(PA+2) == \base_addr(A+3); */
+
+  /* Stack memory [long blocks] */
+  int a[] = { 1, 2, 3, 4 };
+  int *pa;
+  pa = (int*)&a;
+
+  /*@ assert \base_addr(a) == \base_addr(pa); */
+  /*@ assert \base_addr(a+3) == \base_addr(pa); */
+  pa++;
+  /*@ assert \base_addr(pa) == \base_addr(a); */
+  /*@ assert \base_addr(pa+2) == \base_addr(a); */
+
+  /* Stack memory [Short blocks] */
+  long l = 4;
+  char *pl = (char*)&l;
+  /*@ assert \base_addr(&l) == \base_addr(pl); */
+  /*@ assert \base_addr(pl+2) == \base_addr(&l); */
+  short *pi = (short*)&l;
+  pi++;
+  pl++;
+  /*@ assert \base_addr(pi) == \base_addr(pl); */
+  /*@ assert \base_addr(pl) == \base_addr(&l); */
+
+  /* Heap memory [single segment] */
+  char *p = malloc(12);
+  char *pd = p;
+  /*@ assert \base_addr(p) == \base_addr(pd); */
+  /*@ assert \base_addr(p+1) == \base_addr(pd+5); */
+  /*@ assert \base_addr(p+11) == \base_addr(pd+1); */
+  p += 5;
+  /*@ assert \base_addr(p+5) == \base_addr(p-5); */
+  /*@ assert \base_addr(p-5) == \base_addr(p+5); */
+
+  /* Heap memory [multiple segments] */
+  long *q = malloc(30*sizeof(long));
+  long *qd = q;
+
+  /*@ assert \base_addr(q) == \base_addr(qd); */
+  q++;
+  /*@ assert \base_addr(q) == \base_addr(qd); */
+  q += 2;
+  /*@ assert \base_addr(q) == \base_addr(qd); */
+  q += 4;
+  /*@ assert \base_addr(q) == \base_addr(qd); */
+}
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/offset.c b/src/plugins/e-acsl/tests/e-acsl-runtime/offset.c
index 0ef49fb786d9e4a0805fb6eba5b24222af95f808..acc4f10d625524a00f313bbaee6cb69fde8561ec 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/offset.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/offset.c
@@ -4,27 +4,53 @@
 
 #include <stdlib.h>
 
-int main() {
-  /* Stack offsets */
-  char c;
-  /*@assert \offset(&c) == 0; */
-
-  short slist[3];
-  short *ps = slist;
-  /*@assert \offset(ps) == 0; */
-  /*@assert \offset(ps + 1) == 2; */
-  /*@assert \offset(ps + 2) == 4; */
-
-  int ilist [3];
-  int *pi = ilist;
-  /*@assert \offset(pi) == 0; */
-  /*@assert \offset(pi + 1) == 4; */
-  /*@assert \offset(pi + 2) == 8; */
-
-  /* Heap offsets */
-  long *p = (long*)malloc(sizeof(long)*12);
-  /*@assert \offset(p) == 0; */
-  /*@assert \offset(p+1) == 8; */
-  /*@assert \offset(p+2) == 16; */
-  return 0;
-}
+int A[] = { 1, 2, 3, 4};
+int *PA;
+
+int main(void) {
+  /* Global memory */
+  PA = (int*)&A;
+  /*@ assert \offset(A) == 0; */
+  /*@ assert \offset(A+3) == 12; */
+  /*@ assert \offset(PA) == 0; */
+  PA++;
+  /*@ assert \offset(PA+1) == 8; */
+
+  /* Stack memory [long blocks] */
+  int a[] = { 1, 2, 3, 4};
+  /*@ assert \offset(a)   == 0; */
+  /*@ assert \offset(a+1) == 4; */
+  /*@ assert \offset(a+3) == 12; */
+
+  /* Stack memory [Short blocks] */
+  long l = 4;
+  char *pl = (char*)&l;
+  /*@ assert \offset(&l) == 0; */
+  /*@ assert \offset(pl) == 0; */
+  /*@ assert \offset(pl+1) == 1; */
+  /*@ assert \offset(pl+7) == 7; */
+  int *pi = (int*)&l;
+  /*@ assert \offset(pi) == 0; */
+  pi++;
+  /*@ assert \offset(pi) == 4; */
+
+  /* Heap memory [single segment] */
+  char *p = malloc(12);
+  /*@ assert \offset(p) == 0; */
+  /*@ assert \offset(p+1) == 1; */
+  /*@ assert \offset(p+11) == 11; */
+  p += 5;
+  /*@ assert \offset(p+5) == 10; */
+  /*@ assert \offset(p-5) == 0; */
+
+  /* Heap memory [multiple segments] */
+  long *q = malloc(30*sizeof(long));
+
+  /*@ assert \offset(q) == 0; */
+  q++;
+  /*@ assert \offset(q) == 8; */
+  q += 2;
+  /*@ assert \offset(q) == 24; */
+  q += 4;
+  /*@ assert \offset(q) == 56; */
+}
\ No newline at end of file
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/base_addr.err.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/base_addr.err.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/base_addr.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/base_addr.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..2879f19b5f84717a4e15786946db32e32c141c46
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/base_addr.res.oracle
@@ -0,0 +1,27 @@
+[e-acsl] beginning translation.
+FRAMAC_SHARE/libc/stdlib.h:156:[e-acsl] warning: E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
+tests/e-acsl-runtime/base_addr.c:10:[e-acsl] warning: E-ACSL construct `complete behaviors' is not yet supported.
+                  Ignoring annotation.
+tests/e-acsl-runtime/base_addr.c:10:[e-acsl] warning: E-ACSL construct `disjoint behaviors' is not yet supported.
+                  Ignoring annotation.
+tests/e-acsl-runtime/base_addr.c:10:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
+                  Ignoring annotation.
+FRAMAC_SHARE/libc/stdlib.h:160:[e-acsl] warning: E-ACSL construct `logic function application' is not yet supported.
+                  Ignoring annotation.
+FRAMAC_SHARE/libc/stdlib.h:160:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
+                  Ignoring annotation.
+FRAMAC_SHARE/libc/stdlib.h:165:[e-acsl] warning: E-ACSL construct `logic function application' is not yet supported.
+                  Ignoring annotation.
+[e-acsl] translation done in project "e-acsl".
+FRAMAC_SHARE/libc/stdlib.h:163:[value] warning: function __e_acsl_malloc, behavior allocation: postcondition got status unknown. (Behavior may be inactive, no reduction performed.)
+FRAMAC_SHARE/libc/stdlib.h:168:[value] warning: function __e_acsl_malloc, behavior no_allocation: postcondition got status unknown. (Behavior may be inactive, no reduction performed.)
+tests/e-acsl-runtime/base_addr.c:44:[value] warning: assertion got status unknown.
+FRAMAC_SHARE/e-acsl/e_acsl.h:34:[value] warning: function __e_acsl_assert: precondition got status unknown.
+tests/e-acsl-runtime/base_addr.c:45:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/base_addr.c:46:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/base_addr.c:48:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/base_addr.c:49:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/base_addr.c:55:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/base_addr.c:57:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/base_addr.c:59:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/base_addr.c:61:[value] warning: assertion got status unknown.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_base_addr.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_base_addr.c
new file mode 100644
index 0000000000000000000000000000000000000000..c4ba017ba98805d0057d37c13e21e48428057c99
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_base_addr.c
@@ -0,0 +1,302 @@
+/* Generated by Frama-C */
+int A[4] = {1, 2, 3, 4};
+int *PA;
+void __e_acsl_globals_init(void)
+{
+  __store_block((void *)(& PA),8UL);
+  __full_init((void *)(& PA));
+  __store_block((void *)(A),16UL);
+  __full_init((void *)(& A));
+  return;
+}
+
+int main(void)
+{
+  int __retres;
+  int a[4];
+  int *pa;
+  long l;
+  char *pl;
+  short *pi;
+  char *p;
+  char *pd;
+  long *q;
+  long *qd;
+  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
+  __e_acsl_globals_init();
+  __store_block((void *)(& qd),8UL);
+  __store_block((void *)(& q),8UL);
+  __store_block((void *)(& pd),8UL);
+  __store_block((void *)(& p),8UL);
+  __store_block((void *)(& pi),8UL);
+  __store_block((void *)(& pl),8UL);
+  __store_block((void *)(& l),8UL);
+  __store_block((void *)(& pa),8UL);
+  __store_block((void *)(a),16UL);
+  PA = (int *)(& A);
+  /*@ assert \base_addr((int *)A) ≡ \base_addr(PA); */
+  {
+    void *__e_acsl_base_addr;
+    void *__e_acsl_base_addr_2;
+    __e_acsl_base_addr = __base_addr((void *)(A));
+    __e_acsl_base_addr_2 = __base_addr((void *)PA);
+    __e_acsl_assert(__e_acsl_base_addr == __e_acsl_base_addr_2,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr((int *)A) == \\base_addr(PA)",13);
+  }
+  /*@ assert \base_addr(&A[3]) ≡ \base_addr(PA); */
+  {
+    void *__e_acsl_base_addr_3;
+    void *__e_acsl_base_addr_4;
+    __e_acsl_base_addr_3 = __base_addr((void *)(& A[3]));
+    __e_acsl_base_addr_4 = __base_addr((void *)PA);
+    __e_acsl_assert(__e_acsl_base_addr_3 == __e_acsl_base_addr_4,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(&A[3]) == \\base_addr(PA)",14);
+  }
+  PA ++;
+  /*@ assert \base_addr(PA) ≡ \base_addr((int *)A); */
+  {
+    void *__e_acsl_base_addr_5;
+    void *__e_acsl_base_addr_6;
+    __e_acsl_base_addr_5 = __base_addr((void *)PA);
+    __e_acsl_base_addr_6 = __base_addr((void *)(A));
+    __e_acsl_assert(__e_acsl_base_addr_5 == __e_acsl_base_addr_6,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(PA) == \\base_addr((int *)A)",16);
+  }
+  /*@ assert \base_addr(PA+2) ≡ \base_addr(&A[3]); */
+  {
+    void *__e_acsl_base_addr_7;
+    void *__e_acsl_base_addr_8;
+    __e_acsl_base_addr_7 = __base_addr((void *)(PA + 2));
+    __e_acsl_base_addr_8 = __base_addr((void *)(& A[3]));
+    __e_acsl_assert(__e_acsl_base_addr_7 == __e_acsl_base_addr_8,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(PA+2) == \\base_addr(&A[3])",17);
+  }
+  __initialize((void *)(a),sizeof(int));
+  a[0] = 1;
+  __initialize((void *)(& a[1]),sizeof(int));
+  a[1] = 2;
+  __initialize((void *)(& a[2]),sizeof(int));
+  a[2] = 3;
+  __initialize((void *)(& a[3]),sizeof(int));
+  a[3] = 4;
+  __full_init((void *)(& pa));
+  pa = (int *)(& a);
+  /*@ assert \base_addr((int *)a) ≡ \base_addr(pa); */
+  {
+    void *__e_acsl_base_addr_9;
+    void *__e_acsl_base_addr_10;
+    __e_acsl_base_addr_9 = __base_addr((void *)(a));
+    __e_acsl_base_addr_10 = __base_addr((void *)pa);
+    __e_acsl_assert(__e_acsl_base_addr_9 == __e_acsl_base_addr_10,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr((int *)a) == \\base_addr(pa)",24);
+  }
+  /*@ assert \base_addr(&a[3]) ≡ \base_addr(pa); */
+  {
+    void *__e_acsl_base_addr_11;
+    void *__e_acsl_base_addr_12;
+    __e_acsl_base_addr_11 = __base_addr((void *)(& a[3]));
+    __e_acsl_base_addr_12 = __base_addr((void *)pa);
+    __e_acsl_assert(__e_acsl_base_addr_11 == __e_acsl_base_addr_12,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(&a[3]) == \\base_addr(pa)",25);
+  }
+  __full_init((void *)(& pa));
+  pa ++;
+  /*@ assert \base_addr(pa) ≡ \base_addr((int *)a); */
+  {
+    void *__e_acsl_base_addr_13;
+    void *__e_acsl_base_addr_14;
+    __e_acsl_base_addr_13 = __base_addr((void *)pa);
+    __e_acsl_base_addr_14 = __base_addr((void *)(a));
+    __e_acsl_assert(__e_acsl_base_addr_13 == __e_acsl_base_addr_14,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(pa) == \\base_addr((int *)a)",27);
+  }
+  /*@ assert \base_addr(pa+2) ≡ \base_addr((int *)a); */
+  {
+    void *__e_acsl_base_addr_15;
+    void *__e_acsl_base_addr_16;
+    __e_acsl_base_addr_15 = __base_addr((void *)(pa + 2));
+    __e_acsl_base_addr_16 = __base_addr((void *)(a));
+    __e_acsl_assert(__e_acsl_base_addr_15 == __e_acsl_base_addr_16,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(pa+2) == \\base_addr((int *)a)",28);
+  }
+  __full_init((void *)(& l));
+  l = (long)4;
+  __full_init((void *)(& pl));
+  pl = (char *)(& l);
+  /*@ assert \base_addr(&l) ≡ \base_addr(pl); */
+  {
+    void *__e_acsl_base_addr_17;
+    void *__e_acsl_base_addr_18;
+    __e_acsl_base_addr_17 = __base_addr((void *)(& l));
+    __e_acsl_base_addr_18 = __base_addr((void *)pl);
+    __e_acsl_assert(__e_acsl_base_addr_17 == __e_acsl_base_addr_18,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(&l) == \\base_addr(pl)",33);
+  }
+  /*@ assert \base_addr(pl+2) ≡ \base_addr(&l); */
+  {
+    void *__e_acsl_base_addr_19;
+    void *__e_acsl_base_addr_20;
+    __e_acsl_base_addr_19 = __base_addr((void *)(pl + 2));
+    __e_acsl_base_addr_20 = __base_addr((void *)(& l));
+    __e_acsl_assert(__e_acsl_base_addr_19 == __e_acsl_base_addr_20,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(pl+2) == \\base_addr(&l)",34);
+  }
+  __full_init((void *)(& pi));
+  pi = (short *)(& l);
+  __full_init((void *)(& pi));
+  pi ++;
+  __full_init((void *)(& pl));
+  pl ++;
+  /*@ assert \base_addr(pi) ≡ \base_addr(pl); */
+  {
+    void *__e_acsl_base_addr_21;
+    void *__e_acsl_base_addr_22;
+    __e_acsl_base_addr_21 = __base_addr((void *)pi);
+    __e_acsl_base_addr_22 = __base_addr((void *)pl);
+    __e_acsl_assert(__e_acsl_base_addr_21 == __e_acsl_base_addr_22,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(pi) == \\base_addr(pl)",38);
+  }
+  /*@ assert \base_addr(pl) ≡ \base_addr(&l); */
+  {
+    void *__e_acsl_base_addr_23;
+    void *__e_acsl_base_addr_24;
+    __e_acsl_base_addr_23 = __base_addr((void *)pl);
+    __e_acsl_base_addr_24 = __base_addr((void *)(& l));
+    __e_acsl_assert(__e_acsl_base_addr_23 == __e_acsl_base_addr_24,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(pl) == \\base_addr(&l)",39);
+  }
+  __full_init((void *)(& p));
+  p = (char *)__e_acsl_malloc((unsigned long)12);
+  __full_init((void *)(& pd));
+  pd = p;
+  /*@ assert \base_addr(p) ≡ \base_addr(pd); */
+  {
+    void *__e_acsl_base_addr_25;
+    void *__e_acsl_base_addr_26;
+    __e_acsl_base_addr_25 = __base_addr((void *)p);
+    __e_acsl_base_addr_26 = __base_addr((void *)pd);
+    __e_acsl_assert(__e_acsl_base_addr_25 == __e_acsl_base_addr_26,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(p) == \\base_addr(pd)",44);
+  }
+  /*@ assert \base_addr(p+1) ≡ \base_addr(pd+5); */
+  {
+    void *__e_acsl_base_addr_27;
+    void *__e_acsl_base_addr_28;
+    __e_acsl_base_addr_27 = __base_addr((void *)(p + 1));
+    __e_acsl_base_addr_28 = __base_addr((void *)(pd + 5));
+    __e_acsl_assert(__e_acsl_base_addr_27 == __e_acsl_base_addr_28,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(p+1) == \\base_addr(pd+5)",45);
+  }
+  /*@ assert \base_addr(p+11) ≡ \base_addr(pd+1); */
+  {
+    void *__e_acsl_base_addr_29;
+    void *__e_acsl_base_addr_30;
+    __e_acsl_base_addr_29 = __base_addr((void *)(p + 11));
+    __e_acsl_base_addr_30 = __base_addr((void *)(pd + 1));
+    __e_acsl_assert(__e_acsl_base_addr_29 == __e_acsl_base_addr_30,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(p+11) == \\base_addr(pd+1)",46);
+  }
+  __full_init((void *)(& p));
+  p += 5;
+  /*@ assert \base_addr(p+5) ≡ \base_addr(p-5); */
+  {
+    void *__e_acsl_base_addr_31;
+    void *__e_acsl_base_addr_32;
+    __e_acsl_base_addr_31 = __base_addr((void *)(p + 5));
+    __e_acsl_base_addr_32 = __base_addr((void *)(p - 5));
+    __e_acsl_assert(__e_acsl_base_addr_31 == __e_acsl_base_addr_32,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(p+5) == \\base_addr(p-5)",48);
+  }
+  /*@ assert \base_addr(p-5) ≡ \base_addr(p+5); */
+  {
+    void *__e_acsl_base_addr_33;
+    void *__e_acsl_base_addr_34;
+    __e_acsl_base_addr_33 = __base_addr((void *)(p - 5));
+    __e_acsl_base_addr_34 = __base_addr((void *)(p + 5));
+    __e_acsl_assert(__e_acsl_base_addr_33 == __e_acsl_base_addr_34,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(p-5) == \\base_addr(p+5)",49);
+  }
+  __full_init((void *)(& q));
+  q = (long *)__e_acsl_malloc((unsigned long)30 * sizeof(long));
+  __full_init((void *)(& qd));
+  qd = q;
+  /*@ assert \base_addr(q) ≡ \base_addr(qd); */
+  {
+    void *__e_acsl_base_addr_35;
+    void *__e_acsl_base_addr_36;
+    __e_acsl_base_addr_35 = __base_addr((void *)q);
+    __e_acsl_base_addr_36 = __base_addr((void *)qd);
+    __e_acsl_assert(__e_acsl_base_addr_35 == __e_acsl_base_addr_36,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(q) == \\base_addr(qd)",55);
+  }
+  __full_init((void *)(& q));
+  q ++;
+  /*@ assert \base_addr(q) ≡ \base_addr(qd); */
+  {
+    void *__e_acsl_base_addr_37;
+    void *__e_acsl_base_addr_38;
+    __e_acsl_base_addr_37 = __base_addr((void *)q);
+    __e_acsl_base_addr_38 = __base_addr((void *)qd);
+    __e_acsl_assert(__e_acsl_base_addr_37 == __e_acsl_base_addr_38,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(q) == \\base_addr(qd)",57);
+  }
+  __full_init((void *)(& q));
+  q += 2;
+  /*@ assert \base_addr(q) ≡ \base_addr(qd); */
+  {
+    void *__e_acsl_base_addr_39;
+    void *__e_acsl_base_addr_40;
+    __e_acsl_base_addr_39 = __base_addr((void *)q);
+    __e_acsl_base_addr_40 = __base_addr((void *)qd);
+    __e_acsl_assert(__e_acsl_base_addr_39 == __e_acsl_base_addr_40,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(q) == \\base_addr(qd)",59);
+  }
+  __full_init((void *)(& q));
+  q += 4;
+  /*@ assert \base_addr(q) ≡ \base_addr(qd); */
+  {
+    void *__e_acsl_base_addr_41;
+    void *__e_acsl_base_addr_42;
+    __e_acsl_base_addr_41 = __base_addr((void *)q);
+    __e_acsl_base_addr_42 = __base_addr((void *)qd);
+    __e_acsl_assert(__e_acsl_base_addr_41 == __e_acsl_base_addr_42,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\base_addr(q) == \\base_addr(qd)",61);
+  }
+  __retres = 0;
+  __delete_block((void *)(& PA));
+  __delete_block((void *)(A));
+  __delete_block((void *)(& qd));
+  __delete_block((void *)(& q));
+  __delete_block((void *)(& pd));
+  __delete_block((void *)(& p));
+  __delete_block((void *)(& pi));
+  __delete_block((void *)(& pl));
+  __delete_block((void *)(& l));
+  __delete_block((void *)(& pa));
+  __delete_block((void *)(a));
+  __e_acsl_memory_clean();
+  return __retres;
+}
+
+
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_offset.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_offset.c
index 3129aa3b85b7b2f6a32143ecd78edfa12c4e1b5a..76d2d7cdd2edf8e7a25f41fde8eca03a1cba64a0 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_offset.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_offset.c
@@ -1,113 +1,247 @@
 /* Generated by Frama-C */
+int A[4] = {1, 2, 3, 4};
+int *PA;
+void __e_acsl_globals_init(void)
+{
+  __store_block((void *)(& PA),8UL);
+  __full_init((void *)(& PA));
+  __store_block((void *)(A),16UL);
+  __full_init((void *)(& A));
+  return;
+}
+
 int main(void)
 {
   int __retres;
-  char c;
-  short slist[3];
-  short *ps;
-  int ilist[3];
+  int a[4];
+  long l;
+  char *pl;
   int *pi;
-  long *p;
+  char *p;
+  long *q;
   __e_acsl_memory_init((int *)0,(char ***)0,8UL);
+  __e_acsl_globals_init();
+  __store_block((void *)(& q),8UL);
   __store_block((void *)(& p),8UL);
   __store_block((void *)(& pi),8UL);
-  __store_block((void *)(ilist),12UL);
-  __store_block((void *)(& ps),8UL);
-  __store_block((void *)(slist),6UL);
-  __store_block((void *)(& c),1UL);
-  /*@ assert \offset(&c) ≡ 0; */
+  __store_block((void *)(& pl),8UL);
+  __store_block((void *)(& l),8UL);
+  __store_block((void *)(a),16UL);
+  PA = (int *)(& A);
+  /*@ assert \offset((int *)A) ≡ 0; */
   {
     int __e_acsl_offset;
-    __e_acsl_offset = __offset((void *)(& c));
+    __e_acsl_offset = __offset((void *)(A));
     __e_acsl_assert((unsigned long)__e_acsl_offset == (unsigned long)0,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(&c) == 0",10);
+                    (char *)"\\offset((int *)A) == 0",13);
   }
-  __full_init((void *)(& ps));
-  ps = slist;
-  /*@ assert \offset(ps) ≡ 0; */
+  /*@ assert \offset(&A[3]) ≡ 12; */
   {
     int __e_acsl_offset_2;
-    __e_acsl_offset_2 = __offset((void *)ps);
-    __e_acsl_assert((unsigned long)__e_acsl_offset_2 == (unsigned long)0,
+    __e_acsl_offset_2 = __offset((void *)(& A[3]));
+    __e_acsl_assert((unsigned long)__e_acsl_offset_2 == (unsigned long)12,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(ps) == 0",14);
+                    (char *)"\\offset(&A[3]) == 12",14);
   }
-  /*@ assert \offset(ps+1) ≡ 2; */
+  /*@ assert \offset(PA) ≡ 0; */
   {
     int __e_acsl_offset_3;
-    __e_acsl_offset_3 = __offset((void *)(ps + 1));
-    __e_acsl_assert((unsigned long)__e_acsl_offset_3 == (unsigned long)2,
+    __e_acsl_offset_3 = __offset((void *)PA);
+    __e_acsl_assert((unsigned long)__e_acsl_offset_3 == (unsigned long)0,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(ps+1) == 2",15);
+                    (char *)"\\offset(PA) == 0",15);
   }
-  /*@ assert \offset(ps+2) ≡ 4; */
+  PA ++;
+  /*@ assert \offset(PA+1) ≡ 8; */
   {
     int __e_acsl_offset_4;
-    __e_acsl_offset_4 = __offset((void *)(ps + 2));
-    __e_acsl_assert((unsigned long)__e_acsl_offset_4 == (unsigned long)4,
+    __e_acsl_offset_4 = __offset((void *)(PA + 1));
+    __e_acsl_assert((unsigned long)__e_acsl_offset_4 == (unsigned long)8,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(ps+2) == 4",16);
+                    (char *)"\\offset(PA+1) == 8",17);
   }
-  __full_init((void *)(& pi));
-  pi = ilist;
-  /*@ assert \offset(pi) ≡ 0; */
+  __initialize((void *)(a),sizeof(int));
+  a[0] = 1;
+  __initialize((void *)(& a[1]),sizeof(int));
+  a[1] = 2;
+  __initialize((void *)(& a[2]),sizeof(int));
+  a[2] = 3;
+  __initialize((void *)(& a[3]),sizeof(int));
+  a[3] = 4;
+  /*@ assert \offset((int *)a) ≡ 0; */
   {
     int __e_acsl_offset_5;
-    __e_acsl_offset_5 = __offset((void *)pi);
+    __e_acsl_offset_5 = __offset((void *)(a));
     __e_acsl_assert((unsigned long)__e_acsl_offset_5 == (unsigned long)0,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(pi) == 0",20);
+                    (char *)"\\offset((int *)a) == 0",21);
   }
-  /*@ assert \offset(pi+1) ≡ 4; */
+  /*@ assert \offset(&a[1]) ≡ 4; */
   {
     int __e_acsl_offset_6;
-    __e_acsl_offset_6 = __offset((void *)(pi + 1));
+    __e_acsl_offset_6 = __offset((void *)(& a[1]));
     __e_acsl_assert((unsigned long)__e_acsl_offset_6 == (unsigned long)4,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(pi+1) == 4",21);
+                    (char *)"\\offset(&a[1]) == 4",22);
   }
-  /*@ assert \offset(pi+2) ≡ 8; */
+  /*@ assert \offset(&a[3]) ≡ 12; */
   {
     int __e_acsl_offset_7;
-    __e_acsl_offset_7 = __offset((void *)(pi + 2));
-    __e_acsl_assert((unsigned long)__e_acsl_offset_7 == (unsigned long)8,
+    __e_acsl_offset_7 = __offset((void *)(& a[3]));
+    __e_acsl_assert((unsigned long)__e_acsl_offset_7 == (unsigned long)12,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(pi+2) == 8",22);
+                    (char *)"\\offset(&a[3]) == 12",23);
   }
-  __full_init((void *)(& p));
-  p = (long *)__e_acsl_malloc(sizeof(long) * (unsigned long)12);
-  /*@ assert \offset(p) ≡ 0; */
+  __full_init((void *)(& l));
+  l = (long)4;
+  __full_init((void *)(& pl));
+  pl = (char *)(& l);
+  /*@ assert \offset(&l) ≡ 0; */
   {
     int __e_acsl_offset_8;
-    __e_acsl_offset_8 = __offset((void *)p);
+    __e_acsl_offset_8 = __offset((void *)(& l));
     __e_acsl_assert((unsigned long)__e_acsl_offset_8 == (unsigned long)0,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(p) == 0",26);
+                    (char *)"\\offset(&l) == 0",28);
   }
-  /*@ assert \offset(p+1) ≡ 8; */
+  /*@ assert \offset(pl) ≡ 0; */
   {
     int __e_acsl_offset_9;
-    __e_acsl_offset_9 = __offset((void *)(p + 1));
-    __e_acsl_assert((unsigned long)__e_acsl_offset_9 == (unsigned long)8,
+    __e_acsl_offset_9 = __offset((void *)pl);
+    __e_acsl_assert((unsigned long)__e_acsl_offset_9 == (unsigned long)0,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(p+1) == 8",27);
+                    (char *)"\\offset(pl) == 0",29);
   }
-  /*@ assert \offset(p+2) ≡ 16; */
+  /*@ assert \offset(pl+1) ≡ 1; */
   {
     int __e_acsl_offset_10;
-    __e_acsl_offset_10 = __offset((void *)(p + 2));
-    __e_acsl_assert((unsigned long)__e_acsl_offset_10 == (unsigned long)16,
+    __e_acsl_offset_10 = __offset((void *)(pl + 1));
+    __e_acsl_assert((unsigned long)__e_acsl_offset_10 == (unsigned long)1,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(pl+1) == 1",30);
+  }
+  /*@ assert \offset(pl+7) ≡ 7; */
+  {
+    int __e_acsl_offset_11;
+    __e_acsl_offset_11 = __offset((void *)(pl + 7));
+    __e_acsl_assert((unsigned long)__e_acsl_offset_11 == (unsigned long)7,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(pl+7) == 7",31);
+  }
+  __full_init((void *)(& pi));
+  pi = (int *)(& l);
+  /*@ assert \offset(pi) ≡ 0; */
+  {
+    int __e_acsl_offset_12;
+    __e_acsl_offset_12 = __offset((void *)pi);
+    __e_acsl_assert((unsigned long)__e_acsl_offset_12 == (unsigned long)0,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(pi) == 0",33);
+  }
+  __full_init((void *)(& pi));
+  pi ++;
+  /*@ assert \offset(pi) ≡ 4; */
+  {
+    int __e_acsl_offset_13;
+    __e_acsl_offset_13 = __offset((void *)pi);
+    __e_acsl_assert((unsigned long)__e_acsl_offset_13 == (unsigned long)4,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(pi) == 4",35);
+  }
+  __full_init((void *)(& p));
+  p = (char *)__e_acsl_malloc((unsigned long)12);
+  /*@ assert \offset(p) ≡ 0; */
+  {
+    int __e_acsl_offset_14;
+    __e_acsl_offset_14 = __offset((void *)p);
+    __e_acsl_assert((unsigned long)__e_acsl_offset_14 == (unsigned long)0,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(p) == 0",39);
+  }
+  /*@ assert \offset(p+1) ≡ 1; */
+  {
+    int __e_acsl_offset_15;
+    __e_acsl_offset_15 = __offset((void *)(p + 1));
+    __e_acsl_assert((unsigned long)__e_acsl_offset_15 == (unsigned long)1,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(p+1) == 1",40);
+  }
+  /*@ assert \offset(p+11) ≡ 11; */
+  {
+    int __e_acsl_offset_16;
+    __e_acsl_offset_16 = __offset((void *)(p + 11));
+    __e_acsl_assert((unsigned long)__e_acsl_offset_16 == (unsigned long)11,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(p+11) == 11",41);
+  }
+  __full_init((void *)(& p));
+  p += 5;
+  /*@ assert \offset(p+5) ≡ 10; */
+  {
+    int __e_acsl_offset_17;
+    __e_acsl_offset_17 = __offset((void *)(p + 5));
+    __e_acsl_assert((unsigned long)__e_acsl_offset_17 == (unsigned long)10,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(p+5) == 10",43);
+  }
+  /*@ assert \offset(p-5) ≡ 0; */
+  {
+    int __e_acsl_offset_18;
+    __e_acsl_offset_18 = __offset((void *)(p - 5));
+    __e_acsl_assert((unsigned long)__e_acsl_offset_18 == (unsigned long)0,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(p-5) == 0",44);
+  }
+  __full_init((void *)(& q));
+  q = (long *)__e_acsl_malloc((unsigned long)30 * sizeof(long));
+  /*@ assert \offset(q) ≡ 0; */
+  {
+    int __e_acsl_offset_19;
+    __e_acsl_offset_19 = __offset((void *)q);
+    __e_acsl_assert((unsigned long)__e_acsl_offset_19 == (unsigned long)0,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(q) == 0",49);
+  }
+  __full_init((void *)(& q));
+  q ++;
+  /*@ assert \offset(q) ≡ 8; */
+  {
+    int __e_acsl_offset_20;
+    __e_acsl_offset_20 = __offset((void *)q);
+    __e_acsl_assert((unsigned long)__e_acsl_offset_20 == (unsigned long)8,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(q) == 8",51);
+  }
+  __full_init((void *)(& q));
+  q += 2;
+  /*@ assert \offset(q) ≡ 24; */
+  {
+    int __e_acsl_offset_21;
+    __e_acsl_offset_21 = __offset((void *)q);
+    __e_acsl_assert((unsigned long)__e_acsl_offset_21 == (unsigned long)24,
+                    (char *)"Assertion",(char *)"main",
+                    (char *)"\\offset(q) == 24",53);
+  }
+  __full_init((void *)(& q));
+  q += 4;
+  /*@ assert \offset(q) ≡ 56; */
+  {
+    int __e_acsl_offset_22;
+    __e_acsl_offset_22 = __offset((void *)q);
+    __e_acsl_assert((unsigned long)__e_acsl_offset_22 == (unsigned long)56,
                     (char *)"Assertion",(char *)"main",
-                    (char *)"\\offset(p+2) == 16",28);
+                    (char *)"\\offset(q) == 56",55);
   }
   __retres = 0;
+  __delete_block((void *)(& PA));
+  __delete_block((void *)(A));
+  __delete_block((void *)(& q));
   __delete_block((void *)(& p));
   __delete_block((void *)(& pi));
-  __delete_block((void *)(ilist));
-  __delete_block((void *)(& ps));
-  __delete_block((void *)(slist));
-  __delete_block((void *)(& c));
+  __delete_block((void *)(& pl));
+  __delete_block((void *)(& l));
+  __delete_block((void *)(a));
   __e_acsl_memory_clean();
   return __retres;
 }
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/offset.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/offset.res.oracle
index 2a96bccb2378ab8a4b70d8911e0928dbfee9d2f0..b74c3bd68abfc70ceed37a1cd713666cb96a62ea 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/offset.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/offset.res.oracle
@@ -1,10 +1,10 @@
 [e-acsl] beginning translation.
 FRAMAC_SHARE/libc/stdlib.h:156:[e-acsl] warning: E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-tests/e-acsl-runtime/offset.c:7:[e-acsl] warning: E-ACSL construct `complete behaviors' is not yet supported.
+tests/e-acsl-runtime/offset.c:10:[e-acsl] warning: E-ACSL construct `complete behaviors' is not yet supported.
                   Ignoring annotation.
-tests/e-acsl-runtime/offset.c:7:[e-acsl] warning: E-ACSL construct `disjoint behaviors' is not yet supported.
+tests/e-acsl-runtime/offset.c:10:[e-acsl] warning: E-ACSL construct `disjoint behaviors' is not yet supported.
                   Ignoring annotation.
-tests/e-acsl-runtime/offset.c:7:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
+tests/e-acsl-runtime/offset.c:10:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
                   Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:160:[e-acsl] warning: E-ACSL construct `logic function application' is not yet supported.
                   Ignoring annotation.
@@ -15,7 +15,13 @@ FRAMAC_SHARE/libc/stdlib.h:165:[e-acsl] warning: E-ACSL construct `logic functio
 [e-acsl] translation done in project "e-acsl".
 FRAMAC_SHARE/libc/stdlib.h:163:[value] warning: function __e_acsl_malloc, behavior allocation: postcondition got status unknown. (Behavior may be inactive, no reduction performed.)
 FRAMAC_SHARE/libc/stdlib.h:168:[value] warning: function __e_acsl_malloc, behavior no_allocation: postcondition got status unknown. (Behavior may be inactive, no reduction performed.)
-tests/e-acsl-runtime/offset.c:26:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/offset.c:39:[value] warning: assertion got status unknown.
 FRAMAC_SHARE/e-acsl/e_acsl.h:34:[value] warning: function __e_acsl_assert: precondition got status unknown.
-tests/e-acsl-runtime/offset.c:27:[value] warning: assertion got status unknown.
-tests/e-acsl-runtime/offset.c:28:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/offset.c:40:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/offset.c:41:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/offset.c:43:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/offset.c:44:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/offset.c:49:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/offset.c:51:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/offset.c:53:[value] warning: assertion got status unknown.
+tests/e-acsl-runtime/offset.c:55:[value] warning: assertion got status unknown.