let rec find_deps_no_transitivity instr expr =
match (stripInfo expr).enode with
| Info _ -> assert false
|AlignOfE _| AlignOf _| SizeOfStr _
|SizeOfE _| SizeOf _ | Const _
-> Zone.bottom
| AddrOf lv | StartOf lv ->
let deps, _ = !Values_To_Use.lval_to_loc_with_deps
~with_alarms:CilE.warn_none_mode
~deps:Zone.bottom
instr
lv
in deps
| CastE (_, e)|UnOp (_, e, _) ->
find_deps_no_transitivity instr e
| BinOp (_, e1, e2, _) ->
Zone.join
(find_deps_no_transitivity instr e1)
(find_deps_no_transitivity instr e2)
| Lval v ->
find_deps_lval_no_transitivity instr v
and find_deps_offset_no_transitivity instr o =
match o with
| NoOffset -> Zone.bottom
| Field (_,o) -> find_deps_offset_no_transitivity instr o
| Index (e,o) ->
Zone.join
(find_deps_no_transitivity instr e)
(find_deps_offset_no_transitivity instr o)
and find_deps_lval_no_transitivity instr lv =
let deps,looking_for =
!Values_To_Use.lval_to_loc_with_deps
~with_alarms:CilE.warn_none_mode
~deps:Zone.bottom
instr
lv
in
let looking_for = valid_enumerate_bits looking_for in
let result = Zone.join deps looking_for in
From_parameters.debug "find_deps_lval_no_trans:@\n deps:%a@\n looking_for:%a"
Zone.pretty deps
Zone.pretty looking_for;
result