let cvar m vi =
let r = Cvar vi in
match Variables_analysis.dispatch_cvar vi with
| Variables_analysis.Fvar ->
oracle
"%a is a funvar @." !Ast_printer.d_var vi ;
Path (mk_path r m.mem)
| Variables_analysis.Cvar when Crit.isHoare ->
oracle
"%a is a funvar @." !Ast_printer.d_var vi ;
Path (mk_path r m.mem)
| Variables_analysis.Cvar ->
oracle
"%a is a memvar @." !Ast_printer.d_var vi ;
Mloc (M.cvar m.mem vi)
| Variables_analysis.ARarg ->
oracle
"%a is a array refvar @." !Ast_printer.d_var vi;
if vi.vglob then M.global vi;
ARef (mk_path r m.mem)
| Variables_analysis.PRarg ->
oracle
"%a is a ptr refvar @." !Ast_printer.d_var vi ;
PRef (mk_path r m.mem)
| Variables_analysis.PRpar n ->
oracle
"%a is a ptr ref param of arity %d @." !Ast_printer.d_var vi n;
PRpar (mk_pref r m.mem n None, n)
| Variables_analysis.ARpar n ->
oracle
"%a is a array ref param of arity %d @." !Ast_printer.d_var vi n;
let (n0,_) = brackets_and_stars_typ vi.vtype in
if vi.vglob then global vi;
ARpar (mk_aref r m.mem n None, n0)