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