Blob Blame History Raw
See http://lists.gforge.inria.fr/pipermail/frama-c-discuss/2013-May/003637.html
and http://lists.gforge.inria.fr/pipermail/frama-c-discuss/2013-May/003645.html.

Index: src/wp/LogicCompiler.ml
===================================================================
--- src/wp/LogicCompiler.ml	(revision 22639)
+++ src/wp/LogicCompiler.ml	(working copy)
@@ -606,16 +606,21 @@
 	 List.fold_left (heap_case labels_used) support s)
       Heap.Map.empty cases in
     (* Make signature with collected chunks *)
-    let (parm,sigm) = Heap.Map.fold
-      (fun chunk labels acc ->
-	 let basename = Chunk.basename_of_chunk chunk in
-	 let tau = Chunk.tau_of_chunk chunk in
-	 LabelSet.fold
-	   (fun label (parm,sigm) ->
-	      let x = Lang.freshvar ~basename tau in
-	      x :: parm , Sig_chunk(chunk,label) :: sigm
-	   ) labels acc)
-      support (parp,sigp) in
+    let (parm,sigm) = 
+      let frame = logic_frame l.l_var_info.lv_name l.l_tparams in
+      in_frame frame
+	(fun () -> 
+	   Heap.Map.fold
+	     (fun chunk labels acc ->
+		let basename = Chunk.basename_of_chunk chunk in
+		let tau = Chunk.tau_of_chunk chunk in
+		LabelSet.fold
+		  (fun label (parm,sigm) ->
+		     let x = Lang.freshvar ~basename tau in
+		     x :: parm , Sig_chunk(chunk,label) :: sigm
+		  ) labels acc)
+	     support (parp,sigp) 
+	) () in
     (* Set global Signature *)
     let lfun = ACSL l in
     let ldef = {
@@ -624,8 +629,9 @@
       d_params = parm ;
       d_cluster = cluster ;
       d_definition = Logic Qed.Logic.Prop ;
-    } in 
+    } in
     Definitions.update_symbol ldef ;
+    Signature.update l (SIG sigm) ;
     (* Re-compile final cases *)
     let cases = List.map
       (fun (case,labels,types,lemma) -> 
See http://lists.gforge.inria.fr/pipermail/frama-c-discuss/2013-August/003702.html.

Index: external/unmarshal.ml
===================================================================
--- external/unmarshal.ml	(revision 23277)
+++ external/unmarshal.ml	(working copy)
@@ -209,6 +209,8 @@
 
 (* Auxiliary functions for handling closures. *)
 
+(* Not used by Frama-C, causing problems with ARM, see:
+http://lists.gforge.inria.fr/pipermail/frama-c-discuss/2013-August/003702.html
 let (code_area_start, cksum) =
   let s = Marshal.to_string id [Marshal.Closures] in
   let cksum = String.sub s 0x1E 16 in
@@ -222,6 +224,7 @@
   let start = Obj.add_offset (Obj.field (Obj.repr id) 0) (Int32.neg ofs) in
   (start, cksum)
 ;;
+*)
 
 let check_const ch s msg =
   for i = 0 to String.length s - 1 do
@@ -412,10 +415,12 @@
           read_double_array stk t len readfloat_big
 
       | 0x10 (* CODE_CODEPOINTER *) ->
+	assert false
+(* NOT USED BY Frama-C 
           let ofs = getword ch in
           check_const ch cksum "input_value: code mismatch";
 	  let offset_pointer = Obj.add_offset code_area_start ofs in
-          return stk (do_transform t offset_pointer)
+          return stk (do_transform t offset_pointer) *)
       | 0x11 (* CODE_INFIXPOINTER *) ->
           let ofs = getword ch in
           let clos = intern_rec [] t in