let by_pointer_reference_pattern_term = function
| TLval(TVar lvar, off)
| Tat ({term_node = TLval(TVar lvar, off) },_)->
let t = Cil.typeOfTermLval (TVar lvar,off) in
if Logic_utils.isLogicPointerType t then
Ok (lvar,false,stars_lv_typ t)
else Any
| TAddrOf(TVar lvar, off)
| Tat ({term_node = TAddrOf(TVar lvar, off) },_)->
Ok (lvar,true, stars_lv_typ (Cil.typeOfTermLval (TVar lvar,off)))
| Tat({term_node = t},_) | t ->
begin
match delta_ptr_term t with
| None ->
(match stars_term t with
| None -> Any
| Some (x,ty,n) ->
let stars = stars_lv_typ ty in
if n < stars
then Ok (x,false,n) else
(if n = stars then Any else Ko (x,false,n)))
| Some (x,n) -> Ok (x,false,n)
end