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>EradicateChecks (infer.Nullsafe.EradicateChecks)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><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>»<ahref="../index.html">Nullsafe</a>» EradicateChecks</nav><h1>Module <code>Nullsafe.EradicateChecks</code></h1></header><aside><p>Module for the checks called by Eradicate.</p></aside><divclass="spec module"id="module-L"><ahref="#module-L"class="anchor"></a><code><spanclass="keyword">module</span> L = <ahref="../../IBase/index.html#module-Logging">IBase.Logging</a></code></div><dl><dtclass="spec value"id="val-explain_expr"><ahref="#val-explain_expr"class="anchor"></a><code><spanclass="keyword">val</span> explain_expr : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><span>string option</span></code></dt><dtclass="spec value"id="val-is_virtual"><ahref="#val-is_virtual"class="anchor"></a><code><spanclass="keyword">val</span> is_virtual : <span><ahref="../AnnotatedSignature/index.html#type-param_signature">AnnotatedSignature.param_signature</a> list</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-check_object_dereference"><ahref="#val-check_object_dereference"class="anchor"></a><code><spanclass="keyword">val</span> check_object_dereference : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../DereferenceRule/ReportableViolation/index.html#type-dereference_type">DereferenceRule.ReportableViolation.dereference_type</a><span>-></span><ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-check_condition_for_redundancy"><ahref="#val-check_condition_for_redundancy"class="anchor"></a><code><spanclass="keyword">val</span> check_condition_for_redundancy : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>is_always_true:bool</span><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Typ/index.html#type-t">IR.Typ.t</a><span>-></span><ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a><span>-></span><ahref="../IDEnv/index.html#type-t">IDEnv.t</a><span>-></span><ahref="../../IBase/LineReader/index.html#type-t">IBase.LineReader.t</a><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><ahref="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a><span>-></span> unit</code></dt><dd><p><code>expr</code> is an expression that was explicitly compared with `null`. At the same time, <code>expr</code> had <code>inferred_nullability</code> before the comparision. Check if the comparision is redundant and emit an issue, if this is the case.</p></dd></dl><dl><dtclass="spec value"id="val-check_field_assignment"><ahref="#val-check_field_assignment"class="anchor"></a><code><spanclass="keyword">val</span> check_field_assignment : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><spanclass="type-var">'a</span><span>-></span><ahref="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a><span>-></span><spanclass="type-var">'b</span><span>-></span><span>expr_rhs:<spanclass="type-var">'c</span></span><span>-></span><span>field_type:<ahref="../../IR/Typ/index.html#type-t">IR.Typ.t</a></span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><ahref="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a><span>-></span><ahref="../AnnotatedField/index.html#type-t">AnnotatedField.t</a><span>-></span><span>(<spanclass="type-var">'a</span><span>-></span><ahref="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a><span>-></span><spanclass="type-var">'b</span><span>-></span><spanclass="type-var">'c</span><span>-></span><span>(<ahref="../../IR/Typ/index.html#type-t">IR.Typ.t</a> * <ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><spanclass="type-var">'d</span> * <ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span><span>-></span> unit</code></dt><dd><p>Check an assignment to a field.</p></dd></dl><dl><dtclass="spec value"id="val-is_field_declared_as_nonnull"><ahref="#val-is_field_declared_as_nonnull"class="anchor"></a><code><spanclass="keyword">val</span> is_field_declared_as_nonnull : <span><ahref="../AnnotatedField/index.html#type-t">AnnotatedField.t</a> option</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-lookup_field_in_typestate"><ahref="#val-lookup_field_in_typestate"class="anchor"></a><code><spanclass="keyword">val</span> lookup_field_in_typestate : <ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><ahref="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a><span>-></span><ahref="../TypeState/index.html#type-t">TypeState.t</a><span>-></span><span><ahref="../TypeState/index.html#type-range">TypeState.range</a> option</span></code></dt><dtclass="spec value"id="val-convert_predicate"><ahref="#val-convert_predicate"class="anchor"></a><code><spanclass="keyword">val</span> convert_predicate : <span>(<ahref="../TypeState/index.html#type-range">TypeState.range</a><span>-></span> bool)</span><span>-></span><ahref="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a><span>-></span><span>(<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <ahref="../TypeState/index.html#type-t">TypeState.t</a>)</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-predicate_holds_for_some_typestate"><ahref="#val-predicate_holds_for_some_typestate"class="anchor"></a><code><spanclass="keyword">val</span> predicate_holds_for_some_typestate : <span><span>(<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <ahref="../TypeState/index.html#type-t">TypeState.t</a>)</span> list</span><span>-></span><ahref="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a><span>-></span><span>predicate:<span>(<ahref="../TypeState/index.html#type-range">TypeState.range</a><span>-></span> bool)</span></span><span>-></span> bool</code></dt><dtclass="spec value"id="val-get_nullability_upper_bound_for_typestate"><ahref="#val-get_nullability_upper_bound_for_typestate"class="anchor"></a><code><spanclass="keyword">val</span> get_nullability_upper_bound_for_typestate : <ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><ahref="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a><span>-></span><ahref="../TypeState/index.html#type-t">TypeState.t</a><span>-></span><ahref="../Nullability/index.html#type-t">Nullability.t</a></code></dt><dtclass="spec value"id="val-get_nullability_upper_bound"><ahref="#val-get_nullability_upper_bound"class="anchor"></a><code><spanclass="keyword">val</span> get_nullability_upper_bound : <ahref="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a><span>-></span><span><span>(<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <ahref="../TypeState/index.html#type-t">TypeState.t</a>)</span> list</span><span>-></span><ahref="../Nullability/index.html#type-t">Nullability.t</a></code></dt><dtclass="spec value"id="val-is_generated_field"><ahref="#val-is_generated_field"class="anchor"></a><code><spanclass="keyword">val</span> is_generated_field : <ahref="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a><span>-></span> bool</code></dt><dtclass="spec value"id="val-check_constructor_initialization"><ahref="#val-check_constructor_initialization"class="anchor"></a><code><spanclass="keyword">val</span> check_constructor_initialization : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>typestates_for_curr_constructor_and_all_initializer_methods:<span><span><span>(<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <ahref="../TypeState/index.html#type-t">TypeState.t</a>)</span> list</span><ahref="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Lazy.t</span></span><span>-></span><span>typestates_for_all_constructors_incl_current:<span><span><span>(<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <ahref="../TypeState/index.html#type-t">TypeState.t</a>)</span> list</span><ahref="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Lazy.t</span></span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span> unit</code></dt><dd><p>Check field initialization for a given constructor</p></dd></dl><dl><dtclass="spec value"id="val-check_return_not_nullable"><ahref="#val-check_return_not_nullable"class="anchor"></a><code><spanclass="keyword">val</span> check_return_not_nullable : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><ahref="../AnnotatedSignature/index.html#type-ret_signature">AnnotatedSignature.ret_signature</a><span>-></span><ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-check_return_overrannotated"><ahref="#val-check_return_overrannotated"class="anchor"></a><code><spanclass="keyword">val</span> check_return_overrannotated : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><ahref="../AnnotatedSignature/index.html#type-ret_signature">AnnotatedSignature.ret_signature</a><span>-></span><ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-check_return_annotation"><ahref="#val-check_return_annotation"class="anchor"></a><code><spanclass="keyword">val</span> check_return_annotation : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><span><span>(<spanclass="type-var">'a</span> * <ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span> option</span><span>-></span><ahref="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a><span>-></span> bool <span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span> unit</code></dt><dd><p>Check the annotations when returning from a method.</p></dd></dl><dl><dtclass="spec value"id="val-check_call_receiver"><ahref="#val-check_call_receiver"class="anchor"></a><code><spanclass="keyword">val</span> check_call_receiver : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><spanclass="type-var">'a</span><span>-></span><span><span>(<span>(<ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> * <spanclass="type-var">'b</span>)</span> * <spanclass="type-var">'c</span>)</span> list</span><span>-></span><ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><ahref="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a><span>-></span><spanclass="type-var">'a</span><span>-></span><spanclass="type-var">'b</span><span>-></span><span>(<spanclass="type-var">'c</span> * <ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><spanclass="type-var">'d</span> * <ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span><span>-></span> unit</code></dt><dd><p>Check the receiver of a virtual call.</p></dd></dl><dl><dtclass="spec type"id="type-resolved_param"><ahref="#type-resolved_param"class="anchor"></a><code><spanclass="keyword">type</span> resolved_param</code><code> = </code><code>{</code><tableclass="record"><trid="type-resolved_param.num"class="anchored"><tdclass="def field"><ahref="#type-resolved_param.num"class="anchor"></a><code>num : int;</code></td></tr><trid="type-resolved_param.formal"class="anchored"><tdclass="def field"><ahref="#type-resolved_param.formal"class="anchor"></a><code>formal : <ahref="../AnnotatedSignature/index.html#type-param_signature">AnnotatedSignature.param_signature</a>;</code></td></tr><trid="type-resolved_param.actual"class="anchored"><tdclass="def field"><ahref="#type-resolved_param.actual"class="anchor"></a><code>actual : <ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> * <ahref="../InferredNullability/index.html#type-t">InferredNullability.t</a>;</code></td></tr><trid="type-resolved_param.is_formal_propagates_nullable"class="anchored"><tdclass="def field"><ahref="#type-resolved_param.is_formal_propagates_nullable"class="anchor"></a><code>is_formal_propagates_nullable : bool;</code></td></tr></table><code>}</code></dt></dl><dl><dtclass="spec value"id="val-check_call_parameters"><ahref="#val-check_call_parameters"class="anchor"></a><code><spanclass="keyword">val</span> check_call_parameters : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>callee_annotated_signature:<ahref="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/ProcAttributes/index.html#type-t">IR.ProcAttributes.t</a><span>-></span><span><ahref="index.html#type-resolved_param">resolved_param</a> list</span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><ahref="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a><span>-></span> unit</code></dt><dd><p>Check the parameters of a call.</p></dd></dl><dl><dtclass="spec value"id="val-check_inheritance_rule_for_return"><ahref="#val-check_inheritance_rule_for_return"class="anchor"></a><code><spanclass="keyword">val</span> check_inheritance_rule_for_return : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>base_proc_name:<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a></span><span>-></span><span>base_nullability:<ahref="../Nullability/index.html#type-t">Nullability.t</a></span><span>-></span><span>overridden_nullability:<ahref="../Nullability/index.html#type-t">Nullability.t</a></span><span>-></span> unit</code></dt><dtclass="spec value"id="val-check_inheritance_rule_for_param"><ahref="#val-check_inheritance_rule_for_param"class="anchor"></a><code><spanclass="keyword">val</span> check_inheritance_rule_for_param : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>overridden_param_name:<ahref="../../IR/Mangled/index.html#type-t">IR.Mangled.t</a></span><span>-></span><span>base_proc_name:<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a></span><span>-></span><span>param_position:int</span><span>-></span><span>base_nullability:<ahref="../Nullability/index.html#type-t">Nullability.t</a></span><span>-></span><span>overridden_nullability:<ahref="../Nullability/index.html#type-t">Nullability.t</a></span><span>-></span> unit</code></dt><dtclass="spec value"id="val-check_inheritance_rule_for_params"><ahref="#val-check_inheritance_rule_for_params"class="anchor"></a><code><spanclass="keyword">val</span> check_inheritance_rule_for_params : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>base_proc_name:<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a></span><span>-></span><span>base_signature:<ahref="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span><span>-></span><span>overridden_signature:<ahref="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span><span>-></span> unit</code></dt><dtclass="spec value"id="val-check_inheritance_rule_for_signature"><ahref="#val-check_inheritance_rule_for_signature"class="anchor"></a><code><spanclass="keyword">val</span> check_inheritance_rule_for_signature : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><span>nullsafe_mode:<ahref="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span><span>-></span><span>base_proc_name:<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a></span><span>-></span><span>base_signature:<ahref="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span><span>-></span><span>overridden_signature:<ahref="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span><span>-></span> unit</code></dt><dd><p>Check both params and return values for complying for co- and contravariance</p></dd></dl><dl><dtclass="spec value"id="val-check_overridden_annotations"><ahref="#val-check_overridden_annotations"class="anchor"></a><code><spanclass="keyword">val</span> check_overridden_annotations : <ahref="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a><span>-></span><span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span><span>-></span><ahref="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a><span>-></span> unit</code></dt><dd><p>Checks if the annotations are consistent with the derived classes and with the implemented interfaces</p></dd></dl></div></body></html>