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