let rec find_deps_no_transitivity stmt 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
          stmt
          lv
        in deps
    | CastE (_, e)|UnOp (_, e, _) ->
        find_deps_no_transitivity stmt e
    | BinOp (_, e1, e2, _) ->
        Zone.join
          (find_deps_no_transitivity stmt e1)
          (find_deps_no_transitivity stmt e2)
    | Lval v ->
        find_deps_lval_no_transitivity stmt 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 stmt lv =
    let deps, loc =
      !Values_To_Use.lval_to_loc_with_deps
        ~with_alarms:CilE.warn_none_mode
        ~deps:Zone.bottom
        stmt
        lv
    in
    let direct_deps = valid_enumerate_bits ~for_writing:false loc in
    let result = Zone.join deps direct_deps in
    From_parameters.debug "find_deps_lval_no_trs:@\n deps:%a@\n direct_deps:%a"
      Zone.pretty deps
      Zone.pretty direct_deps;
    result