let rec find_deps_no_transitivity instr expr =
    (* The value of the expression [expr], just before executing the statement
       [instr], is a function of the values of the returned zones. *)

    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