method vpredicate = function
| Papp(callee,labels,args) ->
let args = List.map (fun arg ->
(* Type of [arg] has not been changed. *)
match arg.term_type with
| Ltype _ | Lvar _ | Linteger | Lreal | Larrow _ -> arg
| Ctype ty ->
if isStructOrUnionType ty then
match arg.term_node with
| TLval lv ->
{
arg with
term_node = TAddrOf lv;
term_type = Ctype(mkTRef ty);
}
| _ -> assert false (* Should not be possible *)
else arg
) args in
ChangeDoChildrenPost (Papp(callee,labels,args), fun x -> x)
| _ -> DoChildren