method compute_funspec kf =
    let state = self#specialize_state_on_call kf in
    let behaviors = !Value.valid_behaviors kf state in
    let assigns = Ast_info.merge_assigns behaviors in
    (match assigns with
       | WritesAny -> Zone.top
       | Writes assigns ->
           try
             List.fold_left
               (fun acc (loc,_) ->
                  let c = loc.it_content in
                  if (Logic_utils.is_result c)
                  then acc
                  else
                    let loc =
                      !Properties.Interp.loc_to_loc ~result:None state c
                    in
                    Zone.join acc
                      (Locations.valid_enumerate_bits ~for_writing:true loc))
               Zone.bottom
               assigns
           with Invalid_argument "not an lvalue" ->
             Inout_parameters.warning ~current:true
               "unsupported assigns clause for function %a; Ignoring it."
               Kernel_function.pretty kf;
             Zone.bottom)