method vstmt_aux s = match s.skind with
| Return(Some e,loc) ->
(* Type of [e] has not been changed by retyping formals and return. *)
if isStructOrUnionType (typeOf e) then
(* match e with *)
(* | Lval lv -> *)
(* let skind = Return(Some(Cabs2cil.mkAddrOfAndMark lv),loc) in *)
(* ChangeTo { s with skind = skind; } *)
(* | _ -> assert false (\* Should not be possible *\) *)
let lv = Var(the !return_var),NoOffset in
let ret = mkStmt (Return(Some(Cabs2cil.mkAddrOfAndMark lv),loc)) in
let assigns = expand_assign lv e (typeOf e) loc in
let assigns = List.map (fun i -> mkStmt(Instr i)) assigns in
let block = Block (mkBlock (assigns @ [ret])) in
ChangeTo { s with skind = block }
else SkipChildren
| _ -> DoChildren