From f88ddb494c3454f7d52a8ffeb17a6ef37847f874 Mon Sep 17 00:00:00 2001
From: Basile Desloges <basile.desloges@cea.fr>
Date: Thu, 9 Jul 2020 14:11:46 +0200
Subject: [PATCH] [eacsl:codegen] Fix translation of ranges

The ranges are inclusives, so the number of elements in `[n1 .. n2]` is
`n2 - n1 + 1`.
---
 .../src/code_generator/mmodel_translate.ml     | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/plugins/e-acsl/src/code_generator/mmodel_translate.ml b/src/plugins/e-acsl/src/code_generator/mmodel_translate.ml
index 7412783c89a..79332b59138 100644
--- a/src/plugins/e-acsl/src/code_generator/mmodel_translate.ml
+++ b/src/plugins/e-acsl/src/code_generator/mmodel_translate.ml
@@ -204,13 +204,17 @@ let call_memory_block ~loc kf name ctx env ptr r p =
        we need to clone them in order to force retyping *)
     let s = { s with term_node = s.term_node } in
     let n1 = { n1 with term_node = n1.term_node } in
-    Logic_const.term
-      ~loc
-      (TBinOp(
-          Mult,
-          s,
-          Logic_const.term ~loc (TBinOp(MinusA, n2, n1)) Linteger))
-      Linteger
+    (* The range are inclusives, so the total number of elements is
+       [n2 - n1 + 1] *)
+    let count = Logic_const.term
+        ~loc
+        (TBinOp (
+            PlusA,
+            Logic_const.term ~loc (TBinOp (MinusA, n2, n1)) Linteger,
+            Logic_const.tinteger ~loc 1))
+        Linteger
+    in
+    Logic_const.term ~loc (TBinOp (Mult, s, count)) Linteger
   in
   Typing.type_term ~use_gmp_opt:false size_term;
   let size, env = match Typing.get_number_ty size_term with
-- 
GitLab