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)