let by_pointer_reference_pattern = function
| Lval (Var x,off) ->
let t = (Cil.typeOfLval (Var x,off)) in
if Cil.isPointerType t then
Ok (x,false, stars_typ t)
else Any
| AddrOf (Var x, off) -> Ok (x,true, stars_typ (Cil.typeOfLval (Var x,off)))
| e ->
begin
match delta_ptr e with
| None ->
(match stars_exp e with
| None -> Any
| Some (x,ty,n) ->
let stars = stars_typ ty in
if n < stars
then Ok (x,false,n) else
(if stars = n then Any else Ko (x,false,n)))
| Some (x,n) -> Ok (x,false,n)
end