From 24cea04dc857947081464fb7a63a41c07c28c5b8 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Mon, 21 Mar 2022 15:55:34 +0100
Subject: [PATCH] [kernel] filecheck checks coherence of types in assignments

---
 src/kernel_services/ast_queries/filecheck.ml | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/kernel_services/ast_queries/filecheck.ml b/src/kernel_services/ast_queries/filecheck.ml
index 3a1cad26199..f2165fb862b 100644
--- a/src/kernel_services/ast_queries/filecheck.ml
+++ b/src/kernel_services/ast_queries/filecheck.ml
@@ -1310,6 +1310,15 @@ module Base_checker = struct
         | Local_init (v, ConsInit(f,args,k),loc) ->
           self#check_initialized_var v;
           Cil.treat_constructor_as_func treat_call v f args k loc
+        | Set(lv, rv, _) ->
+          let t1 = Cil.typeOfLval lv in
+          let t2 = Cil.typeOf rv in
+          if not (is_admissible_conversion rv t2 t1) then
+            check_abort
+              "Incompatible types in assignment %a:\
+               location has type %a, value has type %a"
+              Printer.pp_instr i Printer.pp_typ t1 Printer.pp_typ t2;
+          Cil.DoChildren
         | Asm(_,_,Some { asm_gotos },_) ->
           List.iter self#check_label asm_gotos; Cil.DoChildren
         | _ -> Cil.DoChildren
-- 
GitLab