let remove_annotations_kf kf =
  (* [JS 2011/08/04] fix bug #910: 
     new implementation now requires to remove by hand annotations. *)

  let annotations = Kernel_function.code_annotations kf in
  let must_keep _ state _ = match state with
    | None -> true
    | Some s -> 
      not (State.equal s (RteAnnotTbl.get_state kf) 
           || State.equal s (PrecondAnnotTbl.get_state kf))
  in
  List.iter
    (fun (stmt, _) -> 
      (* [false] because [Project.clear] is still applied *)
      Annotations.filter ~reset:false must_keep kf stmt)
    annotations;
  (* JS: still keep [Project.clear] because I don't know if it clears something
     else than annotations. If it is not the case, it can safely be removed *)

  (* remove annotations dependant on function (in fact all dependencies*)
  let s = RteGlobalTbl.get_state kf in
  Project.clear ~selection:(State_selection.Dynamic.only_dependencies s) ()