From 657e7bd3e2814a99b9d4e23bc2f88cd0b8d6ec26 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Fri, 15 Nov 2019 17:24:40 +0100
Subject: [PATCH] [logic] make appropriate coercion in expr_to_term

---
 src/kernel_services/ast_queries/logic_utils.ml | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/kernel_services/ast_queries/logic_utils.ml b/src/kernel_services/ast_queries/logic_utils.ml
index bbff760dca0..11fa533ea14 100644
--- a/src/kernel_services/ast_queries/logic_utils.ml
+++ b/src/kernel_services/ast_queries/logic_utils.ml
@@ -437,14 +437,14 @@ let rec expr_to_term ~cast e =
     | Lval lv -> TLval (lval_to_term_lval ~cast lv)
     | Info (e,_) -> (expr_to_term ~cast e).term_node
   in
-  if cast then Logic_const.term ~loc result (Ctype e_typ)
+  let tres = Logic_const.term ~loc result (Ctype e_typ) in
+  if cast then tres
   else
     match e.enode with
-    | Const _ | Lval _ | CastE _ ->
-      (* all immediate values keep their C type by default, and are only lifted
-         to integer/real if needed. *)
-      Logic_const.term ~loc result (Ctype e_typ)
-    | _ -> Logic_const.term ~loc result (typ_to_logic_type e_typ)
+    (* all immediate values keep their C type by default, and are only lifted
+       to integer/real if needed. *)
+    | Const _ | Lval _ | CastE _ -> tres
+    | _ -> numeric_coerce (typ_to_logic_type e_typ) tres
 
 and expr_to_term_coerce ~cast e =
   let t = expr_to_term ~cast e in
-- 
GitLab