diff --git a/src/plugins/e-acsl/tests/memory/oracle_ci/gen_separated.c b/src/plugins/e-acsl/tests/memory/oracle_ci/gen_separated.c
new file mode 100644
index 0000000000000000000000000000000000000000..6a5a747d509ac2596667b6f684ccf9e640a62b0f
--- /dev/null
+++ b/src/plugins/e-acsl/tests/memory/oracle_ci/gen_separated.c
@@ -0,0 +1,585 @@
+/* Generated by Frama-C */
+#include "stdio.h"
+#include "stdlib.h"
+int main(void)
+{
+  int __retres;
+  __e_acsl_memory_init((int *)0,(char ***)0,(size_t)8);
+  {
+    int a;
+    int b;
+    int c;
+    __e_acsl_store_block((void *)(& c),(size_t)4);
+    __e_acsl_store_block((void *)(& b),(size_t)4);
+    __e_acsl_store_block((void *)(& a),(size_t)4);
+    __e_acsl_full_init((void *)(& c));
+    c = 0;
+    __e_acsl_full_init((void *)(& b));
+    b = c;
+    __e_acsl_full_init((void *)(& a));
+    a = b;
+    int *d = & a;
+    __e_acsl_store_block((void *)(& d),(size_t)8);
+    __e_acsl_full_init((void *)(& d));
+    {
+      int __gen_e_acsl_valid_read;
+      int __gen_e_acsl_valid_read_2;
+      int __gen_e_acsl_valid_read_3;
+      int __gen_e_acsl_separated;
+      __gen_e_acsl_valid_read = __e_acsl_valid_read((void *)(& a),
+                                                    sizeof(int),
+                                                    (void *)(& a),(void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&a); */
+      __e_acsl_assert(__gen_e_acsl_valid_read,"RTE","main",
+                      "separated_guard: \\valid_read(&a)",
+                      "tests/memory/separated.c",14);
+      __gen_e_acsl_valid_read_2 = __e_acsl_valid_read((void *)(& b),
+                                                      sizeof(int),
+                                                      (void *)(& b),
+                                                      (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&b); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_2,"RTE","main",
+                      "separated_guard: \\valid_read(&b)",
+                      "tests/memory/separated.c",14);
+      __gen_e_acsl_valid_read_3 = __e_acsl_valid_read((void *)(& c),
+                                                      sizeof(int),
+                                                      (void *)(& c),
+                                                      (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&c); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_3,"RTE","main",
+                      "separated_guard: \\valid_read(&c)",
+                      "tests/memory/separated.c",14);
+      __gen_e_acsl_separated = __e_acsl_separated((size_t)3,(void *)(& c),
+                                                  sizeof(int),(void *)(& b),
+                                                  sizeof(int),(void *)(& a),
+                                                  sizeof(int));
+      __e_acsl_assert(__gen_e_acsl_separated,"Assertion","main",
+                      "\\separated(&a, &b, &c)","tests/memory/separated.c",
+                      14);
+    }
+    /*@ assert \separated(&a, &b, &c); */ ;
+    {
+      int __gen_e_acsl_valid_read_4;
+      int __gen_e_acsl_valid_read_5;
+      int __gen_e_acsl_valid_read_6;
+      int __gen_e_acsl_initialized;
+      int __gen_e_acsl_and;
+      int __gen_e_acsl_separated_2;
+      __gen_e_acsl_valid_read_4 = __e_acsl_valid_read((void *)(& a),
+                                                      sizeof(int),
+                                                      (void *)(& a),
+                                                      (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&a); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_4,"RTE","main",
+                      "separated_guard: \\valid_read(&a)",
+                      "tests/memory/separated.c",15);
+      __gen_e_acsl_valid_read_5 = __e_acsl_valid_read((void *)(& b),
+                                                      sizeof(int),
+                                                      (void *)(& b),
+                                                      (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&b); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_5,"RTE","main",
+                      "separated_guard: \\valid_read(&b)",
+                      "tests/memory/separated.c",15);
+      __gen_e_acsl_valid_read_6 = __e_acsl_valid_read((void *)(& c),
+                                                      sizeof(int),
+                                                      (void *)(& c),
+                                                      (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&c); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_6,"RTE","main",
+                      "separated_guard: \\valid_read(&c)",
+                      "tests/memory/separated.c",15);
+      __gen_e_acsl_initialized = __e_acsl_initialized((void *)(& d),
+                                                      sizeof(int *));
+      if (__gen_e_acsl_initialized) {
+        int __gen_e_acsl_valid_read_7;
+        __gen_e_acsl_valid_read_7 = __e_acsl_valid_read((void *)d,
+                                                        sizeof(int),
+                                                        (void *)d,
+                                                        (void *)(& d));
+        __gen_e_acsl_and = __gen_e_acsl_valid_read_7;
+      }
+      else __gen_e_acsl_and = 0;
+      /*@ assert E_ACSL: separated_guard: \valid_read(d); */
+      __e_acsl_assert(__gen_e_acsl_and,"RTE","main",
+                      "separated_guard: \\valid_read(d)",
+                      "tests/memory/separated.c",15);
+      __gen_e_acsl_separated_2 = __e_acsl_separated((size_t)4,(void *)d,
+                                                    sizeof(int),
+                                                    (void *)(& c),
+                                                    sizeof(int),
+                                                    (void *)(& b),
+                                                    sizeof(int),
+                                                    (void *)(& a),
+                                                    sizeof(int));
+      __e_acsl_assert(! __gen_e_acsl_separated_2,"Assertion","main",
+                      "!\\separated(&a, &b, &c, d)",
+                      "tests/memory/separated.c",15);
+    }
+    /*@ assert ¬\separated(&a, &b, &c, d); */ ;
+    __e_acsl_delete_block((void *)(& d));
+    __e_acsl_delete_block((void *)(& c));
+    __e_acsl_delete_block((void *)(& b));
+    __e_acsl_delete_block((void *)(& a));
+  }
+  {
+    double array[20] = {(double)0};
+    __e_acsl_store_block((void *)(array),(size_t)160);
+    __e_acsl_full_init((void *)(& array));
+    {
+      int __gen_e_acsl_valid_read_8;
+      int __gen_e_acsl_valid_read_9;
+      int __gen_e_acsl_separated_3;
+      __gen_e_acsl_valid_read_8 = __e_acsl_valid_read((void *)((char *)(& array) + 
+                                                               8 * 0),
+                                                      (size_t)80,
+                                                      (void *)(& array),
+                                                      (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&array[0 .. 9]); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_8,"RTE","main",
+                      "separated_guard: \\valid_read(&array[0 .. 9])",
+                      "tests/memory/separated.c",21);
+      __gen_e_acsl_valid_read_9 = __e_acsl_valid_read((void *)((char *)(& array) + 
+                                                               8 * 10),
+                                                      (size_t)80,
+                                                      (void *)(& array),
+                                                      (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&array[10 .. 19]); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_9,"RTE","main",
+                      "separated_guard: \\valid_read(&array[10 .. 19])",
+                      "tests/memory/separated.c",21);
+      __gen_e_acsl_separated_3 = __e_acsl_separated((size_t)2,
+                                                    (void *)((char *)(& array) + 
+                                                             8 * 10),80,
+                                                    (void *)((char *)(& array) + 
+                                                             8 * 0),80);
+      __e_acsl_assert(__gen_e_acsl_separated_3,"Assertion","main",
+                      "\\separated(&array[0 .. 9], &array[10 .. 19])",
+                      "tests/memory/separated.c",21);
+    }
+    /*@ assert \separated(&array[0 .. 9], &array[10 .. 19]); */ ;
+    {
+      int __gen_e_acsl_valid_read_10;
+      int __gen_e_acsl_valid_read_11;
+      int __gen_e_acsl_separated_4;
+      __gen_e_acsl_valid_read_10 = __e_acsl_valid_read((void *)((char *)(& array) + 
+                                                                8 * 0),
+                                                       (size_t)88,
+                                                       (void *)(& array),
+                                                       (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&array[0 .. 10]); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_10,"RTE","main",
+                      "separated_guard: \\valid_read(&array[0 .. 10])",
+                      "tests/memory/separated.c",22);
+      __gen_e_acsl_valid_read_11 = __e_acsl_valid_read((void *)((char *)(& array) + 
+                                                                8 * 5),
+                                                       (size_t)88,
+                                                       (void *)(& array),
+                                                       (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&array[5 .. 15]); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_11,"RTE","main",
+                      "separated_guard: \\valid_read(&array[5 .. 15])",
+                      "tests/memory/separated.c",22);
+      __gen_e_acsl_separated_4 = __e_acsl_separated((size_t)2,
+                                                    (void *)((char *)(& array) + 
+                                                             8 * 5),88,
+                                                    (void *)((char *)(& array) + 
+                                                             8 * 0),88);
+      __e_acsl_assert(! __gen_e_acsl_separated_4,"Assertion","main",
+                      "!\\separated(&array[0 .. 10], &array[5 .. 15])",
+                      "tests/memory/separated.c",22);
+    }
+    /*@ assert ¬\separated(&array[0 .. 10], &array[5 .. 15]); */ ;
+    {
+      int __gen_e_acsl_valid_read_12;
+      int __gen_e_acsl_valid_read_13;
+      int __gen_e_acsl_separated_5;
+      __gen_e_acsl_valid_read_12 = __e_acsl_valid_read((void *)((char *)(& array) + 
+                                                                8 * 0),
+                                                       (size_t)160,
+                                                       (void *)(& array),
+                                                       (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&array[0 .. 19]); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_12,"RTE","main",
+                      "separated_guard: \\valid_read(&array[0 .. 19])",
+                      "tests/memory/separated.c",23);
+      __gen_e_acsl_valid_read_13 = __e_acsl_valid_read((void *)((char *)(& array) + 
+                                                                8 * 5),
+                                                       (size_t)88,
+                                                       (void *)(& array),
+                                                       (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&array[5 .. 15]); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_13,"RTE","main",
+                      "separated_guard: \\valid_read(&array[5 .. 15])",
+                      "tests/memory/separated.c",23);
+      __gen_e_acsl_separated_5 = __e_acsl_separated((size_t)2,
+                                                    (void *)((char *)(& array) + 
+                                                             8 * 5),88,
+                                                    (void *)((char *)(& array) + 
+                                                             8 * 0),160);
+      __e_acsl_assert(! __gen_e_acsl_separated_5,"Assertion","main",
+                      "!\\separated(&array[0 .. 19], &array[5 .. 15])",
+                      "tests/memory/separated.c",23);
+    }
+    /*@ assert ¬\separated(&array[0 .. 19], &array[5 .. 15]); */ ;
+    {
+      int __gen_e_acsl_valid_read_14;
+      int __gen_e_acsl_valid_read_15;
+      int __gen_e_acsl_separated_6;
+      __gen_e_acsl_valid_read_14 = __e_acsl_valid_read((void *)(array),
+                                                       sizeof(double),
+                                                       (void *)(array),
+                                                       (void *)(array));
+      /*@ assert E_ACSL: separated_guard: \valid_read((double *)array); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_14,"RTE","main",
+                      "separated_guard: \\valid_read((double *)array)",
+                      "tests/memory/separated.c",24);
+      __gen_e_acsl_valid_read_15 = __e_acsl_valid_read((void *)(& array[1]),
+                                                       sizeof(double),
+                                                       (void *)(& array[1]),
+                                                       (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&array[1]); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_15,"RTE","main",
+                      "separated_guard: \\valid_read(&array[1])",
+                      "tests/memory/separated.c",24);
+      __gen_e_acsl_separated_6 = __e_acsl_separated((size_t)2,
+                                                    (void *)(& array[1]),
+                                                    sizeof(double),
+                                                    (void *)(array),
+                                                    sizeof(double));
+      __e_acsl_assert(__gen_e_acsl_separated_6,"Assertion","main",
+                      "\\separated((double *)array, &array[1])",
+                      "tests/memory/separated.c",24);
+    }
+    /*@ assert \separated((double *)array, &array[1]); */ ;
+    {
+      int __gen_e_acsl_valid_read_16;
+      int __gen_e_acsl_valid_read_17;
+      int __gen_e_acsl_separated_7;
+      __gen_e_acsl_valid_read_16 = __e_acsl_valid_read((void *)((char *)(& array) + 
+                                                                8 * 0),
+                                                       (size_t)16,
+                                                       (void *)(& array),
+                                                       (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&array[0 .. 1]); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_16,"RTE","main",
+                      "separated_guard: \\valid_read(&array[0 .. 1])",
+                      "tests/memory/separated.c",25);
+      __gen_e_acsl_valid_read_17 = __e_acsl_valid_read((void *)((char *)(& array) + 
+                                                                8 * 1),
+                                                       (size_t)16,
+                                                       (void *)(& array),
+                                                       (void *)0);
+      /*@ assert E_ACSL: separated_guard: \valid_read(&array[1 .. 2]); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_17,"RTE","main",
+                      "separated_guard: \\valid_read(&array[1 .. 2])",
+                      "tests/memory/separated.c",25);
+      __gen_e_acsl_separated_7 = __e_acsl_separated((size_t)2,
+                                                    (void *)((char *)(& array) + 
+                                                             8 * 1),16,
+                                                    (void *)((char *)(& array) + 
+                                                             8 * 0),16);
+      __e_acsl_assert(! __gen_e_acsl_separated_7,"Assertion","main",
+                      "!\\separated(&array[0 .. 1], &array[1 .. 2])",
+                      "tests/memory/separated.c",25);
+    }
+    /*@ assert ¬\separated(&array[0 .. 1], &array[1 .. 2]); */ ;
+    __e_acsl_delete_block((void *)(array));
+  }
+  {
+    int *a_0 = malloc(sizeof(int));
+    __e_acsl_store_block((void *)(& a_0),(size_t)8);
+    __e_acsl_full_init((void *)(& a_0));
+    int *b_0 = malloc(sizeof(int));
+    __e_acsl_store_block((void *)(& b_0),(size_t)8);
+    __e_acsl_full_init((void *)(& b_0));
+    int *c_0 = a_0;
+    __e_acsl_store_block((void *)(& c_0),(size_t)8);
+    __e_acsl_full_init((void *)(& c_0));
+    {
+      int __gen_e_acsl_initialized_2;
+      int __gen_e_acsl_and_2;
+      int __gen_e_acsl_initialized_3;
+      int __gen_e_acsl_and_3;
+      int __gen_e_acsl_separated_8;
+      __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)(& a_0),
+                                                        sizeof(int *));
+      if (__gen_e_acsl_initialized_2) {
+        int __gen_e_acsl_valid_read_18;
+        __gen_e_acsl_valid_read_18 = __e_acsl_valid_read((void *)a_0,
+                                                         sizeof(int),
+                                                         (void *)a_0,
+                                                         (void *)(& a_0));
+        __gen_e_acsl_and_2 = __gen_e_acsl_valid_read_18;
+      }
+      else __gen_e_acsl_and_2 = 0;
+      /*@ assert E_ACSL: separated_guard: \valid_read(a_0); */
+      __e_acsl_assert(__gen_e_acsl_and_2,"RTE","main",
+                      "separated_guard: \\valid_read(a_0)",
+                      "tests/memory/separated.c",34);
+      __gen_e_acsl_initialized_3 = __e_acsl_initialized((void *)(& b_0),
+                                                        sizeof(int *));
+      if (__gen_e_acsl_initialized_3) {
+        int __gen_e_acsl_valid_read_19;
+        __gen_e_acsl_valid_read_19 = __e_acsl_valid_read((void *)b_0,
+                                                         sizeof(int),
+                                                         (void *)b_0,
+                                                         (void *)(& b_0));
+        __gen_e_acsl_and_3 = __gen_e_acsl_valid_read_19;
+      }
+      else __gen_e_acsl_and_3 = 0;
+      /*@ assert E_ACSL: separated_guard: \valid_read(b_0); */
+      __e_acsl_assert(__gen_e_acsl_and_3,"RTE","main",
+                      "separated_guard: \\valid_read(b_0)",
+                      "tests/memory/separated.c",34);
+      __gen_e_acsl_separated_8 = __e_acsl_separated((size_t)2,(void *)b_0,
+                                                    sizeof(int),(void *)a_0,
+                                                    sizeof(int));
+      __e_acsl_assert(__gen_e_acsl_separated_8,"Assertion","main",
+                      "\\separated(a_0, b_0)","tests/memory/separated.c",34);
+    }
+    /*@ assert \separated(a_0, b_0); */ ;
+    {
+      int __gen_e_acsl_initialized_4;
+      int __gen_e_acsl_and_4;
+      int __gen_e_acsl_initialized_5;
+      int __gen_e_acsl_and_5;
+      int __gen_e_acsl_initialized_6;
+      int __gen_e_acsl_and_6;
+      int __gen_e_acsl_separated_9;
+      __gen_e_acsl_initialized_4 = __e_acsl_initialized((void *)(& a_0),
+                                                        sizeof(int *));
+      if (__gen_e_acsl_initialized_4) {
+        int __gen_e_acsl_valid_read_20;
+        __gen_e_acsl_valid_read_20 = __e_acsl_valid_read((void *)a_0,
+                                                         sizeof(int),
+                                                         (void *)a_0,
+                                                         (void *)(& a_0));
+        __gen_e_acsl_and_4 = __gen_e_acsl_valid_read_20;
+      }
+      else __gen_e_acsl_and_4 = 0;
+      /*@ assert E_ACSL: separated_guard: \valid_read(a_0); */
+      __e_acsl_assert(__gen_e_acsl_and_4,"RTE","main",
+                      "separated_guard: \\valid_read(a_0)",
+                      "tests/memory/separated.c",35);
+      __gen_e_acsl_initialized_5 = __e_acsl_initialized((void *)(& b_0),
+                                                        sizeof(int *));
+      if (__gen_e_acsl_initialized_5) {
+        int __gen_e_acsl_valid_read_21;
+        __gen_e_acsl_valid_read_21 = __e_acsl_valid_read((void *)b_0,
+                                                         sizeof(int),
+                                                         (void *)b_0,
+                                                         (void *)(& b_0));
+        __gen_e_acsl_and_5 = __gen_e_acsl_valid_read_21;
+      }
+      else __gen_e_acsl_and_5 = 0;
+      /*@ assert E_ACSL: separated_guard: \valid_read(b_0); */
+      __e_acsl_assert(__gen_e_acsl_and_5,"RTE","main",
+                      "separated_guard: \\valid_read(b_0)",
+                      "tests/memory/separated.c",35);
+      __gen_e_acsl_initialized_6 = __e_acsl_initialized((void *)(& c_0),
+                                                        sizeof(int *));
+      if (__gen_e_acsl_initialized_6) {
+        int __gen_e_acsl_valid_read_22;
+        __gen_e_acsl_valid_read_22 = __e_acsl_valid_read((void *)c_0,
+                                                         sizeof(int),
+                                                         (void *)c_0,
+                                                         (void *)(& c_0));
+        __gen_e_acsl_and_6 = __gen_e_acsl_valid_read_22;
+      }
+      else __gen_e_acsl_and_6 = 0;
+      /*@ assert E_ACSL: separated_guard: \valid_read(c_0); */
+      __e_acsl_assert(__gen_e_acsl_and_6,"RTE","main",
+                      "separated_guard: \\valid_read(c_0)",
+                      "tests/memory/separated.c",35);
+      __gen_e_acsl_separated_9 = __e_acsl_separated((size_t)3,(void *)c_0,
+                                                    sizeof(int),(void *)b_0,
+                                                    sizeof(int),(void *)a_0,
+                                                    sizeof(int));
+      __e_acsl_assert(! __gen_e_acsl_separated_9,"Assertion","main",
+                      "!\\separated(a_0, b_0, c_0)",
+                      "tests/memory/separated.c",35);
+    }
+    /*@ assert ¬\separated(a_0, b_0, c_0); */ ;
+    free((void *)a_0);
+    free((void *)b_0);
+    __e_acsl_delete_block((void *)(& c_0));
+    __e_acsl_delete_block((void *)(& b_0));
+    __e_acsl_delete_block((void *)(& a_0));
+  }
+  {
+    double *array_0 = malloc(sizeof(double [20]));
+    __e_acsl_store_block((void *)(& array_0),(size_t)8);
+    __e_acsl_full_init((void *)(& array_0));
+    {
+      int __gen_e_acsl_valid_read_23;
+      int __gen_e_acsl_valid_read_24;
+      int __gen_e_acsl_separated_10;
+      __gen_e_acsl_valid_read_23 = __e_acsl_valid_read((void *)((char *)array_0 + 
+                                                                8 * 0),
+                                                       (size_t)80,
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + (0 .. 9)); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_23,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + (0 .. 9))",
+                      "tests/memory/separated.c",44);
+      __gen_e_acsl_valid_read_24 = __e_acsl_valid_read((void *)((char *)array_0 + 
+                                                                8 * 10),
+                                                       (size_t)80,
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + (10 .. 19));
+      */
+      __e_acsl_assert(__gen_e_acsl_valid_read_24,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + (10 .. 19))",
+                      "tests/memory/separated.c",44);
+      __gen_e_acsl_separated_10 = __e_acsl_separated((size_t)2,
+                                                     (void *)((char *)array_0 + 
+                                                              8 * 10),80,
+                                                     (void *)((char *)array_0 + 
+                                                              8 * 0),80);
+      __e_acsl_assert(__gen_e_acsl_separated_10,"Assertion","main",
+                      "\\separated(array_0 + (0 .. 9), array_0 + (10 .. 19))",
+                      "tests/memory/separated.c",44);
+    }
+    /*@ assert \separated(array_0 + (0 .. 9), array_0 + (10 .. 19)); */ ;
+    {
+      int __gen_e_acsl_valid_read_25;
+      int __gen_e_acsl_valid_read_26;
+      int __gen_e_acsl_separated_11;
+      __gen_e_acsl_valid_read_25 = __e_acsl_valid_read((void *)((char *)array_0 + 
+                                                                8 * 0),
+                                                       (size_t)88,
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + (0 .. 10));
+      */
+      __e_acsl_assert(__gen_e_acsl_valid_read_25,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + (0 .. 10))",
+                      "tests/memory/separated.c",45);
+      __gen_e_acsl_valid_read_26 = __e_acsl_valid_read((void *)((char *)array_0 + 
+                                                                8 * 5),
+                                                       (size_t)88,
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + (5 .. 15));
+      */
+      __e_acsl_assert(__gen_e_acsl_valid_read_26,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + (5 .. 15))",
+                      "tests/memory/separated.c",45);
+      __gen_e_acsl_separated_11 = __e_acsl_separated((size_t)2,
+                                                     (void *)((char *)array_0 + 
+                                                              8 * 5),88,
+                                                     (void *)((char *)array_0 + 
+                                                              8 * 0),88);
+      __e_acsl_assert(! __gen_e_acsl_separated_11,"Assertion","main",
+                      "!\\separated(array_0 + (0 .. 10), array_0 + (5 .. 15))",
+                      "tests/memory/separated.c",45);
+    }
+    /*@ assert ¬\separated(array_0 + (0 .. 10), array_0 + (5 .. 15)); */ ;
+    {
+      int __gen_e_acsl_valid_read_27;
+      int __gen_e_acsl_valid_read_28;
+      int __gen_e_acsl_separated_12;
+      __gen_e_acsl_valid_read_27 = __e_acsl_valid_read((void *)((char *)array_0 + 
+                                                                8 * 0),
+                                                       (size_t)160,
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + (0 .. 19));
+      */
+      __e_acsl_assert(__gen_e_acsl_valid_read_27,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + (0 .. 19))",
+                      "tests/memory/separated.c",46);
+      __gen_e_acsl_valid_read_28 = __e_acsl_valid_read((void *)((char *)array_0 + 
+                                                                8 * 5),
+                                                       (size_t)88,
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + (5 .. 15));
+      */
+      __e_acsl_assert(__gen_e_acsl_valid_read_28,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + (5 .. 15))",
+                      "tests/memory/separated.c",46);
+      __gen_e_acsl_separated_12 = __e_acsl_separated((size_t)2,
+                                                     (void *)((char *)array_0 + 
+                                                              8 * 5),88,
+                                                     (void *)((char *)array_0 + 
+                                                              8 * 0),160);
+      __e_acsl_assert(! __gen_e_acsl_separated_12,"Assertion","main",
+                      "!\\separated(array_0 + (0 .. 19), array_0 + (5 .. 15))",
+                      "tests/memory/separated.c",46);
+    }
+    /*@ assert ¬\separated(array_0 + (0 .. 19), array_0 + (5 .. 15)); */ ;
+    {
+      int __gen_e_acsl_valid_read_29;
+      int __gen_e_acsl_valid_read_30;
+      int __gen_e_acsl_separated_13;
+      __gen_e_acsl_valid_read_29 = __e_acsl_valid_read((void *)(array_0 + 0),
+                                                       sizeof(double),
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + 0); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_29,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + 0)",
+                      "tests/memory/separated.c",47);
+      __gen_e_acsl_valid_read_30 = __e_acsl_valid_read((void *)(array_0 + 1),
+                                                       sizeof(double),
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + 1); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_30,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + 1)",
+                      "tests/memory/separated.c",47);
+      __gen_e_acsl_separated_13 = __e_acsl_separated((size_t)2,
+                                                     (void *)(array_0 + 1),
+                                                     sizeof(double),
+                                                     (void *)(array_0 + 0),
+                                                     sizeof(double));
+      __e_acsl_assert(__gen_e_acsl_separated_13,"Assertion","main",
+                      "\\separated(array_0 + 0, array_0 + 1)",
+                      "tests/memory/separated.c",47);
+    }
+    /*@ assert \separated(array_0 + 0, array_0 + 1); */ ;
+    {
+      int __gen_e_acsl_valid_read_31;
+      int __gen_e_acsl_valid_read_32;
+      int __gen_e_acsl_separated_14;
+      __gen_e_acsl_valid_read_31 = __e_acsl_valid_read((void *)((char *)array_0 + 
+                                                                8 * 0),
+                                                       (size_t)16,
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + (0 .. 1)); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_31,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + (0 .. 1))",
+                      "tests/memory/separated.c",48);
+      __gen_e_acsl_valid_read_32 = __e_acsl_valid_read((void *)((char *)array_0 + 
+                                                                8 * 1),
+                                                       (size_t)16,
+                                                       (void *)array_0,
+                                                       (void *)(& array_0));
+      /*@ assert E_ACSL: separated_guard: \valid_read(array_0 + (1 .. 2)); */
+      __e_acsl_assert(__gen_e_acsl_valid_read_32,"RTE","main",
+                      "separated_guard: \\valid_read(array_0 + (1 .. 2))",
+                      "tests/memory/separated.c",48);
+      __gen_e_acsl_separated_14 = __e_acsl_separated((size_t)2,
+                                                     (void *)((char *)array_0 + 
+                                                              8 * 1),16,
+                                                     (void *)((char *)array_0 + 
+                                                              8 * 0),16);
+      __e_acsl_assert(! __gen_e_acsl_separated_14,"Assertion","main",
+                      "!\\separated(array_0 + (0 .. 1), array_0 + (1 .. 2))",
+                      "tests/memory/separated.c",48);
+    }
+    /*@ assert ¬\separated(array_0 + (0 .. 1), array_0 + (1 .. 2)); */ ;
+    free((void *)array_0);
+    __e_acsl_delete_block((void *)(& array_0));
+  }
+  __retres = 0;
+  __e_acsl_memory_clean();
+  return __retres;
+}
+
+
diff --git a/src/plugins/e-acsl/tests/memory/oracle_ci/separated.res.oracle b/src/plugins/e-acsl/tests/memory/oracle_ci/separated.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..beb1260483ced4c4fd7fec20e74713d99c944702
--- /dev/null
+++ b/src/plugins/e-acsl/tests/memory/oracle_ci/separated.res.oracle
@@ -0,0 +1,30 @@
+[e-acsl] beginning translation.
+[e-acsl] translation done in project "e-acsl".
+[eva:alarm] tests/memory/separated.c:14: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:15: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:21: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:22: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:23: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:24: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:25: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:34: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:35: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:44: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:45: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:46: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:47: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
+[eva:alarm] tests/memory/separated.c:48: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
diff --git a/src/plugins/e-acsl/tests/memory/oracle_dev/separated.e-acsl.err.log b/src/plugins/e-acsl/tests/memory/oracle_dev/separated.e-acsl.err.log
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/e-acsl/tests/memory/separated.c b/src/plugins/e-acsl/tests/memory/separated.c
new file mode 100644
index 0000000000000000000000000000000000000000..f63bc50c481ce6e32f517c41545ba6792b913088
--- /dev/null
+++ b/src/plugins/e-acsl/tests/memory/separated.c
@@ -0,0 +1,68 @@
+/* run.config_ci, run.config_dev
+   COMMENT: \separated
+ */
+
+#include <stdlib.h>
+
+int main() {
+    // Stack memory on different blocks
+    {
+        int a, b, c;
+        a = b = c = 0;
+        int * d = &a;
+
+        //@ assert \separated(&a, &b, &c);
+        //@ assert !\separated(&a, &b, &c, d);
+    }
+
+    // Stack memory on the same block
+    {
+        double array[20] = {0};
+        //@ assert \separated(array+(0..9), array+(10..19));
+        //@ assert !\separated(&array[0..10], &array[5..15]);
+        //@ assert !\separated(array+(0..19), array+(5..15));
+        //@ assert \separated(&array[0], &array[1]);
+        //@ assert !\separated(array+(0..1), array+(1..2));
+        //@ assert \separated(&array[15..5], &array[0..19]);
+        //@ assert \separated(array+(0..-3), array+(0..19));
+    }
+
+    // Heap memory on different blocks
+    {
+        int *a = malloc(sizeof(int));
+        int *b = malloc(sizeof(int));
+        int *c = a;
+
+        //@ assert \separated(a, b);
+        //@ assert !\separated(a, b, c);
+
+        free(a);
+        free(b);
+    }
+
+    // Heap memory on the same block
+    {
+        double * array = malloc(sizeof(double[20]));
+        //@ assert \separated(&array[0..9], &array[10..19]);
+        //@ assert !\separated(array+(0..10), array+(5..15));
+        //@ assert !\separated(&array[0..19], &array[5..15]);
+        //@ assert \separated(array+(0), array+(1));
+        //@ assert !\separated(&array[0..1], &array[1..2]);
+        //@ assert \separated(array+(15..5), array+(0..19));
+        //@ assert \separated(&array[0..-3], &array[0..19]);
+        free(array);
+    }
+
+    // Non-contiguous memory locations
+    {
+      double array[10][10][10] = {0};
+
+      //@ assert \separated(&array[0][0..2][0], &array[0][3..5][0], &array[0][6..9][0]);
+      //@ assert \separated(&array[0][0..2][0], &array[1][0..2][0], &array[2][0..2][0]);
+      //@ assert \separated(&array[0..2][0..2][0], &array[0..2][3..5][0]);
+      //@ assert !\separated(&array[0..3][0..2][0], &array[3..5][0..2][0]);
+      //@ assert \separated(&array[0..3][2..0][0], &array[3..5][0..2][0]);
+    }
+
+    return 0;
+}
\ No newline at end of file