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