diff --git a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.c b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.c
index f79b919df168f6740f8721c301a4e7a73a86d7b3..dd90b193a0e3bf612ae301a6b99ddac97a631073 100644
--- a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.c
+++ b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.c
@@ -371,7 +371,7 @@ struct _block * __get_cont (void * ptr) {
       }
       /* tmp->addr <= ptr, tmp may contain ptr
 	 ptr is contained if tmp is large enough (begin addr + size) */
-      else if((size_t)ptr < tmp->leaf->size + tmp->addr)
+      else if((size_t)ptr <= tmp->leaf->size + tmp->addr)
 	return tmp->leaf;
       /* tmp->addr <= ptr, but tmp->addr is not large enough */
       else if (ind == -1)
diff --git a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_list.c b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_list.c
index 39f1e48cfe3c7fb7b64ec0bb6029edc36be5343b..062c11623d9cc656434d50f810b2302adff0c98b 100644
--- a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_list.c
+++ b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_list.c
@@ -99,11 +99,12 @@ struct _block* __get_exact(void* ptr) {
 struct _block* __get_cont(void* ptr) {
   struct _node * tmp = __list;
   for(; tmp != NULL; tmp = tmp->next) {
-    if(tmp->value->ptr <= (size_t)ptr
-       && (size_t)ptr < tmp->value->ptr + tmp->value->size)
-      return tmp->value;
-    else if(tmp->value->ptr > (size_t)ptr)
+    if(tmp->value->ptr > (size_t)ptr)
       break;
+    if(tmp->value->size == 0 && (size_t)ptr == tmp->value->ptr)
+      return tmp->value;
+    if((size_t)ptr < tmp->value->ptr + tmp->value->size)
+      return tmp->value;
   }
   return NULL;
 }
diff --git a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel.c b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel.c
index 9ad56794b9ff0043d9f8b3ea3a935417532fbf72..8db9c737e840388279e08131c6a3c854d8dc2ff9 100644
--- a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel.c
+++ b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel.c
@@ -332,7 +332,7 @@ int __valid(void* ptr, size_t size) {
   struct _block * tmp;
   if(ptr == NULL)
     return false;
-  assert(size > 0);
+  //assert(size > 0);
   tmp = __get_cont(ptr);
   return (tmp == NULL) ?
     false : ( tmp->size - ( (size_t)ptr - tmp->ptr ) >= size
@@ -344,7 +344,7 @@ int __valid_read(void* ptr, size_t size) {
   struct _block * tmp;
   if(ptr == NULL)
     return false;
-  assert(size > 0);
+  //assert(size > 0);
   tmp = __get_cont(ptr);
   return (tmp == NULL) ?
     false : ( tmp->size - ( (size_t)ptr - tmp->ptr ) >= size
diff --git a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_splay_tree.c b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_splay_tree.c
index c55c28bf603657b172b6eaac0acc1bbdcefb05a8..7a6b990915436f842b0d6e6ebd2ca4226bdab8e7 100644
--- a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_splay_tree.c
+++ b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_splay_tree.c
@@ -156,6 +156,8 @@ struct _block* __get_exact(void* ptr) {
 struct _block* _get_cont_rec(struct _node * node, void* ptr) {
   if(node == NULL) return NULL;
   else if(node->value->ptr > (size_t)ptr) return _get_cont_rec(node->left, ptr);
+  else if(node->value->size == 0 && node->value->ptr == (size_t)ptr)
+    return node->value;
   else if(node->value->ptr+node->value->size > (size_t)ptr) return node->value;
   else return _get_cont_rec(node->right, ptr);
 }
diff --git a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_tree.c b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_tree.c
index 1a98fd6e2e01379664c3b1b0212e6aa645bfd5f2..253a8bc3ef11e4c7baae3fdee214c5c3b5079e86 100644
--- a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_tree.c
+++ b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_tree.c
@@ -111,6 +111,8 @@ struct _block* __get_exact(void* ptr) {
 struct _block* _get_cont_rec(struct _node * node, void* ptr) {
   if(node == NULL) return NULL;
   else if(node->value->ptr > (size_t)ptr) return _get_cont_rec(node->left, ptr);
+  else if(node->value->size == 0 && node->value->ptr == (size_t)ptr)
+    return node->value;
   else if(node->value->ptr+node->value->size > (size_t)ptr) return node->value;
   else return _get_cont_rec(node->right, ptr);
 }
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/bts1700.i b/src/plugins/e-acsl/tests/e-acsl-runtime/bts1700.i
new file mode 100644
index 0000000000000000000000000000000000000000..bcf7a9e9f42fdc2681324d8f9b3676feceb4c4d9
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/bts1700.i
@@ -0,0 +1,15 @@
+/* run.config
+   COMMENT: pointer to an empty struct
+   EXECNOW: LOG gen_bts1700.c BIN gen_bts1700.out @frama-c@ -e-acsl-share ./share/e-acsl ./tests/e-acsl-runtime/bts1700.i -e-acsl -then-on e-acsl -print -ocode ./tests/e-acsl-runtime/result/gen_bts1700.c > /dev/null && ./gcc_test.sh bts1700
+*/
+
+struct toto {};
+
+int main() {
+  struct toto s;
+  //@ assert \valid(&s);
+  struct toto *p;
+  p = &s;
+  //@ assert \valid(p);
+  return 0;
+}
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.1.err.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.1.err.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.1.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.1.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..74bbf857adb7b54faca5fa445c26eaf4a1ec3fbe
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.1.res.oracle
@@ -0,0 +1,30 @@
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/e_acsl.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/e_acsl_gmp_types.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/e_acsl_gmp.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/memory_model/e_acsl_mmodel_api.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/memory_model/e_acsl_bittree.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/memory_model/e_acsl_mmodel.h"
+[e-acsl] beginning translation.
+[e-acsl] translation done in project "e-acsl".
+[value] Analyzing a complete application starting at main
+[value] Computing initial state
+[value] Initial state computed
+[value] Values of globals at initialization
+  __fc_random_counter ∈ {0}
+  __fc_rand_max ∈ {32767}
+  __fc_heap_status ∈ [--..--]
+  __e_acsl_init ∈ [--..--]
+  __e_acsl_internal_heap ∈ [--..--]
+  __memory_size ∈ [--..--]
+[value] using specification for function __store_block
+tests/e-acsl-runtime/bts1700.i:10:[value] Assertion got status unknown.
+[value] using specification for function __valid
+[value] using specification for function e_acsl_assert
+FRAMAC_SHARE/e-acsl/e_acsl.h:34:[value] Function e_acsl_assert: precondition got status unknown.
+[value] using specification for function __full_init
+tests/e-acsl-runtime/bts1700.i:13:[value] Assertion got status unknown.
+[value] using specification for function __initialized
+[value] using specification for function __delete_block
+[value] using specification for function __e_acsl_memory_clean
+[value] done for function main
+[value] ====== VALUES COMPUTED ======
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.err.log b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.err.log
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.err.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.err.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.res.log b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.res.log
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..74bbf857adb7b54faca5fa445c26eaf4a1ec3fbe
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/bts1700.res.oracle
@@ -0,0 +1,30 @@
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/e_acsl.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/e_acsl_gmp_types.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/e_acsl_gmp.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/memory_model/e_acsl_mmodel_api.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/memory_model/e_acsl_bittree.h"
+[kernel] preprocessing with "gcc -C -E -I. -IFRAMAC_SHARE/e-acsl  -DE_ACSL_MACHDEP=x86_32 -IFRAMAC_SHARE/libc FRAMAC_SHARE/e-acsl/memory_model/e_acsl_mmodel.h"
+[e-acsl] beginning translation.
+[e-acsl] translation done in project "e-acsl".
+[value] Analyzing a complete application starting at main
+[value] Computing initial state
+[value] Initial state computed
+[value] Values of globals at initialization
+  __fc_random_counter ∈ {0}
+  __fc_rand_max ∈ {32767}
+  __fc_heap_status ∈ [--..--]
+  __e_acsl_init ∈ [--..--]
+  __e_acsl_internal_heap ∈ [--..--]
+  __memory_size ∈ [--..--]
+[value] using specification for function __store_block
+tests/e-acsl-runtime/bts1700.i:10:[value] Assertion got status unknown.
+[value] using specification for function __valid
+[value] using specification for function e_acsl_assert
+FRAMAC_SHARE/e-acsl/e_acsl.h:34:[value] Function e_acsl_assert: precondition got status unknown.
+[value] using specification for function __full_init
+tests/e-acsl-runtime/bts1700.i:13:[value] Assertion got status unknown.
+[value] using specification for function __initialized
+[value] using specification for function __delete_block
+[value] using specification for function __e_acsl_memory_clean
+[value] done for function main
+[value] ====== VALUES COMPUTED ======
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_bts1700.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_bts1700.c
new file mode 100644
index 0000000000000000000000000000000000000000..678a82b6e694e6fcd652dcc99f1c04476ef6021b
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_bts1700.c
@@ -0,0 +1,115 @@
+/* Generated by Frama-C */
+struct __anonstruct___mpz_struct_1 {
+   int _mp_alloc ;
+   int _mp_size ;
+   unsigned long *_mp_d ;
+};
+typedef struct __anonstruct___mpz_struct_1 __mpz_struct;
+typedef __mpz_struct ( __attribute__((__FC_BUILTIN__)) mpz_t)[1];
+typedef unsigned int size_t;
+struct toto {
+   
+};
+/*@ requires predicate ≢ 0;
+    assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void e_acsl_assert(int predicate,
+                                                           char *kind,
+                                                           char *fct,
+                                                           char *pred_txt,
+                                                           int line);
+
+/*@
+model __mpz_struct { ℤ n };
+*/
+int __fc_random_counter __attribute__((__unused__));
+unsigned long const __fc_rand_max = (unsigned long)32767;
+/*@ ghost extern int __fc_heap_status; */
+
+/*@
+axiomatic
+  dynamic_allocation {
+  predicate is_allocable{L}(size_t n) 
+    reads __fc_heap_status;
+  
+  }
+ */
+/*@ ghost extern int __e_acsl_init; */
+
+/*@ assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1)); */
+extern  __attribute__((__FC_BUILTIN__)) void *__store_block(void *ptr,
+                                                            size_t size);
+
+/*@ assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void __delete_block(void *ptr);
+
+/*@ assigns \nothing; */
+extern  __attribute__((__FC_BUILTIN__)) void __full_init(void *ptr);
+
+/*@ ensures \result ≡ 0 ∨ \result ≡ 1;
+    ensures \result ≡ 1 ⇒ \valid((char *)\old(ptr)+(0 .. \old(size)-1));
+    assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1));
+ */
+extern  __attribute__((__FC_BUILTIN__)) int __valid(void *ptr, size_t size);
+
+/*@ ensures \result ≡ 0 ∨ \result ≡ 1;
+    ensures
+      \result ≡ 1 ⇒ \initialized((char *)\old(ptr)+(0 .. \old(size)-1));
+    assigns \result;
+    assigns \result \from *((char *)ptr+(0 .. size-1));
+ */
+extern  __attribute__((__FC_BUILTIN__)) int __initialized(void *ptr,
+                                                          size_t size);
+
+/*@ ghost extern int __e_acsl_internal_heap; */
+
+/*@ assigns __e_acsl_internal_heap;
+    assigns __e_acsl_internal_heap \from __e_acsl_internal_heap;
+ */
+extern  __attribute__((__FC_BUILTIN__)) void __e_acsl_memory_clean(void);
+
+extern size_t __memory_size;
+
+/*@
+predicate diffSize{L1, L2}(ℤ i) =
+  \at(__memory_size,L1)-\at(__memory_size,L2) ≡ i;
+ */
+int main(void)
+{
+  int __retres;
+  struct toto s;
+  struct toto *p;
+  __store_block((void *)(& p),4U);
+  __store_block((void *)(& s),0U);
+  /*@ assert \valid(&s); */
+  {
+    int __e_acsl_valid;
+    __e_acsl_valid = __valid((void *)(& s),sizeof(struct toto));
+    e_acsl_assert(__e_acsl_valid,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(&s)",10);
+  }
+  __full_init((void *)(& p));
+  p = & s;
+  /*@ assert \valid(p); */
+  {
+    int __e_acsl_initialized;
+    int __e_acsl_and;
+    __e_acsl_initialized = __initialized((void *)(& p),sizeof(struct toto *));
+    if (__e_acsl_initialized) {
+      int __e_acsl_valid_2;
+      __e_acsl_valid_2 = __valid((void *)p,sizeof(struct toto));
+      __e_acsl_and = __e_acsl_valid_2;
+    }
+    else __e_acsl_and = 0;
+    e_acsl_assert(__e_acsl_and,(char *)"Assertion",(char *)"main",
+                  (char *)"\\valid(p)",13);
+  }
+  __retres = 0;
+  __delete_block((void *)(& p));
+  __delete_block((void *)(& s));
+  __e_acsl_memory_clean();
+  return __retres;
+}
+
+