let doGuard stmt exp t =
let not_exp = new_exp ~loc:exp.eloc (UnOp(LNot, exp, intType)) in
let th, el as thel =
doGuardOneCond stmt exp t, doGuardOneCond stmt not_exp t
in
let current_condition_status =
try
Cil_datatype.Stmt.Hashtbl.find conditions_table stmt
with Not_found -> 0
in
let new_status =
( if (current_condition_status land mask_then) <> 0
then mask_then
else
match th with
Dataflow.GUse _ | Dataflow.GDefault -> mask_then
| Dataflow.GUnreachable -> 0) lor
( if (current_condition_status land mask_else) <> 0
then mask_else
else
match el with
Dataflow.GUse _ | Dataflow.GDefault -> mask_else
| Dataflow.GUnreachable -> 0)
in
if new_status <> 0
then Cil_datatype.Stmt.Hashtbl.replace conditions_table stmt new_status;
Separate.filter_if stmt thel