Re-arrangement and extension of structures with fresh variables
val is_only_pt_by_fld_or_param_nonnull : InferIR.Procdesc.t ‑> InferIR.Tenv.t ‑> Prop.normal Prop.t ‑> InferIR.Exp.t ‑> bool
val check_dereference_error : InferIR.Tenv.t ‑> InferIR.Procdesc.t ‑> Prop.normal Prop.t ‑> InferIR.Exp.t ‑> InferBase.Location.t ‑> unit
Check for dereference errors: dereferencing 0, a freed value, or an undefined value
val check_call_to_objc_block_error : InferIR.Tenv.t ‑> InferIR.Procdesc.t ‑> Prop.normal Prop.t ‑> InferIR.Exp.t ‑> InferBase.Location.t ‑> unit
Check that an expression representing an objc block can be null and raise a B1
null exception.
It's used to check that we don't call possibly null blocks
val rearrange : ?report_deref_errors:bool ‑> InferIR.Procdesc.t ‑> InferIR.Tenv.t ‑> InferIR.Exp.t ‑> InferIR.Typ.t ‑> Prop.normal Prop.t ‑> InferBase.Location.t ‑> InferIR.Sil.offset list Prop.prop_iter list
rearrange lexp prop
rearranges prop
into the form prop' * lexp|->strexp:typ
.
It returns an iterator with lexp |-> strexp: typ
as current predicate
and the path (an offsetlist
) which leads to lexp
as the iterator state.