let doGuard s e _t =
let ki = Kstmt s in
current_stmt := ki;
let interpreted_e = !Values_To_Use.access_expr ki e in
let t1 = unrollType (typeOf e) in
let do_then, do_else =
if isIntegralType t1 || isPointerType t1
then Cvalue_type.V.contains_non_zero interpreted_e,
Cvalue_type.V.contains_zero interpreted_e
else true, true (* 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)