From 3b427eb01c56292fdc8218800750b8d8b409014e Mon Sep 17 00:00:00 2001
From: Maxime Jacquemin <maxime2.jacquemin@gmail.com>
Date: Mon, 12 Sep 2022 13:58:15 +0200
Subject: [PATCH] [Eva] Bug fix in the "smashed" function of
 traece_partitionning.ml

The function relied on "List.map" which is not tail-rec. With enough
plevel, it provoked a stack overflow. I've simply fixed it by performing
the mapped computation inside the fold directly.
---
 src/plugins/eva/partitioning/trace_partitioning.ml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/plugins/eva/partitioning/trace_partitioning.ml b/src/plugins/eva/partitioning/trace_partitioning.ml
index 14df1779833..1b6826e7e7b 100644
--- a/src/plugins/eva/partitioning/trace_partitioning.ml
+++ b/src/plugins/eva/partitioning/trace_partitioning.ml
@@ -117,7 +117,9 @@ struct
   let smashed (s : store) : state Lattice_bounds.or_bottom =
     match expanded s with
     | [] -> `Bottom
-    | (_k, v1) :: l -> `Value (List.fold_left Domain.join v1 (List.map snd l))
+    | (_k, v1) :: l ->
+      let f acc (_k, v) = Domain.join acc v in
+      `Value (List.fold_left f v1 l)
 
   let contents (flow : flow) : state list =
     Flow.to_list flow
-- 
GitLab