This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
<!DOCTYPE html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>InferModules__Attribute (infer.InferModules__Attribute)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc %%VERSION%%"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../index.html">infer</a>» InferModules__Attribute</nav><h1>Module <code>InferModules__Attribute</code></h1><p>Attribute manipulation in Propositions (i.e., Symbolic Heaps)</p></header><dl><dtclass="spec value"id="val-is_pred"><ahref="#val-is_pred"class="anchor"></a><code><spanclass="keyword">val</span> is_pred : <ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a><span>-></span> bool</code></dt><dd><p>Check whether an atom is used to mark an attribute</p></dd></dl><dl><dtclass="spec value"id="val-add"><ahref="#val-add"class="anchor"></a><code><spanclass="keyword">val</span> add : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span>?⁠footprint:bool</span><span>-></span><span>?⁠polarity:bool</span><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/PredSymb/index.html#type-t">InferIR.PredSymb.t</a><span>-></span><span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> list</span><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>Add an attribute associated to the argument expressions</p></dd></dl><dl><dtclass="spec value"id="val-add_or_replace"><ahref="#val-add_or_replace"class="anchor"></a><code><spanclass="keyword">val</span> add_or_replace : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>Replace an attribute associated to the expression</p></dd></dl><dl><dtclass="spec value"id="val-add_or_replace_check_changed"><ahref="#val-add_or_replace_check_changed"class="anchor"></a><code><spanclass="keyword">val</span> add_or_replace_check_changed : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span>(<ahref="../../InferIR/InferIR/PredSymb/index.html#type-t">InferIR.PredSymb.t</a><span>-></span><ahref="../../InferIR/InferIR/PredSymb/index.html#type-t">InferIR.PredSymb.t</a><span>-></span> unit)</span><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>Replace an attribute associated to the expression, and call the given function with new and old attributes if they changed.</p></dd></dl><dl><dtclass="spec value"id="val-get_all"><ahref="#val-get_all"class="anchor"></a><code><spanclass="keyword">val</span> get_all : <span><spanclass="type-var">'a</span><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a> list</span></code></dt><dd><p>Get all the attributes of the prop</p></dd></dl><dl><dtclass="spec value"id="val-get_for_exp"><ahref="#val-get_for_exp"class="anchor"></a><code><spanclass="keyword">val</span> get_for_exp : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a> list</span></code></dt><dd><p>Get the attributes associated to the expression, if any</p></dd></dl><dl><dtclass="spec value"id="val-get_objc_null"><ahref="#val-get_objc_null"class="anchor"></a><code><spanclass="keyword">val</span> get_objc_null : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a> option</span></code></dt><dd><p>Get the objc null attribute associated to the expression, if any</p></dd></dl><dl><dtclass="spec value"id="val-get_observer"><ahref="#val-get_observer"class="anchor"></a><code><spanclass="keyword">val</span> get_observer : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a> option</span></code></dt><dd><p>Get the observer attribute associated to the expression, if any</p></dd></dl><dl><dtclass="spec value"id="val-get_resource"><ahref="#val-get_resource"class="anchor"></a><code><spanclass="keyword">val</span> get_resource : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a> option</span></code></dt><dd><p>Get the resource attribute associated to the expression, if any</p></dd></dl><dl><dtclass="spec value"id="val-get_undef"><ahref="#val-get_undef"class="anchor"></a><code><spanclass="keyword">val</span> get_undef : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a> option</span></code></dt><dd><p>Get the undef attribute associated to the expression, if any</p></dd></dl><dl><dtclass="spec value"id="val-get_wontleak"><ahref="#val-get_wontleak"class="anchor"></a><code><spanclass="keyword">val</span> get_wontleak : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a> option</span></code></dt><dd><p>Getthewontleakattributeassociatedtotheexpression,ifany</p></dd></dl><dl><dtclass="spec value"id="val-has_dangling_uninit"><ahref="#val-has_dangling_uninit"class="anchor"></a><code><spanclass="keyword">val</span> has_dangling_uninit : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span> bool</code></dt><dd><p>Test for existence of an Adangling DAuninit attribute associated to the exp</p></dd></dl><dl><dtclass="spec value"id="val-remove"><ahref="#val-remove"class="anchor"></a><code><spanclass="keyword">val</span> remove : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>Remove an attribute</p></dd></dl><dl><dtclass="spec value"id="val-remove_for_attr"><ahref="#val-remove_for_attr"class="anchor"></a><code><spanclass="keyword">val</span> remove_for_attr : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/PredSymb/index.html#type-t">InferIR.PredSymb.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>Remove all attributes for the given attr</p></dd></dl><dl><dtclass="spec value"id="val-remove_resource"><ahref="#val-remove_resource"class="anchor"></a><code><spanclass="keyword">val</span> remove_resource : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><ahref="../../InferIR/InferIR/PredSymb/index.html#type-res_act_kind">InferIR.PredSymb.res_act_kind</a><span>-></span><ahref="../../InferIR/InferIR/PredSymb/index.html#type-resource">InferIR.PredSymb.resource</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>Remove all attributes for the given resource and kind</p></dd></dl><dl><dtclass="spec value"id="val-map_resource"><ahref="#val-map_resource"class="anchor"></a><code><spanclass="keyword">val</span> map_resource : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><span>(<ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><ahref="../../InferIR/InferIR/PredSymb/index.html#type-res_action">InferIR.PredSymb.res_action</a><span>-></span><ahref="../../InferIR/InferIR/PredSymb/index.html#type-res_action">InferIR.PredSymb.res_action</a>)</span><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>Apply f to every resource attribute in the prop</p></dd></dl><dl><dtclass="spec value"id="val-replace_objc_null"><ahref="#val-replace_objc_null"class="anchor"></a><code><spanclass="keyword">val</span> replace_objc_null : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p><code>replace_objc_null lhs rhs</code>. If rhs has the objc_null attribute, replace the attribute and set the lhs = 0</p></dd></dl><dl><dtclass="spec value"id="val-nullify_exp_with_objc_null"><ahref="#val-nullify_exp_with_objc_null"class="anchor"></a><code><spanclass="keyword">val</span> nullify_exp_with_objc_null : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>For each Var subexp of the argument with an Aobjc_null attribute, remove the attribute and conjoin an equality to zero.</p></dd></dl><dl><dtclass="spec value"id="val-mark_vars_as_undefined"><ahref="#val-mark_vars_as_undefined"class="anchor"></a><code><spanclass="keyword">val</span> mark_vars_as_undefined : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><span>ret_exp:<ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a></span><span>-></span><span>undefined_actuals_by_ref:<span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> list</span></span><span>-></span><ahref="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span>-></span><ahref="../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="../../InferIR/InferIR/PredSymb/index.html#type-path_pos">InferIR.PredSymb.path_pos</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>mark Exp.Var's or Exp.Lvar's as undefined</p></dd></dl><dl><dtclass="spec type"id="type-arith_problem"><ahref="#type-arith_problem"class="anchor"></a><code><spanclass="keyword">type</span> arith_problem</code><code> = </code><tableclass="variant"><trid="type-arith_problem.Div0"class="anchored"><tdclass="def constructor"><ahref="#type-arith_problem.Div0"class="anchor"></a><code>| </code><code><spanclass="constructor">Div0</span><spanclass="keyword">of</span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a></code></td></tr><trid="type-arith_problem.UminusUnsigned"class="anchored"><tdclass="def constructor"><ahref="#type-arith_problem.UminusUnsigned"class="anchor"></a><code>| </code><code><spanclass="constructor">UminusUnsigned</span><spanclass="keyword">of</span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> * <ahref="../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a></code></td></tr></table></dt><dd><p>type for arithmetic problems</p></dd></dl><dl><dtclass="spec value"id="val-find_arithmetic_problem"><ahref="#val-find_arithmetic_problem"class="anchor"></a><code><spanclass="keyword">val</span> find_arithmetic_problem : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><ahref="../../InferIR/InferIR/PredSymb/index.html#type-path_pos">InferIR.PredSymb.path_pos</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><ahref="index.html#type-arith_problem">arith_problem</a> option</span> * <span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>Look for an arithmetic problem in <code>exp</code></p></dd></dl><dl><dtclass="spec value"id="val-deallocate_stack_vars"><ahref="#val-deallocate_stack_vars"class="anchor"></a><code><spanclass="keyword">val</span> deallocate_stack_vars : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><span><ahref="../../InferIR/InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a> list</span><span>-></span><span><ahref="../../InferIR/InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a> list</span> * <span><ahref="../InferModules/Prop/index.html#type-normal">InferModules.Prop.normal</a><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span></code></dt><dd><p>Deallocate the stack variables in <code>pvars</code>, and replace them by normal variables. Return the list of stack variables whose address was still present after deallocation.</p></dd></dl><dl><dtclass="spec value"id="val-find_equal_formal_path"><ahref="#val-find_equal_formal_path"class="anchor"></a><code><spanclass="keyword">val</span> find_equal_formal_path : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="../InferModules/Prop/index.html#type-t">InferModules.Prop.t</a></span><span>-></span><span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> option</span></code></dt></dl></div></body></html>