let doGuard s e _t =
    let interpreted_e = !Values_To_Use.access_expr s e in
    let t1 = unrollType (typeOf e) in
    let do_then, do_else =
      if isIntegralType t1 || isPointerType t1
      then Cvalue.V.contains_non_zero interpreted_e,
      Cvalue.V.contains_zero interpreted_e
      else truetrue (* TODO: a float condition is true iff != 0.0 *)
    in
    (if do_then
    then Dataflow.GDefault
    else Dataflow.GUnreachable),
    (if do_else
    then Dataflow.GDefault
    else Dataflow.GUnreachable)