let guards_with f xs p =
    let do_with f p x =
      match F.kind_of_var x with
        | Model _ -> p
        | Acsl (_,Ctype ty) ->
          begin
            match object_of ty with
            | C_int i -> f (guard i (F.var x)) p
            | C_float _ -> p
            | C_pointer _ -> p
            | _ -> p
          end
        | Acsl _ -> p
    in
    List.fold_left (do_with f) xs p