let cond mem e =
    match (Cil.stripInfo e).enode with

      | BinOp (op, e1, e2, ty) ->
          cond_binop mem op ty e1 (Cil.typeOf e1) e2 (Cil.typeOf e2)
      | UnOp (op, e1, ty)      ->
          cond_unop mem op ty e1 (Cil.typeOf e1)

      | _ -> boolean_of_value (expr mem e)