From 9a3ea9aa614cb3a84805e8a7965949ee6c7c87e7 Mon Sep 17 00:00:00 2001 From: Daiva Naudziuniene Date: Thu, 5 Nov 2020 02:27:01 -0800 Subject: [PATCH] [doc] Update the website Summary: Includes all changes made from the last time of `make doc-publish` Reviewed By: jvillard Differential Revision: D24728644 fbshipit-source-id: c0006a8dd --- website/docs/all-issue-types.md | 58 +++++++++- website/docs/checker-eradicate.md | 1 + website/static/man/next/infer-analyze.1.html | 35 +++--- website/static/man/next/infer-capture.1.html | 28 ++++- website/static/man/next/infer-debug.1.html | 13 +++ website/static/man/next/infer-explore.1.html | 7 +- website/static/man/next/infer-report.1.html | 17 +-- website/static/man/next/infer-run.1.html | 14 +-- website/static/man/next/infer.1.html | 107 ++++++++++++------ .../infer/ATDGenerated/Jsonbug_j/index.html | 2 +- .../infer/ATDGenerated/Jsonbug_t/index.html | 2 +- .../infer/ATDGenerated__Jsonbug_j/index.html | 2 +- .../infer/ATDGenerated__Jsonbug_t/index.html | 2 +- .../infer/Absint/HilExp/Access/index.html | 2 +- .../Absint/PatternMatch/ObjectiveC/index.html | 2 +- .../next/infer/Absint/PatternMatch/index.html | 2 +- .../infer/Absint__HilExp/Access/index.html | 2 +- .../ObjectiveC/index.html | 2 +- .../infer/Absint__PatternMatch/index.html | 2 +- .../odoc/next/infer/BO/AbsLoc/Loc/index.html | 2 +- .../next/infer/BO/AbsLoc/PowLoc/index.html | 2 +- .../odoc/next/infer/BO/ArrayBlk/index.html | 2 +- .../BO/BufferOverrunDomain/Mem/index.html | 2 +- .../BO/BufferOverrunDomain/Val/index.html | 2 +- .../BO/BufferOverrunSemantics/index.html | 2 +- .../NonNegativePolynomial/index.html | 2 +- .../odoc/next/infer/BO__AbsLoc/Loc/index.html | 2 +- .../next/infer/BO__AbsLoc/PowLoc/index.html | 2 +- .../odoc/next/infer/BO__ArrayBlk/index.html | 2 +- .../BO__BufferOverrunDomain/Mem/index.html | 2 +- .../BO__BufferOverrunDomain/Val/index.html | 2 +- .../BO__BufferOverrunSemantics/index.html | 2 +- .../NonNegativePolynomial/index.html | 2 +- .../ClosuresSubstitution/Domain/index.html | 2 +- .../Backend/ClosuresSubstitution/index.html | 2 +- .../next/infer/Backend/Payloads/index.html | 2 +- .../next/infer/Backend/Summary/index.html | 2 +- .../Domain/index.html | 2 +- .../Backend__ClosuresSubstitution/index.html | 2 +- .../next/infer/Backend__Payloads/index.html | 2 +- .../next/infer/Backend__Summary/index.html | 2 +- .../CTrans_utils/Self/index.html | 2 +- .../ClangFrontend/CTrans_utils/index.html | 2 +- .../next/infer/ClangFrontend/CType/index.html | 2 +- .../infer/ClangFrontend/CType_decl/index.html | 2 +- .../infer/ClangFrontend/CVar_decl/index.html | 2 +- .../Self/index.html | 2 +- .../ClangFrontend__CTrans_utils/index.html | 2 +- .../infer/ClangFrontend__CType/index.html | 2 +- .../ClangFrontend__CType_decl/index.html | 2 +- .../infer/ClangFrontend__CVar_decl/index.html | 2 +- .../StarvationDomain/CriticalPair/index.html | 2 +- .../CriticalPairElement/index.html | 2 +- .../StarvationDomain/Event/index.html | 2 +- .../Concurrency/StarvationDomain/index.html | 2 +- .../CriticalPair/index.html | 2 +- .../CriticalPairElement/index.html | 2 +- .../Event/index.html | 2 +- .../Concurrency__StarvationDomain/index.html | 2 +- .../odoc/next/infer/Costlib/Cost/index.html | 2 +- .../Costlib/CostDomain/BasicCost/index.html | 2 +- .../CostDomain/BasicCostWithReason/index.html | 2 +- .../Costlib/CostModels/BoundsOf/index.html | 2 +- .../CostModels/BoundsOfArray/index.html | 2 +- .../CostModels/BoundsOfCString/index.html | 2 +- .../CostModels/BoundsOfCollection/index.html | 2 +- .../BoundsOfNSCollection/index.html | 2 +- .../infer/Costlib/CostModels/Call/index.html | 2 +- .../CostModels/ImmutableSet/index.html | 2 +- .../Costlib/CostModels/IntHashMap/index.html | 2 +- .../Costlib/CostModels/JavaString/index.html | 2 +- .../CostModels/NSCollection/index.html | 2 +- .../Costlib/CostModels/NSString/index.html | 2 +- .../next/infer/Costlib/CostModels/index.html | 2 +- .../odoc/next/infer/Costlib__Cost/index.html | 2 +- .../Costlib__CostDomain/BasicCost/index.html | 2 +- .../BasicCostWithReason/index.html | 2 +- .../Costlib__CostModels/BoundsOf/index.html | 2 +- .../BoundsOfArray/index.html | 2 +- .../BoundsOfCString/index.html | 2 +- .../BoundsOfCollection/index.html | 2 +- .../BoundsOfNSCollection/index.html | 2 +- .../infer/Costlib__CostModels/Call/index.html | 2 +- .../ImmutableSet/index.html | 2 +- .../Costlib__CostModels/IntHashMap/index.html | 2 +- .../Costlib__CostModels/JavaString/index.html | 2 +- .../NSCollection/index.html | 2 +- .../Costlib__CostModels/NSString/index.html | 2 +- .../next/infer/Costlib__CostModels/index.html | 2 +- .../odoc/next/infer/IBase/Config/index.html | 2 +- .../next/infer/IBase/IssueType/index.html | 2 +- .../odoc/next/infer/IBase/Location/index.html | 2 +- .../next/infer/IBase/SourceFile/index.html | 2 +- .../odoc/next/infer/IBase/Utils/index.html | 2 +- .../odoc/next/infer/IBase__Config/index.html | 2 +- .../next/infer/IBase__IssueType/index.html | 2 +- .../next/infer/IBase__Location/index.html | 2 +- .../next/infer/IBase__SourceFile/index.html | 2 +- .../odoc/next/infer/IBase__Utils/index.html | 2 +- .../odoc/next/infer/IR/Annot/Item/index.html | 2 +- .../odoc/next/infer/IR/Fieldname/index.html | 2 +- .../odoc/next/infer/IR/Ident/index.html | 2 +- .../odoc/next/infer/IR/IntLit/index.html | 2 +- .../next/infer/IR/JavaClassName/index.html | 2 +- .../odoc/next/infer/IR/Mangled/index.html | 2 +- .../odoc/next/infer/IR/Procname/index.html | 2 +- .../static/odoc/next/infer/IR/Pvar/index.html | 2 +- .../next/infer/IR/QualifiedCppName/index.html | 2 +- .../odoc/next/infer/IR/Struct/index.html | 2 +- .../static/odoc/next/infer/IR/Tenv/index.html | 2 +- .../next/infer/IR/Typ/Name/Java/index.html | 2 +- .../odoc/next/infer/IR/Typ/Name/index.html | 2 +- .../static/odoc/next/infer/IR/Typ/index.html | 2 +- .../static/odoc/next/infer/IR/Var/index.html | 2 +- website/static/odoc/next/infer/IR/index.html | 2 +- .../odoc/next/infer/IR__Annot/Item/index.html | 2 +- .../odoc/next/infer/IR__Fieldname/index.html | 2 +- .../odoc/next/infer/IR__Ident/index.html | 2 +- .../odoc/next/infer/IR__IntLit/index.html | 2 +- .../next/infer/IR__JavaClassName/index.html | 2 +- .../odoc/next/infer/IR__Mangled/index.html | 2 +- .../odoc/next/infer/IR__Procname/index.html | 2 +- .../odoc/next/infer/IR__Pvar/index.html | 2 +- .../infer/IR__QualifiedCppName/index.html | 2 +- .../odoc/next/infer/IR__Struct/index.html | 2 +- .../odoc/next/infer/IR__Tenv/index.html | 2 +- .../next/infer/IR__Typ/Name/Java/index.html | 2 +- .../odoc/next/infer/IR__Typ/Name/index.html | 2 +- .../static/odoc/next/infer/IR__Typ/index.html | 2 +- .../static/odoc/next/infer/IR__Var/index.html | 2 +- .../next/infer/IStdlib/IOption/index.html | 2 +- .../MaximumSharing/ForHashtbl/index.html | 2 - .../IStdlib/MaximumSharing/Sharer/index.html | 2 - .../infer/IStdlib/MaximumSharing/index.html | 2 - .../next/infer/IStdlib/PhysEqual/index.html | 2 +- .../static/odoc/next/infer/IStdlib/index.html | 2 +- .../next/infer/IStdlib__IOption/index.html | 2 +- .../infer/IStdlib__MaximumSharing/.dune-keep | 0 .../ForHashtbl/index.html | 2 - .../IStdlib__MaximumSharing/Sharer/index.html | 2 - .../infer/IStdlib__MaximumSharing/index.html | 2 - .../next/infer/IStdlib__PhysEqual/index.html | 2 +- .../CaptureCompilationDatabase/index.html | 2 +- .../infer/Integration/TraceBugs/index.html | 2 +- .../index.html | 2 +- .../infer/Integration__TraceBugs/index.html | 2 +- .../infer/Nullsafe/AnnotatedField/index.html | 2 +- .../Nullsafe/AnnotatedNullability/index.html | 2 +- .../infer/Nullsafe/AssignmentRule/index.html | 2 +- .../infer/Nullsafe/DereferenceRule/index.html | 2 +- .../Nullsafe/InferredNullability/index.html | 2 +- .../infer/Nullsafe/Nullability/index.html | 2 +- .../next/infer/Nullsafe/TypeOrigin/index.html | 2 +- .../odoc/next/infer/Nullsafe/index.html | 2 +- .../infer/Nullsafe__AnnotatedField/index.html | 2 +- .../Nullsafe__AnnotatedNullability/index.html | 2 +- .../infer/Nullsafe__AssignmentRule/index.html | 2 +- .../Nullsafe__DereferenceRule/index.html | 2 +- .../Nullsafe__InferredNullability/index.html | 2 +- .../infer/Nullsafe__Nullability/index.html | 2 +- .../infer/Nullsafe__TypeOrigin/index.html | 2 +- .../PostDomain/index.html | 2 +- .../PulseAbductiveDomain/PreDomain/index.html | 2 +- .../Pulselib/PulseAbductiveDomain/index.html | 2 +- .../module-type-BaseDomainSig/index.html | 2 +- .../Pulselib/PulseAbstractValue/index.html | 2 +- .../PulseBaseAddressAttributes/index.html | 2 +- .../infer/Pulselib/PulseBaseDomain/index.html | 2 +- .../infer/Pulselib/PulseBaseMemory/index.html | 2 +- .../infer/Pulselib/PulseBaseStack/index.html | 2 +- .../infer/Pulselib/PulseDiagnostic/index.html | 2 +- .../Pulselib/PulseExecutionDomain/index.html | 2 +- .../infer/Pulselib/PulseFormula/index.html | 2 +- .../Pulselib/PulseLatentIssue/index.html | 2 +- .../Pulselib/PulsePathCondition/index.html | 2 +- .../Pulselib/PulseSkippedCalls/index.html | 2 +- .../infer/Pulselib/PulseSummary/index.html | 2 +- .../Pulselib/PulseValueHistory/index.html | 2 +- .../PostDomain/index.html | 2 +- .../PreDomain/index.html | 2 +- .../Pulselib__PulseAbductiveDomain/index.html | 2 +- .../module-type-BaseDomainSig/index.html | 2 +- .../Pulselib__PulseAbstractValue/index.html | 2 +- .../index.html | 2 +- .../Pulselib__PulseBaseDomain/index.html | 2 +- .../Pulselib__PulseBaseMemory/index.html | 2 +- .../infer/Pulselib__PulseBaseStack/index.html | 2 +- .../Pulselib__PulseDiagnostic/index.html | 2 +- .../Pulselib__PulseExecutionDomain/index.html | 2 +- .../infer/Pulselib__PulseFormula/index.html | 2 +- .../Pulselib__PulseLatentIssue/index.html | 2 +- .../Pulselib__PulsePathCondition/index.html | 2 +- .../Pulselib__PulseSkippedCalls/index.html | 2 +- .../infer/Pulselib__PulseSummary/index.html | 2 +- .../Pulselib__PulseValueHistory/index.html | 2 +- .../UnitTests/MaximumSharingTests/index.html | 2 - .../odoc/next/infer/UnitTests/index.html | 2 +- .../UnitTests__MaximumSharingTests/.dune-keep | 0 .../UnitTests__MaximumSharingTests/index.html | 2 - 199 files changed, 387 insertions(+), 269 deletions(-) delete mode 100644 website/static/odoc/next/infer/IStdlib/MaximumSharing/ForHashtbl/index.html delete mode 100644 website/static/odoc/next/infer/IStdlib/MaximumSharing/Sharer/index.html delete mode 100644 website/static/odoc/next/infer/IStdlib/MaximumSharing/index.html delete mode 100644 website/static/odoc/next/infer/IStdlib__MaximumSharing/.dune-keep delete mode 100644 website/static/odoc/next/infer/IStdlib__MaximumSharing/ForHashtbl/index.html delete mode 100644 website/static/odoc/next/infer/IStdlib__MaximumSharing/Sharer/index.html delete mode 100644 website/static/odoc/next/infer/IStdlib__MaximumSharing/index.html delete mode 100644 website/static/odoc/next/infer/UnitTests/MaximumSharingTests/index.html delete mode 100644 website/static/odoc/next/infer/UnitTests__MaximumSharingTests/.dune-keep delete mode 100644 website/static/odoc/next/infer/UnitTests__MaximumSharingTests/index.html diff --git a/website/docs/all-issue-types.md b/website/docs/all-issue-types.md index 8486ab9d2..f9417cb12 100644 --- a/website/docs/all-issue-types.md +++ b/website/docs/all-issue-types.md @@ -486,6 +486,11 @@ int foo(){ } ``` +## ERADICATE_ANNOTATION_GRAPH + +Reported as "Annotation Graph" by [eradicate](/docs/next/checker-eradicate). + + ## ERADICATE_BAD_NESTED_CLASS_ANNOTATION Reported as "@Nullsafe annotation is inconsistent with outer class" by [eradicate](/docs/next/checker-eradicate). @@ -1311,7 +1316,58 @@ but that is for later. Reported as "Optional Empty Access" by [pulse](/docs/next/checker-pulse). -Reports on accessing folly::Optional when it is none. +Optional Empty Access warnings are reported when we try to retrieve the value of a [`folly::Optional`](https://github.com/facebook/folly/blob/master/folly/Optional.h) when it is empty (i.e. `folly::none`). + +In the following example we get a warning as `int_opt` might be `folly::none` and its value is being accessed: + +```cpp +bool somef(int v); + +folly::Optional mightReturnNone(int v) { + if (somef(v)) { + return folly::Optional(v); + } + + return folly::none; +} + +int value_no_check() { + folly::Optional int_opt = mightReturnNone (4); + return int_opt.value(); // Optional Empty Access warning +} +``` + +We do not get the warning anymore if we add a check whether `int_opt` is not empty: + +```cpp +int value_check() { + folly::Optional int_opt = mightReturnNone (4); + if (int_opt.has_value()) { + return int_opt.value(); // OK + } + return -1; +} +``` + +In some cases we know that we have a non-empty value and there is no need to have a check. Consider the following example where Infer does not warn: + +```cpp +bool somef(int v) {return v > 3;}; + +folly::Optional mightReturnNone(int v) { + if (somef(v)) { + return folly::Optional(v); + } + + return folly::none; +} + +int value_no_check() { + folly::Optional int_opt = mightReturnNone (4); // cannot be folly::none + return int_opt.value(); // OK +} +``` + ## PARAMETER_NOT_NULL_CHECKED Reported as "Parameter Not Null Checked" by [biabduction](/docs/next/checker-biabduction). diff --git a/website/docs/checker-eradicate.md b/website/docs/checker-eradicate.md index 6de3bc26f..63dcb311e 100644 --- a/website/docs/checker-eradicate.md +++ b/website/docs/checker-eradicate.md @@ -91,6 +91,7 @@ class C { ## List of Issue Types The following issue types are reported by this checker: +- [ERADICATE_ANNOTATION_GRAPH](/docs/next/all-issue-types#eradicate_annotation_graph) - [ERADICATE_BAD_NESTED_CLASS_ANNOTATION](/docs/next/all-issue-types#eradicate_bad_nested_class_annotation) - [ERADICATE_CONDITION_REDUNDANT](/docs/next/all-issue-types#eradicate_condition_redundant) - [ERADICATE_FIELD_NOT_INITIALIZED](/docs/next/all-issue-types#eradicate_field_not_initialized) diff --git a/website/static/man/next/infer-analyze.1.html b/website/static/man/next/infer-analyze.1.html index 3c34317b5..a519cac54 100644 --- a/website/static/man/next/infer-analyze.1.html +++ b/website/static/man/next/infer-analyze.1.html @@ -73,12 +73,12 @@ report.

Activates: checker annotation-reachability: Given a pair of source and sink -annotation, e.g. ’@PerformanceCritical’ and -’@Expensive’, this checker will warn whenever +annotation, e.g. ‘@PerformanceCritical‘ and +‘@Expensive‘, this checker will warn whenever some method annotated with -’@PerformanceCritical’ calls, directly or +‘@PerformanceCritical‘ calls, directly or indirectly, another method annotated with -’@Expensive’ (Conversely: +‘@Expensive‘ (Conversely: --no-annotation-reachability)

@@ -152,7 +152,7 @@ given the same before. Not compatible with

Activates: checker cost: Computes the time complexity of functions and methods. Can be used to detect changes in runtime complexity with -’infer reportdiff’. (Conversely: +‘infer reportdiff‘. (Conversely: --no-cost)

--cost-only

@@ -161,6 +161,13 @@ be used to detect changes in runtime complexity with disable all other checkers (Conversely: --no-cost-only)

+ +

--no-cost-suppress-func-ptr

+ +

Deactivates: Suppress printing +function pointers in cost reports (Conversely: +--cost-suppress-func-ptr)

+

--custom-symbols json

@@ -226,7 +233,7 @@ reporting. (Conversely: --deduplicate)

--eradicate

Activates: checker eradicate: -The eradicate ’@Nullable’ checker for Java +The eradicate ‘@Nullable‘ checker for Java annotations. (Conversely: --no-eradicate)

--eradicate-only

@@ -272,9 +279,9 @@ internal options in the INTERNAL OPTIONS section

Activates: checker immutable-cast: Detection of object cast from immutable types to mutable types. For instance, it will detect casts -from ’ImmutableList’ to ’List’, -’ImmutableMap’ to ’Map’, and -’ImmutableSet’ to ’Set’. +from ‘ImmutableList‘ to ‘List‘, +‘ImmutableMap‘ to ‘Map‘, and +‘ImmutableSet‘ to ‘Set‘. (Conversely: --no-immutable-cast)

@@ -343,7 +350,7 @@ disable all other checkers (Conversely:

Activates: checker litho-required-props: Checks that all non-optional -’@Prop’s have been specified when constructing +‘@Prop‘s have been specified when constructing Litho components. (Conversely: --no-litho-required-props)

@@ -401,11 +408,11 @@ stdout and stderr (Conversely: --no-print-logs)

--printf-args

Activates: checker printf-args: -Detect mismatches between the Java ’printf’ +Detect mismatches between the Java ‘printf‘ format strings and the argument types For example, this checker will warn about the type error in -’printf("Hello %d", -"world")’ (Conversely: +‘printf("Hello %d", +"world")‘ (Conversely: --no-printf-args)

--printf-args-only

@@ -584,7 +591,7 @@ performs better in some circumstances

Deactivates: checker self-in-block: An Objective-C-specific analysis to detect -when a block captures ’self’. (Conversely: +when a block captures ‘self‘. (Conversely: --self-in-block)

diff --git a/website/static/man/next/infer-capture.1.html b/website/static/man/next/infer-capture.1.html index d2255a18a..754aaa084 100644 --- a/website/static/man/next/infer-capture.1.html +++ b/website/static/man/next/infer-capture.1.html @@ -232,6 +232,16 @@ database operations, in milliseconds.

SQLite page size in bytes, must be a power of two between 512 and 65536.

+

--workspace +path

+ +

Specifies the root of the +workspace, which is a directory containing +--project-root. This can be needed if the capture +phase is expected to require several different +project roots, all relative to a common workspace. Usually a +single project root is enough, though.

+ @@ -340,14 +350,14 @@ matched by the specified regular expression. Only valid for +string

Pass values as command-line -arguments to invocations of ’buck build’. +arguments to invocations of ‘buck build‘. Only valid for --buck-clang.

--Xbuck-no-inline +string

Pass values as command-line -arguments to invocations of ’buck build’, +arguments to invocations of ‘buck build‘, don't inline any args starting with '@'. Only valid for --buck-clang.

@@ -439,7 +449,8 @@ AL files, then emit possible errors in JSON format to stdout file

Specify a file containing the -AST of the program, in biniou format

+AST of the program, in biniou format. Please note you still +need to provide a compilation command.

--clang-blacklisted-flags @@ -463,6 +474,13 @@ initialization of compound types (structs and arrays) is not done element by element but using a builtin function that each analysis has to model.

+

--clang-yojson-file +file

+ +

Specify a file containing the +AST of the program, in yojson format. Please note you still +need to provide a compilation command.

+

--compilation-database +path

@@ -519,8 +537,8 @@ arguments to invocations of clang

Activates: Infer will use xcpretty together with xcodebuild to analyze an iOS app. xcpretty just needs to be in the path, infer command is -still just ’infer -- <xcodebuild -command>’. (Conversely: +still just ‘infer -- <xcodebuild +command>‘. (Conversely: --no-xcpretty)

JAVA OPTIONS diff --git a/website/static/man/next/infer-debug.1.html b/website/static/man/next/infer-debug.1.html index 49d5404d7..6620bc651 100644 --- a/website/static/man/next/infer-debug.1.html +++ b/website/static/man/next/infer-debug.1.html @@ -94,6 +94,12 @@ undefined, and to pager otherwise.

Show this manual with all internal options in the INTERNAL OPTIONS section

+

--select +(N|all)

+ +

Select option number N +or all of them. If omitted, prompt for input.

+

DEBUG GLOBAL TYPE ENVIRONMENT

@@ -174,6 +180,13 @@ found in the output of --procedures (Conversely: of each procedure in the output of --procedures (Conversely: --no-procedures-summary)

+ +

--procedures-summary-json

+ +

Activates: Emit the summaries +of each procedure in the output of --procedures as +JSON (Conversely: --no-procedures-summary-json)

+

DEBUG SOURCE FILES

diff --git a/website/static/man/next/infer-explore.1.html b/website/static/man/next/infer-explore.1.html index c550b8315..60ae07a57 100644 --- a/website/static/man/next/infer-explore.1.html +++ b/website/static/man/next/infer-explore.1.html @@ -104,10 +104,11 @@ report. (Conversely: --no-html)

to show. Trace elements beyond the maximum nesting level are skipped. If omitted, all levels are shown.

-

--select N

+

--select +(N|all)

-

Select bug number N. If -omitted, prompt for input.

+

Select option number N +or all of them. If omitted, prompt for input.

--no-source-preview

diff --git a/website/static/man/next/infer-report.1.html b/website/static/man/next/infer-report.1.html index 6423ae114..fb113dd71 100644 --- a/website/static/man/next/infer-report.1.html +++ b/website/static/man/next/infer-report.1.html @@ -78,18 +78,18 @@ are specified, they are applied in the order in which they are specified. Each filter is applied to each issue detected, and only issues which are accepted by all filters are reported. Each filter is of the form: -’<issue_type_regex>:<filename_regex>:<reason_string>’. +‘<issue_type_regex>:<filename_regex>:<reason_string>‘. The first two components are OCaml Str regular expressions, -with an optional ’!’ character prefix. If a -regex has a ’!’ prefix, the polarity is +with an optional ‘!‘ character prefix. If a +regex has a ‘!‘ prefix, the polarity is inverted, and the filter becomes a "blacklist" instead of a "whitelist". Each filter is interpreted as an implication: an issue matches if it does -not match the ’issue_type_regex’ or if it does -match the ’filename_regex’. The filenames that +not match the ‘issue_type_regex‘ or if it does +match the ‘filename_regex‘. The filenames that are tested by the regex are relative to the -’--project-root’ directory. The -’<reason_string>’ is a non-empty string +‘--project-root‘ directory. The +‘<reason_string>‘ is a non-empty string used to explain why the issue was filtered.

--cost-issues-tests @@ -231,6 +231,7 @@ default),
DIVIDE_BY_ZERO (disabled by default),
DO_NOT_REPORT (enabled by default),
EMPTY_VECTOR_ACCESS (enabled by default),
+ERADICATE_ANNOTATION_GRAPH (enabled by default),
ERADICATE_BAD_NESTED_CLASS_ANNOTATION (enabled by default),
ERADICATE_CONDITION_REDUNDANT (enabled by default),
@@ -306,7 +307,7 @@ MULTIPLE_WEAKSELF (enabled by default),
MUTABLE_LOCAL_VARIABLE_IN_COMPONENT_FILE (enabled by default),
Missing_fld (enabled by default),
-NULLPTR_DEREFERENCE (disabled by default),
+NULLPTR_DEREFERENCE (enabled by default),
NULL_DEREFERENCE (enabled by default),
OPTIONAL_EMPTY_ACCESS (disabled by default),
PARAMETER_NOT_NULL_CHECKED (enabled by default),
diff --git a/website/static/man/next/infer-run.1.html b/website/static/man/next/infer-run.1.html index 8c6cc04cd..e0779052e 100644 --- a/website/static/man/next/infer-run.1.html +++ b/website/static/man/next/infer-run.1.html @@ -81,18 +81,18 @@ are specified, they are applied in the order in which they are specified. Each filter is applied to each issue detected, and only issues which are accepted by all filters are reported. Each filter is of the form: -’<issue_type_regex>:<filename_regex>:<reason_string>’. +‘<issue_type_regex>:<filename_regex>:<reason_string>‘. The first two components are OCaml Str regular expressions, -with an optional ’!’ character prefix. If a -regex has a ’!’ prefix, the polarity is +with an optional ‘!‘ character prefix. If a +regex has a ‘!‘ prefix, the polarity is inverted, and the filter becomes a "blacklist" instead of a "whitelist". Each filter is interpreted as an implication: an issue matches if it does -not match the ’issue_type_regex’ or if it does -match the ’filename_regex’. The filenames that +not match the ‘issue_type_regex‘ or if it does +match the ‘filename_regex‘. The filenames that are tested by the regex are relative to the -’--project-root’ directory. The -’<reason_string>’ is a non-empty string +‘--project-root‘ directory. The +‘<reason_string>‘ is a non-empty string used to explain why the issue was filtered.

--debug,-g

diff --git a/website/static/man/next/infer.1.html b/website/static/man/next/infer.1.html index f3f91f21d..695841d7a 100644 --- a/website/static/man/next/infer.1.html +++ b/website/static/man/next/infer.1.html @@ -121,12 +121,12 @@ reserved for internal use).

Activates: checker annotation-reachability: Given a pair of source and sink -annotation, e.g. ’@PerformanceCritical’ and -’@Expensive’, this checker will warn whenever +annotation, e.g. ‘@PerformanceCritical‘ and +‘@Expensive‘, this checker will warn whenever some method annotated with -’@PerformanceCritical’ calls, directly or +‘@PerformanceCritical‘ calls, directly or indirectly, another method annotated with -’@Expensive’ (Conversely: +‘@Expensive‘ (Conversely: --no-annotation-reachability)

See also @@ -365,18 +365,18 @@ are specified, they are applied in the order in which they are specified. Each filter is applied to each issue detected, and only issues which are accepted by all filters are reported. Each filter is of the form: -’<issue_type_regex>:<filename_regex>:<reason_string>’. +‘<issue_type_regex>:<filename_regex>:<reason_string>‘. The first two components are OCaml Str regular expressions, -with an optional ’!’ character prefix. If a -regex has a ’!’ prefix, the polarity is +with an optional ‘!‘ character prefix. If a +regex has a ‘!‘ prefix, the polarity is inverted, and the filter becomes a "blacklist" instead of a "whitelist". Each filter is interpreted as an implication: an issue matches if it does -not match the ’issue_type_regex’ or if it does -match the ’filename_regex’. The filenames that +not match the ‘issue_type_regex‘ or if it does +match the ‘filename_regex‘. The filenames that are tested by the regex are relative to the -’--project-root’ directory. The -’<reason_string>’ is a non-empty string +‘--project-root‘ directory. The +‘<reason_string>‘ is a non-empty string used to explain why the issue was filtered.

See also infer-report(1) @@ -393,7 +393,8 @@ root or be absolute

--clang-biniou-file
file

Specify a file containing the -AST of the program, in biniou format

+AST of the program, in biniou format. Please note you still +need to provide a compilation command.

See also infer-capture(1).
@@ -419,6 +420,14 @@ each analysis has to model.

See also infer-analyze(1) and infer-capture(1).
+--clang-yojson-file
file

+ +

Specify a file containing the +AST of the program, in yojson format. Please note you still +need to provide a compilation command.

+ +

See also +infer-capture(1).
--compilation-database
+path

File that contain compilation @@ -478,7 +487,7 @@ given the same before. Not compatible with

Activates: checker cost: Computes the time complexity of functions and methods. Can be used to detect changes in runtime complexity with -’infer reportdiff’. (Conversely: +‘infer reportdiff‘. (Conversely: --no-cost)

See also @@ -496,6 +505,14 @@ a format suitable for cost tests to file

disable all other checkers (Conversely: --no-cost-only)

+

See also +infer-analyze(1).
+--no-cost-suppress-func-ptr

+ +

Deactivates: Suppress printing +function pointers in cost reports (Conversely: +--cost-suppress-func-ptr)

+

See also infer-analyze(1).
--cost-tests-only-autoreleasepool

@@ -719,6 +736,7 @@ default),
DIVIDE_BY_ZERO (disabled by default),
DO_NOT_REPORT (enabled by default),
EMPTY_VECTOR_ACCESS (enabled by default),
+ERADICATE_ANNOTATION_GRAPH (enabled by default),
ERADICATE_BAD_NESTED_CLASS_ANNOTATION (enabled by default),
ERADICATE_CONDITION_REDUNDANT (enabled by default),
@@ -794,7 +812,7 @@ MULTIPLE_WEAKSELF (enabled by default),
MUTABLE_LOCAL_VARIABLE_IN_COMPONENT_FILE (enabled by default),
Missing_fld (enabled by default),
-NULLPTR_DEREFERENCE (disabled by default),
+NULLPTR_DEREFERENCE (enabled by default),
NULL_DEREFERENCE (enabled by default),
OPTIONAL_EMPTY_ACCESS (disabled by default),
PARAMETER_NOT_NULL_CHECKED (enabled by default),
@@ -865,7 +883,7 @@ or off.

--eradicate

Activates: checker eradicate: -The eradicate ’@Nullable’ checker for Java +The eradicate ‘@Nullable‘ checker for Java annotations. (Conversely: --no-eradicate)

See also @@ -1067,9 +1085,9 @@ report. (Conversely: --no-html)

Activates: checker immutable-cast: Detection of object cast from immutable types to mutable types. For instance, it will detect casts -from ’ImmutableList’ to ’List’, -’ImmutableMap’ to ’Map’, and -’ImmutableSet’ to ’Set’. +from ‘ImmutableList‘ to ‘List‘, +‘ImmutableMap‘ to ‘Map‘, and +‘ImmutableSet‘ to ‘Set‘. (Conversely: --no-immutable-cast)

See also @@ -1263,7 +1281,7 @@ issue types that infer might report. (Conversely:

Activates: checker litho-required-props: Checks that all non-optional -’@Prop’s have been specified when constructing +‘@Prop‘s have been specified when constructing Litho components. (Conversely: --no-litho-required-props)

@@ -1390,11 +1408,11 @@ infer-run(1).
--printf-args

Activates: checker printf-args: -Detect mismatches between the Java ’printf’ +Detect mismatches between the Java ‘printf‘ format strings and the argument types For example, this checker will warn about the type error in -’printf("Hello %d", -"world")’ (Conversely: +‘printf("Hello %d", +"world")‘ (Conversely: --no-printf-args)

See also @@ -1479,6 +1497,14 @@ found in the output of --procedures (Conversely: of each procedure in the output of --procedures (Conversely: --no-procedures-summary)

+

See also infer-debug(1). +
+--procedures-summary-json

+ +

Activates: Emit the summaries +of each procedure in the output of --procedures as +JSON (Conversely: --no-procedures-summary-json)

+

See also infer-debug(1).
--no-progress-bar
,-P

@@ -1789,18 +1815,18 @@ duplicate work between different analysis processes and thus
performs better in some circumstances
See also infer-analyze(1).
---select
N

+--select(N|all)

-

Select bug number N. If -omitted, prompt for input.

+

Select option number N +or all of them. If omitted, prompt for input.

-

See also -infer-explore(1).
+

See also infer-debug(1) +and infer-explore(1).
--no-self-in-block

Deactivates: checker self-in-block: An Objective-C-specific analysis to detect -when a block captures ’self’. (Conversely: +when a block captures ‘self‘. (Conversely: --self-in-block)

See also @@ -2066,6 +2092,17 @@ json format and exit

See also infer-run(1).
+--workspace
path

+ +

Specifies the root of the +workspace, which is a directory containing +--project-root. This can be needed if the capture +phase is expected to require several different +project roots, all relative to a common workspace. Usually a +single project root is enough, though.

+ +

See also +infer-capture(1).
--write-website
path_to_website_dir

Use to write website files @@ -2079,7 +2116,7 @@ Infer directory to generate its website at --Xbuck +string

Pass values as command-line -arguments to invocations of ’buck build’. +arguments to invocations of ‘buck build‘. Only valid for --buck-clang.

See also @@ -2087,7 +2124,7 @@ Only valid for --buck-clang.

--Xbuck-no-inline+string

Pass values as command-line -arguments to invocations of ’buck build’, +arguments to invocations of ‘buck build‘, don't inline any args starting with '@'. Only valid for --buck-clang.

@@ -2119,8 +2156,8 @@ isysroot directory, to avoid absolute paths in tests

Activates: Infer will use xcpretty together with xcodebuild to analyze an iOS app. xcpretty just needs to be in the path, infer command is -still just ’infer -- <xcodebuild -command>’. (Conversely: +still just ‘infer -- <xcodebuild +command>‘. (Conversely: --no-xcpretty)

See also @@ -2155,9 +2192,9 @@ may be passed to all infer commands using the INFER_ARGS environment variable (see the OPTIONS section). INFER_ARGS is expected to contain a string of ^-separated options. For instance, -calling ’INFER_ARGS=--debug^--print-logs infer’ -is equivalent to calling ’infer --debug ---print-logs’.

+calling ‘INFER_ARGS=--debug^--print-logs infer‘ +is equivalent to calling ‘infer --debug +--print-logs‘.

INFERCONFIG: diff --git a/website/static/odoc/next/infer/ATDGenerated/Jsonbug_j/index.html b/website/static/odoc/next/infer/ATDGenerated/Jsonbug_j/index.html index f24cc1352..b90aeeb86 100644 --- a/website/static/odoc/next/infer/ATDGenerated/Jsonbug_j/index.html +++ b/website/static/odoc/next/infer/ATDGenerated/Jsonbug_j/index.html @@ -1,2 +1,2 @@ -Jsonbug_j (infer.ATDGenerated.Jsonbug_j)

Module ATDGenerated.Jsonbug_j

type nullsafe_mode = Jsonbug_t.nullsafe_mode
type nullsafe_meta_issue_info = Jsonbug_t.nullsafe_meta_issue_info = {
num_issues : int;
curr_nullsafe_mode : nullsafe_mode;
can_be_promoted_to : nullsafe_mode option;
}
type method_info = Jsonbug_t.method_info = {
class_name : string;
package : string;
method_name : string;
call_line : int;
}
type nullsafe_extra = Jsonbug_t.nullsafe_extra = {
class_name : string;
package : string option;
nullable_methods : method_info list option;
unvetted_3rd_party : string list option;
meta_issue_info : nullsafe_meta_issue_info option;
}
type loc = Jsonbug_t.loc = {
file : string;
lnum : int;
cnum : int;
enum : int;
}
type json_trace_item = Jsonbug_t.json_trace_item = {
level : int;
filename : string;
line_number : int;
column_number : int;
description : string;
}
type extra = Jsonbug_t.extra = {
cost_polynomial : string option;
cost_degree : int option;
nullsafe_extra : nullsafe_extra option;
}
type jsonbug = Jsonbug_t.jsonbug = {
bug_type : string;
doc_url : string option;
qualifier : string;
severity : string;
line : int;
column : int;
procedure : string;
procedure_start_line : int;
file : string;
bug_trace : json_trace_item list;
key : string;
node_key : string option;
hash : string;
dotty : string option;
infer_source_loc : loc option;
bug_type_hum : string;
linters_def_file : string option;
traceview_id : int option;
censored_reason : string option;
access : string option;
extras : extra option;
}
type report = Jsonbug_t.report
type hum_info = Jsonbug_t.hum_info = {
hum_polynomial : string;
hum_degree : string;
big_o : string;
}
type cost_info = Jsonbug_t.cost_info = {
polynomial_version : int;
polynomial : string;
degree : int option;
hum : hum_info;
trace : json_trace_item list;
}
type cost_item = Jsonbug_t.cost_item = {
hash : string;
loc : loc;
procedure_name : string;
procedure_id : string;
is_on_ui_thread : bool;
exec_cost : cost_info;
autoreleasepool_size : cost_info;
}
type costs_report = Jsonbug_t.costs_report
val write_nullsafe_mode : Bi_outbuf.t -> nullsafe_mode -> unit

Output a JSON value of type nullsafe_mode.

val string_of_nullsafe_mode : ?⁠len:int -> nullsafe_mode -> string

Serialize a value of type nullsafe_mode into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_mode : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_mode

Input JSON data of type nullsafe_mode.

val nullsafe_mode_of_string : string -> nullsafe_mode

Deserialize JSON data of type nullsafe_mode.

val write_nullsafe_meta_issue_info : Bi_outbuf.t -> nullsafe_meta_issue_info -> unit

Output a JSON value of type nullsafe_meta_issue_info.

val string_of_nullsafe_meta_issue_info : ?⁠len:int -> nullsafe_meta_issue_info -> string

Serialize a value of type nullsafe_meta_issue_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_meta_issue_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_meta_issue_info

Input JSON data of type nullsafe_meta_issue_info.

val nullsafe_meta_issue_info_of_string : string -> nullsafe_meta_issue_info

Deserialize JSON data of type nullsafe_meta_issue_info.

val write_method_info : Bi_outbuf.t -> method_info -> unit

Output a JSON value of type method_info.

val string_of_method_info : ?⁠len:int -> method_info -> string

Serialize a value of type method_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_method_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> method_info

Input JSON data of type method_info.

val method_info_of_string : string -> method_info

Deserialize JSON data of type method_info.

val write_nullsafe_extra : Bi_outbuf.t -> nullsafe_extra -> unit

Output a JSON value of type nullsafe_extra.

val string_of_nullsafe_extra : ?⁠len:int -> nullsafe_extra -> string

Serialize a value of type nullsafe_extra into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_extra : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_extra

Input JSON data of type nullsafe_extra.

val nullsafe_extra_of_string : string -> nullsafe_extra

Deserialize JSON data of type nullsafe_extra.

val write_loc : Bi_outbuf.t -> loc -> unit

Output a JSON value of type loc.

val string_of_loc : ?⁠len:int -> loc -> string

Serialize a value of type loc into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_loc : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> loc

Input JSON data of type loc.

val loc_of_string : string -> loc

Deserialize JSON data of type loc.

val write_json_trace_item : Bi_outbuf.t -> json_trace_item -> unit

Output a JSON value of type json_trace_item.

val string_of_json_trace_item : ?⁠len:int -> json_trace_item -> string

Serialize a value of type json_trace_item into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_json_trace_item : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> json_trace_item

Input JSON data of type json_trace_item.

val json_trace_item_of_string : string -> json_trace_item

Deserialize JSON data of type json_trace_item.

val write_extra : Bi_outbuf.t -> extra -> unit

Output a JSON value of type extra.

val string_of_extra : ?⁠len:int -> extra -> string

Serialize a value of type extra into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_extra : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> extra

Input JSON data of type extra.

val extra_of_string : string -> extra

Deserialize JSON data of type extra.

val write_jsonbug : Bi_outbuf.t -> jsonbug -> unit

Output a JSON value of type jsonbug.

val string_of_jsonbug : ?⁠len:int -> jsonbug -> string

Serialize a value of type jsonbug into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_jsonbug : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> jsonbug

Input JSON data of type jsonbug.

val jsonbug_of_string : string -> jsonbug

Deserialize JSON data of type jsonbug.

val write_report : Bi_outbuf.t -> report -> unit

Output a JSON value of type report.

val string_of_report : ?⁠len:int -> report -> string

Serialize a value of type report into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_report : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> report

Input JSON data of type report.

val report_of_string : string -> report

Deserialize JSON data of type report.

val write_hum_info : Bi_outbuf.t -> hum_info -> unit

Output a JSON value of type hum_info.

val string_of_hum_info : ?⁠len:int -> hum_info -> string

Serialize a value of type hum_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_hum_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> hum_info

Input JSON data of type hum_info.

val hum_info_of_string : string -> hum_info

Deserialize JSON data of type hum_info.

val write_cost_info : Bi_outbuf.t -> cost_info -> unit

Output a JSON value of type cost_info.

val string_of_cost_info : ?⁠len:int -> cost_info -> string

Serialize a value of type cost_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_cost_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> cost_info

Input JSON data of type cost_info.

val cost_info_of_string : string -> cost_info

Deserialize JSON data of type cost_info.

val write_cost_item : Bi_outbuf.t -> cost_item -> unit

Output a JSON value of type cost_item.

val string_of_cost_item : ?⁠len:int -> cost_item -> string

Serialize a value of type cost_item into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_cost_item : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> cost_item

Input JSON data of type cost_item.

val cost_item_of_string : string -> cost_item

Deserialize JSON data of type cost_item.

val write_costs_report : Bi_outbuf.t -> costs_report -> unit

Output a JSON value of type costs_report.

val string_of_costs_report : ?⁠len:int -> costs_report -> string

Serialize a value of type costs_report into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_costs_report : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> costs_report

Input JSON data of type costs_report.

val costs_report_of_string : string -> costs_report

Deserialize JSON data of type costs_report.

\ No newline at end of file +Jsonbug_j (infer.ATDGenerated.Jsonbug_j)

Module ATDGenerated.Jsonbug_j

type nullsafe_mode = Jsonbug_t.nullsafe_mode
type nullsafe_meta_issue_info = Jsonbug_t.nullsafe_meta_issue_info = {
num_issues : int;
curr_nullsafe_mode : nullsafe_mode;
can_be_promoted_to : nullsafe_mode option;
}
type method_info = Jsonbug_t.method_info = {
class_name : string;
package : string;
method_name : string;
call_line : int;
}
type access_level = Jsonbug_t.access_level
type annotation_point_method = Jsonbug_t.annotation_point_method = {
method_name : string;
params : string list;
access_level : access_level;
}
type annotation_point_kind = Jsonbug_t.annotation_point_kind
type annotation_point = Jsonbug_t.annotation_point = {
id : string;
kind : annotation_point_kind;
method_info : annotation_point_method option;
field_name : string option;
param_num : int option;
num_violations : int;
dependent_point_ids : string list;
}
type nullsafe_extra = Jsonbug_t.nullsafe_extra = {
class_name : string;
package : string option;
nullable_methods : method_info list option;
unvetted_3rd_party : string list option;
meta_issue_info : nullsafe_meta_issue_info option;
annotation_graph : annotation_point list option;
}
type loc = Jsonbug_t.loc = {
file : string;
lnum : int;
cnum : int;
enum : int;
}
type json_trace_item = Jsonbug_t.json_trace_item = {
level : int;
filename : string;
line_number : int;
column_number : int;
description : string;
}
type extra = Jsonbug_t.extra = {
cost_polynomial : string option;
cost_degree : int option;
nullsafe_extra : nullsafe_extra option;
}
type jsonbug = Jsonbug_t.jsonbug = {
bug_type : string;
doc_url : string option;
qualifier : string;
severity : string;
line : int;
column : int;
procedure : string;
procedure_start_line : int;
file : string;
bug_trace : json_trace_item list;
key : string;
node_key : string option;
hash : string;
dotty : string option;
infer_source_loc : loc option;
bug_type_hum : string;
linters_def_file : string option;
traceview_id : int option;
censored_reason : string option;
access : string option;
extras : extra option;
}
type report = Jsonbug_t.report
type hum_info = Jsonbug_t.hum_info = {
hum_polynomial : string;
hum_degree : string;
big_o : string;
}
type cost_info = Jsonbug_t.cost_info = {
polynomial_version : int;
polynomial : string;
degree : int option;
hum : hum_info;
trace : json_trace_item list;
}
type cost_item = Jsonbug_t.cost_item = {
hash : string;
loc : loc;
procedure_name : string;
procedure_id : string;
is_on_ui_thread : bool;
exec_cost : cost_info;
autoreleasepool_size : cost_info;
}
type costs_report = Jsonbug_t.costs_report
val write_nullsafe_mode : Bi_outbuf.t -> nullsafe_mode -> unit

Output a JSON value of type nullsafe_mode.

val string_of_nullsafe_mode : ?⁠len:int -> nullsafe_mode -> string

Serialize a value of type nullsafe_mode into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_mode : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_mode

Input JSON data of type nullsafe_mode.

val nullsafe_mode_of_string : string -> nullsafe_mode

Deserialize JSON data of type nullsafe_mode.

val write_nullsafe_meta_issue_info : Bi_outbuf.t -> nullsafe_meta_issue_info -> unit

Output a JSON value of type nullsafe_meta_issue_info.

val string_of_nullsafe_meta_issue_info : ?⁠len:int -> nullsafe_meta_issue_info -> string

Serialize a value of type nullsafe_meta_issue_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_meta_issue_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_meta_issue_info

Input JSON data of type nullsafe_meta_issue_info.

val nullsafe_meta_issue_info_of_string : string -> nullsafe_meta_issue_info

Deserialize JSON data of type nullsafe_meta_issue_info.

val write_method_info : Bi_outbuf.t -> method_info -> unit

Output a JSON value of type method_info.

val string_of_method_info : ?⁠len:int -> method_info -> string

Serialize a value of type method_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_method_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> method_info

Input JSON data of type method_info.

val method_info_of_string : string -> method_info

Deserialize JSON data of type method_info.

val write_access_level : Bi_outbuf.t -> access_level -> unit

Output a JSON value of type access_level.

val string_of_access_level : ?⁠len:int -> access_level -> string

Serialize a value of type access_level into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_access_level : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> access_level

Input JSON data of type access_level.

val access_level_of_string : string -> access_level

Deserialize JSON data of type access_level.

val write_annotation_point_method : Bi_outbuf.t -> annotation_point_method -> unit

Output a JSON value of type annotation_point_method.

val string_of_annotation_point_method : ?⁠len:int -> annotation_point_method -> string

Serialize a value of type annotation_point_method into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_annotation_point_method : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> annotation_point_method

Input JSON data of type annotation_point_method.

val annotation_point_method_of_string : string -> annotation_point_method

Deserialize JSON data of type annotation_point_method.

val write_annotation_point_kind : Bi_outbuf.t -> annotation_point_kind -> unit

Output a JSON value of type annotation_point_kind.

val string_of_annotation_point_kind : ?⁠len:int -> annotation_point_kind -> string

Serialize a value of type annotation_point_kind into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_annotation_point_kind : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> annotation_point_kind

Input JSON data of type annotation_point_kind.

val annotation_point_kind_of_string : string -> annotation_point_kind

Deserialize JSON data of type annotation_point_kind.

val write_annotation_point : Bi_outbuf.t -> annotation_point -> unit

Output a JSON value of type annotation_point.

val string_of_annotation_point : ?⁠len:int -> annotation_point -> string

Serialize a value of type annotation_point into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_annotation_point : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> annotation_point

Input JSON data of type annotation_point.

val annotation_point_of_string : string -> annotation_point

Deserialize JSON data of type annotation_point.

val write_nullsafe_extra : Bi_outbuf.t -> nullsafe_extra -> unit

Output a JSON value of type nullsafe_extra.

val string_of_nullsafe_extra : ?⁠len:int -> nullsafe_extra -> string

Serialize a value of type nullsafe_extra into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_extra : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_extra

Input JSON data of type nullsafe_extra.

val nullsafe_extra_of_string : string -> nullsafe_extra

Deserialize JSON data of type nullsafe_extra.

val write_loc : Bi_outbuf.t -> loc -> unit

Output a JSON value of type loc.

val string_of_loc : ?⁠len:int -> loc -> string

Serialize a value of type loc into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_loc : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> loc

Input JSON data of type loc.

val loc_of_string : string -> loc

Deserialize JSON data of type loc.

val write_json_trace_item : Bi_outbuf.t -> json_trace_item -> unit

Output a JSON value of type json_trace_item.

val string_of_json_trace_item : ?⁠len:int -> json_trace_item -> string

Serialize a value of type json_trace_item into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_json_trace_item : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> json_trace_item

Input JSON data of type json_trace_item.

val json_trace_item_of_string : string -> json_trace_item

Deserialize JSON data of type json_trace_item.

val write_extra : Bi_outbuf.t -> extra -> unit

Output a JSON value of type extra.

val string_of_extra : ?⁠len:int -> extra -> string

Serialize a value of type extra into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_extra : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> extra

Input JSON data of type extra.

val extra_of_string : string -> extra

Deserialize JSON data of type extra.

val write_jsonbug : Bi_outbuf.t -> jsonbug -> unit

Output a JSON value of type jsonbug.

val string_of_jsonbug : ?⁠len:int -> jsonbug -> string

Serialize a value of type jsonbug into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_jsonbug : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> jsonbug

Input JSON data of type jsonbug.

val jsonbug_of_string : string -> jsonbug

Deserialize JSON data of type jsonbug.

val write_report : Bi_outbuf.t -> report -> unit

Output a JSON value of type report.

val string_of_report : ?⁠len:int -> report -> string

Serialize a value of type report into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_report : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> report

Input JSON data of type report.

val report_of_string : string -> report

Deserialize JSON data of type report.

val write_hum_info : Bi_outbuf.t -> hum_info -> unit

Output a JSON value of type hum_info.

val string_of_hum_info : ?⁠len:int -> hum_info -> string

Serialize a value of type hum_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_hum_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> hum_info

Input JSON data of type hum_info.

val hum_info_of_string : string -> hum_info

Deserialize JSON data of type hum_info.

val write_cost_info : Bi_outbuf.t -> cost_info -> unit

Output a JSON value of type cost_info.

val string_of_cost_info : ?⁠len:int -> cost_info -> string

Serialize a value of type cost_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_cost_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> cost_info

Input JSON data of type cost_info.

val cost_info_of_string : string -> cost_info

Deserialize JSON data of type cost_info.

val write_cost_item : Bi_outbuf.t -> cost_item -> unit

Output a JSON value of type cost_item.

val string_of_cost_item : ?⁠len:int -> cost_item -> string

Serialize a value of type cost_item into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_cost_item : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> cost_item

Input JSON data of type cost_item.

val cost_item_of_string : string -> cost_item

Deserialize JSON data of type cost_item.

val write_costs_report : Bi_outbuf.t -> costs_report -> unit

Output a JSON value of type costs_report.

val string_of_costs_report : ?⁠len:int -> costs_report -> string

Serialize a value of type costs_report into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_costs_report : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> costs_report

Input JSON data of type costs_report.

val costs_report_of_string : string -> costs_report

Deserialize JSON data of type costs_report.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/ATDGenerated/Jsonbug_t/index.html b/website/static/odoc/next/infer/ATDGenerated/Jsonbug_t/index.html index 2cc467e3c..7c6f2aec7 100644 --- a/website/static/odoc/next/infer/ATDGenerated/Jsonbug_t/index.html +++ b/website/static/odoc/next/infer/ATDGenerated/Jsonbug_t/index.html @@ -1,2 +1,2 @@ -Jsonbug_t (infer.ATDGenerated.Jsonbug_t)

Module ATDGenerated.Jsonbug_t

type nullsafe_mode = [
| `Default
| `LocalTrustAll
| `LocalTrustSome
| `LocalTrustNone
| `Strict
]
type nullsafe_meta_issue_info = {
num_issues : int;
curr_nullsafe_mode : nullsafe_mode;
can_be_promoted_to : nullsafe_mode option;
}
type method_info = {
class_name : string;
package : string;
method_name : string;
call_line : int;
}
type nullsafe_extra = {
class_name : string;
package : string option;
nullable_methods : method_info list option;
unvetted_3rd_party : string list option;
meta_issue_info : nullsafe_meta_issue_info option;
}
type loc = {
file : string;
lnum : int;
cnum : int;
enum : int;
}
type json_trace_item = {
level : int;
filename : string;
line_number : int;
column_number : int;
description : string;
}
type extra = {
cost_polynomial : string option;
cost_degree : int option;
nullsafe_extra : nullsafe_extra option;
}
type jsonbug = {
bug_type : string;
doc_url : string option;
qualifier : string;
severity : string;
line : int;
column : int;
procedure : string;
procedure_start_line : int;
file : string;
bug_trace : json_trace_item list;
key : string;
node_key : string option;
hash : string;
dotty : string option;
infer_source_loc : loc option;
bug_type_hum : string;
linters_def_file : string option;
traceview_id : int option;
censored_reason : string option;
access : string option;
extras : extra option;
}
type report = jsonbug list
type hum_info = {
hum_polynomial : string;
hum_degree : string;
big_o : string;
}
type cost_info = {
polynomial_version : int;
polynomial : string;
degree : int option;
hum : hum_info;
trace : json_trace_item list;
}
type cost_item = {
hash : string;
loc : loc;
procedure_name : string;
procedure_id : string;
is_on_ui_thread : bool;
exec_cost : cost_info;
autoreleasepool_size : cost_info;
}
type costs_report = cost_item list
\ No newline at end of file +Jsonbug_t (infer.ATDGenerated.Jsonbug_t)

Module ATDGenerated.Jsonbug_t

type nullsafe_mode = [
| `Default
| `LocalTrustAll
| `LocalTrustSome
| `LocalTrustNone
| `Strict
]
type nullsafe_meta_issue_info = {
num_issues : int;
curr_nullsafe_mode : nullsafe_mode;
can_be_promoted_to : nullsafe_mode option;
}
type method_info = {
class_name : string;
package : string;
method_name : string;
call_line : int;
}
type access_level = [
| `Private
| `Protected
| `Public
| `Default
]
type annotation_point_method = {
method_name : string;
params : string list;
access_level : access_level;
}
type annotation_point_kind = [
| `Method
| `Field
| `Param
]
type annotation_point = {
id : string;
kind : annotation_point_kind;
method_info : annotation_point_method option;
field_name : string option;
param_num : int option;
num_violations : int;
dependent_point_ids : string list;
}
type nullsafe_extra = {
class_name : string;
package : string option;
nullable_methods : method_info list option;
unvetted_3rd_party : string list option;
meta_issue_info : nullsafe_meta_issue_info option;
annotation_graph : annotation_point list option;
}
type loc = {
file : string;
lnum : int;
cnum : int;
enum : int;
}
type json_trace_item = {
level : int;
filename : string;
line_number : int;
column_number : int;
description : string;
}
type extra = {
cost_polynomial : string option;
cost_degree : int option;
nullsafe_extra : nullsafe_extra option;
}
type jsonbug = {
bug_type : string;
doc_url : string option;
qualifier : string;
severity : string;
line : int;
column : int;
procedure : string;
procedure_start_line : int;
file : string;
bug_trace : json_trace_item list;
key : string;
node_key : string option;
hash : string;
dotty : string option;
infer_source_loc : loc option;
bug_type_hum : string;
linters_def_file : string option;
traceview_id : int option;
censored_reason : string option;
access : string option;
extras : extra option;
}
type report = jsonbug list
type hum_info = {
hum_polynomial : string;
hum_degree : string;
big_o : string;
}
type cost_info = {
polynomial_version : int;
polynomial : string;
degree : int option;
hum : hum_info;
trace : json_trace_item list;
}
type cost_item = {
hash : string;
loc : loc;
procedure_name : string;
procedure_id : string;
is_on_ui_thread : bool;
exec_cost : cost_info;
autoreleasepool_size : cost_info;
}
type costs_report = cost_item list
\ No newline at end of file diff --git a/website/static/odoc/next/infer/ATDGenerated__Jsonbug_j/index.html b/website/static/odoc/next/infer/ATDGenerated__Jsonbug_j/index.html index a2cc25cf6..7d7c2dafd 100644 --- a/website/static/odoc/next/infer/ATDGenerated__Jsonbug_j/index.html +++ b/website/static/odoc/next/infer/ATDGenerated__Jsonbug_j/index.html @@ -1,2 +1,2 @@ -ATDGenerated__Jsonbug_j (infer.ATDGenerated__Jsonbug_j)

Module ATDGenerated__Jsonbug_j

type nullsafe_mode = ATDGenerated.Jsonbug_t.nullsafe_mode
type nullsafe_meta_issue_info = ATDGenerated.Jsonbug_t.nullsafe_meta_issue_info = {
num_issues : int;
curr_nullsafe_mode : nullsafe_mode;
can_be_promoted_to : nullsafe_mode option;
}
type method_info = ATDGenerated.Jsonbug_t.method_info = {
class_name : string;
package : string;
method_name : string;
call_line : int;
}
type nullsafe_extra = ATDGenerated.Jsonbug_t.nullsafe_extra = {
class_name : string;
package : string option;
nullable_methods : method_info list option;
unvetted_3rd_party : string list option;
meta_issue_info : nullsafe_meta_issue_info option;
}
type loc = ATDGenerated.Jsonbug_t.loc = {
file : string;
lnum : int;
cnum : int;
enum : int;
}
type json_trace_item = ATDGenerated.Jsonbug_t.json_trace_item = {
level : int;
filename : string;
line_number : int;
column_number : int;
description : string;
}
type extra = ATDGenerated.Jsonbug_t.extra = {
cost_polynomial : string option;
cost_degree : int option;
nullsafe_extra : nullsafe_extra option;
}
type jsonbug = ATDGenerated.Jsonbug_t.jsonbug = {
bug_type : string;
doc_url : string option;
qualifier : string;
severity : string;
line : int;
column : int;
procedure : string;
procedure_start_line : int;
file : string;
bug_trace : json_trace_item list;
key : string;
node_key : string option;
hash : string;
dotty : string option;
infer_source_loc : loc option;
bug_type_hum : string;
linters_def_file : string option;
traceview_id : int option;
censored_reason : string option;
access : string option;
extras : extra option;
}
type report = ATDGenerated.Jsonbug_t.report
type hum_info = ATDGenerated.Jsonbug_t.hum_info = {
hum_polynomial : string;
hum_degree : string;
big_o : string;
}
type cost_info = ATDGenerated.Jsonbug_t.cost_info = {
polynomial_version : int;
polynomial : string;
degree : int option;
hum : hum_info;
trace : json_trace_item list;
}
type cost_item = ATDGenerated.Jsonbug_t.cost_item = {
hash : string;
loc : loc;
procedure_name : string;
procedure_id : string;
is_on_ui_thread : bool;
exec_cost : cost_info;
autoreleasepool_size : cost_info;
}
type costs_report = ATDGenerated.Jsonbug_t.costs_report
val write_nullsafe_mode : Bi_outbuf.t -> nullsafe_mode -> unit

Output a JSON value of type nullsafe_mode.

val string_of_nullsafe_mode : ?⁠len:int -> nullsafe_mode -> string

Serialize a value of type nullsafe_mode into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_mode : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_mode

Input JSON data of type nullsafe_mode.

val nullsafe_mode_of_string : string -> nullsafe_mode

Deserialize JSON data of type nullsafe_mode.

val write_nullsafe_meta_issue_info : Bi_outbuf.t -> nullsafe_meta_issue_info -> unit

Output a JSON value of type nullsafe_meta_issue_info.

val string_of_nullsafe_meta_issue_info : ?⁠len:int -> nullsafe_meta_issue_info -> string

Serialize a value of type nullsafe_meta_issue_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_meta_issue_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_meta_issue_info

Input JSON data of type nullsafe_meta_issue_info.

val nullsafe_meta_issue_info_of_string : string -> nullsafe_meta_issue_info

Deserialize JSON data of type nullsafe_meta_issue_info.

val write_method_info : Bi_outbuf.t -> method_info -> unit

Output a JSON value of type method_info.

val string_of_method_info : ?⁠len:int -> method_info -> string

Serialize a value of type method_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_method_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> method_info

Input JSON data of type method_info.

val method_info_of_string : string -> method_info

Deserialize JSON data of type method_info.

val write_nullsafe_extra : Bi_outbuf.t -> nullsafe_extra -> unit

Output a JSON value of type nullsafe_extra.

val string_of_nullsafe_extra : ?⁠len:int -> nullsafe_extra -> string

Serialize a value of type nullsafe_extra into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_extra : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_extra

Input JSON data of type nullsafe_extra.

val nullsafe_extra_of_string : string -> nullsafe_extra

Deserialize JSON data of type nullsafe_extra.

val write_loc : Bi_outbuf.t -> loc -> unit

Output a JSON value of type loc.

val string_of_loc : ?⁠len:int -> loc -> string

Serialize a value of type loc into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_loc : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> loc

Input JSON data of type loc.

val loc_of_string : string -> loc

Deserialize JSON data of type loc.

val write_json_trace_item : Bi_outbuf.t -> json_trace_item -> unit

Output a JSON value of type json_trace_item.

val string_of_json_trace_item : ?⁠len:int -> json_trace_item -> string

Serialize a value of type json_trace_item into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_json_trace_item : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> json_trace_item

Input JSON data of type json_trace_item.

val json_trace_item_of_string : string -> json_trace_item

Deserialize JSON data of type json_trace_item.

val write_extra : Bi_outbuf.t -> extra -> unit

Output a JSON value of type extra.

val string_of_extra : ?⁠len:int -> extra -> string

Serialize a value of type extra into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_extra : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> extra

Input JSON data of type extra.

val extra_of_string : string -> extra

Deserialize JSON data of type extra.

val write_jsonbug : Bi_outbuf.t -> jsonbug -> unit

Output a JSON value of type jsonbug.

val string_of_jsonbug : ?⁠len:int -> jsonbug -> string

Serialize a value of type jsonbug into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_jsonbug : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> jsonbug

Input JSON data of type jsonbug.

val jsonbug_of_string : string -> jsonbug

Deserialize JSON data of type jsonbug.

val write_report : Bi_outbuf.t -> report -> unit

Output a JSON value of type report.

val string_of_report : ?⁠len:int -> report -> string

Serialize a value of type report into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_report : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> report

Input JSON data of type report.

val report_of_string : string -> report

Deserialize JSON data of type report.

val write_hum_info : Bi_outbuf.t -> hum_info -> unit

Output a JSON value of type hum_info.

val string_of_hum_info : ?⁠len:int -> hum_info -> string

Serialize a value of type hum_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_hum_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> hum_info

Input JSON data of type hum_info.

val hum_info_of_string : string -> hum_info

Deserialize JSON data of type hum_info.

val write_cost_info : Bi_outbuf.t -> cost_info -> unit

Output a JSON value of type cost_info.

val string_of_cost_info : ?⁠len:int -> cost_info -> string

Serialize a value of type cost_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_cost_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> cost_info

Input JSON data of type cost_info.

val cost_info_of_string : string -> cost_info

Deserialize JSON data of type cost_info.

val write_cost_item : Bi_outbuf.t -> cost_item -> unit

Output a JSON value of type cost_item.

val string_of_cost_item : ?⁠len:int -> cost_item -> string

Serialize a value of type cost_item into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_cost_item : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> cost_item

Input JSON data of type cost_item.

val cost_item_of_string : string -> cost_item

Deserialize JSON data of type cost_item.

val write_costs_report : Bi_outbuf.t -> costs_report -> unit

Output a JSON value of type costs_report.

val string_of_costs_report : ?⁠len:int -> costs_report -> string

Serialize a value of type costs_report into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_costs_report : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> costs_report

Input JSON data of type costs_report.

val costs_report_of_string : string -> costs_report

Deserialize JSON data of type costs_report.

\ No newline at end of file +ATDGenerated__Jsonbug_j (infer.ATDGenerated__Jsonbug_j)

Module ATDGenerated__Jsonbug_j

type nullsafe_mode = ATDGenerated.Jsonbug_t.nullsafe_mode
type nullsafe_meta_issue_info = ATDGenerated.Jsonbug_t.nullsafe_meta_issue_info = {
num_issues : int;
curr_nullsafe_mode : nullsafe_mode;
can_be_promoted_to : nullsafe_mode option;
}
type method_info = ATDGenerated.Jsonbug_t.method_info = {
class_name : string;
package : string;
method_name : string;
call_line : int;
}
type access_level = ATDGenerated.Jsonbug_t.access_level
type annotation_point_method = ATDGenerated.Jsonbug_t.annotation_point_method = {
method_name : string;
params : string list;
access_level : access_level;
}
type annotation_point_kind = ATDGenerated.Jsonbug_t.annotation_point_kind
type annotation_point = ATDGenerated.Jsonbug_t.annotation_point = {
id : string;
kind : annotation_point_kind;
method_info : annotation_point_method option;
field_name : string option;
param_num : int option;
num_violations : int;
dependent_point_ids : string list;
}
type nullsafe_extra = ATDGenerated.Jsonbug_t.nullsafe_extra = {
class_name : string;
package : string option;
nullable_methods : method_info list option;
unvetted_3rd_party : string list option;
meta_issue_info : nullsafe_meta_issue_info option;
annotation_graph : annotation_point list option;
}
type loc = ATDGenerated.Jsonbug_t.loc = {
file : string;
lnum : int;
cnum : int;
enum : int;
}
type json_trace_item = ATDGenerated.Jsonbug_t.json_trace_item = {
level : int;
filename : string;
line_number : int;
column_number : int;
description : string;
}
type extra = ATDGenerated.Jsonbug_t.extra = {
cost_polynomial : string option;
cost_degree : int option;
nullsafe_extra : nullsafe_extra option;
}
type jsonbug = ATDGenerated.Jsonbug_t.jsonbug = {
bug_type : string;
doc_url : string option;
qualifier : string;
severity : string;
line : int;
column : int;
procedure : string;
procedure_start_line : int;
file : string;
bug_trace : json_trace_item list;
key : string;
node_key : string option;
hash : string;
dotty : string option;
infer_source_loc : loc option;
bug_type_hum : string;
linters_def_file : string option;
traceview_id : int option;
censored_reason : string option;
access : string option;
extras : extra option;
}
type report = ATDGenerated.Jsonbug_t.report
type hum_info = ATDGenerated.Jsonbug_t.hum_info = {
hum_polynomial : string;
hum_degree : string;
big_o : string;
}
type cost_info = ATDGenerated.Jsonbug_t.cost_info = {
polynomial_version : int;
polynomial : string;
degree : int option;
hum : hum_info;
trace : json_trace_item list;
}
type cost_item = ATDGenerated.Jsonbug_t.cost_item = {
hash : string;
loc : loc;
procedure_name : string;
procedure_id : string;
is_on_ui_thread : bool;
exec_cost : cost_info;
autoreleasepool_size : cost_info;
}
type costs_report = ATDGenerated.Jsonbug_t.costs_report
val write_nullsafe_mode : Bi_outbuf.t -> nullsafe_mode -> unit

Output a JSON value of type nullsafe_mode.

val string_of_nullsafe_mode : ?⁠len:int -> nullsafe_mode -> string

Serialize a value of type nullsafe_mode into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_mode : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_mode

Input JSON data of type nullsafe_mode.

val nullsafe_mode_of_string : string -> nullsafe_mode

Deserialize JSON data of type nullsafe_mode.

val write_nullsafe_meta_issue_info : Bi_outbuf.t -> nullsafe_meta_issue_info -> unit

Output a JSON value of type nullsafe_meta_issue_info.

val string_of_nullsafe_meta_issue_info : ?⁠len:int -> nullsafe_meta_issue_info -> string

Serialize a value of type nullsafe_meta_issue_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_meta_issue_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_meta_issue_info

Input JSON data of type nullsafe_meta_issue_info.

val nullsafe_meta_issue_info_of_string : string -> nullsafe_meta_issue_info

Deserialize JSON data of type nullsafe_meta_issue_info.

val write_method_info : Bi_outbuf.t -> method_info -> unit

Output a JSON value of type method_info.

val string_of_method_info : ?⁠len:int -> method_info -> string

Serialize a value of type method_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_method_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> method_info

Input JSON data of type method_info.

val method_info_of_string : string -> method_info

Deserialize JSON data of type method_info.

val write_access_level : Bi_outbuf.t -> access_level -> unit

Output a JSON value of type access_level.

val string_of_access_level : ?⁠len:int -> access_level -> string

Serialize a value of type access_level into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_access_level : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> access_level

Input JSON data of type access_level.

val access_level_of_string : string -> access_level

Deserialize JSON data of type access_level.

val write_annotation_point_method : Bi_outbuf.t -> annotation_point_method -> unit

Output a JSON value of type annotation_point_method.

val string_of_annotation_point_method : ?⁠len:int -> annotation_point_method -> string

Serialize a value of type annotation_point_method into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_annotation_point_method : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> annotation_point_method

Input JSON data of type annotation_point_method.

val annotation_point_method_of_string : string -> annotation_point_method

Deserialize JSON data of type annotation_point_method.

val write_annotation_point_kind : Bi_outbuf.t -> annotation_point_kind -> unit

Output a JSON value of type annotation_point_kind.

val string_of_annotation_point_kind : ?⁠len:int -> annotation_point_kind -> string

Serialize a value of type annotation_point_kind into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_annotation_point_kind : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> annotation_point_kind

Input JSON data of type annotation_point_kind.

val annotation_point_kind_of_string : string -> annotation_point_kind

Deserialize JSON data of type annotation_point_kind.

val write_annotation_point : Bi_outbuf.t -> annotation_point -> unit

Output a JSON value of type annotation_point.

val string_of_annotation_point : ?⁠len:int -> annotation_point -> string

Serialize a value of type annotation_point into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_annotation_point : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> annotation_point

Input JSON data of type annotation_point.

val annotation_point_of_string : string -> annotation_point

Deserialize JSON data of type annotation_point.

val write_nullsafe_extra : Bi_outbuf.t -> nullsafe_extra -> unit

Output a JSON value of type nullsafe_extra.

val string_of_nullsafe_extra : ?⁠len:int -> nullsafe_extra -> string

Serialize a value of type nullsafe_extra into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_nullsafe_extra : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> nullsafe_extra

Input JSON data of type nullsafe_extra.

val nullsafe_extra_of_string : string -> nullsafe_extra

Deserialize JSON data of type nullsafe_extra.

val write_loc : Bi_outbuf.t -> loc -> unit

Output a JSON value of type loc.

val string_of_loc : ?⁠len:int -> loc -> string

Serialize a value of type loc into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_loc : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> loc

Input JSON data of type loc.

val loc_of_string : string -> loc

Deserialize JSON data of type loc.

val write_json_trace_item : Bi_outbuf.t -> json_trace_item -> unit

Output a JSON value of type json_trace_item.

val string_of_json_trace_item : ?⁠len:int -> json_trace_item -> string

Serialize a value of type json_trace_item into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_json_trace_item : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> json_trace_item

Input JSON data of type json_trace_item.

val json_trace_item_of_string : string -> json_trace_item

Deserialize JSON data of type json_trace_item.

val write_extra : Bi_outbuf.t -> extra -> unit

Output a JSON value of type extra.

val string_of_extra : ?⁠len:int -> extra -> string

Serialize a value of type extra into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_extra : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> extra

Input JSON data of type extra.

val extra_of_string : string -> extra

Deserialize JSON data of type extra.

val write_jsonbug : Bi_outbuf.t -> jsonbug -> unit

Output a JSON value of type jsonbug.

val string_of_jsonbug : ?⁠len:int -> jsonbug -> string

Serialize a value of type jsonbug into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_jsonbug : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> jsonbug

Input JSON data of type jsonbug.

val jsonbug_of_string : string -> jsonbug

Deserialize JSON data of type jsonbug.

val write_report : Bi_outbuf.t -> report -> unit

Output a JSON value of type report.

val string_of_report : ?⁠len:int -> report -> string

Serialize a value of type report into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_report : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> report

Input JSON data of type report.

val report_of_string : string -> report

Deserialize JSON data of type report.

val write_hum_info : Bi_outbuf.t -> hum_info -> unit

Output a JSON value of type hum_info.

val string_of_hum_info : ?⁠len:int -> hum_info -> string

Serialize a value of type hum_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_hum_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> hum_info

Input JSON data of type hum_info.

val hum_info_of_string : string -> hum_info

Deserialize JSON data of type hum_info.

val write_cost_info : Bi_outbuf.t -> cost_info -> unit

Output a JSON value of type cost_info.

val string_of_cost_info : ?⁠len:int -> cost_info -> string

Serialize a value of type cost_info into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_cost_info : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> cost_info

Input JSON data of type cost_info.

val cost_info_of_string : string -> cost_info

Deserialize JSON data of type cost_info.

val write_cost_item : Bi_outbuf.t -> cost_item -> unit

Output a JSON value of type cost_item.

val string_of_cost_item : ?⁠len:int -> cost_item -> string

Serialize a value of type cost_item into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_cost_item : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> cost_item

Input JSON data of type cost_item.

val cost_item_of_string : string -> cost_item

Deserialize JSON data of type cost_item.

val write_costs_report : Bi_outbuf.t -> costs_report -> unit

Output a JSON value of type costs_report.

val string_of_costs_report : ?⁠len:int -> costs_report -> string

Serialize a value of type costs_report into a JSON string.

parameter len

specifies the initial length of the buffer used internally. Default: 1024.

val read_costs_report : Yojson.Safe.lexer_state -> Stdlib.Lexing.lexbuf -> costs_report

Input JSON data of type costs_report.

val costs_report_of_string : string -> costs_report

Deserialize JSON data of type costs_report.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/ATDGenerated__Jsonbug_t/index.html b/website/static/odoc/next/infer/ATDGenerated__Jsonbug_t/index.html index e6ec33de5..e30ee0d85 100644 --- a/website/static/odoc/next/infer/ATDGenerated__Jsonbug_t/index.html +++ b/website/static/odoc/next/infer/ATDGenerated__Jsonbug_t/index.html @@ -1,2 +1,2 @@ -ATDGenerated__Jsonbug_t (infer.ATDGenerated__Jsonbug_t)

Module ATDGenerated__Jsonbug_t

type nullsafe_mode = [
| `Default
| `LocalTrustAll
| `LocalTrustSome
| `LocalTrustNone
| `Strict
]
type nullsafe_meta_issue_info = {
num_issues : int;
curr_nullsafe_mode : nullsafe_mode;
can_be_promoted_to : nullsafe_mode option;
}
type method_info = {
class_name : string;
package : string;
method_name : string;
call_line : int;
}
type nullsafe_extra = {
class_name : string;
package : string option;
nullable_methods : method_info list option;
unvetted_3rd_party : string list option;
meta_issue_info : nullsafe_meta_issue_info option;
}
type loc = {
file : string;
lnum : int;
cnum : int;
enum : int;
}
type json_trace_item = {
level : int;
filename : string;
line_number : int;
column_number : int;
description : string;
}
type extra = {
cost_polynomial : string option;
cost_degree : int option;
nullsafe_extra : nullsafe_extra option;
}
type jsonbug = {
bug_type : string;
doc_url : string option;
qualifier : string;
severity : string;
line : int;
column : int;
procedure : string;
procedure_start_line : int;
file : string;
bug_trace : json_trace_item list;
key : string;
node_key : string option;
hash : string;
dotty : string option;
infer_source_loc : loc option;
bug_type_hum : string;
linters_def_file : string option;
traceview_id : int option;
censored_reason : string option;
access : string option;
extras : extra option;
}
type report = jsonbug list
type hum_info = {
hum_polynomial : string;
hum_degree : string;
big_o : string;
}
type cost_info = {
polynomial_version : int;
polynomial : string;
degree : int option;
hum : hum_info;
trace : json_trace_item list;
}
type cost_item = {
hash : string;
loc : loc;
procedure_name : string;
procedure_id : string;
is_on_ui_thread : bool;
exec_cost : cost_info;
autoreleasepool_size : cost_info;
}
type costs_report = cost_item list
\ No newline at end of file +ATDGenerated__Jsonbug_t (infer.ATDGenerated__Jsonbug_t)

Module ATDGenerated__Jsonbug_t

type nullsafe_mode = [
| `Default
| `LocalTrustAll
| `LocalTrustSome
| `LocalTrustNone
| `Strict
]
type nullsafe_meta_issue_info = {
num_issues : int;
curr_nullsafe_mode : nullsafe_mode;
can_be_promoted_to : nullsafe_mode option;
}
type method_info = {
class_name : string;
package : string;
method_name : string;
call_line : int;
}
type access_level = [
| `Private
| `Protected
| `Public
| `Default
]
type annotation_point_method = {
method_name : string;
params : string list;
access_level : access_level;
}
type annotation_point_kind = [
| `Method
| `Field
| `Param
]
type annotation_point = {
id : string;
kind : annotation_point_kind;
method_info : annotation_point_method option;
field_name : string option;
param_num : int option;
num_violations : int;
dependent_point_ids : string list;
}
type nullsafe_extra = {
class_name : string;
package : string option;
nullable_methods : method_info list option;
unvetted_3rd_party : string list option;
meta_issue_info : nullsafe_meta_issue_info option;
annotation_graph : annotation_point list option;
}
type loc = {
file : string;
lnum : int;
cnum : int;
enum : int;
}
type json_trace_item = {
level : int;
filename : string;
line_number : int;
column_number : int;
description : string;
}
type extra = {
cost_polynomial : string option;
cost_degree : int option;
nullsafe_extra : nullsafe_extra option;
}
type jsonbug = {
bug_type : string;
doc_url : string option;
qualifier : string;
severity : string;
line : int;
column : int;
procedure : string;
procedure_start_line : int;
file : string;
bug_trace : json_trace_item list;
key : string;
node_key : string option;
hash : string;
dotty : string option;
infer_source_loc : loc option;
bug_type_hum : string;
linters_def_file : string option;
traceview_id : int option;
censored_reason : string option;
access : string option;
extras : extra option;
}
type report = jsonbug list
type hum_info = {
hum_polynomial : string;
hum_degree : string;
big_o : string;
}
type cost_info = {
polynomial_version : int;
polynomial : string;
degree : int option;
hum : hum_info;
trace : json_trace_item list;
}
type cost_item = {
hash : string;
loc : loc;
procedure_name : string;
procedure_id : string;
is_on_ui_thread : bool;
exec_cost : cost_info;
autoreleasepool_size : cost_info;
}
type costs_report = cost_item list
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Absint/HilExp/Access/index.html b/website/static/odoc/next/infer/Absint/HilExp/Access/index.html index 39be1b893..b5489cd18 100644 --- a/website/static/odoc/next/infer/Absint/HilExp/Access/index.html +++ b/website/static/odoc/next/infer/Absint/HilExp/Access/index.html @@ -1,2 +1,2 @@ -Access (infer.Absint.HilExp.Access)

Module HilExp.Access

type 'array_index t =
| FieldAccess of IR.Fieldname.t
| ArrayAccess of IR.Typ.t * 'array_index
| TakeAddress
| Dereference
val compare : ('array_index -> 'array_index -> int) -> 'array_index t -> 'array_index t -> int
val pp : (Stdlib.Format.formatter -> 'array_index -> unit) -> Stdlib.Format.formatter -> 'array_index t -> unit
val is_field_or_array_access : 'a t -> bool
\ No newline at end of file +Access (infer.Absint.HilExp.Access)

Module HilExp.Access

type 'array_index t =
| FieldAccess of IR.Fieldname.t
| ArrayAccess of IR.Typ.t * 'array_index
| TakeAddress
| Dereference
val compare : ('array_index -> 'array_index -> int) -> 'array_index t -> 'array_index t -> int
val yojson_of_t : ('array_index -> Ppx_yojson_conv_lib.Yojson.Safe.t) -> 'array_index t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val pp : (Stdlib.Format.formatter -> 'array_index -> unit) -> Stdlib.Format.formatter -> 'array_index t -> unit
val is_field_or_array_access : 'a t -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Absint/PatternMatch/ObjectiveC/index.html b/website/static/odoc/next/infer/Absint/PatternMatch/ObjectiveC/index.html index 317e3dd61..3108e2ce1 100644 --- a/website/static/odoc/next/infer/Absint/PatternMatch/ObjectiveC/index.html +++ b/website/static/odoc/next/infer/Absint/PatternMatch/ObjectiveC/index.html @@ -1,2 +1,2 @@ -ObjectiveC (infer.Absint.PatternMatch.ObjectiveC)

Module PatternMatch.ObjectiveC

val implements : string -> IR.Tenv.t -> string -> bool

Check whether class implements a given ObjC class

val is_core_graphics_create_or_copy : IR.Tenv.t -> string -> bool
val is_core_foundation_create_or_copy : IR.Tenv.t -> string -> bool
val is_core_graphics_release : IR.Tenv.t -> string -> bool
val is_modelled_as_alloc : IR.Tenv.t -> string -> bool
val is_modelled_as_release : IR.Tenv.t -> string -> bool
\ No newline at end of file +ObjectiveC (infer.Absint.PatternMatch.ObjectiveC)

Module PatternMatch.ObjectiveC

val implements : string -> IR.Tenv.t -> string -> bool

Check whether class implements a given ObjC class

val conforms_to : protocol:string -> IR.Tenv.t -> string -> bool

Check whether class conforms to a given ObjC protocol

val implements_collection : IR.Tenv.t -> string -> bool
val is_core_graphics_create_or_copy : IR.Tenv.t -> string -> bool
val is_core_foundation_create_or_copy : IR.Tenv.t -> string -> bool
val is_core_graphics_release : IR.Tenv.t -> string -> bool
val is_modelled_as_alloc : IR.Tenv.t -> string -> bool
val is_modelled_as_release : IR.Tenv.t -> string -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Absint/PatternMatch/index.html b/website/static/odoc/next/infer/Absint/PatternMatch/index.html index bee3028dd..a3eefed13 100644 --- a/website/static/odoc/next/infer/Absint/PatternMatch/index.html +++ b/website/static/odoc/next/infer/Absint/PatternMatch/index.html @@ -1,2 +1,2 @@ -PatternMatch (infer.Absint.PatternMatch)

Module Absint.PatternMatch

val get_this_type_nonstatic_methods_only : IR.ProcAttributes.t -> IR.Typ.t option

Get the `this` type of a procedure. Should not be called on non-static methods, otherwise it can return a wrong type

val get_type_name : IR.Typ.t -> string

Get the name of a type

val get_vararg_type_names : IR.Tenv.t -> IR.Procdesc.Node.t -> IR.Pvar.t -> string list

Get the type names of a variable argument

val is_subtype : IR.Tenv.t -> IR.Typ.Name.t -> IR.Typ.Name.t -> bool

Is the type a transitive subtype of the typename?

val is_subtype_of_str : IR.Tenv.t -> IR.Typ.Name.t -> string -> bool

Resolve typ_str in tenv, then check typ <: typ_str

module Java : sig ... end
val supertype_exists : IR.Tenv.t -> (IR.Typ.Name.t -> IR.Struct.t -> bool) -> IR.Typ.Name.t -> bool

Holds iff the predicate holds on a supertype of the named type, including the type itself

val supertype_find_map_opt : IR.Tenv.t -> (IR.Typ.Name.t -> 'a option) -> IR.Typ.Name.t -> 'a option

Return the first non-None result found when applying the given function to supertypes of the named type, including the type itself

val proc_calls : (IR.Procname.t -> IR.ProcAttributes.t option) -> IR.Procdesc.t -> (IR.Procname.t -> IR.ProcAttributes.t -> bool) -> (IR.Procname.t * IR.ProcAttributes.t) list

Return the callees that satisfy filter.

val override_exists : ?⁠check_current_type:bool -> (IR.Procname.t -> bool) -> IR.Tenv.t -> IR.Procname.t -> bool

Return true if applying the given predicate to an override of procname (including procname itself when check_current_type is true, which it is by default) returns true.

val override_iter : (IR.Procname.t -> unit) -> IR.Tenv.t -> IR.Procname.t -> unit

Apply the given predicate to procname and each override of procname. For the moment, this only works for Java

val lookup_attributes : IR.Tenv.t -> IR.Procname.t -> IR.ProcAttributes.t option
val type_name_get_annotation : IR.Tenv.t -> IR.Typ.name -> IR.Annot.Item.t option
val type_get_annotation : IR.Tenv.t -> IR.Typ.t -> IR.Annot.Item.t option
val type_get_class_name : IR.Typ.t -> IR.Typ.Name.t option

Get the class name of the type

val type_is_class : IR.Typ.t -> bool

Is the type a class type

val get_fields_nullified : IR.Procdesc.t -> IR.Fieldname.Set.t

return the set of instance fields that are assigned to a null literal in procdesc

val has_same_signature : IR.Procname.t -> (IR.Procname.t -> bool) IStdlib.IStd.Staged.t

For a given procname checks if the method has the same method name, number, order and types of parameters.)

module ObjectiveC : sig ... end
\ No newline at end of file +PatternMatch (infer.Absint.PatternMatch)

Module Absint.PatternMatch

val get_this_type_nonstatic_methods_only : IR.ProcAttributes.t -> IR.Typ.t option

Get the `this` type of a procedure. Should not be called on non-static methods, otherwise it can return a wrong type

val get_type_name : IR.Typ.t -> string

Get the name of a type

val get_vararg_type_names : IR.Tenv.t -> IR.Procdesc.Node.t -> IR.Pvar.t -> string list

Get the type names of a variable argument

val is_subtype : IR.Tenv.t -> IR.Typ.Name.t -> IR.Typ.Name.t -> bool

Is the type a transitive subtype of the typename?

val is_subtype_of_str : IR.Tenv.t -> IR.Typ.Name.t -> string -> bool

Resolve typ_str in tenv, then check typ <: typ_str

module Java : sig ... end
val supertype_exists : IR.Tenv.t -> (IR.Typ.Name.t -> IR.Struct.t -> bool) -> IR.Typ.Name.t -> bool

Holds iff the predicate holds on a supertype of the named type, including the type itself

val supertype_find_map_opt : IR.Tenv.t -> (IR.Typ.Name.t -> 'a option) -> IR.Typ.Name.t -> 'a option

Return the first non-None result found when applying the given function to supertypes of the named type, including the type itself

val proc_calls : (IR.Procname.t -> IR.ProcAttributes.t option) -> IR.Procdesc.t -> (IR.Procname.t -> IR.ProcAttributes.t -> bool) -> (IR.Procname.t * IR.ProcAttributes.t) list

Return the callees that satisfy filter.

val override_exists : ?⁠check_current_type:bool -> (IR.Procname.t -> bool) -> IR.Tenv.t -> IR.Procname.t -> bool

Return true if applying the given predicate to an override of procname (including procname itself when check_current_type is true, which it is by default) returns true.

val override_iter : (IR.Procname.t -> unit) -> IR.Tenv.t -> IR.Procname.t -> unit

Apply the given predicate to procname and each override of procname. For the moment, this only works for Java

val lookup_attributes : IR.Tenv.t -> IR.Procname.t -> IR.ProcAttributes.t option
val lookup_attributes_exn : IR.Tenv.t -> IR.Procname.t -> IR.ProcAttributes.t
val type_name_get_annotation : IR.Tenv.t -> IR.Typ.name -> IR.Annot.Item.t option
val type_get_annotation : IR.Tenv.t -> IR.Typ.t -> IR.Annot.Item.t option
val type_get_class_name : IR.Typ.t -> IR.Typ.Name.t option

Get the class name of the type

val type_is_class : IR.Typ.t -> bool

Is the type a class type

val get_fields_nullified : IR.Procdesc.t -> IR.Fieldname.Set.t

return the set of instance fields that are assigned to a null literal in procdesc

val has_same_signature : IR.Procname.t -> (IR.Procname.t -> bool) IStdlib.IStd.Staged.t

For a given procname checks if the method has the same method name, number, order and types of parameters.)

module ObjectiveC : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Absint__HilExp/Access/index.html b/website/static/odoc/next/infer/Absint__HilExp/Access/index.html index 35a3f6d3f..32c03cb8e 100644 --- a/website/static/odoc/next/infer/Absint__HilExp/Access/index.html +++ b/website/static/odoc/next/infer/Absint__HilExp/Access/index.html @@ -1,2 +1,2 @@ -Access (infer.Absint__HilExp.Access)

Module Absint__HilExp.Access

type 'array_index t =
| FieldAccess of IR.Fieldname.t
| ArrayAccess of IR.Typ.t * 'array_index
| TakeAddress
| Dereference
val compare : ('array_index -> 'array_index -> int) -> 'array_index t -> 'array_index t -> int
val pp : (Stdlib.Format.formatter -> 'array_index -> unit) -> Stdlib.Format.formatter -> 'array_index t -> unit
val is_field_or_array_access : 'a t -> bool
\ No newline at end of file +Access (infer.Absint__HilExp.Access)

Module Absint__HilExp.Access

type 'array_index t =
| FieldAccess of IR.Fieldname.t
| ArrayAccess of IR.Typ.t * 'array_index
| TakeAddress
| Dereference
val compare : ('array_index -> 'array_index -> int) -> 'array_index t -> 'array_index t -> int
val yojson_of_t : ('array_index -> Ppx_yojson_conv_lib.Yojson.Safe.t) -> 'array_index t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val pp : (Stdlib.Format.formatter -> 'array_index -> unit) -> Stdlib.Format.formatter -> 'array_index t -> unit
val is_field_or_array_access : 'a t -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Absint__PatternMatch/ObjectiveC/index.html b/website/static/odoc/next/infer/Absint__PatternMatch/ObjectiveC/index.html index 8c938d330..88f37fc5b 100644 --- a/website/static/odoc/next/infer/Absint__PatternMatch/ObjectiveC/index.html +++ b/website/static/odoc/next/infer/Absint__PatternMatch/ObjectiveC/index.html @@ -1,2 +1,2 @@ -ObjectiveC (infer.Absint__PatternMatch.ObjectiveC)

Module Absint__PatternMatch.ObjectiveC

val implements : string -> IR.Tenv.t -> string -> bool

Check whether class implements a given ObjC class

val is_core_graphics_create_or_copy : IR.Tenv.t -> string -> bool
val is_core_foundation_create_or_copy : IR.Tenv.t -> string -> bool
val is_core_graphics_release : IR.Tenv.t -> string -> bool
val is_modelled_as_alloc : IR.Tenv.t -> string -> bool
val is_modelled_as_release : IR.Tenv.t -> string -> bool
\ No newline at end of file +ObjectiveC (infer.Absint__PatternMatch.ObjectiveC)

Module Absint__PatternMatch.ObjectiveC

val implements : string -> IR.Tenv.t -> string -> bool

Check whether class implements a given ObjC class

val conforms_to : protocol:string -> IR.Tenv.t -> string -> bool

Check whether class conforms to a given ObjC protocol

val implements_collection : IR.Tenv.t -> string -> bool
val is_core_graphics_create_or_copy : IR.Tenv.t -> string -> bool
val is_core_foundation_create_or_copy : IR.Tenv.t -> string -> bool
val is_core_graphics_release : IR.Tenv.t -> string -> bool
val is_modelled_as_alloc : IR.Tenv.t -> string -> bool
val is_modelled_as_release : IR.Tenv.t -> string -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Absint__PatternMatch/index.html b/website/static/odoc/next/infer/Absint__PatternMatch/index.html index 6d6d10df3..a3e738b2c 100644 --- a/website/static/odoc/next/infer/Absint__PatternMatch/index.html +++ b/website/static/odoc/next/infer/Absint__PatternMatch/index.html @@ -1,2 +1,2 @@ -Absint__PatternMatch (infer.Absint__PatternMatch)

Module Absint__PatternMatch

val get_this_type_nonstatic_methods_only : IR.ProcAttributes.t -> IR.Typ.t option

Get the `this` type of a procedure. Should not be called on non-static methods, otherwise it can return a wrong type

val get_type_name : IR.Typ.t -> string

Get the name of a type

val get_vararg_type_names : IR.Tenv.t -> IR.Procdesc.Node.t -> IR.Pvar.t -> string list

Get the type names of a variable argument

val is_subtype : IR.Tenv.t -> IR.Typ.Name.t -> IR.Typ.Name.t -> bool

Is the type a transitive subtype of the typename?

val is_subtype_of_str : IR.Tenv.t -> IR.Typ.Name.t -> string -> bool

Resolve typ_str in tenv, then check typ <: typ_str

module Java : sig ... end
val supertype_exists : IR.Tenv.t -> (IR.Typ.Name.t -> IR.Struct.t -> bool) -> IR.Typ.Name.t -> bool

Holds iff the predicate holds on a supertype of the named type, including the type itself

val supertype_find_map_opt : IR.Tenv.t -> (IR.Typ.Name.t -> 'a option) -> IR.Typ.Name.t -> 'a option

Return the first non-None result found when applying the given function to supertypes of the named type, including the type itself

val proc_calls : (IR.Procname.t -> IR.ProcAttributes.t option) -> IR.Procdesc.t -> (IR.Procname.t -> IR.ProcAttributes.t -> bool) -> (IR.Procname.t * IR.ProcAttributes.t) list

Return the callees that satisfy filter.

val override_exists : ?⁠check_current_type:bool -> (IR.Procname.t -> bool) -> IR.Tenv.t -> IR.Procname.t -> bool

Return true if applying the given predicate to an override of procname (including procname itself when check_current_type is true, which it is by default) returns true.

val override_iter : (IR.Procname.t -> unit) -> IR.Tenv.t -> IR.Procname.t -> unit

Apply the given predicate to procname and each override of procname. For the moment, this only works for Java

val lookup_attributes : IR.Tenv.t -> IR.Procname.t -> IR.ProcAttributes.t option
val type_name_get_annotation : IR.Tenv.t -> IR.Typ.name -> IR.Annot.Item.t option
val type_get_annotation : IR.Tenv.t -> IR.Typ.t -> IR.Annot.Item.t option
val type_get_class_name : IR.Typ.t -> IR.Typ.Name.t option

Get the class name of the type

val type_is_class : IR.Typ.t -> bool

Is the type a class type

val get_fields_nullified : IR.Procdesc.t -> IR.Fieldname.Set.t

return the set of instance fields that are assigned to a null literal in procdesc

val has_same_signature : IR.Procname.t -> (IR.Procname.t -> bool) IStdlib.IStd.Staged.t

For a given procname checks if the method has the same method name, number, order and types of parameters.)

module ObjectiveC : sig ... end
\ No newline at end of file +Absint__PatternMatch (infer.Absint__PatternMatch)

Module Absint__PatternMatch

val get_this_type_nonstatic_methods_only : IR.ProcAttributes.t -> IR.Typ.t option

Get the `this` type of a procedure. Should not be called on non-static methods, otherwise it can return a wrong type

val get_type_name : IR.Typ.t -> string

Get the name of a type

val get_vararg_type_names : IR.Tenv.t -> IR.Procdesc.Node.t -> IR.Pvar.t -> string list

Get the type names of a variable argument

val is_subtype : IR.Tenv.t -> IR.Typ.Name.t -> IR.Typ.Name.t -> bool

Is the type a transitive subtype of the typename?

val is_subtype_of_str : IR.Tenv.t -> IR.Typ.Name.t -> string -> bool

Resolve typ_str in tenv, then check typ <: typ_str

module Java : sig ... end
val supertype_exists : IR.Tenv.t -> (IR.Typ.Name.t -> IR.Struct.t -> bool) -> IR.Typ.Name.t -> bool

Holds iff the predicate holds on a supertype of the named type, including the type itself

val supertype_find_map_opt : IR.Tenv.t -> (IR.Typ.Name.t -> 'a option) -> IR.Typ.Name.t -> 'a option

Return the first non-None result found when applying the given function to supertypes of the named type, including the type itself

val proc_calls : (IR.Procname.t -> IR.ProcAttributes.t option) -> IR.Procdesc.t -> (IR.Procname.t -> IR.ProcAttributes.t -> bool) -> (IR.Procname.t * IR.ProcAttributes.t) list

Return the callees that satisfy filter.

val override_exists : ?⁠check_current_type:bool -> (IR.Procname.t -> bool) -> IR.Tenv.t -> IR.Procname.t -> bool

Return true if applying the given predicate to an override of procname (including procname itself when check_current_type is true, which it is by default) returns true.

val override_iter : (IR.Procname.t -> unit) -> IR.Tenv.t -> IR.Procname.t -> unit

Apply the given predicate to procname and each override of procname. For the moment, this only works for Java

val lookup_attributes : IR.Tenv.t -> IR.Procname.t -> IR.ProcAttributes.t option
val lookup_attributes_exn : IR.Tenv.t -> IR.Procname.t -> IR.ProcAttributes.t
val type_name_get_annotation : IR.Tenv.t -> IR.Typ.name -> IR.Annot.Item.t option
val type_get_annotation : IR.Tenv.t -> IR.Typ.t -> IR.Annot.Item.t option
val type_get_class_name : IR.Typ.t -> IR.Typ.Name.t option

Get the class name of the type

val type_is_class : IR.Typ.t -> bool

Is the type a class type

val get_fields_nullified : IR.Procdesc.t -> IR.Fieldname.Set.t

return the set of instance fields that are assigned to a null literal in procdesc

val has_same_signature : IR.Procname.t -> (IR.Procname.t -> bool) IStdlib.IStd.Staged.t

For a given procname checks if the method has the same method name, number, order and types of parameters.)

module ObjectiveC : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO/AbsLoc/Loc/index.html b/website/static/odoc/next/infer/BO/AbsLoc/Loc/index.html index 7e094f4d4..29f3183c9 100644 --- a/website/static/odoc/next/infer/BO/AbsLoc/Loc/index.html +++ b/website/static/odoc/next/infer/BO/AbsLoc/Loc/index.html @@ -1,2 +1,2 @@ -Loc (infer.BO.AbsLoc.Loc)

Module AbsLoc.Loc

type prim = private
| Var of IR.Var.t
| Allocsite of Allocsite.t
val compare_prim : prim -> prim -> int
type t = prim BufferOverrunField.t
val compare : t -> t -> int
val equal : t -> t -> bool
include IStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t := t
include IStdlib.IStd.Caml.Set.OrderedType
type t
val compare : t -> t -> int
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val of_allocsite : Allocsite.t -> t
val of_c_strlen : t -> t

It appends the strlen field.

val of_id : IR.Ident.t -> t
val of_path : Symb.SymbolPath.partial -> t
val of_pvar : IR.Pvar.t -> t
val of_var : IR.Var.t -> t
val unknown : t
val exists_pvar : f:(IR.Pvar.t -> bool) -> t -> bool

It checks if a pvar in location satisfies f.

val exists_str : f:(string -> bool) -> t -> bool

It checks if a variable or a field name in the location path satisfies f.

val get_literal_string : t -> string option
val get_literal_string_strlen : t -> string option
val get_path : t -> Symb.SymbolPath.partial option
val is_field_of : loc:t -> field_loc:t -> bool

It checks if loc is prefix of field_loc.

val is_frontend_tmp : t -> bool
val is_global : t -> bool
val get_global_array_initializer : t -> IR.Procname.t option

Return the name of global initializer when given abstract location represents a global constant array value

val is_pretty : t -> bool

It checks if it is representable with pretty form, e.g., with a path or with a variable name.

val is_return : t -> bool
val is_unknown : t -> bool
val represents_multiple_values : t -> bool
val is_objc_collection_internal_array : t -> bool
val append_field : ?⁠typ:IR.Typ.typ -> t -> IR.Fieldname.t -> t

It appends field. typ is the type of fn.

\ No newline at end of file +Loc (infer.BO.AbsLoc.Loc)

Module AbsLoc.Loc

type prim = private
| Var of IR.Var.t
| Allocsite of Allocsite.t
val compare_prim : prim -> prim -> int
type t = prim BufferOverrunField.t
val compare : t -> t -> int
val equal : t -> t -> bool
include IStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t := t
include IStdlib.IStd.Caml.Set.OrderedType
type t
val compare : t -> t -> int
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val of_allocsite : Allocsite.t -> t
val of_c_strlen : t -> t

It appends the strlen field.

val of_id : IR.Ident.t -> t
val of_path : Symb.SymbolPath.partial -> t
val of_pvar : IR.Pvar.t -> t
val of_var : IR.Var.t -> t
val unknown : t
val exists_pvar : f:(IR.Pvar.t -> bool) -> t -> bool

It checks if a pvar in location satisfies f.

val exists_str : f:(string -> bool) -> t -> bool

It checks if a variable or a field name in the location path satisfies f.

val get_literal_string : t -> string option
val get_literal_string_strlen : t -> string option
val get_path : t -> Symb.SymbolPath.partial option
val is_field_of : loc:t -> field_loc:t -> bool

It checks if loc is prefix of field_loc.

val is_frontend_tmp : t -> bool
val is_global : t -> bool
val get_global_array_initializer : t -> IR.Procname.t option

Return the name of global initializer when given abstract location represents a global constant array value

val is_pretty : t -> bool

It checks if it is representable with pretty form, e.g., with a path or with a variable name.

val is_return : t -> bool
val is_unknown : t -> bool
val represents_multiple_values : t -> bool
val is_objc_collection_internal_array : t -> bool
val append_field : ?⁠typ:IR.Typ.t -> t -> IR.Fieldname.t -> t

It appends field. typ is the type of fn.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO/AbsLoc/PowLoc/index.html b/website/static/odoc/next/infer/BO/AbsLoc/PowLoc/index.html index 725857151..29109165a 100644 --- a/website/static/odoc/next/infer/BO/AbsLoc/PowLoc/index.html +++ b/website/static/odoc/next/infer/BO/AbsLoc/PowLoc/index.html @@ -1,2 +1,2 @@ -PowLoc (infer.BO.AbsLoc.PowLoc)

Module AbsLoc.PowLoc

include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val compare : t -> t -> int
val get_parent_field : t -> t
val append_field : t -> fn:IR.Fieldname.t -> t
val append_star_field : t -> fn:IR.Fieldname.t -> t
val bot : t
val add : Loc.t -> t -> t
val exists : (Loc.t -> bool) -> t -> bool
val mem : Loc.t -> t -> bool
val is_singleton_or_more : t -> Loc.t IStdlib.IContainer.singleton_or_more
val min_elt_opt : t -> Loc.t option
val singleton : Loc.t -> t
val fold : (Loc.t -> 'a -> 'a) -> t -> 'a -> 'a
val cast : IR.Typ.typ -> t -> t
val of_c_strlen : t -> t

It appends the strlen field.

val unknown : t
val exists_str : f:(string -> bool) -> t -> bool

It checks if a variable or a field name in the location path satisfies f.

val is_bot : t -> bool
type eval_locpath = Symb.SymbolPath.partial -> t

Type for evaluating a path to an abstract location.

val subst : t -> eval_locpath -> t

It substitutes paths in the abstract location using eval_locpath.

val subst_loc : Loc.t -> eval_locpath -> t

It substitutes paths in the abstract location using eval_locpath.

val lift_cmp : Boolean.EqualOrder.t -> t -> t -> Boolean.t

It lifts a comparison of Loc.t to t. The comparison can be Boolean.EqualOrder.eq, Boolean.EqualOrder.ne, etc.

val to_set : t -> LocSet.t
val get_linked_list_next : lhs:t -> rhs:t -> Loc.t option

It checks whether rhs is of lhs.any_field, which is a heuristic for detecting a linked list, e.g. x = x.next(). It returns Some lhs if the condition is satisfied, None otherwise.

\ No newline at end of file +PowLoc (infer.BO.AbsLoc.PowLoc)

Module AbsLoc.PowLoc

include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val compare : t -> t -> int
val get_parent_field : t -> t
val append_field : t -> fn:IR.Fieldname.t -> t
val append_star_field : t -> fn:IR.Fieldname.t -> t
val bot : t
val add : Loc.t -> t -> t
val of_list : Loc.t list -> t
val exists : (Loc.t -> bool) -> t -> bool
val mem : Loc.t -> t -> bool
val is_singleton_or_more : t -> Loc.t IStdlib.IContainer.singleton_or_more
val min_elt_opt : t -> Loc.t option
val singleton : Loc.t -> t
val fold : (Loc.t -> 'a -> 'a) -> t -> 'a -> 'a
val cast : IR.Typ.t -> t -> t
val of_c_strlen : t -> t

It appends the strlen field.

val unknown : t
val exists_str : f:(string -> bool) -> t -> bool

It checks if a variable or a field name in the location path satisfies f.

val is_bot : t -> bool
type eval_locpath = Symb.SymbolPath.partial -> t

Type for evaluating a path to an abstract location.

val subst : t -> eval_locpath -> t

It substitutes paths in the abstract location using eval_locpath.

val subst_loc : Loc.t -> eval_locpath -> t

It substitutes paths in the abstract location using eval_locpath.

val lift_cmp : Boolean.EqualOrder.t -> t -> t -> Boolean.t

It lifts a comparison of Loc.t to t. The comparison can be Boolean.EqualOrder.eq, Boolean.EqualOrder.ne, etc.

val to_set : t -> LocSet.t
val get_linked_list_next : lhs:t -> rhs:t -> Loc.t option

It checks whether rhs is of lhs.any_field, which is a heuristic for detecting a linked list, e.g. x = x.next(). It returns Some lhs if the condition is satisfied, None otherwise.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO/ArrayBlk/index.html b/website/static/odoc/next/infer/BO/ArrayBlk/index.html index 92a2da8de..f18d0d19c 100644 --- a/website/static/odoc/next/infer/BO/ArrayBlk/index.html +++ b/website/static/odoc/next/infer/BO/ArrayBlk/index.html @@ -1,2 +1,2 @@ -ArrayBlk (infer.BO.ArrayBlk)

Module BO.ArrayBlk

module ArrInfo : sig ... end
include Absint.AbstractDomain.MapS with type key = AbsLoc.Allocsite.t and type value = ArrInfo.t
include IStdlib.PrettyPrintable.PPMonoMap
include IStdlib.PrettyPrintable.MonoMap
type key
type value
type t
val empty : t
val is_empty : t -> bool
val mem : key -> t -> bool
val add : key -> value -> t -> t
val update : key -> (value option -> value option) -> t -> t
val singleton : key -> value -> t
val remove : key -> t -> t
val merge : (key -> value option -> value option -> value option) -> t -> t -> t
val union : (key -> value -> value -> value option) -> t -> t -> t
val compare : (value -> value -> int) -> t -> t -> int
val equal : (value -> value -> bool) -> t -> t -> bool
val iter : (key -> value -> unit) -> t -> unit
val fold : (key -> value -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (key -> value -> bool) -> t -> bool
val exists : (key -> value -> bool) -> t -> bool
val filter : (key -> value -> bool) -> t -> t
val partition : (key -> value -> bool) -> t -> t * t
val cardinal : t -> int
val bindings : t -> (key * value) list
val min_binding : t -> key * value
val min_binding_opt : t -> (key * value) option
val max_binding : t -> key * value
val max_binding_opt : t -> (key * value) option
val choose : t -> key * value
val choose_opt : t -> (key * value) option
val split : key -> t -> t * value option * t
val find : key -> t -> value
val find_opt : key -> t -> value option
val find_first : (key -> bool) -> t -> key * value
val find_first_opt : (key -> bool) -> t -> (key * value) option
val find_last : (key -> bool) -> t -> key * value
val find_last_opt : (key -> bool) -> t -> (key * value) option
val map : (value -> value) -> t -> t
val mapi : (key -> value -> value) -> t -> t
val is_singleton_or_more : t -> (key * value) IStdlib.IContainer.singleton_or_more
val fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * t
val of_seq : (key * value) Stdlib.Seq.t -> t
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val pp_key : IStdlib.PrettyPrintable.F.formatter -> key -> unit
include Absint.AbstractDomain.WithBottom with type t := t
include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bottom : t

The bottom value of the domain.

val is_bottom : t -> bool

Return true if this is the bottom value

val compare : t -> t -> int
val bot : t
val make_c : AbsLoc.Allocsite.t -> offset:Itv.t -> size:Itv.t -> stride:Itv.t -> t

Make an array block for C

val make_java : AbsLoc.Allocsite.t -> length:Itv.t -> t

Make an array block for Java

val unknown : t
val get_pow_loc : t -> AbsLoc.PowLoc.t

Return all allocsites as PowLoc.t

val is_bot : t -> bool
val is_symbolic : t -> bool

Check if there is a symbolic integer value in its offset or size

val lift_cmp_itv : (Itv.t -> Itv.t -> Boolean.t) -> Boolean.EqualOrder.t -> t -> t -> Boolean.t

Lift a comparison of Itv.t and Loc.t to that of t. The comparison for Itv.t is used for integer values such as offset and size, and the comparison for Loc.t is used for allocsites.

val transform_length : f:(Itv.t -> Itv.t) -> t -> t

Apply f to all sizes

val prune_binop : IR.Binop.t -> t -> t -> t

prune_binop bop x y returns a pruned value of x by bop and y.

val prune_eq : t -> t -> t

prune_eq x y returns a pruned value of x by == y.

val prune_ne : t -> t -> t

prune_ne x y returns a pruned value of x by != y.

val minus_offset : t -> Itv.t -> t
val plus_offset : t -> Itv.t -> t
val diff : t -> t -> Itv.t

Return difference of offsets between given array blocks

val normalize : t -> t

Normalize all interval values such as offset and size in it. Thus, if an interval value is invalid, the interval value is replaced with bottom.

val subst : t -> Bounds.Bound.eval_sym -> AbsLoc.PowLoc.eval_locpath -> AbsLoc.PowLoc.t * t

Substitute symbolic abstract locations and symbolic interval value in the array block. eval_sym is to get substituted interval values and eval_locpath is to get substituted abstract locaion values. It also returns a set of abstract locations containing non-allocsite locations from the substitution results. Since the key of ArrayBlk.t is AbsLoc.Allocsite.t, they cannot be written in this domain.

val set_length : Itv.t -> t -> t
val set_offset : Itv.t -> t -> t
val set_stride : Z.t -> t -> t
val get_symbols : t -> BO.Symb.SymbolSet.t

Return all symbols for integer values in it

val get_offset : ?⁠cost_mode:bool -> t -> Itv.t

Return offset of the array block. If cost_mode is true, it returns a conservative (bigger than correct one), but not correct offset results.

val get_size : ?⁠cost_mode:bool -> t -> Itv.t

Return size of the array block. If cost_mode is true, it returns a conservative (bigger than correct one), but not correct size results.

\ No newline at end of file +ArrayBlk (infer.BO.ArrayBlk)

Module BO.ArrayBlk

module ArrInfo : sig ... end
include Absint.AbstractDomain.MapS with type key = AbsLoc.Allocsite.t and type value = ArrInfo.t
include IStdlib.PrettyPrintable.PPMonoMap
include IStdlib.PrettyPrintable.MonoMap
type key
type value
type t
val empty : t
val is_empty : t -> bool
val mem : key -> t -> bool
val add : key -> value -> t -> t
val update : key -> (value option -> value option) -> t -> t
val singleton : key -> value -> t
val remove : key -> t -> t
val merge : (key -> value option -> value option -> value option) -> t -> t -> t
val union : (key -> value -> value -> value option) -> t -> t -> t
val compare : (value -> value -> int) -> t -> t -> int
val equal : (value -> value -> bool) -> t -> t -> bool
val iter : (key -> value -> unit) -> t -> unit
val fold : (key -> value -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (key -> value -> bool) -> t -> bool
val exists : (key -> value -> bool) -> t -> bool
val filter : (key -> value -> bool) -> t -> t
val partition : (key -> value -> bool) -> t -> t * t
val cardinal : t -> int
val bindings : t -> (key * value) list
val min_binding : t -> key * value
val min_binding_opt : t -> (key * value) option
val max_binding : t -> key * value
val max_binding_opt : t -> (key * value) option
val choose : t -> key * value
val choose_opt : t -> (key * value) option
val split : key -> t -> t * value option * t
val find : key -> t -> value
val find_opt : key -> t -> value option
val find_first : (key -> bool) -> t -> key * value
val find_first_opt : (key -> bool) -> t -> (key * value) option
val find_last : (key -> bool) -> t -> key * value
val find_last_opt : (key -> bool) -> t -> (key * value) option
val map : (value -> value) -> t -> t
val mapi : (key -> value -> value) -> t -> t
val is_singleton_or_more : t -> (key * value) IStdlib.IContainer.singleton_or_more
val fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * t
val of_seq : (key * value) Stdlib.Seq.t -> t
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val pp_key : IStdlib.PrettyPrintable.F.formatter -> key -> unit
include Absint.AbstractDomain.WithBottom with type t := t
include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bottom : t

The bottom value of the domain.

val is_bottom : t -> bool

Return true if this is the bottom value

val compare : t -> t -> int
val bot : t
val make_c : AbsLoc.Allocsite.t -> offset:Itv.t -> size:Itv.t -> stride:Itv.t -> t

Make an array block for C

val make_java : AbsLoc.Allocsite.t -> length:Itv.t -> t

Make an array block for Java

val unknown : t
val get_pow_loc : t -> AbsLoc.PowLoc.t

Return all allocsites as PowLoc.t

val is_bot : t -> bool
val is_symbolic : t -> bool

Check if there is a symbolic integer value in its offset or size

val lift_cmp_itv : (Itv.t -> Itv.t -> Boolean.t) -> Boolean.EqualOrder.t -> t -> t -> Boolean.t

Lift a comparison of Itv.t and Loc.t to that of t. The comparison for Itv.t is used for integer values such as offset and size, and the comparison for Loc.t is used for allocsites.

val transform_length : f:(Itv.t -> Itv.t) -> t -> t

Apply f to all sizes

val prune_binop : IR.Binop.t -> t -> t -> t

prune_binop bop x y returns a pruned value of x by bop and y.

val prune_eq : t -> t -> t

prune_eq x y returns a pruned value of x by == y.

val prune_ne : t -> t -> t

prune_ne x y returns a pruned value of x by != y.

val prune_offset_le_size : t -> t

Prune offset by offset <= size

val minus_offset : t -> Itv.t -> t
val plus_offset : t -> Itv.t -> t
val diff : t -> t -> Itv.t

Return difference of offsets between given array blocks

val normalize : t -> t

Normalize all interval values such as offset and size in it. Thus, if an interval value is invalid, the interval value is replaced with bottom.

val subst : t -> Bounds.Bound.eval_sym -> AbsLoc.PowLoc.eval_locpath -> AbsLoc.PowLoc.t * t

Substitute symbolic abstract locations and symbolic interval value in the array block. eval_sym is to get substituted interval values and eval_locpath is to get substituted abstract locaion values. It also returns a set of abstract locations containing non-allocsite locations from the substitution results. Since the key of ArrayBlk.t is AbsLoc.Allocsite.t, they cannot be written in this domain.

val set_length : Itv.t -> t -> t
val set_offset : Itv.t -> t -> t
val set_stride : Z.t -> t -> t
val get_symbols : t -> BO.Symb.SymbolSet.t

Return all symbols for integer values in it

val get_offset : ?⁠cost_mode:bool -> t -> Itv.t

Return offset of the array block. If cost_mode is true, it returns a conservative (bigger than correct one), but not correct offset results.

val get_size : ?⁠cost_mode:bool -> t -> Itv.t

Return size of the array block. If cost_mode is true, it returns a conservative (bigger than correct one), but not correct size results.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO/BufferOverrunDomain/Mem/index.html b/website/static/odoc/next/infer/BO/BufferOverrunDomain/Mem/index.html index 81872d21a..6bc4a0996 100644 --- a/website/static/odoc/next/infer/BO/BufferOverrunDomain/Mem/index.html +++ b/website/static/odoc/next/infer/BO/BufferOverrunDomain/Mem/index.html @@ -1,2 +1,2 @@ -Mem (infer.BO.BufferOverrunDomain.Mem)

Module BufferOverrunDomain.Mem

type 'has_oenv t0 =
| Unreachable

Memory of unreachable node

| ExcRaised

Memory of node that can be reachable only with exception raises that we want to ignore

| Reachable of 'has_oenv MemReach.t0
type no_oenv_t = IStdlib.GOption.none t0

Memory type without an environment for on-demand symbol evaluation

type t = IStdlib.GOption.some t0

Memory type with an environment for on-demand symbol evaluation

val unset_oenv : t -> no_oenv_t
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val pp : Stdlib.Format.formatter -> _ t0 -> unit
val unreachable : t
type get_summary = IR.Procname.t -> no_oenv_t option
val init : get_summary -> BufferOverrunOndemandEnv.t -> t
val exc_raised : t
val is_rep_multi_loc : AbsLoc.Loc.t -> _ t0 -> bool

Check if an abstract location represents multiple concrete locations.

val is_stack_loc : AbsLoc.Loc.t -> _ t0 -> bool

Check if an abstract location is a stack variable, e.g., n$0.

val set_prune_pairs : PrunePairs.t -> t -> t
val set_latest_prune : LatestPrune.t -> t -> t
val set_first_idx_of_null : AbsLoc.Loc.t -> Val.t -> t -> t

In C string, set the index of the first null character, i.e., end of string, when called by set_first_idx_of_null loc_to_string index_value mem.

val unset_first_idx_of_null : AbsLoc.Loc.t -> Val.t -> t -> t

In C string, unset the index of the first null character, i.e., end of string, when called by unset_first_idx_of_null loc_to_string index_value mem. This is unsound because the index can be assigned as previous index + 1 that is a heuristic to keep string lengths in some loops.

val get_c_strlen : AbsLoc.PowLoc.t -> _ t0 -> Val.t

Get C string length that is set/unset by set_first_idex_of_null and unset_first_idex_of_null

val get_latest_prune : _ t0 -> LatestPrune.t
val get_reachable_locs_from : (IR.Pvar.t * IR.Typ.t) list -> BO.AbsLoc.LocSet.t -> _ t0 -> BO.AbsLoc.LocSet.t

Get reachable locations from formals and locs when called get_reachable_locs_from formals locs mem

val add_stack : ?⁠represents_multiple_values:bool -> AbsLoc.Loc.t -> Val.t -> t -> t

Add an abstract value for stack variables such as n$0

val add_stack_loc : AbsLoc.Loc.t -> t -> t
val add_heap : ?⁠represents_multiple_values:bool -> AbsLoc.Loc.t -> Val.t -> t -> t

Add an abstract value for non-stack variables

val add_heap_set : ?⁠represents_multiple_values:bool -> AbsLoc.PowLoc.t -> Val.t -> t -> t
val add_unknown : (IR.Ident.t * IR.Typ.t) -> location:IBase.Location.t -> t -> t

Add an unknown value for stack variables

val add_unknown_from : (IR.Ident.t * IR.Typ.t) -> callee_pname:IR.Procname.t -> location:IBase.Location.t -> t -> t

Add an unknown return value of callee_pname for stack variables

val remove_temps : IR.Ident.t list -> t -> t

Remove given temporary variables from the abstract memory

val find : AbsLoc.Loc.t -> _ t0 -> Val.t
val find_opt : AbsLoc.Loc.t -> _ t0 -> Val.t option
val find_set : ?⁠typ:IR.Typ.t -> AbsLoc.PowLoc.t -> _ t0 -> Val.t
val find_stack : AbsLoc.Loc.t -> _ t0 -> Val.t
val find_alias_id : IR.Ident.t -> _ t0 -> AliasTargets.t

Find aliases between given ident

val find_alias_loc : AbsLoc.Loc.t -> _ t0 -> AliasTargets.t

Find aliases between given abstract location

val find_simple_alias : IR.Ident.t -> _ t0 -> (AbsLoc.Loc.t * IR.IntLit.t) list

Find simple aliases between given ident. It returns a list of pairs of abstract locations and integer which represent aliases id == x + i.

val find_size_alias : IR.Ident.t -> _ t0 -> (AliasTarget.alias_typ * AbsLoc.Loc.t * IR.IntLit.t * AbsLoc.Loc.t option) list

Find size aliases between given ident. It returns a list of four elements, alias type == or >=, location x, integer i, java temporary variable $irvar0. This represents id == $irvar0 (== or >=) x.size() + i.

val find_ret_alias : _ t0 -> AliasRet.t Absint.AbstractDomain.Types.bottom_lifted

Find aliases bound to the return variable

val fgets_alias : IR.Ident.t -> AbsLoc.PowLoc.t -> t -> t

Set fgets alias between an ident and an abstract location

val apply_latest_prune : IR.Exp.t -> t -> t * PrunePairs.t

Apply latest_prunes when given e : Exp.t is true. It returns pruned memory and pairs of pruned locations and values.

val load_alias : IR.Ident.t -> AbsLoc.Loc.t -> AliasTarget.t -> t -> t

Add an alias between ident and abstract location with given alias target

val load_empty_alias : IR.Ident.t -> AbsLoc.Loc.t -> t -> t

Add an empty alias between ident and abstract location, i.e., ident == loc.empty()

val load_simple_alias : IR.Ident.t -> AbsLoc.Loc.t -> t -> t

Add a simple alias between ident and abstract location, i.e., ident == loc

val load_size_alias : IR.Ident.t -> AbsLoc.Loc.t -> t -> t

Add a size alias between ident and abstract location, i.e., ident == loc.size()

val store_simple_alias : AbsLoc.Loc.t -> IR.Exp.t -> t -> t

Add a simple alias between abstract location and expression, i.e., loc == exp

val forget_size_alias : AbsLoc.PowLoc.t -> t -> t

Forget size aliases of given locs

val incr_size_alias : AbsLoc.PowLoc.t -> t -> t

Update size aliases when the size of loc is increased by one. For example if there was an alias ident == loc.size() + i, this changes it to ident == loc.size() + i - 1, since loc.size() has been increased.

val incr_or_not_size_alias : AbsLoc.PowLoc.t -> t -> t

Update size aliases when the size of loc may be increased by one. For example if there was an alias ident == loc.size() + i, this changes it to ident >= loc.size() + i - 1

val add_iterator_has_next_alias : IR.Ident.t -> IR.Exp.t -> t -> t

Add an AliasTarget.IteratorHasNext alias when ident = iterator.hasNext() is called

val add_iterator_next_object_alias : IR.Ident.t -> IR.Exp.t -> t -> t

Add an AliasTarget.IteratorNextObject alias when ident = iterator.nextObject() is called

val incr_iterator_simple_alias_on_call : eval_sym_trace -> callee_exit_mem:no_oenv_t -> t -> t

Update AliasTarget.IteratorSimple alias at function calls

val add_iterator_alias : IR.Ident.t -> t -> t

Add AliasTarget.IteratorSimple and AliasTarget.IteratorOffset aliases when Iteratable.iterator() is called

val add_iterator_alias_objc : IR.Ident.t -> t -> t
val incr_iterator_offset_alias : IR.Exp.t -> t -> t

Update iterator offset alias when iterator.next() is called

val update_mem : AbsLoc.PowLoc.t -> Val.t -> t -> t

Add a map from locations to a value. If the given set of locations is a singleton set and the only element represents one concrete abstract location, it does strong update. Otherwise, weak update.

val strong_update : AbsLoc.PowLoc.t -> Val.t -> t -> t
val update_latest_prune : updated_locs:AbsLoc.PowLoc.t -> IR.Exp.t -> IR.Exp.t -> t -> t

Update latest prunes when store(x,1) or store(x,0) is called after assume statement

val forget_unreachable_locs : formals:(IR.Pvar.t * IR.Typ.t) list -> t -> t

Forget unreachable locations from formals

val transform_mem : f:(Val.t -> Val.t) -> AbsLoc.PowLoc.t -> t -> t

Apply f to values bound to given locs

\ No newline at end of file +Mem (infer.BO.BufferOverrunDomain.Mem)

Module BufferOverrunDomain.Mem

type 'has_oenv t0 =
| Unreachable

Memory of unreachable node

| ExcRaised

Memory of node that can be reachable only with exception raises that we want to ignore

| Reachable of 'has_oenv MemReach.t0
type no_oenv_t = IStdlib.GOption.none t0

Memory type without an environment for on-demand symbol evaluation

type t = IStdlib.GOption.some t0

Memory type with an environment for on-demand symbol evaluation

val unset_oenv : t -> no_oenv_t
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val pp : Stdlib.Format.formatter -> _ t0 -> unit
val unreachable : t
type get_summary = IR.Procname.t -> no_oenv_t option
val init : get_summary -> BufferOverrunOndemandEnv.t -> t
val exc_raised : t
val is_rep_multi_loc : AbsLoc.Loc.t -> _ t0 -> bool

Check if an abstract location represents multiple concrete locations.

val is_stack_loc : AbsLoc.Loc.t -> _ t0 -> bool

Check if an abstract location is a stack variable, e.g., n$0.

val set_prune_pairs : PrunePairs.t -> t -> t
val set_latest_prune : LatestPrune.t -> t -> t
val set_first_idx_of_null : AbsLoc.Loc.t -> Val.t -> t -> t

In C string, set the index of the first null character, i.e., end of string, when called by set_first_idx_of_null loc_to_string index_value mem.

val unset_first_idx_of_null : AbsLoc.Loc.t -> Val.t -> t -> t

In C string, unset the index of the first null character, i.e., end of string, when called by unset_first_idx_of_null loc_to_string index_value mem. This is unsound because the index can be assigned as previous index + 1 that is a heuristic to keep string lengths in some loops.

val get_c_strlen : AbsLoc.PowLoc.t -> _ t0 -> Val.t

Get C string length that is set/unset by set_first_idex_of_null and unset_first_idex_of_null

val get_latest_prune : _ t0 -> LatestPrune.t
val get_reachable_locs_from : (IR.Pvar.t * IR.Typ.t) list -> BO.AbsLoc.LocSet.t -> _ t0 -> BO.AbsLoc.LocSet.t

Get reachable locations from formals and locs when called get_reachable_locs_from formals locs mem

val add_stack : ?⁠represents_multiple_values:bool -> AbsLoc.Loc.t -> Val.t -> t -> t

Add an abstract value for stack variables such as n$0

val add_stack_loc : AbsLoc.Loc.t -> t -> t
val add_heap : ?⁠represents_multiple_values:bool -> AbsLoc.Loc.t -> Val.t -> t -> t

Add an abstract value for non-stack variables

val add_heap_set : ?⁠represents_multiple_values:bool -> AbsLoc.PowLoc.t -> Val.t -> t -> t
val add_unknown : (IR.Ident.t * IR.Typ.t) -> location:IBase.Location.t -> t -> t

Add an unknown value for stack variables

val add_unknown_from : (IR.Ident.t * IR.Typ.t) -> callee_pname:IR.Procname.t -> location:IBase.Location.t -> t -> t

Add an unknown return value of callee_pname for stack variables

val remove_temps : IR.Ident.t list -> t -> t

Remove given temporary variables from the abstract memory

val find : AbsLoc.Loc.t -> _ t0 -> Val.t
val find_opt : AbsLoc.Loc.t -> _ t0 -> Val.t option
val find_set : ?⁠typ:IR.Typ.t -> AbsLoc.PowLoc.t -> _ t0 -> Val.t
val find_stack : AbsLoc.Loc.t -> _ t0 -> Val.t
val find_alias_id : IR.Ident.t -> _ t0 -> AliasTargets.t

Find aliases between given ident

val find_alias_loc : AbsLoc.Loc.t -> _ t0 -> AliasTargets.t

Find aliases between given abstract location

val find_simple_alias : IR.Ident.t -> _ t0 -> (AbsLoc.Loc.t * IR.IntLit.t) list

Find simple aliases between given ident. It returns a list of pairs of abstract locations and integer which represent aliases id == x + i.

val find_size_alias : IR.Ident.t -> _ t0 -> (AliasTarget.alias_typ * AbsLoc.Loc.t * IR.IntLit.t * AbsLoc.Loc.t option) list

Find size aliases between given ident. It returns a list of four elements, alias type == or >=, location x, integer i, java temporary variable $irvar0. This represents id == $irvar0 (== or >=) x.size() + i.

val find_ret_alias : _ t0 -> AliasRet.t Absint.AbstractDomain.Types.bottom_lifted

Find aliases bound to the return variable

val fgets_alias : IR.Ident.t -> AbsLoc.PowLoc.t -> t -> t

Set fgets alias between an ident and an abstract location

val apply_latest_prune : IR.Exp.t -> t -> t * PrunePairs.t

Apply latest_prunes when given e : Exp.t is true. It returns pruned memory and pairs of pruned locations and values.

val load_alias : IR.Ident.t -> AbsLoc.Loc.t -> AliasTarget.t -> t -> t

Add an alias between ident and abstract location with given alias target

val load_empty_alias : IR.Ident.t -> AbsLoc.Loc.t -> t -> t

Add an empty alias between ident and abstract location, i.e., ident == loc.empty()

val load_simple_alias : IR.Ident.t -> AbsLoc.Loc.t -> t -> t

Add a simple alias between ident and abstract location, i.e., ident == loc

val load_size_alias : IR.Ident.t -> AbsLoc.Loc.t -> t -> t

Add a size alias between ident and abstract location, i.e., ident == loc.size()

val store_simple_alias : AbsLoc.Loc.t -> IR.Exp.t -> t -> t

Add a simple alias between abstract location and expression, i.e., loc == exp

val forget_size_alias : AbsLoc.PowLoc.t -> t -> t

Forget size aliases of given locs

val incr_size_alias : AbsLoc.PowLoc.t -> t -> t

Update size aliases when the size of loc is increased by one. For example if there was an alias ident == loc.size() + i, this changes it to ident == loc.size() + i - 1, since loc.size() has been increased.

val incr_or_not_size_alias : AbsLoc.PowLoc.t -> t -> t

Update size aliases when the size of loc may be increased by one. For example if there was an alias ident == loc.size() + i, this changes it to ident >= loc.size() + i - 1

val add_iterator_has_next_alias : IR.Ident.t -> IR.Exp.t -> t -> t

Add an AliasTarget.IteratorHasNext alias when ident = iterator.hasNext() is called

val add_iterator_next_object_alias : ret_id:IR.Ident.t -> iterator:IR.Ident.t -> t -> t

Add an AliasTarget.IteratorNextObject alias when ident = iterator.nextObject() is called

val incr_iterator_simple_alias_on_call : eval_sym_trace -> callee_exit_mem:no_oenv_t -> t -> t

Update AliasTarget.IteratorSimple alias at function calls

val add_iterator_alias : IR.Ident.t -> t -> t

Add AliasTarget.IteratorSimple and AliasTarget.IteratorOffset aliases when Iteratable.iterator() is called

val incr_iterator_offset_alias : IR.Exp.t -> t -> t

Update iterator offset alias when iterator.next() is called

val update_mem : AbsLoc.PowLoc.t -> Val.t -> t -> t

Add a map from locations to a value. If the given set of locations is a singleton set and the only element represents one concrete abstract location, it does strong update. Otherwise, weak update.

val strong_update : AbsLoc.PowLoc.t -> Val.t -> t -> t
val update_latest_prune : updated_locs:AbsLoc.PowLoc.t -> IR.Exp.t -> IR.Exp.t -> t -> t

Update latest prunes when store(x,1) or store(x,0) is called after assume statement

val forget_unreachable_locs : formals:(IR.Pvar.t * IR.Typ.t) list -> t -> t

Forget unreachable locations from formals

val transform_mem : f:(Val.t -> Val.t) -> AbsLoc.PowLoc.t -> t -> t

Apply f to values bound to given locs

\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO/BufferOverrunDomain/Val/index.html b/website/static/odoc/next/infer/BO/BufferOverrunDomain/Val/index.html index a85fd8476..5928c80ad 100644 --- a/website/static/odoc/next/infer/BO/BufferOverrunDomain/Val/index.html +++ b/website/static/odoc/next/infer/BO/BufferOverrunDomain/Val/index.html @@ -1,2 +1,2 @@ -Val (infer.BO.BufferOverrunDomain.Val)

Module BufferOverrunDomain.Val

type t = {
itv : Itv.t;

Interval

itv_thresholds : ItvThresholds.t;
itv_updated_by : ItvUpdatedBy.t;
modeled_range : ModeledRange.t;
powloc : AbsLoc.PowLoc.t;

Simple pointers

arrayblk : ArrayBlk.t;

Array blocks

func_ptrs : BO.FuncPtr.Set.t;

Function pointers

traces : BufferOverrunTrace.Set.t;
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bot : t
val of_big_int : ItvThresholds.elt -> t
val of_c_array_alloc : AbsLoc.Allocsite.t -> stride:int option -> offset:Itv.t -> size:Itv.t -> traces:BufferOverrunTrace.Set.t -> t

Construct C array allocation. stride is a byte size of cell, offset is initial offset of pointer which is usually zero, and size is a total number of cells.

val of_java_array_alloc : AbsLoc.Allocsite.t -> length:Itv.t -> traces:BufferOverrunTrace.Set.t -> t

Construct Java array allocation. size is a total number of cells

val of_int : int -> t
val of_int_lit : IR.IntLit.t -> t
val of_itv : ?⁠traces:BufferOverrunTrace.Set.t -> Itv.t -> t
val of_literal_string : IR.Typ.IntegerWidths.t -> string -> t
val of_loc : ?⁠traces:BufferOverrunTrace.Set.t -> AbsLoc.Loc.t -> t
val of_pow_loc : traces:BufferOverrunTrace.Set.t -> AbsLoc.PowLoc.t -> t
val of_func_ptrs : BO.FuncPtr.Set.t -> t
val unknown_locs : t
val unknown_from : IR.Typ.t -> callee_pname:IR.Procname.t option -> location:IBase.Location.t -> t

Unknown return value of callee_pname

val is_bot : t -> bool

Check if the value is bottom

val is_mone : t -> bool

Check if the value is [-1,-1]

val array_sizeof : t -> Itv.t

Get array size

val get_all_locs : t -> AbsLoc.PowLoc.t

Get all locations, including pointers and array blocks

val get_array_locs : t -> AbsLoc.PowLoc.t

Get locations of array blocks

val get_array_blk : t -> ArrayBlk.t
val get_range_of_iterator : t -> t

Get a range of an iterator value, for example, if iterator value is [lb,ub], it returns [0,ub].

val get_itv : t -> Itv.t
val get_modeled_range : t -> ModeledRange.t
val get_pow_loc : t -> AbsLoc.PowLoc.t
val get_func_ptrs : t -> BO.FuncPtr.Set.t
val get_traces : t -> BufferOverrunTrace.Set.t
val set_array_length : IBase.Location.t -> length:t -> t -> t
val set_array_offset : IBase.Location.t -> Itv.t -> t -> t
val set_array_stride : Z.t -> t -> t
val set_itv_updated_by_addition : t -> t
val set_itv_updated_by_multiplication : t -> t
val set_itv_updated_by_unknown : t -> t
val set_modeled_range : ModeledRange.t -> t -> t
val (lnot) : t -> t
val neg : t -> t
val plus_a : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t

Semantics of Binop.PlusA. f_trace merges traces of the operands. If f_trace is not given, it uses a default heuristic merge function.

val plus_pi : t -> t -> t
val minus_a : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val minus_pi : t -> t -> t
val minus_pp : t -> t -> t
val mult : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val div : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val mod_sem : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftlt : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftrt : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val lt_sem : t -> t -> t
val gt_sem : t -> t -> t
val le_sem : t -> t -> t
val ge_sem : t -> t -> t
val eq_sem : t -> t -> t
val ne_sem : t -> t -> t
val band_sem : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val land_sem : t -> t -> t
val lor_sem : t -> t -> t
val unknown_bit : t -> t

Semantic function for some bit operators which are hard to express in the domain, e.g., Unop.BNot.

val prune_eq : t -> t -> t

Pruning semantics for Binop.Eq. This prunes value of x when given x == y, i.e., prune_eq x y.

val prune_ne : t -> t -> t

Pruning semantics for Binop.Ne. This prunes value of x when given x != y, i.e., prune_ne x y.

val prune_lt : t -> t -> t

Pruning semantics for Binop.Lt. This prunes value of x when given x < y, i.e., prune_lt x y.

val prune_le : t -> t -> t

Pruning semantics for Binop.Lt. This prunes value of x when given x <= y, i.e., prune_le x y.

val prune_ne_zero : t -> t

Prune value of x when given x != 0

val prune_eq_zero : t -> t

Prune value of x when given x == 0

val prune_ge_one : t -> t

Prune value of x when given x >= 1

val prune_length_lt : t -> Itv.t -> t

Prune length of x when given x.length() < i

val prune_length_le : t -> Itv.t -> t

Prune length of x when given x.length() <= i

val prune_length_eq : t -> Itv.t -> t

Prune length of x when given x.length() == i

val prune_length_eq_zero : t -> t

Prune length of x when given x.length() == 0

val prune_length_ge_one : t -> t

Prune length of x when given x.length() >= 1

val prune_binop : IR.Binop.t -> t -> t -> t

Prune value of x when given x bop y, i.e., prune_binop bop x y

val add_assign_trace_elem : IBase.Location.t -> AbsLoc.PowLoc.t -> t -> t

Add assign trace for given abstract locations

val cast : IR.Typ.t -> t -> t

Semantics of cast. This updates type information in pointer values, rather than re-calculating sizes of array blocks.

val subst : t -> eval_sym_trace -> IBase.Location.t -> t

Substitution of symbols in the value

val transform_array_length : IBase.Location.t -> f:(Itv.t -> Itv.t) -> t -> t

Apply f on array lengths in the value

module Itv : sig ... end
\ No newline at end of file +Val (infer.BO.BufferOverrunDomain.Val)

Module BufferOverrunDomain.Val

type t = {
itv : Itv.t;

Interval

itv_thresholds : ItvThresholds.t;
itv_updated_by : ItvUpdatedBy.t;
modeled_range : ModeledRange.t;
powloc : AbsLoc.PowLoc.t;

Simple pointers

arrayblk : ArrayBlk.t;

Array blocks

func_ptrs : BO.FuncPtr.Set.t;

Function pointers

traces : BufferOverrunTrace.Set.t;
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bot : t
val of_big_int : ItvThresholds.elt -> t
val of_c_array_alloc : AbsLoc.Allocsite.t -> stride:int option -> offset:Itv.t -> size:Itv.t -> traces:BufferOverrunTrace.Set.t -> t

Construct C array allocation. stride is a byte size of cell, offset is initial offset of pointer which is usually zero, and size is a total number of cells.

val of_java_array_alloc : AbsLoc.Allocsite.t -> length:Itv.t -> traces:BufferOverrunTrace.Set.t -> t

Construct Java array allocation. size is a total number of cells

val of_int : int -> t
val of_int_lit : IR.IntLit.t -> t
val of_itv : ?⁠traces:BufferOverrunTrace.Set.t -> Itv.t -> t
val of_literal_string : IR.Typ.IntegerWidths.t -> string -> t
val of_loc : ?⁠traces:BufferOverrunTrace.Set.t -> AbsLoc.Loc.t -> t
val of_pow_loc : traces:BufferOverrunTrace.Set.t -> AbsLoc.PowLoc.t -> t
val of_func_ptrs : BO.FuncPtr.Set.t -> t
val unknown_locs : t
val unknown_from : IR.Typ.t -> callee_pname:IR.Procname.t option -> location:IBase.Location.t -> t

Unknown return value of callee_pname

val is_bot : t -> bool

Check if the value is bottom

val is_mone : t -> bool

Check if the value is [-1,-1]

val array_sizeof : t -> Itv.t

Get array size

val get_all_locs : t -> AbsLoc.PowLoc.t

Get all locations, including pointers and array blocks

val get_array_locs : t -> AbsLoc.PowLoc.t

Get locations of array blocks

val get_array_blk : t -> ArrayBlk.t
val get_range_of_iterator : t -> t

Get a range of an iterator value, for example, if iterator value is [lb,ub], it returns [0,ub].

val get_itv : t -> Itv.t
val get_modeled_range : t -> ModeledRange.t
val get_pow_loc : t -> AbsLoc.PowLoc.t
val get_func_ptrs : t -> BO.FuncPtr.Set.t
val get_traces : t -> BufferOverrunTrace.Set.t
val set_array_length : IBase.Location.t -> length:t -> t -> t
val set_array_offset : IBase.Location.t -> Itv.t -> t -> t
val set_array_stride : Z.t -> t -> t
val set_itv_updated_by_addition : t -> t
val set_itv_updated_by_multiplication : t -> t
val set_itv_updated_by_unknown : t -> t
val set_modeled_range : ModeledRange.t -> t -> t
val (lnot) : t -> t
val neg : t -> t
val plus_a : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t

Semantics of Binop.PlusA. f_trace merges traces of the operands. If f_trace is not given, it uses a default heuristic merge function.

val plus_pi : t -> t -> t
val minus_a : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val minus_pi : t -> t -> t
val minus_pp : t -> t -> t
val mult : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val div : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val mod_sem : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftlt : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftrt : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val lt_sem : t -> t -> t
val gt_sem : t -> t -> t
val le_sem : t -> t -> t
val ge_sem : t -> t -> t
val eq_sem : t -> t -> t
val ne_sem : t -> t -> t
val band_sem : ?⁠f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val land_sem : t -> t -> t
val lor_sem : t -> t -> t
val unknown_bit : t -> t

Semantic function for some bit operators which are hard to express in the domain, e.g., Unop.BNot.

val prune_eq : t -> t -> t

Pruning semantics for Binop.Eq. This prunes value of x when given x == y, i.e., prune_eq x y.

val prune_ne : t -> t -> t

Pruning semantics for Binop.Ne. This prunes value of x when given x != y, i.e., prune_ne x y.

val prune_lt : t -> t -> t

Pruning semantics for Binop.Lt. This prunes value of x when given x < y, i.e., prune_lt x y.

val prune_ne_zero : t -> t

Prune value of x when given x != 0

val prune_eq_zero : t -> t

Prune value of x when given x == 0

val prune_ge_one : t -> t

Prune value of x when given x >= 1

val prune_length_lt : t -> Itv.t -> t

Prune length of x when given x.length() < i

val prune_length_le : t -> Itv.t -> t

Prune length of x when given x.length() <= i

val prune_length_eq : t -> Itv.t -> t

Prune length of x when given x.length() == i

val prune_length_eq_zero : t -> t

Prune length of x when given x.length() == 0

val prune_length_ge_one : t -> t

Prune length of x when given x.length() >= 1

val prune_binop : IR.Binop.t -> t -> t -> t

Prune value of x when given x bop y, i.e., prune_binop bop x y

val add_assign_trace_elem : IBase.Location.t -> AbsLoc.PowLoc.t -> t -> t

Add assign trace for given abstract locations

val cast : IR.Typ.t -> t -> t

Semantics of cast. This updates type information in pointer values, rather than re-calculating sizes of array blocks.

val subst : t -> eval_sym_trace -> IBase.Location.t -> t

Substitution of symbols in the value

val transform_array_length : IBase.Location.t -> f:(Itv.t -> Itv.t) -> t -> t

Apply f on array lengths in the value

module Itv : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO/BufferOverrunSemantics/index.html b/website/static/odoc/next/infer/BO/BufferOverrunSemantics/index.html index c7753cd9c..ff8c7ef35 100644 --- a/website/static/odoc/next/infer/BO/BufferOverrunSemantics/index.html +++ b/website/static/odoc/next/infer/BO/BufferOverrunSemantics/index.html @@ -1,2 +1,2 @@ -BufferOverrunSemantics (infer.BO.BufferOverrunSemantics)

Module BO.BufferOverrunSemantics

val is_stack_exp : IR.Exp.t -> BufferOverrunDomain.Mem.t -> bool

Check if an expression is a stack variable such as n$0 or local variable for C array

val eval : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BufferOverrunDomain.Mem.t -> BufferOverrunDomain.Val.t

Evalute an expression

val eval_locs : IR.Exp.t -> BufferOverrunDomain.Mem.t -> AbsLoc.PowLoc.t

eval_locs exp mem is like eval exp mem |> Val.get_all_locs but takes some shortcuts to avoid computing useless and/or problematic intermediate values

val eval_arr : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BufferOverrunDomain.Mem.t -> BufferOverrunDomain.Val.t

Return the array value of the input expression. For example, when x is a program variable, eval_arr x returns array blocks the x is pointing to, on the other hand, eval x returns the abstract location of x.

val eval_lindex : IR.Typ.IntegerWidths.t -> IR.Exp.t -> IR.Exp.t -> BufferOverrunDomain.Mem.t -> BufferOverrunDomain.Val.t

Evaluate array location with index, i.e., eval_lindex integer_type_widths array_exp index_exp mem

val eval_array_locs_length : AbsLoc.PowLoc.t -> _ BufferOverrunDomain.Mem.t0 -> BufferOverrunDomain.Val.t

Evaluate length of array locations

val eval_string_len : IR.Exp.t -> BufferOverrunDomain.Mem.t -> BufferOverrunDomain.Val.t

Evaluate length of C string

val conservative_array_length : ?⁠traces:BufferOverrunTrace.Set.t -> AbsLoc.PowLoc.t -> _ BufferOverrunDomain.Mem.t0 -> BufferOverrunDomain.Val.t

Evaluate the array length conservatively, which is useful when there are multiple array locations and their lengths are joined to top. For example, if the arr_locs points to two arrays a and b and if their lengths are a.length and b.length, this function evaluates its length as [0, a.length.ub + b.length.ub].

type eval_mode =
| EvalNormal

Given a symbolic value of an unknown function Symb.SymbolPath.Callsite, it returns a symbolic interval value.

| EvalPOCond

Given a symbolic value of an unknown function, it returns the top interval value. This is used when substituting condition expressions of proof obligations.

| EvalPOReachability

This is similar to EvalPOCond, but it returns the bottom location, instead of the unknown location, when a location to substitute is not found. This is used when substituting reachabilities of proof obligations.

| EvalCost

This is similar to EvalNormal, but it is designed to be used in substitutions of the cost results, avoiding precision loss by joining of symbolic values. Normal join of two different symbolic values, s1 and s2, becomes top due to the limitation of our domain. On the other hand, in this mode, it returns an upperbound s1+s2 for the case, because the cost values only care about the upperbounds.

Several modes of ondemand evaluations

val mk_eval_sym_trace : ?⁠is_params_ref:bool -> IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BufferOverrunDomain.Mem.t -> mode:eval_mode -> BufferOverrunDomain.eval_sym_trace

Make eval_sym function for on-demand symbol evaluation

val mk_eval_sym_cost : IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BufferOverrunDomain.Mem.t -> Bounds.Bound.eval_sym

Make eval_sym function of EvalCost mode for on-demand symbol evaluation

module Prune : sig ... end
\ No newline at end of file +BufferOverrunSemantics (infer.BO.BufferOverrunSemantics)

Module BO.BufferOverrunSemantics

val is_stack_exp : IR.Exp.t -> BufferOverrunDomain.Mem.t -> bool

Check if an expression is a stack variable such as n$0 or local variable for C array

val eval : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BufferOverrunDomain.Mem.t -> BufferOverrunDomain.Val.t

Evalute an expression

val eval_locs : IR.Exp.t -> BufferOverrunDomain.Mem.t -> AbsLoc.PowLoc.t

eval_locs exp mem is like eval exp mem |> Val.get_all_locs but takes some shortcuts to avoid computing useless and/or problematic intermediate values

val eval_arr : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BufferOverrunDomain.Mem.t -> BufferOverrunDomain.Val.t

Return the array value of the input expression. For example, when x is a program variable, eval_arr x returns array blocks the x is pointing to, on the other hand, eval x returns the abstract location of x.

val eval_lindex : IR.Typ.IntegerWidths.t -> IR.Exp.t -> IR.Exp.t -> BufferOverrunDomain.Mem.t -> BufferOverrunDomain.Val.t

Evaluate array location with index, i.e., eval_lindex integer_type_widths array_exp index_exp mem

val eval_array_locs_length : AbsLoc.PowLoc.t -> _ BufferOverrunDomain.Mem.t0 -> BufferOverrunDomain.Val.t

Evaluate length of array locations

val eval_string_len : IR.Exp.t -> BufferOverrunDomain.Mem.t -> BufferOverrunDomain.Val.t

Evaluate length of C string

val conservative_array_length : ?⁠traces:BufferOverrunTrace.Set.t -> AbsLoc.PowLoc.t -> _ BufferOverrunDomain.Mem.t0 -> BufferOverrunDomain.Val.t

Evaluate the array length conservatively, which is useful when there are multiple array locations and their lengths are joined to top. For example, if the arr_locs points to two arrays a and b and if their lengths are a.length and b.length, this function evaluates its length as [0, a.length.ub + b.length.ub].

type eval_mode =
| EvalNormal

Given a symbolic value of an unknown function Symb.SymbolPath.Callsite, it returns a symbolic interval value.

| EvalPOCond

Given a symbolic value of an unknown function, it returns the top interval value. This is used when substituting condition expressions of proof obligations.

| EvalPOReachability

This is similar to EvalPOCond, but it returns the bottom location, instead of the unknown location, when a location to substitute is not found. This is used when substituting reachabilities of proof obligations.

| EvalCost

This is similar to EvalNormal, but it is designed to be used in substitutions of the cost results, avoiding precision loss by joining of symbolic values. Normal join of two different symbolic values, s1 and s2, becomes top due to the limitation of our domain. On the other hand, in this mode, it returns an upperbound s1+s2 for the case, because the cost values only care about the upperbounds.

Several modes of ondemand evaluations

val mk_eval_sym_trace : ?⁠is_params_ref:bool -> IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BufferOverrunDomain.Mem.t -> mode:eval_mode -> BufferOverrunDomain.eval_sym_trace

Make eval_sym function for on-demand symbol evaluation

val mk_eval_sym_cost : IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BufferOverrunDomain.Mem.t -> BufferOverrunDomain.eval_sym_trace

Make eval_sym function of EvalCost mode for on-demand symbol evaluation

module Prune : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO/Polynomials/NonNegativePolynomial/index.html b/website/static/odoc/next/infer/BO/Polynomials/NonNegativePolynomial/index.html index cff542671..557e2ed2c 100644 --- a/website/static/odoc/next/infer/BO/Polynomials/NonNegativePolynomial/index.html +++ b/website/static/odoc/next/infer/BO/Polynomials/NonNegativePolynomial/index.html @@ -1,2 +1,2 @@ -NonNegativePolynomial (infer.BO.Polynomials.NonNegativePolynomial)

Module Polynomials.NonNegativePolynomial

include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
type degree_with_term = (UnreachableTraces.tDegree.t * NonNegativeNonTopPolynomial.tTopTraces.t) Absint.AbstractDomain.Types.below_above
val pp_hum : Stdlib.Format.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val top : t
val of_unreachable : IBase.Location.t -> t
val zero : t
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val of_int_exn : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> int -> t
val is_symbolic : t -> bool
val is_top : t -> bool
val is_unreachable : t -> bool
val is_zero : t -> bool
val is_one : t -> bool
val of_non_negative_bound : ?⁠degree_kind:DegreeKind.t -> Bounds.NonNegativeBound.t -> t
val plus : t -> t -> t
val mult_unreachable : t -> t -> t

if one of the operands is unreachable, the result is unreachable

val mult : t -> t -> t
val mult_loop : iter:t -> body:t -> t
val min_default_left : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> Bounds.Bound.eval_sym -> t
val degree : t -> Degree.t option
val degree_str : t -> string
val compare_by_degree : t -> t -> int
val pp_degree : only_bigO:bool -> Stdlib.Format.formatter -> degree_with_term -> unit
val polynomial_traces : ?⁠is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val encode : t -> string
val decode : string -> t
val get_degree_with_term : t -> degree_with_term
\ No newline at end of file +NonNegativePolynomial (infer.BO.Polynomials.NonNegativePolynomial)

Module Polynomials.NonNegativePolynomial

include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
type degree_with_term = (UnreachableTraces.tDegree.t * NonNegativeNonTopPolynomial.tTopTraces.t) Absint.AbstractDomain.Types.below_above
val pp_hum : Stdlib.Format.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val top : t
val of_unreachable : IBase.Location.t -> t
val zero : t
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val of_int_exn : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> int -> t
val is_symbolic : t -> bool
val is_top : t -> bool
val is_unreachable : t -> bool
val is_zero : t -> bool
val is_one : t -> bool
val of_non_negative_bound : ?⁠degree_kind:DegreeKind.t -> Bounds.NonNegativeBound.t -> t
val of_func_ptr : Symb.SymbolPath.partial -> t
val plus : t -> t -> t
val mult_unreachable : t -> t -> t

if one of the operands is unreachable, the result is unreachable

val mult : t -> t -> t
val mult_loop : iter:t -> body:t -> t
val min_default_left : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> Bounds.Bound.eval_sym -> FuncPtr.Set.eval_func_ptrs -> (IR.Procname.t -> t option) -> default_closure_cost:Ints.NonNegativeInt.t -> t
val degree : t -> Degree.t option
val degree_str : t -> string
val compare_by_degree : t -> t -> int
val pp_degree : only_bigO:bool -> Stdlib.Format.formatter -> degree_with_term -> unit
val polynomial_traces : ?⁠is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val encode : t -> string
val decode : string -> t
val get_degree_with_term : t -> degree_with_term
\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO__AbsLoc/Loc/index.html b/website/static/odoc/next/infer/BO__AbsLoc/Loc/index.html index cab5e7b9b..00129c2fc 100644 --- a/website/static/odoc/next/infer/BO__AbsLoc/Loc/index.html +++ b/website/static/odoc/next/infer/BO__AbsLoc/Loc/index.html @@ -1,2 +1,2 @@ -Loc (infer.BO__AbsLoc.Loc)

Module BO__AbsLoc.Loc

type prim = private
| Var of IR.Var.t
| Allocsite of Allocsite.t
val compare_prim : prim -> prim -> int
type t = prim BO.BufferOverrunField.t
val compare : t -> t -> int
val equal : t -> t -> bool
include IStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t := t
include IStdlib.IStd.Caml.Set.OrderedType
type t
val compare : t -> t -> int
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val of_allocsite : Allocsite.t -> t
val of_c_strlen : t -> t

It appends the strlen field.

val of_id : IR.Ident.t -> t
val of_path : BO.Symb.SymbolPath.partial -> t
val of_pvar : IR.Pvar.t -> t
val of_var : IR.Var.t -> t
val unknown : t
val exists_pvar : f:(IR.Pvar.t -> bool) -> t -> bool

It checks if a pvar in location satisfies f.

val exists_str : f:(string -> bool) -> t -> bool

It checks if a variable or a field name in the location path satisfies f.

val get_literal_string : t -> string option
val get_literal_string_strlen : t -> string option
val get_path : t -> BO.Symb.SymbolPath.partial option
val is_field_of : loc:t -> field_loc:t -> bool

It checks if loc is prefix of field_loc.

val is_frontend_tmp : t -> bool
val is_global : t -> bool
val get_global_array_initializer : t -> IR.Procname.t option

Return the name of global initializer when given abstract location represents a global constant array value

val is_pretty : t -> bool

It checks if it is representable with pretty form, e.g., with a path or with a variable name.

val is_return : t -> bool
val is_unknown : t -> bool
val represents_multiple_values : t -> bool
val is_objc_collection_internal_array : t -> bool
val append_field : ?⁠typ:IR.Typ.typ -> t -> IR.Fieldname.t -> t

It appends field. typ is the type of fn.

\ No newline at end of file +Loc (infer.BO__AbsLoc.Loc)

Module BO__AbsLoc.Loc

type prim = private
| Var of IR.Var.t
| Allocsite of Allocsite.t
val compare_prim : prim -> prim -> int
type t = prim BO.BufferOverrunField.t
val compare : t -> t -> int
val equal : t -> t -> bool
include IStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t := t
include IStdlib.IStd.Caml.Set.OrderedType
type t
val compare : t -> t -> int
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val of_allocsite : Allocsite.t -> t
val of_c_strlen : t -> t

It appends the strlen field.

val of_id : IR.Ident.t -> t
val of_path : BO.Symb.SymbolPath.partial -> t
val of_pvar : IR.Pvar.t -> t
val of_var : IR.Var.t -> t
val unknown : t
val exists_pvar : f:(IR.Pvar.t -> bool) -> t -> bool

It checks if a pvar in location satisfies f.

val exists_str : f:(string -> bool) -> t -> bool

It checks if a variable or a field name in the location path satisfies f.

val get_literal_string : t -> string option
val get_literal_string_strlen : t -> string option
val get_path : t -> BO.Symb.SymbolPath.partial option
val is_field_of : loc:t -> field_loc:t -> bool

It checks if loc is prefix of field_loc.

val is_frontend_tmp : t -> bool
val is_global : t -> bool
val get_global_array_initializer : t -> IR.Procname.t option

Return the name of global initializer when given abstract location represents a global constant array value

val is_pretty : t -> bool

It checks if it is representable with pretty form, e.g., with a path or with a variable name.

val is_return : t -> bool
val is_unknown : t -> bool
val represents_multiple_values : t -> bool
val is_objc_collection_internal_array : t -> bool
val append_field : ?⁠typ:IR.Typ.t -> t -> IR.Fieldname.t -> t

It appends field. typ is the type of fn.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO__AbsLoc/PowLoc/index.html b/website/static/odoc/next/infer/BO__AbsLoc/PowLoc/index.html index 1e7cdec57..aa208b178 100644 --- a/website/static/odoc/next/infer/BO__AbsLoc/PowLoc/index.html +++ b/website/static/odoc/next/infer/BO__AbsLoc/PowLoc/index.html @@ -1,2 +1,2 @@ -PowLoc (infer.BO__AbsLoc.PowLoc)

Module BO__AbsLoc.PowLoc

include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val compare : t -> t -> int
val get_parent_field : t -> t
val append_field : t -> fn:IR.Fieldname.t -> t
val append_star_field : t -> fn:IR.Fieldname.t -> t
val bot : t
val add : Loc.t -> t -> t
val exists : (Loc.t -> bool) -> t -> bool
val mem : Loc.t -> t -> bool
val is_singleton_or_more : t -> Loc.t IStdlib.IContainer.singleton_or_more
val min_elt_opt : t -> Loc.t option
val singleton : Loc.t -> t
val fold : (Loc.t -> 'a -> 'a) -> t -> 'a -> 'a
val cast : IR.Typ.typ -> t -> t
val of_c_strlen : t -> t

It appends the strlen field.

val unknown : t
val exists_str : f:(string -> bool) -> t -> bool

It checks if a variable or a field name in the location path satisfies f.

val is_bot : t -> bool
type eval_locpath = BO.Symb.SymbolPath.partial -> t

Type for evaluating a path to an abstract location.

val subst : t -> eval_locpath -> t

It substitutes paths in the abstract location using eval_locpath.

val subst_loc : Loc.t -> eval_locpath -> t

It substitutes paths in the abstract location using eval_locpath.

val lift_cmp : BO.Boolean.EqualOrder.t -> t -> t -> BO.Boolean.t

It lifts a comparison of Loc.t to t. The comparison can be Boolean.EqualOrder.eq, Boolean.EqualOrder.ne, etc.

val to_set : t -> LocSet.t
val get_linked_list_next : lhs:t -> rhs:t -> Loc.t option

It checks whether rhs is of lhs.any_field, which is a heuristic for detecting a linked list, e.g. x = x.next(). It returns Some lhs if the condition is satisfied, None otherwise.

\ No newline at end of file +PowLoc (infer.BO__AbsLoc.PowLoc)

Module BO__AbsLoc.PowLoc

include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val compare : t -> t -> int
val get_parent_field : t -> t
val append_field : t -> fn:IR.Fieldname.t -> t
val append_star_field : t -> fn:IR.Fieldname.t -> t
val bot : t
val add : Loc.t -> t -> t
val of_list : Loc.t list -> t
val exists : (Loc.t -> bool) -> t -> bool
val mem : Loc.t -> t -> bool
val is_singleton_or_more : t -> Loc.t IStdlib.IContainer.singleton_or_more
val min_elt_opt : t -> Loc.t option
val singleton : Loc.t -> t
val fold : (Loc.t -> 'a -> 'a) -> t -> 'a -> 'a
val cast : IR.Typ.t -> t -> t
val of_c_strlen : t -> t

It appends the strlen field.

val unknown : t
val exists_str : f:(string -> bool) -> t -> bool

It checks if a variable or a field name in the location path satisfies f.

val is_bot : t -> bool
type eval_locpath = BO.Symb.SymbolPath.partial -> t

Type for evaluating a path to an abstract location.

val subst : t -> eval_locpath -> t

It substitutes paths in the abstract location using eval_locpath.

val subst_loc : Loc.t -> eval_locpath -> t

It substitutes paths in the abstract location using eval_locpath.

val lift_cmp : BO.Boolean.EqualOrder.t -> t -> t -> BO.Boolean.t

It lifts a comparison of Loc.t to t. The comparison can be Boolean.EqualOrder.eq, Boolean.EqualOrder.ne, etc.

val to_set : t -> LocSet.t
val get_linked_list_next : lhs:t -> rhs:t -> Loc.t option

It checks whether rhs is of lhs.any_field, which is a heuristic for detecting a linked list, e.g. x = x.next(). It returns Some lhs if the condition is satisfied, None otherwise.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO__ArrayBlk/index.html b/website/static/odoc/next/infer/BO__ArrayBlk/index.html index c985d7947..6e0b27a90 100644 --- a/website/static/odoc/next/infer/BO__ArrayBlk/index.html +++ b/website/static/odoc/next/infer/BO__ArrayBlk/index.html @@ -1,2 +1,2 @@ -BO__ArrayBlk (infer.BO__ArrayBlk)

Module BO__ArrayBlk

module ArrInfo : sig ... end
include Absint.AbstractDomain.MapS with type key = BO.AbsLoc.Allocsite.t and type value = ArrInfo.t
include IStdlib.PrettyPrintable.PPMonoMap
include IStdlib.PrettyPrintable.MonoMap
type key
type value
type t
val empty : t
val is_empty : t -> bool
val mem : key -> t -> bool
val add : key -> value -> t -> t
val update : key -> (value option -> value option) -> t -> t
val singleton : key -> value -> t
val remove : key -> t -> t
val merge : (key -> value option -> value option -> value option) -> t -> t -> t
val union : (key -> value -> value -> value option) -> t -> t -> t
val compare : (value -> value -> int) -> t -> t -> int
val equal : (value -> value -> bool) -> t -> t -> bool
val iter : (key -> value -> unit) -> t -> unit
val fold : (key -> value -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (key -> value -> bool) -> t -> bool
val exists : (key -> value -> bool) -> t -> bool
val filter : (key -> value -> bool) -> t -> t
val partition : (key -> value -> bool) -> t -> t * t
val cardinal : t -> int
val bindings : t -> (key * value) list
val min_binding : t -> key * value
val min_binding_opt : t -> (key * value) option
val max_binding : t -> key * value
val max_binding_opt : t -> (key * value) option
val choose : t -> key * value
val choose_opt : t -> (key * value) option
val split : key -> t -> t * value option * t
val find : key -> t -> value
val find_opt : key -> t -> value option
val find_first : (key -> bool) -> t -> key * value
val find_first_opt : (key -> bool) -> t -> (key * value) option
val find_last : (key -> bool) -> t -> key * value
val find_last_opt : (key -> bool) -> t -> (key * value) option
val map : (value -> value) -> t -> t
val mapi : (key -> value -> value) -> t -> t
val is_singleton_or_more : t -> (key * value) IStdlib.IContainer.singleton_or_more
val fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * t
val of_seq : (key * value) Stdlib.Seq.t -> t
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val pp_key : IStdlib.PrettyPrintable.F.formatter -> key -> unit
include Absint.AbstractDomain.WithBottom with type t := t
include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bottom : t

The bottom value of the domain.

val is_bottom : t -> bool

Return true if this is the bottom value

val compare : t -> t -> int
val bot : t
val make_c : BO.AbsLoc.Allocsite.t -> offset:BO.Itv.t -> size:BO.Itv.t -> stride:BO.Itv.t -> t

Make an array block for C

val make_java : BO.AbsLoc.Allocsite.t -> length:BO.Itv.t -> t

Make an array block for Java

val unknown : t
val get_pow_loc : t -> BO.AbsLoc.PowLoc.t

Return all allocsites as PowLoc.t

val is_bot : t -> bool
val is_symbolic : t -> bool

Check if there is a symbolic integer value in its offset or size

val lift_cmp_itv : (BO.Itv.t -> BO.Itv.t -> BO.Boolean.t) -> BO.Boolean.EqualOrder.t -> t -> t -> BO.Boolean.t

Lift a comparison of Itv.t and Loc.t to that of t. The comparison for Itv.t is used for integer values such as offset and size, and the comparison for Loc.t is used for allocsites.

val transform_length : f:(BO.Itv.t -> BO.Itv.t) -> t -> t

Apply f to all sizes

val prune_binop : IR.Binop.t -> t -> t -> t

prune_binop bop x y returns a pruned value of x by bop and y.

val prune_eq : t -> t -> t

prune_eq x y returns a pruned value of x by == y.

val prune_ne : t -> t -> t

prune_ne x y returns a pruned value of x by != y.

val minus_offset : t -> BO.Itv.t -> t
val plus_offset : t -> BO.Itv.t -> t
val diff : t -> t -> BO.Itv.t

Return difference of offsets between given array blocks

val normalize : t -> t

Normalize all interval values such as offset and size in it. Thus, if an interval value is invalid, the interval value is replaced with bottom.

val subst : t -> BO.Bounds.Bound.eval_sym -> BO.AbsLoc.PowLoc.eval_locpath -> BO.AbsLoc.PowLoc.t * t

Substitute symbolic abstract locations and symbolic interval value in the array block. eval_sym is to get substituted interval values and eval_locpath is to get substituted abstract locaion values. It also returns a set of abstract locations containing non-allocsite locations from the substitution results. Since the key of ArrayBlk.t is AbsLoc.Allocsite.t, they cannot be written in this domain.

val set_length : BO.Itv.t -> t -> t
val set_offset : BO.Itv.t -> t -> t
val set_stride : Z.t -> t -> t
val get_symbols : t -> BO.Symb.SymbolSet.t

Return all symbols for integer values in it

val get_offset : ?⁠cost_mode:bool -> t -> BO.Itv.t

Return offset of the array block. If cost_mode is true, it returns a conservative (bigger than correct one), but not correct offset results.

val get_size : ?⁠cost_mode:bool -> t -> BO.Itv.t

Return size of the array block. If cost_mode is true, it returns a conservative (bigger than correct one), but not correct size results.

\ No newline at end of file +BO__ArrayBlk (infer.BO__ArrayBlk)

Module BO__ArrayBlk

module ArrInfo : sig ... end
include Absint.AbstractDomain.MapS with type key = BO.AbsLoc.Allocsite.t and type value = ArrInfo.t
include IStdlib.PrettyPrintable.PPMonoMap
include IStdlib.PrettyPrintable.MonoMap
type key
type value
type t
val empty : t
val is_empty : t -> bool
val mem : key -> t -> bool
val add : key -> value -> t -> t
val update : key -> (value option -> value option) -> t -> t
val singleton : key -> value -> t
val remove : key -> t -> t
val merge : (key -> value option -> value option -> value option) -> t -> t -> t
val union : (key -> value -> value -> value option) -> t -> t -> t
val compare : (value -> value -> int) -> t -> t -> int
val equal : (value -> value -> bool) -> t -> t -> bool
val iter : (key -> value -> unit) -> t -> unit
val fold : (key -> value -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (key -> value -> bool) -> t -> bool
val exists : (key -> value -> bool) -> t -> bool
val filter : (key -> value -> bool) -> t -> t
val partition : (key -> value -> bool) -> t -> t * t
val cardinal : t -> int
val bindings : t -> (key * value) list
val min_binding : t -> key * value
val min_binding_opt : t -> (key * value) option
val max_binding : t -> key * value
val max_binding_opt : t -> (key * value) option
val choose : t -> key * value
val choose_opt : t -> (key * value) option
val split : key -> t -> t * value option * t
val find : key -> t -> value
val find_opt : key -> t -> value option
val find_first : (key -> bool) -> t -> key * value
val find_first_opt : (key -> bool) -> t -> (key * value) option
val find_last : (key -> bool) -> t -> key * value
val find_last_opt : (key -> bool) -> t -> (key * value) option
val map : (value -> value) -> t -> t
val mapi : (key -> value -> value) -> t -> t
val is_singleton_or_more : t -> (key * value) IStdlib.IContainer.singleton_or_more
val fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * t
val of_seq : (key * value) Stdlib.Seq.t -> t
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val pp_key : IStdlib.PrettyPrintable.F.formatter -> key -> unit
include Absint.AbstractDomain.WithBottom with type t := t
include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bottom : t

The bottom value of the domain.

val is_bottom : t -> bool

Return true if this is the bottom value

val compare : t -> t -> int
val bot : t
val make_c : BO.AbsLoc.Allocsite.t -> offset:BO.Itv.t -> size:BO.Itv.t -> stride:BO.Itv.t -> t

Make an array block for C

val make_java : BO.AbsLoc.Allocsite.t -> length:BO.Itv.t -> t

Make an array block for Java

val unknown : t
val get_pow_loc : t -> BO.AbsLoc.PowLoc.t

Return all allocsites as PowLoc.t

val is_bot : t -> bool
val is_symbolic : t -> bool

Check if there is a symbolic integer value in its offset or size

val lift_cmp_itv : (BO.Itv.t -> BO.Itv.t -> BO.Boolean.t) -> BO.Boolean.EqualOrder.t -> t -> t -> BO.Boolean.t

Lift a comparison of Itv.t and Loc.t to that of t. The comparison for Itv.t is used for integer values such as offset and size, and the comparison for Loc.t is used for allocsites.

val transform_length : f:(BO.Itv.t -> BO.Itv.t) -> t -> t

Apply f to all sizes

val prune_binop : IR.Binop.t -> t -> t -> t

prune_binop bop x y returns a pruned value of x by bop and y.

val prune_eq : t -> t -> t

prune_eq x y returns a pruned value of x by == y.

val prune_ne : t -> t -> t

prune_ne x y returns a pruned value of x by != y.

val prune_offset_le_size : t -> t

Prune offset by offset <= size

val minus_offset : t -> BO.Itv.t -> t
val plus_offset : t -> BO.Itv.t -> t
val diff : t -> t -> BO.Itv.t

Return difference of offsets between given array blocks

val normalize : t -> t

Normalize all interval values such as offset and size in it. Thus, if an interval value is invalid, the interval value is replaced with bottom.

val subst : t -> BO.Bounds.Bound.eval_sym -> BO.AbsLoc.PowLoc.eval_locpath -> BO.AbsLoc.PowLoc.t * t

Substitute symbolic abstract locations and symbolic interval value in the array block. eval_sym is to get substituted interval values and eval_locpath is to get substituted abstract locaion values. It also returns a set of abstract locations containing non-allocsite locations from the substitution results. Since the key of ArrayBlk.t is AbsLoc.Allocsite.t, they cannot be written in this domain.

val set_length : BO.Itv.t -> t -> t
val set_offset : BO.Itv.t -> t -> t
val set_stride : Z.t -> t -> t
val get_symbols : t -> BO.Symb.SymbolSet.t

Return all symbols for integer values in it

val get_offset : ?⁠cost_mode:bool -> t -> BO.Itv.t

Return offset of the array block. If cost_mode is true, it returns a conservative (bigger than correct one), but not correct offset results.

val get_size : ?⁠cost_mode:bool -> t -> BO.Itv.t

Return size of the array block. If cost_mode is true, it returns a conservative (bigger than correct one), but not correct size results.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO__BufferOverrunDomain/Mem/index.html b/website/static/odoc/next/infer/BO__BufferOverrunDomain/Mem/index.html index bb8cf387c..07149e5cc 100644 --- a/website/static/odoc/next/infer/BO__BufferOverrunDomain/Mem/index.html +++ b/website/static/odoc/next/infer/BO__BufferOverrunDomain/Mem/index.html @@ -1,2 +1,2 @@ -Mem (infer.BO__BufferOverrunDomain.Mem)

Module BO__BufferOverrunDomain.Mem

type 'has_oenv t0 =
| Unreachable

Memory of unreachable node

| ExcRaised

Memory of node that can be reachable only with exception raises that we want to ignore

| Reachable of 'has_oenv MemReach.t0
type no_oenv_t = IStdlib.GOption.none t0

Memory type without an environment for on-demand symbol evaluation

type t = IStdlib.GOption.some t0

Memory type with an environment for on-demand symbol evaluation

val unset_oenv : t -> no_oenv_t
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val pp : Stdlib.Format.formatter -> _ t0 -> unit
val unreachable : t
type get_summary = IR.Procname.t -> no_oenv_t option
val init : get_summary -> BO.BufferOverrunOndemandEnv.t -> t
val exc_raised : t
val is_rep_multi_loc : BO.AbsLoc.Loc.t -> _ t0 -> bool

Check if an abstract location represents multiple concrete locations.

val is_stack_loc : BO.AbsLoc.Loc.t -> _ t0 -> bool

Check if an abstract location is a stack variable, e.g., n$0.

val set_prune_pairs : PrunePairs.t -> t -> t
val set_latest_prune : LatestPrune.t -> t -> t
val set_first_idx_of_null : BO.AbsLoc.Loc.t -> Val.t -> t -> t

In C string, set the index of the first null character, i.e., end of string, when called by set_first_idx_of_null loc_to_string index_value mem.

val unset_first_idx_of_null : BO.AbsLoc.Loc.t -> Val.t -> t -> t

In C string, unset the index of the first null character, i.e., end of string, when called by unset_first_idx_of_null loc_to_string index_value mem. This is unsound because the index can be assigned as previous index + 1 that is a heuristic to keep string lengths in some loops.

val get_c_strlen : BO.AbsLoc.PowLoc.t -> _ t0 -> Val.t

Get C string length that is set/unset by set_first_idex_of_null and unset_first_idex_of_null

val get_latest_prune : _ t0 -> LatestPrune.t
val get_reachable_locs_from : (IR.Pvar.t * IR.Typ.t) list -> BO.AbsLoc.LocSet.t -> _ t0 -> BO.AbsLoc.LocSet.t

Get reachable locations from formals and locs when called get_reachable_locs_from formals locs mem

val add_stack : ?⁠represents_multiple_values:bool -> BO.AbsLoc.Loc.t -> Val.t -> t -> t

Add an abstract value for stack variables such as n$0

val add_stack_loc : BO.AbsLoc.Loc.t -> t -> t
val add_heap : ?⁠represents_multiple_values:bool -> BO.AbsLoc.Loc.t -> Val.t -> t -> t

Add an abstract value for non-stack variables

val add_heap_set : ?⁠represents_multiple_values:bool -> BO.AbsLoc.PowLoc.t -> Val.t -> t -> t
val add_unknown : (IR.Ident.t * IR.Typ.t) -> location:IBase.Location.t -> t -> t

Add an unknown value for stack variables

val add_unknown_from : (IR.Ident.t * IR.Typ.t) -> callee_pname:IR.Procname.t -> location:IBase.Location.t -> t -> t

Add an unknown return value of callee_pname for stack variables

val remove_temps : IR.Ident.t list -> t -> t

Remove given temporary variables from the abstract memory

val find : BO.AbsLoc.Loc.t -> _ t0 -> Val.t
val find_opt : BO.AbsLoc.Loc.t -> _ t0 -> Val.t option
val find_set : ?⁠typ:IR.Typ.t -> BO.AbsLoc.PowLoc.t -> _ t0 -> Val.t
val find_stack : BO.AbsLoc.Loc.t -> _ t0 -> Val.t
val find_alias_id : IR.Ident.t -> _ t0 -> AliasTargets.t

Find aliases between given ident

val find_alias_loc : BO.AbsLoc.Loc.t -> _ t0 -> AliasTargets.t

Find aliases between given abstract location

val find_simple_alias : IR.Ident.t -> _ t0 -> (BO.AbsLoc.Loc.t * IR.IntLit.t) list

Find simple aliases between given ident. It returns a list of pairs of abstract locations and integer which represent aliases id == x + i.

val find_size_alias : IR.Ident.t -> _ t0 -> (AliasTarget.alias_typ * BO.AbsLoc.Loc.t * IR.IntLit.t * BO.AbsLoc.Loc.t option) list

Find size aliases between given ident. It returns a list of four elements, alias type == or >=, location x, integer i, java temporary variable $irvar0. This represents id == $irvar0 (== or >=) x.size() + i.

val find_ret_alias : _ t0 -> AliasRet.t Absint.AbstractDomain.Types.bottom_lifted

Find aliases bound to the return variable

val fgets_alias : IR.Ident.t -> BO.AbsLoc.PowLoc.t -> t -> t

Set fgets alias between an ident and an abstract location

val apply_latest_prune : IR.Exp.t -> t -> t * PrunePairs.t

Apply latest_prunes when given e : Exp.t is true. It returns pruned memory and pairs of pruned locations and values.

val load_alias : IR.Ident.t -> BO.AbsLoc.Loc.t -> AliasTarget.t -> t -> t

Add an alias between ident and abstract location with given alias target

val load_empty_alias : IR.Ident.t -> BO.AbsLoc.Loc.t -> t -> t

Add an empty alias between ident and abstract location, i.e., ident == loc.empty()

val load_simple_alias : IR.Ident.t -> BO.AbsLoc.Loc.t -> t -> t

Add a simple alias between ident and abstract location, i.e., ident == loc

val load_size_alias : IR.Ident.t -> BO.AbsLoc.Loc.t -> t -> t

Add a size alias between ident and abstract location, i.e., ident == loc.size()

val store_simple_alias : BO.AbsLoc.Loc.t -> IR.Exp.t -> t -> t

Add a simple alias between abstract location and expression, i.e., loc == exp

val forget_size_alias : BO.AbsLoc.PowLoc.t -> t -> t

Forget size aliases of given locs

val incr_size_alias : BO.AbsLoc.PowLoc.t -> t -> t

Update size aliases when the size of loc is increased by one. For example if there was an alias ident == loc.size() + i, this changes it to ident == loc.size() + i - 1, since loc.size() has been increased.

val incr_or_not_size_alias : BO.AbsLoc.PowLoc.t -> t -> t

Update size aliases when the size of loc may be increased by one. For example if there was an alias ident == loc.size() + i, this changes it to ident >= loc.size() + i - 1

val add_iterator_has_next_alias : IR.Ident.t -> IR.Exp.t -> t -> t

Add an AliasTarget.IteratorHasNext alias when ident = iterator.hasNext() is called

val add_iterator_next_object_alias : IR.Ident.t -> IR.Exp.t -> t -> t

Add an AliasTarget.IteratorNextObject alias when ident = iterator.nextObject() is called

val incr_iterator_simple_alias_on_call : eval_sym_trace -> callee_exit_mem:no_oenv_t -> t -> t

Update AliasTarget.IteratorSimple alias at function calls

val add_iterator_alias : IR.Ident.t -> t -> t

Add AliasTarget.IteratorSimple and AliasTarget.IteratorOffset aliases when Iteratable.iterator() is called

val add_iterator_alias_objc : IR.Ident.t -> t -> t
val incr_iterator_offset_alias : IR.Exp.t -> t -> t

Update iterator offset alias when iterator.next() is called

val update_mem : BO.AbsLoc.PowLoc.t -> Val.t -> t -> t

Add a map from locations to a value. If the given set of locations is a singleton set and the only element represents one concrete abstract location, it does strong update. Otherwise, weak update.

val strong_update : BO.AbsLoc.PowLoc.t -> Val.t -> t -> t
val update_latest_prune : updated_locs:BO.AbsLoc.PowLoc.t -> IR.Exp.t -> IR.Exp.t -> t -> t

Update latest prunes when store(x,1) or store(x,0) is called after assume statement

val forget_unreachable_locs : formals:(IR.Pvar.t * IR.Typ.t) list -> t -> t

Forget unreachable locations from formals

val transform_mem : f:(Val.t -> Val.t) -> BO.AbsLoc.PowLoc.t -> t -> t

Apply f to values bound to given locs

\ No newline at end of file +Mem (infer.BO__BufferOverrunDomain.Mem)

Module BO__BufferOverrunDomain.Mem

type 'has_oenv t0 =
| Unreachable

Memory of unreachable node

| ExcRaised

Memory of node that can be reachable only with exception raises that we want to ignore

| Reachable of 'has_oenv MemReach.t0
type no_oenv_t = IStdlib.GOption.none t0

Memory type without an environment for on-demand symbol evaluation

type t = IStdlib.GOption.some t0

Memory type with an environment for on-demand symbol evaluation

val unset_oenv : t -> no_oenv_t
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val pp : Stdlib.Format.formatter -> _ t0 -> unit
val unreachable : t
type get_summary = IR.Procname.t -> no_oenv_t option
val init : get_summary -> BO.BufferOverrunOndemandEnv.t -> t
val exc_raised : t
val is_rep_multi_loc : BO.AbsLoc.Loc.t -> _ t0 -> bool

Check if an abstract location represents multiple concrete locations.

val is_stack_loc : BO.AbsLoc.Loc.t -> _ t0 -> bool

Check if an abstract location is a stack variable, e.g., n$0.

val set_prune_pairs : PrunePairs.t -> t -> t
val set_latest_prune : LatestPrune.t -> t -> t
val set_first_idx_of_null : BO.AbsLoc.Loc.t -> Val.t -> t -> t

In C string, set the index of the first null character, i.e., end of string, when called by set_first_idx_of_null loc_to_string index_value mem.

val unset_first_idx_of_null : BO.AbsLoc.Loc.t -> Val.t -> t -> t

In C string, unset the index of the first null character, i.e., end of string, when called by unset_first_idx_of_null loc_to_string index_value mem. This is unsound because the index can be assigned as previous index + 1 that is a heuristic to keep string lengths in some loops.

val get_c_strlen : BO.AbsLoc.PowLoc.t -> _ t0 -> Val.t

Get C string length that is set/unset by set_first_idex_of_null and unset_first_idex_of_null

val get_latest_prune : _ t0 -> LatestPrune.t
val get_reachable_locs_from : (IR.Pvar.t * IR.Typ.t) list -> BO.AbsLoc.LocSet.t -> _ t0 -> BO.AbsLoc.LocSet.t

Get reachable locations from formals and locs when called get_reachable_locs_from formals locs mem

val add_stack : ?⁠represents_multiple_values:bool -> BO.AbsLoc.Loc.t -> Val.t -> t -> t

Add an abstract value for stack variables such as n$0

val add_stack_loc : BO.AbsLoc.Loc.t -> t -> t
val add_heap : ?⁠represents_multiple_values:bool -> BO.AbsLoc.Loc.t -> Val.t -> t -> t

Add an abstract value for non-stack variables

val add_heap_set : ?⁠represents_multiple_values:bool -> BO.AbsLoc.PowLoc.t -> Val.t -> t -> t
val add_unknown : (IR.Ident.t * IR.Typ.t) -> location:IBase.Location.t -> t -> t

Add an unknown value for stack variables

val add_unknown_from : (IR.Ident.t * IR.Typ.t) -> callee_pname:IR.Procname.t -> location:IBase.Location.t -> t -> t

Add an unknown return value of callee_pname for stack variables

val remove_temps : IR.Ident.t list -> t -> t

Remove given temporary variables from the abstract memory

val find : BO.AbsLoc.Loc.t -> _ t0 -> Val.t
val find_opt : BO.AbsLoc.Loc.t -> _ t0 -> Val.t option
val find_set : ?⁠typ:IR.Typ.t -> BO.AbsLoc.PowLoc.t -> _ t0 -> Val.t
val find_stack : BO.AbsLoc.Loc.t -> _ t0 -> Val.t
val find_alias_id : IR.Ident.t -> _ t0 -> AliasTargets.t

Find aliases between given ident

val find_alias_loc : BO.AbsLoc.Loc.t -> _ t0 -> AliasTargets.t

Find aliases between given abstract location

val find_simple_alias : IR.Ident.t -> _ t0 -> (BO.AbsLoc.Loc.t * IR.IntLit.t) list

Find simple aliases between given ident. It returns a list of pairs of abstract locations and integer which represent aliases id == x + i.

val find_size_alias : IR.Ident.t -> _ t0 -> (AliasTarget.alias_typ * BO.AbsLoc.Loc.t * IR.IntLit.t * BO.AbsLoc.Loc.t option) list

Find size aliases between given ident. It returns a list of four elements, alias type == or >=, location x, integer i, java temporary variable $irvar0. This represents id == $irvar0 (== or >=) x.size() + i.

val find_ret_alias : _ t0 -> AliasRet.t Absint.AbstractDomain.Types.bottom_lifted

Find aliases bound to the return variable

val fgets_alias : IR.Ident.t -> BO.AbsLoc.PowLoc.t -> t -> t

Set fgets alias between an ident and an abstract location

val apply_latest_prune : IR.Exp.t -> t -> t * PrunePairs.t

Apply latest_prunes when given e : Exp.t is true. It returns pruned memory and pairs of pruned locations and values.

val load_alias : IR.Ident.t -> BO.AbsLoc.Loc.t -> AliasTarget.t -> t -> t

Add an alias between ident and abstract location with given alias target

val load_empty_alias : IR.Ident.t -> BO.AbsLoc.Loc.t -> t -> t

Add an empty alias between ident and abstract location, i.e., ident == loc.empty()

val load_simple_alias : IR.Ident.t -> BO.AbsLoc.Loc.t -> t -> t

Add a simple alias between ident and abstract location, i.e., ident == loc

val load_size_alias : IR.Ident.t -> BO.AbsLoc.Loc.t -> t -> t

Add a size alias between ident and abstract location, i.e., ident == loc.size()

val store_simple_alias : BO.AbsLoc.Loc.t -> IR.Exp.t -> t -> t

Add a simple alias between abstract location and expression, i.e., loc == exp

val forget_size_alias : BO.AbsLoc.PowLoc.t -> t -> t

Forget size aliases of given locs

val incr_size_alias : BO.AbsLoc.PowLoc.t -> t -> t

Update size aliases when the size of loc is increased by one. For example if there was an alias ident == loc.size() + i, this changes it to ident == loc.size() + i - 1, since loc.size() has been increased.

val incr_or_not_size_alias : BO.AbsLoc.PowLoc.t -> t -> t

Update size aliases when the size of loc may be increased by one. For example if there was an alias ident == loc.size() + i, this changes it to ident >= loc.size() + i - 1

val add_iterator_has_next_alias : IR.Ident.t -> IR.Exp.t -> t -> t

Add an AliasTarget.IteratorHasNext alias when ident = iterator.hasNext() is called

val add_iterator_next_object_alias : ret_id:IR.Ident.t -> iterator:IR.Ident.t -> t -> t

Add an AliasTarget.IteratorNextObject alias when ident = iterator.nextObject() is called

val incr_iterator_simple_alias_on_call : eval_sym_trace -> callee_exit_mem:no_oenv_t -> t -> t

Update AliasTarget.IteratorSimple alias at function calls

val add_iterator_alias : IR.Ident.t -> t -> t

Add AliasTarget.IteratorSimple and AliasTarget.IteratorOffset aliases when Iteratable.iterator() is called

val incr_iterator_offset_alias : IR.Exp.t -> t -> t

Update iterator offset alias when iterator.next() is called

val update_mem : BO.AbsLoc.PowLoc.t -> Val.t -> t -> t

Add a map from locations to a value. If the given set of locations is a singleton set and the only element represents one concrete abstract location, it does strong update. Otherwise, weak update.

val strong_update : BO.AbsLoc.PowLoc.t -> Val.t -> t -> t
val update_latest_prune : updated_locs:BO.AbsLoc.PowLoc.t -> IR.Exp.t -> IR.Exp.t -> t -> t

Update latest prunes when store(x,1) or store(x,0) is called after assume statement

val forget_unreachable_locs : formals:(IR.Pvar.t * IR.Typ.t) list -> t -> t

Forget unreachable locations from formals

val transform_mem : f:(Val.t -> Val.t) -> BO.AbsLoc.PowLoc.t -> t -> t

Apply f to values bound to given locs

\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO__BufferOverrunDomain/Val/index.html b/website/static/odoc/next/infer/BO__BufferOverrunDomain/Val/index.html index b27a4c060..59dd22878 100644 --- a/website/static/odoc/next/infer/BO__BufferOverrunDomain/Val/index.html +++ b/website/static/odoc/next/infer/BO__BufferOverrunDomain/Val/index.html @@ -1,2 +1,2 @@ -Val (infer.BO__BufferOverrunDomain.Val)

Module BO__BufferOverrunDomain.Val

type t = {
itv : BO.Itv.t;

Interval

itv_thresholds : ItvThresholds.t;
itv_updated_by : ItvUpdatedBy.t;
modeled_range : ModeledRange.t;
powloc : BO.AbsLoc.PowLoc.t;

Simple pointers

arrayblk : BO.ArrayBlk.t;

Array blocks

func_ptrs : BO.FuncPtr.Set.t;

Function pointers

traces : BO.BufferOverrunTrace.Set.t;
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bot : t
val of_big_int : ItvThresholds.elt -> t
val of_c_array_alloc : BO.AbsLoc.Allocsite.t -> stride:int option -> offset:BO.Itv.t -> size:BO.Itv.t -> traces:BO.BufferOverrunTrace.Set.t -> t

Construct C array allocation. stride is a byte size of cell, offset is initial offset of pointer which is usually zero, and size is a total number of cells.

val of_java_array_alloc : BO.AbsLoc.Allocsite.t -> length:BO.Itv.t -> traces:BO.BufferOverrunTrace.Set.t -> t

Construct Java array allocation. size is a total number of cells

val of_int : int -> t
val of_int_lit : IR.IntLit.t -> t
val of_itv : ?⁠traces:BO.BufferOverrunTrace.Set.t -> BO.Itv.t -> t
val of_literal_string : IR.Typ.IntegerWidths.t -> string -> t
val of_loc : ?⁠traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.Loc.t -> t
val of_pow_loc : traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.PowLoc.t -> t
val of_func_ptrs : BO.FuncPtr.Set.t -> t
val unknown_locs : t
val unknown_from : IR.Typ.t -> callee_pname:IR.Procname.t option -> location:IBase.Location.t -> t

Unknown return value of callee_pname

val is_bot : t -> bool

Check if the value is bottom

val is_mone : t -> bool

Check if the value is [-1,-1]

val array_sizeof : t -> BO.Itv.t

Get array size

val get_all_locs : t -> BO.AbsLoc.PowLoc.t

Get all locations, including pointers and array blocks

val get_array_locs : t -> BO.AbsLoc.PowLoc.t

Get locations of array blocks

val get_array_blk : t -> BO.ArrayBlk.t
val get_range_of_iterator : t -> t

Get a range of an iterator value, for example, if iterator value is [lb,ub], it returns [0,ub].

val get_itv : t -> BO.Itv.t
val get_modeled_range : t -> ModeledRange.t
val get_pow_loc : t -> BO.AbsLoc.PowLoc.t
val get_func_ptrs : t -> BO.FuncPtr.Set.t
val get_traces : t -> BO.BufferOverrunTrace.Set.t
val set_array_length : IBase.Location.t -> length:t -> t -> t
val set_array_offset : IBase.Location.t -> BO.Itv.t -> t -> t
val set_array_stride : Z.t -> t -> t
val set_itv_updated_by_addition : t -> t
val set_itv_updated_by_multiplication : t -> t
val set_itv_updated_by_unknown : t -> t
val set_modeled_range : ModeledRange.t -> t -> t
val (lnot) : t -> t
val neg : t -> t
val plus_a : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t

Semantics of Binop.PlusA. f_trace merges traces of the operands. If f_trace is not given, it uses a default heuristic merge function.

val plus_pi : t -> t -> t
val minus_a : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val minus_pi : t -> t -> t
val minus_pp : t -> t -> t
val mult : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val div : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val mod_sem : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftlt : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftrt : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val lt_sem : t -> t -> t
val gt_sem : t -> t -> t
val le_sem : t -> t -> t
val ge_sem : t -> t -> t
val eq_sem : t -> t -> t
val ne_sem : t -> t -> t
val band_sem : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val land_sem : t -> t -> t
val lor_sem : t -> t -> t
val unknown_bit : t -> t

Semantic function for some bit operators which are hard to express in the domain, e.g., Unop.BNot.

val prune_eq : t -> t -> t

Pruning semantics for Binop.Eq. This prunes value of x when given x == y, i.e., prune_eq x y.

val prune_ne : t -> t -> t

Pruning semantics for Binop.Ne. This prunes value of x when given x != y, i.e., prune_ne x y.

val prune_lt : t -> t -> t

Pruning semantics for Binop.Lt. This prunes value of x when given x < y, i.e., prune_lt x y.

val prune_le : t -> t -> t

Pruning semantics for Binop.Lt. This prunes value of x when given x <= y, i.e., prune_le x y.

val prune_ne_zero : t -> t

Prune value of x when given x != 0

val prune_eq_zero : t -> t

Prune value of x when given x == 0

val prune_ge_one : t -> t

Prune value of x when given x >= 1

val prune_length_lt : t -> BO.Itv.t -> t

Prune length of x when given x.length() < i

val prune_length_le : t -> BO.Itv.t -> t

Prune length of x when given x.length() <= i

val prune_length_eq : t -> BO.Itv.t -> t

Prune length of x when given x.length() == i

val prune_length_eq_zero : t -> t

Prune length of x when given x.length() == 0

val prune_length_ge_one : t -> t

Prune length of x when given x.length() >= 1

val prune_binop : IR.Binop.t -> t -> t -> t

Prune value of x when given x bop y, i.e., prune_binop bop x y

val add_assign_trace_elem : IBase.Location.t -> BO.AbsLoc.PowLoc.t -> t -> t

Add assign trace for given abstract locations

val cast : IR.Typ.t -> t -> t

Semantics of cast. This updates type information in pointer values, rather than re-calculating sizes of array blocks.

val subst : t -> eval_sym_trace -> IBase.Location.t -> t

Substitution of symbols in the value

val transform_array_length : IBase.Location.t -> f:(BO.Itv.t -> BO.Itv.t) -> t -> t

Apply f on array lengths in the value

module Itv : sig ... end
\ No newline at end of file +Val (infer.BO__BufferOverrunDomain.Val)

Module BO__BufferOverrunDomain.Val

type t = {
itv : BO.Itv.t;

Interval

itv_thresholds : ItvThresholds.t;
itv_updated_by : ItvUpdatedBy.t;
modeled_range : ModeledRange.t;
powloc : BO.AbsLoc.PowLoc.t;

Simple pointers

arrayblk : BO.ArrayBlk.t;

Array blocks

func_ptrs : BO.FuncPtr.Set.t;

Function pointers

traces : BO.BufferOverrunTrace.Set.t;
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bot : t
val of_big_int : ItvThresholds.elt -> t
val of_c_array_alloc : BO.AbsLoc.Allocsite.t -> stride:int option -> offset:BO.Itv.t -> size:BO.Itv.t -> traces:BO.BufferOverrunTrace.Set.t -> t

Construct C array allocation. stride is a byte size of cell, offset is initial offset of pointer which is usually zero, and size is a total number of cells.

val of_java_array_alloc : BO.AbsLoc.Allocsite.t -> length:BO.Itv.t -> traces:BO.BufferOverrunTrace.Set.t -> t

Construct Java array allocation. size is a total number of cells

val of_int : int -> t
val of_int_lit : IR.IntLit.t -> t
val of_itv : ?⁠traces:BO.BufferOverrunTrace.Set.t -> BO.Itv.t -> t
val of_literal_string : IR.Typ.IntegerWidths.t -> string -> t
val of_loc : ?⁠traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.Loc.t -> t
val of_pow_loc : traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.PowLoc.t -> t
val of_func_ptrs : BO.FuncPtr.Set.t -> t
val unknown_locs : t
val unknown_from : IR.Typ.t -> callee_pname:IR.Procname.t option -> location:IBase.Location.t -> t

Unknown return value of callee_pname

val is_bot : t -> bool

Check if the value is bottom

val is_mone : t -> bool

Check if the value is [-1,-1]

val array_sizeof : t -> BO.Itv.t

Get array size

val get_all_locs : t -> BO.AbsLoc.PowLoc.t

Get all locations, including pointers and array blocks

val get_array_locs : t -> BO.AbsLoc.PowLoc.t

Get locations of array blocks

val get_array_blk : t -> BO.ArrayBlk.t
val get_range_of_iterator : t -> t

Get a range of an iterator value, for example, if iterator value is [lb,ub], it returns [0,ub].

val get_itv : t -> BO.Itv.t
val get_modeled_range : t -> ModeledRange.t
val get_pow_loc : t -> BO.AbsLoc.PowLoc.t
val get_func_ptrs : t -> BO.FuncPtr.Set.t
val get_traces : t -> BO.BufferOverrunTrace.Set.t
val set_array_length : IBase.Location.t -> length:t -> t -> t
val set_array_offset : IBase.Location.t -> BO.Itv.t -> t -> t
val set_array_stride : Z.t -> t -> t
val set_itv_updated_by_addition : t -> t
val set_itv_updated_by_multiplication : t -> t
val set_itv_updated_by_unknown : t -> t
val set_modeled_range : ModeledRange.t -> t -> t
val (lnot) : t -> t
val neg : t -> t
val plus_a : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t

Semantics of Binop.PlusA. f_trace merges traces of the operands. If f_trace is not given, it uses a default heuristic merge function.

val plus_pi : t -> t -> t
val minus_a : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val minus_pi : t -> t -> t
val minus_pp : t -> t -> t
val mult : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val div : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val mod_sem : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftlt : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftrt : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val lt_sem : t -> t -> t
val gt_sem : t -> t -> t
val le_sem : t -> t -> t
val ge_sem : t -> t -> t
val eq_sem : t -> t -> t
val ne_sem : t -> t -> t
val band_sem : ?⁠f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val land_sem : t -> t -> t
val lor_sem : t -> t -> t
val unknown_bit : t -> t

Semantic function for some bit operators which are hard to express in the domain, e.g., Unop.BNot.

val prune_eq : t -> t -> t

Pruning semantics for Binop.Eq. This prunes value of x when given x == y, i.e., prune_eq x y.

val prune_ne : t -> t -> t

Pruning semantics for Binop.Ne. This prunes value of x when given x != y, i.e., prune_ne x y.

val prune_lt : t -> t -> t

Pruning semantics for Binop.Lt. This prunes value of x when given x < y, i.e., prune_lt x y.

val prune_ne_zero : t -> t

Prune value of x when given x != 0

val prune_eq_zero : t -> t

Prune value of x when given x == 0

val prune_ge_one : t -> t

Prune value of x when given x >= 1

val prune_length_lt : t -> BO.Itv.t -> t

Prune length of x when given x.length() < i

val prune_length_le : t -> BO.Itv.t -> t

Prune length of x when given x.length() <= i

val prune_length_eq : t -> BO.Itv.t -> t

Prune length of x when given x.length() == i

val prune_length_eq_zero : t -> t

Prune length of x when given x.length() == 0

val prune_length_ge_one : t -> t

Prune length of x when given x.length() >= 1

val prune_binop : IR.Binop.t -> t -> t -> t

Prune value of x when given x bop y, i.e., prune_binop bop x y

val add_assign_trace_elem : IBase.Location.t -> BO.AbsLoc.PowLoc.t -> t -> t

Add assign trace for given abstract locations

val cast : IR.Typ.t -> t -> t

Semantics of cast. This updates type information in pointer values, rather than re-calculating sizes of array blocks.

val subst : t -> eval_sym_trace -> IBase.Location.t -> t

Substitution of symbols in the value

val transform_array_length : IBase.Location.t -> f:(BO.Itv.t -> BO.Itv.t) -> t -> t

Apply f on array lengths in the value

module Itv : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO__BufferOverrunSemantics/index.html b/website/static/odoc/next/infer/BO__BufferOverrunSemantics/index.html index a9e71c195..50827f500 100644 --- a/website/static/odoc/next/infer/BO__BufferOverrunSemantics/index.html +++ b/website/static/odoc/next/infer/BO__BufferOverrunSemantics/index.html @@ -1,2 +1,2 @@ -BO__BufferOverrunSemantics (infer.BO__BufferOverrunSemantics)

Module BO__BufferOverrunSemantics

val is_stack_exp : IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> bool

Check if an expression is a stack variable such as n$0 or local variable for C array

val eval : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.t

Evalute an expression

val eval_locs : IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.AbsLoc.PowLoc.t

eval_locs exp mem is like eval exp mem |> Val.get_all_locs but takes some shortcuts to avoid computing useless and/or problematic intermediate values

val eval_arr : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.t

Return the array value of the input expression. For example, when x is a program variable, eval_arr x returns array blocks the x is pointing to, on the other hand, eval x returns the abstract location of x.

val eval_lindex : IR.Typ.IntegerWidths.t -> IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.t

Evaluate array location with index, i.e., eval_lindex integer_type_widths array_exp index_exp mem

val eval_array_locs_length : BO.AbsLoc.PowLoc.t -> _ BO.BufferOverrunDomain.Mem.t0 -> BO.BufferOverrunDomain.Val.t

Evaluate length of array locations

val eval_string_len : IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.t

Evaluate length of C string

val conservative_array_length : ?⁠traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.PowLoc.t -> _ BO.BufferOverrunDomain.Mem.t0 -> BO.BufferOverrunDomain.Val.t

Evaluate the array length conservatively, which is useful when there are multiple array locations and their lengths are joined to top. For example, if the arr_locs points to two arrays a and b and if their lengths are a.length and b.length, this function evaluates its length as [0, a.length.ub + b.length.ub].

type eval_mode =
| EvalNormal

Given a symbolic value of an unknown function Symb.SymbolPath.Callsite, it returns a symbolic interval value.

| EvalPOCond

Given a symbolic value of an unknown function, it returns the top interval value. This is used when substituting condition expressions of proof obligations.

| EvalPOReachability

This is similar to EvalPOCond, but it returns the bottom location, instead of the unknown location, when a location to substitute is not found. This is used when substituting reachabilities of proof obligations.

| EvalCost

This is similar to EvalNormal, but it is designed to be used in substitutions of the cost results, avoiding precision loss by joining of symbolic values. Normal join of two different symbolic values, s1 and s2, becomes top due to the limitation of our domain. On the other hand, in this mode, it returns an upperbound s1+s2 for the case, because the cost values only care about the upperbounds.

Several modes of ondemand evaluations

val mk_eval_sym_trace : ?⁠is_params_ref:bool -> IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BO.BufferOverrunDomain.Mem.t -> mode:eval_mode -> BO.BufferOverrunDomain.eval_sym_trace

Make eval_sym function for on-demand symbol evaluation

val mk_eval_sym_cost : IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BO.BufferOverrunDomain.Mem.t -> BO.Bounds.Bound.eval_sym

Make eval_sym function of EvalCost mode for on-demand symbol evaluation

module Prune : sig ... end
\ No newline at end of file +BO__BufferOverrunSemantics (infer.BO__BufferOverrunSemantics)

Module BO__BufferOverrunSemantics

val is_stack_exp : IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> bool

Check if an expression is a stack variable such as n$0 or local variable for C array

val eval : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.t

Evalute an expression

val eval_locs : IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.AbsLoc.PowLoc.t

eval_locs exp mem is like eval exp mem |> Val.get_all_locs but takes some shortcuts to avoid computing useless and/or problematic intermediate values

val eval_arr : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.t

Return the array value of the input expression. For example, when x is a program variable, eval_arr x returns array blocks the x is pointing to, on the other hand, eval x returns the abstract location of x.

val eval_lindex : IR.Typ.IntegerWidths.t -> IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.t

Evaluate array location with index, i.e., eval_lindex integer_type_widths array_exp index_exp mem

val eval_array_locs_length : BO.AbsLoc.PowLoc.t -> _ BO.BufferOverrunDomain.Mem.t0 -> BO.BufferOverrunDomain.Val.t

Evaluate length of array locations

val eval_string_len : IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.t

Evaluate length of C string

val conservative_array_length : ?⁠traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.PowLoc.t -> _ BO.BufferOverrunDomain.Mem.t0 -> BO.BufferOverrunDomain.Val.t

Evaluate the array length conservatively, which is useful when there are multiple array locations and their lengths are joined to top. For example, if the arr_locs points to two arrays a and b and if their lengths are a.length and b.length, this function evaluates its length as [0, a.length.ub + b.length.ub].

type eval_mode =
| EvalNormal

Given a symbolic value of an unknown function Symb.SymbolPath.Callsite, it returns a symbolic interval value.

| EvalPOCond

Given a symbolic value of an unknown function, it returns the top interval value. This is used when substituting condition expressions of proof obligations.

| EvalPOReachability

This is similar to EvalPOCond, but it returns the bottom location, instead of the unknown location, when a location to substitute is not found. This is used when substituting reachabilities of proof obligations.

| EvalCost

This is similar to EvalNormal, but it is designed to be used in substitutions of the cost results, avoiding precision loss by joining of symbolic values. Normal join of two different symbolic values, s1 and s2, becomes top due to the limitation of our domain. On the other hand, in this mode, it returns an upperbound s1+s2 for the case, because the cost values only care about the upperbounds.

Several modes of ondemand evaluations

val mk_eval_sym_trace : ?⁠is_params_ref:bool -> IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BO.BufferOverrunDomain.Mem.t -> mode:eval_mode -> BO.BufferOverrunDomain.eval_sym_trace

Make eval_sym function for on-demand symbol evaluation

val mk_eval_sym_cost : IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.eval_sym_trace

Make eval_sym function of EvalCost mode for on-demand symbol evaluation

module Prune : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/BO__Polynomials/NonNegativePolynomial/index.html b/website/static/odoc/next/infer/BO__Polynomials/NonNegativePolynomial/index.html index 8bd8eff8b..5fd8553fa 100644 --- a/website/static/odoc/next/infer/BO__Polynomials/NonNegativePolynomial/index.html +++ b/website/static/odoc/next/infer/BO__Polynomials/NonNegativePolynomial/index.html @@ -1,2 +1,2 @@ -NonNegativePolynomial (infer.BO__Polynomials.NonNegativePolynomial)

Module BO__Polynomials.NonNegativePolynomial

include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
type degree_with_term = (UnreachableTraces.tDegree.t * NonNegativeNonTopPolynomial.tTopTraces.t) Absint.AbstractDomain.Types.below_above
val pp_hum : Stdlib.Format.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val top : t
val of_unreachable : IBase.Location.t -> t
val zero : t
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val of_int_exn : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> int -> t
val is_symbolic : t -> bool
val is_top : t -> bool
val is_unreachable : t -> bool
val is_zero : t -> bool
val is_one : t -> bool
val of_non_negative_bound : ?⁠degree_kind:DegreeKind.t -> BO.Bounds.NonNegativeBound.t -> t
val plus : t -> t -> t
val mult_unreachable : t -> t -> t

if one of the operands is unreachable, the result is unreachable

val mult : t -> t -> t
val mult_loop : iter:t -> body:t -> t
val min_default_left : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> t
val degree : t -> Degree.t option
val degree_str : t -> string
val compare_by_degree : t -> t -> int
val pp_degree : only_bigO:bool -> Stdlib.Format.formatter -> degree_with_term -> unit
val polynomial_traces : ?⁠is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val encode : t -> string
val decode : string -> t
val get_degree_with_term : t -> degree_with_term
\ No newline at end of file +NonNegativePolynomial (infer.BO__Polynomials.NonNegativePolynomial)

Module BO__Polynomials.NonNegativePolynomial

include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
type degree_with_term = (UnreachableTraces.tDegree.t * NonNegativeNonTopPolynomial.tTopTraces.t) Absint.AbstractDomain.Types.below_above
val pp_hum : Stdlib.Format.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val top : t
val of_unreachable : IBase.Location.t -> t
val zero : t
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val of_int_exn : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> int -> t
val is_symbolic : t -> bool
val is_top : t -> bool
val is_unreachable : t -> bool
val is_zero : t -> bool
val is_one : t -> bool
val of_non_negative_bound : ?⁠degree_kind:DegreeKind.t -> BO.Bounds.NonNegativeBound.t -> t
val of_func_ptr : BO.Symb.SymbolPath.partial -> t
val plus : t -> t -> t
val mult_unreachable : t -> t -> t

if one of the operands is unreachable, the result is unreachable

val mult : t -> t -> t
val mult_loop : iter:t -> body:t -> t
val min_default_left : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> BO.FuncPtr.Set.eval_func_ptrs -> (IR.Procname.t -> t option) -> default_closure_cost:BO.Ints.NonNegativeInt.t -> t
val degree : t -> Degree.t option
val degree_str : t -> string
val compare_by_degree : t -> t -> int
val pp_degree : only_bigO:bool -> Stdlib.Format.formatter -> degree_with_term -> unit
val polynomial_traces : ?⁠is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val encode : t -> string
val decode : string -> t
val get_degree_with_term : t -> degree_with_term
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Backend/ClosuresSubstitution/Domain/index.html b/website/static/odoc/next/infer/Backend/ClosuresSubstitution/Domain/index.html index f1bf71515..c14afbe9e 100644 --- a/website/static/odoc/next/infer/Backend/ClosuresSubstitution/Domain/index.html +++ b/website/static/odoc/next/infer/Backend/ClosuresSubstitution/Domain/index.html @@ -1,2 +1,2 @@ -Domain (infer.Backend.ClosuresSubstitution.Domain)

Module ClosuresSubstitution.Domain

type key = IR.Var.t
type value = VDom.t
type t = Absint__AbstractDomain.Map(IR.Var)(VDom).t
val empty : t
val is_empty : t -> bool
val mem : key -> t -> bool
val add : key -> value -> t -> t
val update : key -> (value option -> value option) -> t -> t
val singleton : key -> value -> t
val remove : key -> t -> t
val merge : (key -> value option -> value option -> value option) -> t -> t -> t
val union : (key -> value -> value -> value option) -> t -> t -> t
val compare : (value -> value -> int) -> t -> t -> int
val equal : (value -> value -> bool) -> t -> t -> bool
val iter : (key -> value -> unit) -> t -> unit
val fold : (key -> value -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (key -> value -> bool) -> t -> bool
val exists : (key -> value -> bool) -> t -> bool
val filter : (key -> value -> bool) -> t -> t
val partition : (key -> value -> bool) -> t -> t * t
val cardinal : t -> int
val bindings : t -> (key * value) list
val min_binding : t -> key * value
val min_binding_opt : t -> (key * value) option
val max_binding : t -> key * value
val max_binding_opt : t -> (key * value) option
val choose : t -> key * value
val choose_opt : t -> (key * value) option
val split : key -> t -> t * value option * t
val find : key -> t -> value
val find_opt : key -> t -> value option
val find_first : (key -> bool) -> t -> key * value
val find_first_opt : (key -> bool) -> t -> (key * value) option
val find_last : (key -> bool) -> t -> key * value
val find_last_opt : (key -> bool) -> t -> (key * value) option
val map : (value -> value) -> t -> t
val mapi : (key -> value -> value) -> t -> t
val is_singleton_or_more : t -> (key * value) IStdlib.IContainer.singleton_or_more
val fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * t
val of_seq : (key * value) Stdlib.Seq.t -> t
val pp_key : IStdlib.PrettyPrintable.F.formatter -> key -> unit
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bottom : t
val is_bottom : t -> bool
\ No newline at end of file +Domain (infer.Backend.ClosuresSubstitution.Domain)

Module ClosuresSubstitution.Domain

type key = IR.Var.t
type value = VDom.t
type t = Absint__AbstractDomain.SafeInvertedMap(IR.Var)(VDom).t
val empty : t
val is_empty : t -> bool
val mem : key -> t -> bool
val add : key -> value -> t -> t
val update : key -> (value option -> value option) -> t -> t
val singleton : key -> value -> t
val remove : key -> t -> t
val merge : (key -> value option -> value option -> value option) -> t -> t -> t
val union : (key -> value -> value -> value option) -> t -> t -> t
val compare : (value -> value -> int) -> t -> t -> int
val equal : (value -> value -> bool) -> t -> t -> bool
val iter : (key -> value -> unit) -> t -> unit
val fold : (key -> value -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (key -> value -> bool) -> t -> bool
val exists : (key -> value -> bool) -> t -> bool
val filter : (key -> value -> bool) -> t -> t
val partition : (key -> value -> bool) -> t -> t * t
val cardinal : t -> int
val bindings : t -> (key * value) list
val min_binding : t -> key * value
val min_binding_opt : t -> (key * value) option
val max_binding : t -> key * value
val max_binding_opt : t -> (key * value) option
val choose : t -> key * value
val choose_opt : t -> (key * value) option
val split : key -> t -> t * value option * t
val find : key -> t -> value
val find_opt : key -> t -> value option
val find_first : (key -> bool) -> t -> key * value
val find_first_opt : (key -> bool) -> t -> (key * value) option
val find_last : (key -> bool) -> t -> key * value
val find_last_opt : (key -> bool) -> t -> (key * value) option
val map : (value -> value) -> t -> t
val mapi : (key -> value -> value) -> t -> t
val is_singleton_or_more : t -> (key * value) IStdlib.IContainer.singleton_or_more
val fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * t
val of_seq : (key * value) Stdlib.Seq.t -> t
val pp_key : IStdlib.PrettyPrintable.F.formatter -> key -> unit
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val top : t
val is_top : t -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Backend/ClosuresSubstitution/index.html b/website/static/odoc/next/infer/Backend/ClosuresSubstitution/index.html index fe3af23c5..65455a8df 100644 --- a/website/static/odoc/next/infer/Backend/ClosuresSubstitution/index.html +++ b/website/static/odoc/next/infer/Backend/ClosuresSubstitution/index.html @@ -1,2 +1,2 @@ -ClosuresSubstitution (infer.Backend.ClosuresSubstitution)

Module Backend.ClosuresSubstitution

module L = IBase.Logging
module ExpClosure : sig ... end

value domain, with the following concretization function gamma:

module VDom : sig ... end
module Domain : sig ... end
val get_var : Domain.t -> IR.Var.t -> VDom.t
val eval_expr : Domain.t -> IR.Exp.t -> VDom.t
val eval_instr : Domain.t -> IR.Sil.instr -> Domain.t
module TransferFunctions : sig ... end
module Analyzer : sig ... end
val get_invariant_at_node : Analyzer.invariant_map -> IR.Procdesc.Node.t -> Domain.t
val replace_closure_call : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr
val replace_closure_param : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr

replace_closure_param propagates closures to function parameters, so that more functions are specialized by CCallSpecializedWithClosures.process. Note that unlike replace_closure_call running at the analysis phase, replace_closure_param should run before CCallSpecializedWithClosures.process at the capture phase.

val process_common : (IR.Procdesc.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr) -> IR.Procdesc.t -> unit
val process_closure_call : Summary.t -> unit
val process_closure_param : IR.Procdesc.t -> unit
\ No newline at end of file +ClosuresSubstitution (infer.Backend.ClosuresSubstitution)

Module Backend.ClosuresSubstitution

module L = IBase.Logging
module ExpClosure : sig ... end

value domain, with the following concretization function gamma:

module VDom : sig ... end
module Domain : sig ... end
val get_var : Domain.t -> IR.Var.t -> Domain.value
val eval_expr : Domain.t -> IR.Exp.t -> Domain.value
val eval_instr : Domain.t -> IR.Sil.instr -> Domain.t
module TransferFunctions : sig ... end
module Analyzer : sig ... end
val get_invariant_at_node : Analyzer.invariant_map -> IR.Procdesc.Node.t -> Domain.t
val replace_closure_call : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr
val replace_closure_param : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr

replace_closure_param propagates closures to function parameters, so that more functions are specialized by CCallSpecializedWithClosures.process. Note that unlike replace_closure_call running at the analysis phase, replace_closure_param should run before CCallSpecializedWithClosures.process at the capture phase.

val process_common : (IR.Procdesc.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr) -> IR.Procdesc.t -> unit
val process_closure_call : Summary.t -> unit
val process_closure_param : IR.Procdesc.t -> unit
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Backend/Payloads/index.html b/website/static/odoc/next/infer/Backend/Payloads/index.html index eac08c490..658e974fa 100644 --- a/website/static/odoc/next/infer/Backend/Payloads/index.html +++ b/website/static/odoc/next/infer/Backend/Payloads/index.html @@ -1,2 +1,2 @@ -Payloads (infer.Backend.Payloads)

Module Backend.Payloads

include sig ... end
type t = {
annot_map : Checkers.AnnotationReachabilityDomain.t option;
biabduction : Biabduction.BiabductionSummary.t option;
buffer_overrun_analysis : BO.BufferOverrunAnalysisSummary.t option;
buffer_overrun_checker : BO.BufferOverrunCheckerSummary.t option;
config_checks_between_markers : Checkers.ConfigChecksBetweenMarkers.Summary.t option;
cost : Costlib.CostDomain.summary option;
lab_resource_leaks : Labs.ResourceLeakDomain.summary option;
litho_required_props : Checkers.LithoDomain.summary option;
pulse : Pulselib.PulseSummary.t option;
purity : Checkers.PurityDomain.summary option;
quandary : Quandary.QuandarySummary.t option;
racerd : Concurrency.RacerDDomain.summary option;
siof : Checkers.SiofDomain.Summary.t option;
starvation : Concurrency.StarvationDomain.summary option;
nullsafe : Nullsafe.NullsafeSummary.t option;
uninit : Checkers.UninitDomain.Summary.t option;
}

analysis results

val uninit : t -> Checkers.UninitDomain.Summary.t option
val nullsafe : t -> Nullsafe.NullsafeSummary.t option
val starvation : t -> Concurrency.StarvationDomain.summary option
val siof : t -> Checkers.SiofDomain.Summary.t option
val racerd : t -> Concurrency.RacerDDomain.summary option
val quandary : t -> Quandary.QuandarySummary.t option
val purity : t -> Checkers.PurityDomain.summary option
val pulse : t -> Pulselib.PulseSummary.t option
val litho_required_props : t -> Checkers.LithoDomain.summary option
val lab_resource_leaks : t -> Labs.ResourceLeakDomain.summary option
val cost : t -> Costlib.CostDomain.summary option
val config_checks_between_markers : t -> Checkers.ConfigChecksBetweenMarkers.Summary.t option
val buffer_overrun_checker : t -> BO.BufferOverrunCheckerSummary.t option
val buffer_overrun_analysis : t -> BO.BufferOverrunAnalysisSummary.t option
val biabduction : t -> Biabduction.BiabductionSummary.t option
val annot_map : t -> Checkers.AnnotationReachabilityDomain.t option
module Fields : sig ... end
val pp : IStdlib.Pp.env -> Stdlib.Format.formatter -> t -> unit
val empty : t
\ No newline at end of file +Payloads (infer.Backend.Payloads)

Module Backend.Payloads

include sig ... end
type t = {
annot_map : Checkers.AnnotationReachabilityDomain.t option;
biabduction : Biabduction.BiabductionSummary.t option;
buffer_overrun_analysis : BO.BufferOverrunAnalysisSummary.t option;
buffer_overrun_checker : BO.BufferOverrunCheckerSummary.t option;
config_checks_between_markers : Checkers.ConfigChecksBetweenMarkers.Summary.t option;
cost : Costlib.CostDomain.summary option;
lab_resource_leaks : Labs.ResourceLeakDomain.summary option;
litho_required_props : Checkers.LithoDomain.summary option;
pulse : Pulselib.PulseSummary.t option;
purity : Checkers.PurityDomain.summary option;
quandary : Quandary.QuandarySummary.t option;
racerd : Concurrency.RacerDDomain.summary option;
siof : Checkers.SiofDomain.Summary.t option;
starvation : Concurrency.StarvationDomain.summary option;
nullsafe : Nullsafe.NullsafeSummary.t option;
uninit : Checkers.UninitDomain.Summary.t option;
}

analysis results

val uninit : t -> Checkers.UninitDomain.Summary.t option
val nullsafe : t -> Nullsafe.NullsafeSummary.t option
val starvation : t -> Concurrency.StarvationDomain.summary option
val siof : t -> Checkers.SiofDomain.Summary.t option
val racerd : t -> Concurrency.RacerDDomain.summary option
val quandary : t -> Quandary.QuandarySummary.t option
val purity : t -> Checkers.PurityDomain.summary option
val pulse : t -> Pulselib.PulseSummary.t option
val litho_required_props : t -> Checkers.LithoDomain.summary option
val lab_resource_leaks : t -> Labs.ResourceLeakDomain.summary option
val cost : t -> Costlib.CostDomain.summary option
val config_checks_between_markers : t -> Checkers.ConfigChecksBetweenMarkers.Summary.t option
val buffer_overrun_checker : t -> BO.BufferOverrunCheckerSummary.t option
val buffer_overrun_analysis : t -> BO.BufferOverrunAnalysisSummary.t option
val biabduction : t -> Biabduction.BiabductionSummary.t option
val annot_map : t -> Checkers.AnnotationReachabilityDomain.t option
module Fields : sig ... end
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val pp : IStdlib.Pp.env -> Stdlib.Format.formatter -> t -> unit
val empty : t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Backend/Summary/index.html b/website/static/odoc/next/infer/Backend/Summary/index.html index ef229b8c2..172d8b648 100644 --- a/website/static/odoc/next/infer/Backend/Summary/index.html +++ b/website/static/odoc/next/infer/Backend/Summary/index.html @@ -1,2 +1,2 @@ -Summary (infer.Backend.Summary)

Module Backend.Summary

module Stats : sig ... end
module Status : sig ... end
type t = {
payloads : Payloads.t;
mutable sessions : int;

Session number: how many nodes went through symbolic execution

stats : Stats.t;
status : Status.t;
proc_desc : IR.Procdesc.t;
err_log : Absint.Errlog.t;

Those are issues that are detected for this procedure after per-procedure analysis. In addition to that there can be errors detected after file-level analysis (next stage after per-procedure analysis). This latter category of errors should NOT be written here, use IssueLog and its serialization capabilities instead.

mutable callee_pnames : IR.Procname.Set.t;
}

summary of a procedure name

val get_proc_name : t -> IR.Procname.t

Get the procedure name

val get_proc_desc : t -> IR.Procdesc.t
val get_err_log : t -> Absint.Errlog.t
val get_status : t -> Status.t

Return the status (active v.s. inactive) of a procedure summary

val pp_html : IBase.SourceFile.t -> Stdlib.Format.formatter -> t -> unit

Print the summary in html format

val pp_text : Stdlib.Format.formatter -> t -> unit

Print the summary in text format

module OnDisk : sig ... end
\ No newline at end of file +Summary (infer.Backend.Summary)

Module Backend.Summary

module Stats : sig ... end
module Status : sig ... end
type t = {
payloads : Payloads.t;
mutable sessions : int;

Session number: how many nodes went through symbolic execution

stats : Stats.t;
status : Status.t;
proc_desc : IR.Procdesc.t;
err_log : Absint.Errlog.t;

Those are issues that are detected for this procedure after per-procedure analysis. In addition to that there can be errors detected after file-level analysis (next stage after per-procedure analysis). This latter category of errors should NOT be written here, use IssueLog and its serialization capabilities instead.

mutable callee_pnames : IR.Procname.Set.t;
}

summary of a procedure name

val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val get_proc_name : t -> IR.Procname.t

Get the procedure name

val get_proc_desc : t -> IR.Procdesc.t
val get_err_log : t -> Absint.Errlog.t
val get_status : t -> Status.t

Return the status (active v.s. inactive) of a procedure summary

val pp_html : IBase.SourceFile.t -> Stdlib.Format.formatter -> t -> unit

Print the summary in html format

val pp_text : Stdlib.Format.formatter -> t -> unit

Print the summary in text format

module OnDisk : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Backend__ClosuresSubstitution/Domain/index.html b/website/static/odoc/next/infer/Backend__ClosuresSubstitution/Domain/index.html index 42cfd111a..db09e6dcf 100644 --- a/website/static/odoc/next/infer/Backend__ClosuresSubstitution/Domain/index.html +++ b/website/static/odoc/next/infer/Backend__ClosuresSubstitution/Domain/index.html @@ -1,2 +1,2 @@ -Domain (infer.Backend__ClosuresSubstitution.Domain)

Module Backend__ClosuresSubstitution.Domain

type key = IR.Var.t
type value = VDom.t
type t = Absint__AbstractDomain.Map(IR.Var)(VDom).t
val empty : t
val is_empty : t -> bool
val mem : key -> t -> bool
val add : key -> value -> t -> t
val update : key -> (value option -> value option) -> t -> t
val singleton : key -> value -> t
val remove : key -> t -> t
val merge : (key -> value option -> value option -> value option) -> t -> t -> t
val union : (key -> value -> value -> value option) -> t -> t -> t
val compare : (value -> value -> int) -> t -> t -> int
val equal : (value -> value -> bool) -> t -> t -> bool
val iter : (key -> value -> unit) -> t -> unit
val fold : (key -> value -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (key -> value -> bool) -> t -> bool
val exists : (key -> value -> bool) -> t -> bool
val filter : (key -> value -> bool) -> t -> t
val partition : (key -> value -> bool) -> t -> t * t
val cardinal : t -> int
val bindings : t -> (key * value) list
val min_binding : t -> key * value
val min_binding_opt : t -> (key * value) option
val max_binding : t -> key * value
val max_binding_opt : t -> (key * value) option
val choose : t -> key * value
val choose_opt : t -> (key * value) option
val split : key -> t -> t * value option * t
val find : key -> t -> value
val find_opt : key -> t -> value option
val find_first : (key -> bool) -> t -> key * value
val find_first_opt : (key -> bool) -> t -> (key * value) option
val find_last : (key -> bool) -> t -> key * value
val find_last_opt : (key -> bool) -> t -> (key * value) option
val map : (value -> value) -> t -> t
val mapi : (key -> value -> value) -> t -> t
val is_singleton_or_more : t -> (key * value) IStdlib.IContainer.singleton_or_more
val fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * t
val of_seq : (key * value) Stdlib.Seq.t -> t
val pp_key : IStdlib.PrettyPrintable.F.formatter -> key -> unit
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bottom : t
val is_bottom : t -> bool
\ No newline at end of file +Domain (infer.Backend__ClosuresSubstitution.Domain)

Module Backend__ClosuresSubstitution.Domain

type key = IR.Var.t
type value = VDom.t
type t = Absint__AbstractDomain.SafeInvertedMap(IR.Var)(VDom).t
val empty : t
val is_empty : t -> bool
val mem : key -> t -> bool
val add : key -> value -> t -> t
val update : key -> (value option -> value option) -> t -> t
val singleton : key -> value -> t
val remove : key -> t -> t
val merge : (key -> value option -> value option -> value option) -> t -> t -> t
val union : (key -> value -> value -> value option) -> t -> t -> t
val compare : (value -> value -> int) -> t -> t -> int
val equal : (value -> value -> bool) -> t -> t -> bool
val iter : (key -> value -> unit) -> t -> unit
val fold : (key -> value -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (key -> value -> bool) -> t -> bool
val exists : (key -> value -> bool) -> t -> bool
val filter : (key -> value -> bool) -> t -> t
val partition : (key -> value -> bool) -> t -> t * t
val cardinal : t -> int
val bindings : t -> (key * value) list
val min_binding : t -> key * value
val min_binding_opt : t -> (key * value) option
val max_binding : t -> key * value
val max_binding_opt : t -> (key * value) option
val choose : t -> key * value
val choose_opt : t -> (key * value) option
val split : key -> t -> t * value option * t
val find : key -> t -> value
val find_opt : key -> t -> value option
val find_first : (key -> bool) -> t -> key * value
val find_first_opt : (key -> bool) -> t -> (key * value) option
val find_last : (key -> bool) -> t -> key * value
val find_last_opt : (key -> bool) -> t -> (key * value) option
val map : (value -> value) -> t -> t
val mapi : (key -> value -> value) -> t -> t
val is_singleton_or_more : t -> (key * value) IStdlib.IContainer.singleton_or_more
val fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * t
val of_seq : (key * value) Stdlib.Seq.t -> t
val pp_key : IStdlib.PrettyPrintable.F.formatter -> key -> unit
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val top : t
val is_top : t -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Backend__ClosuresSubstitution/index.html b/website/static/odoc/next/infer/Backend__ClosuresSubstitution/index.html index 71eb7ddbc..aa5c490fb 100644 --- a/website/static/odoc/next/infer/Backend__ClosuresSubstitution/index.html +++ b/website/static/odoc/next/infer/Backend__ClosuresSubstitution/index.html @@ -1,2 +1,2 @@ -Backend__ClosuresSubstitution (infer.Backend__ClosuresSubstitution)

Module Backend__ClosuresSubstitution

module L = IBase.Logging
module ExpClosure : sig ... end

value domain, with the following concretization function gamma:

module VDom : sig ... end
module Domain : sig ... end
val get_var : Domain.t -> IR.Var.t -> VDom.t
val eval_expr : Domain.t -> IR.Exp.t -> VDom.t
val eval_instr : Domain.t -> IR.Sil.instr -> Domain.t
module TransferFunctions : sig ... end
module Analyzer : sig ... end
val get_invariant_at_node : Analyzer.invariant_map -> IR.Procdesc.Node.t -> Domain.t
val replace_closure_call : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr
val replace_closure_param : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr

replace_closure_param propagates closures to function parameters, so that more functions are specialized by CCallSpecializedWithClosures.process. Note that unlike replace_closure_call running at the analysis phase, replace_closure_param should run before CCallSpecializedWithClosures.process at the capture phase.

val process_common : (IR.Procdesc.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr) -> IR.Procdesc.t -> unit
val process_closure_call : Backend.Summary.t -> unit
val process_closure_param : IR.Procdesc.t -> unit
\ No newline at end of file +Backend__ClosuresSubstitution (infer.Backend__ClosuresSubstitution)

Module Backend__ClosuresSubstitution

module L = IBase.Logging
module ExpClosure : sig ... end

value domain, with the following concretization function gamma:

module VDom : sig ... end
module Domain : sig ... end
val get_var : Domain.t -> IR.Var.t -> Domain.value
val eval_expr : Domain.t -> IR.Exp.t -> Domain.value
val eval_instr : Domain.t -> IR.Sil.instr -> Domain.t
module TransferFunctions : sig ... end
module Analyzer : sig ... end
val get_invariant_at_node : Analyzer.invariant_map -> IR.Procdesc.Node.t -> Domain.t
val replace_closure_call : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr
val replace_closure_param : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr

replace_closure_param propagates closures to function parameters, so that more functions are specialized by CCallSpecializedWithClosures.process. Note that unlike replace_closure_call running at the analysis phase, replace_closure_param should run before CCallSpecializedWithClosures.process at the capture phase.

val process_common : (IR.Procdesc.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr) -> IR.Procdesc.t -> unit
val process_closure_call : Backend.Summary.t -> unit
val process_closure_param : IR.Procdesc.t -> unit
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Backend__Payloads/index.html b/website/static/odoc/next/infer/Backend__Payloads/index.html index 99b0a2c55..cddb1974e 100644 --- a/website/static/odoc/next/infer/Backend__Payloads/index.html +++ b/website/static/odoc/next/infer/Backend__Payloads/index.html @@ -1,2 +1,2 @@ -Backend__Payloads (infer.Backend__Payloads)

Module Backend__Payloads

include sig ... end
type t = {
annot_map : Checkers.AnnotationReachabilityDomain.t option;
biabduction : Biabduction.BiabductionSummary.t option;
buffer_overrun_analysis : BO.BufferOverrunAnalysisSummary.t option;
buffer_overrun_checker : BO.BufferOverrunCheckerSummary.t option;
config_checks_between_markers : Checkers.ConfigChecksBetweenMarkers.Summary.t option;
cost : Costlib.CostDomain.summary option;
lab_resource_leaks : Labs.ResourceLeakDomain.summary option;
litho_required_props : Checkers.LithoDomain.summary option;
pulse : Pulselib.PulseSummary.t option;
purity : Checkers.PurityDomain.summary option;
quandary : Quandary.QuandarySummary.t option;
racerd : Concurrency.RacerDDomain.summary option;
siof : Checkers.SiofDomain.Summary.t option;
starvation : Concurrency.StarvationDomain.summary option;
nullsafe : Nullsafe.NullsafeSummary.t option;
uninit : Checkers.UninitDomain.Summary.t option;
}

analysis results

val uninit : t -> Checkers.UninitDomain.Summary.t option
val nullsafe : t -> Nullsafe.NullsafeSummary.t option
val starvation : t -> Concurrency.StarvationDomain.summary option
val siof : t -> Checkers.SiofDomain.Summary.t option
val racerd : t -> Concurrency.RacerDDomain.summary option
val quandary : t -> Quandary.QuandarySummary.t option
val purity : t -> Checkers.PurityDomain.summary option
val pulse : t -> Pulselib.PulseSummary.t option
val litho_required_props : t -> Checkers.LithoDomain.summary option
val lab_resource_leaks : t -> Labs.ResourceLeakDomain.summary option
val cost : t -> Costlib.CostDomain.summary option
val config_checks_between_markers : t -> Checkers.ConfigChecksBetweenMarkers.Summary.t option
val buffer_overrun_checker : t -> BO.BufferOverrunCheckerSummary.t option
val buffer_overrun_analysis : t -> BO.BufferOverrunAnalysisSummary.t option
val biabduction : t -> Biabduction.BiabductionSummary.t option
val annot_map : t -> Checkers.AnnotationReachabilityDomain.t option
module Fields : sig ... end
val pp : IStdlib.Pp.env -> Stdlib.Format.formatter -> t -> unit
val empty : t
\ No newline at end of file +Backend__Payloads (infer.Backend__Payloads)

Module Backend__Payloads

include sig ... end
type t = {
annot_map : Checkers.AnnotationReachabilityDomain.t option;
biabduction : Biabduction.BiabductionSummary.t option;
buffer_overrun_analysis : BO.BufferOverrunAnalysisSummary.t option;
buffer_overrun_checker : BO.BufferOverrunCheckerSummary.t option;
config_checks_between_markers : Checkers.ConfigChecksBetweenMarkers.Summary.t option;
cost : Costlib.CostDomain.summary option;
lab_resource_leaks : Labs.ResourceLeakDomain.summary option;
litho_required_props : Checkers.LithoDomain.summary option;
pulse : Pulselib.PulseSummary.t option;
purity : Checkers.PurityDomain.summary option;
quandary : Quandary.QuandarySummary.t option;
racerd : Concurrency.RacerDDomain.summary option;
siof : Checkers.SiofDomain.Summary.t option;
starvation : Concurrency.StarvationDomain.summary option;
nullsafe : Nullsafe.NullsafeSummary.t option;
uninit : Checkers.UninitDomain.Summary.t option;
}

analysis results

val uninit : t -> Checkers.UninitDomain.Summary.t option
val nullsafe : t -> Nullsafe.NullsafeSummary.t option
val starvation : t -> Concurrency.StarvationDomain.summary option
val siof : t -> Checkers.SiofDomain.Summary.t option
val racerd : t -> Concurrency.RacerDDomain.summary option
val quandary : t -> Quandary.QuandarySummary.t option
val purity : t -> Checkers.PurityDomain.summary option
val pulse : t -> Pulselib.PulseSummary.t option
val litho_required_props : t -> Checkers.LithoDomain.summary option
val lab_resource_leaks : t -> Labs.ResourceLeakDomain.summary option
val cost : t -> Costlib.CostDomain.summary option
val config_checks_between_markers : t -> Checkers.ConfigChecksBetweenMarkers.Summary.t option
val buffer_overrun_checker : t -> BO.BufferOverrunCheckerSummary.t option
val buffer_overrun_analysis : t -> BO.BufferOverrunAnalysisSummary.t option
val biabduction : t -> Biabduction.BiabductionSummary.t option
val annot_map : t -> Checkers.AnnotationReachabilityDomain.t option
module Fields : sig ... end
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val pp : IStdlib.Pp.env -> Stdlib.Format.formatter -> t -> unit
val empty : t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Backend__Summary/index.html b/website/static/odoc/next/infer/Backend__Summary/index.html index 3fc61c4c7..40e7198d6 100644 --- a/website/static/odoc/next/infer/Backend__Summary/index.html +++ b/website/static/odoc/next/infer/Backend__Summary/index.html @@ -1,2 +1,2 @@ -Backend__Summary (infer.Backend__Summary)

Module Backend__Summary

module Stats : sig ... end
module Status : sig ... end
type t = {
payloads : Backend.Payloads.t;
mutable sessions : int;

Session number: how many nodes went through symbolic execution

stats : Stats.t;
status : Status.t;
proc_desc : IR.Procdesc.t;
err_log : Absint.Errlog.t;

Those are issues that are detected for this procedure after per-procedure analysis. In addition to that there can be errors detected after file-level analysis (next stage after per-procedure analysis). This latter category of errors should NOT be written here, use IssueLog and its serialization capabilities instead.

mutable callee_pnames : IR.Procname.Set.t;
}

summary of a procedure name

val get_proc_name : t -> IR.Procname.t

Get the procedure name

val get_proc_desc : t -> IR.Procdesc.t
val get_err_log : t -> Absint.Errlog.t
val get_status : t -> Status.t

Return the status (active v.s. inactive) of a procedure summary

val pp_html : IBase.SourceFile.t -> Stdlib.Format.formatter -> t -> unit

Print the summary in html format

val pp_text : Stdlib.Format.formatter -> t -> unit

Print the summary in text format

module OnDisk : sig ... end
\ No newline at end of file +Backend__Summary (infer.Backend__Summary)

Module Backend__Summary

module Stats : sig ... end
module Status : sig ... end
type t = {
payloads : Backend.Payloads.t;
mutable sessions : int;

Session number: how many nodes went through symbolic execution

stats : Stats.t;
status : Status.t;
proc_desc : IR.Procdesc.t;
err_log : Absint.Errlog.t;

Those are issues that are detected for this procedure after per-procedure analysis. In addition to that there can be errors detected after file-level analysis (next stage after per-procedure analysis). This latter category of errors should NOT be written here, use IssueLog and its serialization capabilities instead.

mutable callee_pnames : IR.Procname.Set.t;
}

summary of a procedure name

val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val get_proc_name : t -> IR.Procname.t

Get the procedure name

val get_proc_desc : t -> IR.Procdesc.t
val get_err_log : t -> Absint.Errlog.t
val get_status : t -> Status.t

Return the status (active v.s. inactive) of a procedure summary

val pp_html : IBase.SourceFile.t -> Stdlib.Format.formatter -> t -> unit

Print the summary in html format

val pp_text : Stdlib.Format.formatter -> t -> unit

Print the summary in text format

module OnDisk : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend/CTrans_utils/Self/index.html b/website/static/odoc/next/infer/ClangFrontend/CTrans_utils/Self/index.html index be17ae9db..ffa18a8e8 100644 --- a/website/static/odoc/next/infer/ClangFrontend/CTrans_utils/Self/index.html +++ b/website/static/odoc/next/infer/ClangFrontend/CTrans_utils/Self/index.html @@ -1,2 +1,2 @@ -Self (infer.ClangFrontend.CTrans_utils.Self)

Module CTrans_utils.Self

This module handles the translation of the variable self which is challenging because self is used both as a variable in instance method calls and also as a type in class method calls.

exception SelfClassException of {
class_name : IR.Typ.Name.t;
position : IBase.Logging.ocaml_pos;
source_range : ATDGenerated.Clang_ast_t.source_range;
}
val add_self_parameter_for_super_instance : ATDGenerated.Clang_ast_t.stmt_info -> CContext.t -> IR.Procname.t -> IBase.Location.t -> ATDGenerated.Clang_ast_t.obj_c_message_expr_info -> trans_result option
val is_var_self : IR.Pvar.t -> bool -> bool
\ No newline at end of file +Self (infer.ClangFrontend.CTrans_utils.Self)

Module CTrans_utils.Self

This module handles the translation of the variable self which is challenging because self is used both as a variable in instance method calls and also as a type in class method calls.

val add_self_parameter_for_super_instance : ATDGenerated.Clang_ast_t.stmt_info -> CContext.t -> IR.Procname.t -> IBase.Location.t -> ATDGenerated.Clang_ast_t.obj_c_message_expr_info -> trans_result option
val is_var_self : IR.Pvar.t -> bool -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend/CTrans_utils/index.html b/website/static/odoc/next/infer/ClangFrontend/CTrans_utils/index.html index 82b4bf01b..3fc466334 100644 --- a/website/static/odoc/next/infer/ClangFrontend/CTrans_utils/index.html +++ b/website/static/odoc/next/infer/ClangFrontend/CTrans_utils/index.html @@ -1,2 +1,2 @@ -CTrans_utils (infer.ClangFrontend.CTrans_utils)

Module ClangFrontend.CTrans_utils

type continuation = {
break : IR.Procdesc.Node.t list;
continue : IR.Procdesc.Node.t list;
return_temp : bool;

true if temps should not be removed in the node but returned to ancestors

}
type priority_node =
| Free
| Busy of ATDGenerated.Clang_ast_t.pointer
type trans_state = {
context : CContext.t;

current context of the translation

succ_nodes : IR.Procdesc.Node.t list;

successor nodes in the cfg

continuation : continuation option;

current continuation

priority : priority_node;
var_exp_typ : (IR.Exp.t * IR.Typ.t) option;
opaque_exp : (IR.Exp.t * IR.Typ.t) option;
is_fst_arg_objc_instance_method_call : bool;
passed_as_noescape_block_to : IR.Procname.t option;
}

A translation state. It provides the translation function with the info it needs to carry on the translation.

val default_trans_state : CContext.t -> trans_state
type control = {
root_nodes : IR.Procdesc.Node.t list;

Top cfg nodes (root) created by the translation

leaf_nodes : IR.Procdesc.Node.t list;

Bottom cfg nodes (leaf) created by the translate

instrs : IR.Sil.instr list;

list of SIL instruction that need to be placed in cfg nodes of the parent

initd_exps : IR.Exp.t list;

list of expressions that are initialised by the instructions

}

Part of the translation result that is (loosely) related to control flow graph construction. More importantly, this is the part of a trans_result that some internal translation functions work on when constructing a trans_result before the other components of the translation result are available (such as the return expression). This is made into a separate type to make intermediate computations easier to write and easier to typecheck.

type trans_result = {
control : control;
return : IR.Exp.t * IR.Typ.t;

value returned by the translated statement

method_name : IR.Procname.t option;

in the specific case of translating a method call in C++, we get the method name called at the same time we get the this object that contains the method. The this instance object is returned as the return field, while the method to call is filled in here. This field is None in all other cases.

is_cpp_call_virtual : bool;
}

A translation result. It is returned by the translation function.

val empty_control : control
val mk_trans_result : ?⁠method_name:IR.BuiltinDecl.t -> ?⁠is_cpp_call_virtual:bool -> (IR.Exp.t * IR.Typ.typ) -> control -> trans_result
val undefined_expression : unit -> IR.Exp.t
val collect_controls : IR.Procdesc.t -> control list -> control

Collect the results of translating a list of instructions, and link up the nodes created.

val collect_trans_results : IR.Procdesc.t -> return:(IR.Exp.t * IR.Typ.t) -> trans_result list -> trans_result
val is_return_temp : continuation option -> bool
val mk_cond_continuation : continuation option -> continuation option
val define_condition_side_effects : (IR.Exp.t * IR.Typ.t) -> IR.Sil.instr list -> IBase.Location.t -> (IR.Exp.t * IR.Typ.t) * IR.Sil.instr list
val source_range_of_stmt : ATDGenerated.Clang_ast_t.stmt -> ATDGenerated.Clang_ast_t.source_range
val extract_stmt_from_singleton : ATDGenerated.Clang_ast_t.stmt list -> ATDGenerated.Clang_ast_t.source_range -> string -> ATDGenerated.Clang_ast_t.stmt
val is_null_stmt : ATDGenerated.Clang_ast_t.stmt -> bool
val dereference_var_sil : (IR.Exp.t * IR.Typ.t) -> IBase.Location.t -> IR.Sil.instr * IR.Exp.t
val dereference_value_from_result : ?⁠strip_pointer:bool -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result -> trans_result

Given a trans_result, create a temporary variable with dereferenced value of an expression assigned to it

val cast_operation : ?⁠objc_bridge_cast_kind:ATDGenerated.Clang_ast_t.obj_c_bridge_cast_kind -> ATDGenerated.Clang_ast_t.cast_kind -> (IR.Exp.t * IR.Typ.t) -> IR.Typ.t -> IBase.Location.t -> IR.Sil.instr list * (IR.Exp.t * IR.Typ.t)
val trans_assertion : trans_state -> IBase.Location.t -> trans_result
val contains_opaque_value_expr : ATDGenerated.Clang_ast_t.stmt -> bool
val builtin_trans : trans_state -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result list -> IR.Procname.t -> trans_result option
val cxx_method_builtin_trans : trans_state -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result list -> IR.Procname.t -> trans_result option
val new_or_alloc_trans : trans_state -> IBase.Location.t -> ATDGenerated.Clang_ast_t.stmt_info -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.Name.t option -> string -> trans_result
val cpp_new_trans : IR.Typ.IntegerWidths.t -> IBase.Location.t -> IR.Typ.t -> IR.Exp.t option -> (IR.Exp.t * IR.Typ.typ) list -> trans_result
module Nodes : sig ... end

Module for creating cfg nodes and other utility functions related to them.

module PriorityNode : sig ... end

priority_node is used to enforce some kind of policy for creating nodes in the cfg. Certain elements of the AST _must_ create nodes therefore there is no need for them to use priority_node. Certain elements instead need or need not to create a node depending of certain factors. When an element of the latter kind wants to create a node it must claim priority first (like taking a lock). priority can be claimes only when it is free. If an element of AST succedes in claiming priority its id (pointer) is recorded in priority. After an element has finished it frees the priority. In general an AST element E checks if an ancestor has claimed priority. If priority is already claimed E does not have to create a node. If priority is free then it means E has to create the node. Then E claims priority and release it afterward.

module GotoLabel : sig ... end

Module for translating goto instructions by keeping a map of labels.

module Loops : sig ... end

Module that provides utility functions for translating different types of loops.

module Self : sig ... end

This module handles the translation of the variable self which is challenging because self is used both as a variable in instance method calls and also as a type in class method calls.

val is_logical_negation_of_int : IR.Tenv.t -> ATDGenerated.Clang_ast_t.expr_info -> ATDGenerated.Clang_ast_t.unary_operator_info -> bool
val mk_fresh_void_exp_typ : unit -> IR.Exp.t * IR.Typ.t
val mk_fresh_void_id_typ : unit -> IR.Ident.t * IR.Typ.t
val mk_fresh_void_return : unit -> (IR.Ident.t * IR.Typ.t) * (IR.Exp.t * IR.Typ.t)
val last_or_mk_fresh_void_exp_typ : (IR.Exp.t * IR.Typ.t) list -> IR.Exp.t * IR.Typ.t
\ No newline at end of file +CTrans_utils (infer.ClangFrontend.CTrans_utils)

Module ClangFrontend.CTrans_utils

type continuation = {
break : IR.Procdesc.Node.t list;
continue : IR.Procdesc.Node.t list;
return_temp : bool;

true if temps should not be removed in the node but returned to ancestors

}
type priority_node =
| Free
| Busy of ATDGenerated.Clang_ast_t.pointer
type trans_state = {
context : CContext.t;

current context of the translation

succ_nodes : IR.Procdesc.Node.t list;

successor nodes in the cfg

continuation : continuation option;

current continuation

priority : priority_node;
var_exp_typ : (IR.Exp.t * IR.Typ.t) option;
opaque_exp : (IR.Exp.t * IR.Typ.t) option;
is_fst_arg_objc_instance_method_call : bool;
passed_as_noescape_block_to : IR.Procname.t option;
}

A translation state. It provides the translation function with the info it needs to carry on the translation.

val default_trans_state : CContext.t -> trans_state
type control = {
root_nodes : IR.Procdesc.Node.t list;

Top cfg nodes (root) created by the translation

leaf_nodes : IR.Procdesc.Node.t list;

Bottom cfg nodes (leaf) created by the translate

instrs : IR.Sil.instr list;

list of SIL instruction that need to be placed in cfg nodes of the parent

initd_exps : IR.Exp.t list;

list of expressions that are initialised by the instructions

}

Part of the translation result that is (loosely) related to control flow graph construction. More importantly, this is the part of a trans_result that some internal translation functions work on when constructing a trans_result before the other components of the translation result are available (such as the return expression). This is made into a separate type to make intermediate computations easier to write and easier to typecheck.

type trans_result = {
control : control;
return : IR.Exp.t * IR.Typ.t;

value returned by the translated statement

method_name : IR.Procname.t option;

in the specific case of translating a method call in C++, we get the method name called at the same time we get the this object that contains the method. The this instance object is returned as the return field, while the method to call is filled in here. This field is None in all other cases.

is_cpp_call_virtual : bool;
}

A translation result. It is returned by the translation function.

val empty_control : control
val mk_trans_result : ?⁠method_name:IR.BuiltinDecl.t -> ?⁠is_cpp_call_virtual:bool -> (IR.Exp.t * IR.Typ.t) -> control -> trans_result
val undefined_expression : unit -> IR.Exp.t
val collect_controls : IR.Procdesc.t -> control list -> control

Collect the results of translating a list of instructions, and link up the nodes created.

val collect_trans_results : IR.Procdesc.t -> return:(IR.Exp.t * IR.Typ.t) -> trans_result list -> trans_result
val is_return_temp : continuation option -> bool
val mk_cond_continuation : continuation option -> continuation option
val define_condition_side_effects : (IR.Exp.t * IR.Typ.t) -> IR.Sil.instr list -> IBase.Location.t -> (IR.Exp.t * IR.Typ.t) * IR.Sil.instr list
val source_range_of_stmt : ATDGenerated.Clang_ast_t.stmt -> ATDGenerated.Clang_ast_t.source_range
val extract_stmt_from_singleton : ATDGenerated.Clang_ast_t.stmt list -> ATDGenerated.Clang_ast_t.source_range -> string -> ATDGenerated.Clang_ast_t.stmt
val is_null_stmt : ATDGenerated.Clang_ast_t.stmt -> bool
val dereference_var_sil : (IR.Exp.t * IR.Typ.t) -> IBase.Location.t -> IR.Sil.instr * IR.Exp.t
val dereference_value_from_result : ?⁠strip_pointer:bool -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result -> trans_result

Given a trans_result, create a temporary variable with dereferenced value of an expression assigned to it

val cast_operation : ?⁠objc_bridge_cast_kind:ATDGenerated.Clang_ast_t.obj_c_bridge_cast_kind -> ATDGenerated.Clang_ast_t.cast_kind -> (IR.Exp.t * IR.Typ.t) -> IR.Typ.t -> IBase.Location.t -> IR.Sil.instr list * (IR.Exp.t * IR.Typ.t)
val trans_assertion : trans_state -> IBase.Location.t -> trans_result
val contains_opaque_value_expr : ATDGenerated.Clang_ast_t.stmt -> bool
val builtin_trans : trans_state -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result list -> IR.Procname.t -> trans_result option
val cxx_method_builtin_trans : trans_state -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result list -> IR.Procname.t -> trans_result option
val new_or_alloc_trans : trans_state -> IBase.Location.t -> ATDGenerated.Clang_ast_t.stmt_info -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.Name.t option -> string -> trans_result
val cpp_new_trans : IR.Typ.IntegerWidths.t -> IBase.Location.t -> IR.Typ.t -> IR.Exp.t option -> (IR.Exp.t * IR.Typ.t) list -> trans_result
module Nodes : sig ... end

Module for creating cfg nodes and other utility functions related to them.

module PriorityNode : sig ... end

priority_node is used to enforce some kind of policy for creating nodes in the cfg. Certain elements of the AST _must_ create nodes therefore there is no need for them to use priority_node. Certain elements instead need or need not to create a node depending of certain factors. When an element of the latter kind wants to create a node it must claim priority first (like taking a lock). priority can be claimes only when it is free. If an element of AST succedes in claiming priority its id (pointer) is recorded in priority. After an element has finished it frees the priority. In general an AST element E checks if an ancestor has claimed priority. If priority is already claimed E does not have to create a node. If priority is free then it means E has to create the node. Then E claims priority and release it afterward.

module GotoLabel : sig ... end

Module for translating goto instructions by keeping a map of labels.

module Loops : sig ... end

Module that provides utility functions for translating different types of loops.

module Self : sig ... end

This module handles the translation of the variable self which is challenging because self is used both as a variable in instance method calls and also as a type in class method calls.

val is_logical_negation_of_int : IR.Tenv.t -> ATDGenerated.Clang_ast_t.expr_info -> ATDGenerated.Clang_ast_t.unary_operator_info -> bool
val mk_fresh_void_exp_typ : unit -> IR.Exp.t * IR.Typ.t
val mk_fresh_void_id_typ : unit -> IR.Ident.t * IR.Typ.t
val mk_fresh_void_return : unit -> (IR.Ident.t * IR.Typ.t) * (IR.Exp.t * IR.Typ.t)
val last_or_mk_fresh_void_exp_typ : (IR.Exp.t * IR.Typ.t) list -> IR.Exp.t * IR.Typ.t
val should_remove_first_param : trans_state -> ATDGenerated.Clang_ast_t.stmt -> IR.Typ.name option

Return a class name when the first parameter should be removed according to its context, for example, when self or [x class] is given as the first parameter for a class method.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend/CType/index.html b/website/static/odoc/next/infer/ClangFrontend/CType/index.html index e9426cdf8..647a3825e 100644 --- a/website/static/odoc/next/infer/ClangFrontend/CType/index.html +++ b/website/static/odoc/next/infer/ClangFrontend/CType/index.html @@ -1,2 +1,2 @@ -CType (infer.ClangFrontend.CType)

Module ClangFrontend.CType

val add_pointer_to_typ : IR.Typ.t -> IR.Typ.t
val objc_classname_of_type : IR.Typ.t -> IR.Typ.Name.t
val is_class : IR.Typ.t -> bool
val return_type_of_function_type : ATDGenerated.Clang_ast_t.qual_type -> ATDGenerated.Clang_ast_t.qual_type
val is_block_type : ATDGenerated.Clang_ast_t.qual_type -> bool
val is_reference_type : ATDGenerated.Clang_ast_t.qual_type -> bool
val is_pointer_to_const : ATDGenerated.Clang_ast_t.qual_type -> bool
\ No newline at end of file +CType (infer.ClangFrontend.CType)

Module ClangFrontend.CType

val add_pointer_to_typ : IR.Typ.t -> IR.Typ.t
val objc_classname_of_type : IR.Typ.t -> IR.Typ.Name.t
val objc_classname_of_desc : IR.Typ.desc -> IR.Typ.Name.t
val is_class : IR.Typ.t -> bool
val return_type_of_function_type : ATDGenerated.Clang_ast_t.qual_type -> ATDGenerated.Clang_ast_t.qual_type
val is_block_type : ATDGenerated.Clang_ast_t.qual_type -> bool
val is_reference_type : ATDGenerated.Clang_ast_t.qual_type -> bool
val is_pointer_to_const : ATDGenerated.Clang_ast_t.qual_type -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend/CType_decl/index.html b/website/static/odoc/next/infer/ClangFrontend/CType_decl/index.html index 1c890df3f..4610bcfa6 100644 --- a/website/static/odoc/next/infer/ClangFrontend/CType_decl/index.html +++ b/website/static/odoc/next/infer/ClangFrontend/CType_decl/index.html @@ -1,2 +1,2 @@ -CType_decl (infer.ClangFrontend.CType_decl)

Module ClangFrontend.CType_decl

module CProcname : sig ... end
val get_record_typename : ?⁠tenv:IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.Name.t
val add_types_from_decl_to_tenv : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.desc
val add_predefined_types : IR.Tenv.t -> unit

Add the predefined types objc_class which is a struct, and Class, which is a pointer to objc_class.

val qual_type_to_sil_type : IR.Tenv.t -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.t
val class_from_pointer_type : IR.Tenv.t -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.Name.t
val get_type_from_expr_info : ATDGenerated.Clang_ast_t.expr_info -> IR.Tenv.t -> IR.Typ.t
val method_signature_of_decl : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> ?⁠block_return_type:ATDGenerated.Clang_ast_t.qual_type -> ?⁠passed_as_noescape_block_to:IR.Procname.t option -> IR.Procname.t -> CMethodSignature.t
val method_signature_body_of_decl : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> ?⁠block_return_type:ATDGenerated.Clang_ast_t.qual_type -> ?⁠passed_as_noescape_block_to:IR.Procname.t option -> IR.Procname.t -> CMethodSignature.t * ATDGenerated.Clang_ast_t.stmt option * [> `CXXConstructorInit of ATDGenerated.Clang_ast_t.cxx_ctor_initializer ] list
val should_add_return_param : IR.Typ.typ -> is_objc_method:bool -> bool
val type_of_captured_var : IR.Tenv.t -> is_block_inside_objc_class_method:bool -> ATDGenerated.Clang_ast_t.decl_ref -> IR.Typ.typ option
\ No newline at end of file +CType_decl (infer.ClangFrontend.CType_decl)

Module ClangFrontend.CType_decl

module CProcname : sig ... end
val get_record_typename : ?⁠tenv:IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.Name.t
val add_types_from_decl_to_tenv : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.desc
val add_predefined_types : IR.Tenv.t -> unit

Add the predefined types objc_class which is a struct, and Class, which is a pointer to objc_class.

val qual_type_to_sil_type : IR.Tenv.t -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.t
val class_from_pointer_type : IR.Tenv.t -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.Name.t
val get_type_from_expr_info : ATDGenerated.Clang_ast_t.expr_info -> IR.Tenv.t -> IR.Typ.t
val method_signature_of_decl : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> ?⁠block_return_type:ATDGenerated.Clang_ast_t.qual_type -> ?⁠passed_as_noescape_block_to:IR.Procname.t option -> IR.Procname.t -> CMethodSignature.t
val method_signature_body_of_decl : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> ?⁠block_return_type:ATDGenerated.Clang_ast_t.qual_type -> ?⁠passed_as_noescape_block_to:IR.Procname.t option -> IR.Procname.t -> CMethodSignature.t * ATDGenerated.Clang_ast_t.stmt option * [> `CXXConstructorInit of ATDGenerated.Clang_ast_t.cxx_ctor_initializer ] list
val should_add_return_param : IR.Typ.t -> is_objc_method:bool -> bool
val type_of_captured_var : IR.Tenv.t -> is_block_inside_objc_class_method:bool -> ATDGenerated.Clang_ast_t.decl_ref -> IR.Typ.t option
\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend/CVar_decl/index.html b/website/static/odoc/next/infer/ClangFrontend/CVar_decl/index.html index 060059d1b..f33b76aab 100644 --- a/website/static/odoc/next/infer/ClangFrontend/CVar_decl/index.html +++ b/website/static/odoc/next/infer/ClangFrontend/CVar_decl/index.html @@ -1,2 +1,2 @@ -CVar_decl (infer.ClangFrontend.CVar_decl)

Module ClangFrontend.CVar_decl

val sil_var_of_decl : CContext.t -> ATDGenerated.Clang_ast_t.decl -> IR.Procname.t -> IR.Pvar.t
val sil_var_of_decl_ref : CContext.t -> ATDGenerated.Clang_ast_t.source_range -> ATDGenerated.Clang_ast_t.decl_ref -> IR.Procname.t -> IR.Pvar.t
val add_var_to_locals : IR.Procdesc.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.t -> IR.Pvar.t -> unit
val sil_var_of_captured_var : CContext.t -> ATDGenerated.Clang_ast_t.source_range -> IR.Procname.t -> ATDGenerated.Clang_ast_t.decl_ref -> (IR.Pvar.t * IR.Typ.typ) option
val captured_vars_from_block_info : CContext.t -> ATDGenerated.Clang_ast_t.source_range -> ATDGenerated.Clang_ast_t.block_captured_variable list -> (IR.Pvar.t * IR.Typ.t) list
val mk_temp_sil_var : IR.Procdesc.t -> name:string -> IR.Pvar.t
val mk_temp_sil_var_for_expr : CContext.t -> name:string -> clang_pointer:int -> ATDGenerated.Clang_ast_t.expr_info -> IR.Pvar.t * IR.Typ.t
val materialize_cpp_temporary : CContext.t -> ATDGenerated.Clang_ast_t.stmt_info -> ATDGenerated.Clang_ast_t.expr_info -> IR.Pvar.t * IR.Typ.t
\ No newline at end of file +CVar_decl (infer.ClangFrontend.CVar_decl)

Module ClangFrontend.CVar_decl

val sil_var_of_decl : CContext.t -> ATDGenerated.Clang_ast_t.decl -> IR.Procname.t -> IR.Pvar.t
val sil_var_of_decl_ref : CContext.t -> ATDGenerated.Clang_ast_t.source_range -> ATDGenerated.Clang_ast_t.decl_ref -> IR.Procname.t -> IR.Pvar.t
val add_var_to_locals : IR.Procdesc.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.t -> IR.Pvar.t -> unit
val sil_var_of_captured_var : CContext.t -> ATDGenerated.Clang_ast_t.source_range -> IR.Procname.t -> ATDGenerated.Clang_ast_t.decl_ref -> (IR.Pvar.t * IR.Typ.t) option
val captured_vars_from_block_info : CContext.t -> ATDGenerated.Clang_ast_t.source_range -> ATDGenerated.Clang_ast_t.block_captured_variable list -> (IR.Pvar.t * IR.Typ.t) list
val mk_temp_sil_var : IR.Procdesc.t -> name:string -> IR.Pvar.t
val mk_temp_sil_var_for_expr : CContext.t -> name:string -> clang_pointer:int -> ATDGenerated.Clang_ast_t.expr_info -> IR.Pvar.t * IR.Typ.t
val materialize_cpp_temporary : CContext.t -> ATDGenerated.Clang_ast_t.stmt_info -> ATDGenerated.Clang_ast_t.expr_info -> IR.Pvar.t * IR.Typ.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend__CTrans_utils/Self/index.html b/website/static/odoc/next/infer/ClangFrontend__CTrans_utils/Self/index.html index e2a5bde5e..942f0d6c4 100644 --- a/website/static/odoc/next/infer/ClangFrontend__CTrans_utils/Self/index.html +++ b/website/static/odoc/next/infer/ClangFrontend__CTrans_utils/Self/index.html @@ -1,2 +1,2 @@ -Self (infer.ClangFrontend__CTrans_utils.Self)

Module ClangFrontend__CTrans_utils.Self

This module handles the translation of the variable self which is challenging because self is used both as a variable in instance method calls and also as a type in class method calls.

exception SelfClassException of {
class_name : IR.Typ.Name.t;
position : IBase.Logging.ocaml_pos;
source_range : ATDGenerated.Clang_ast_t.source_range;
}
val add_self_parameter_for_super_instance : ATDGenerated.Clang_ast_t.stmt_info -> ClangFrontend.CContext.t -> IR.Procname.t -> IBase.Location.t -> ATDGenerated.Clang_ast_t.obj_c_message_expr_info -> trans_result option
val is_var_self : IR.Pvar.t -> bool -> bool
\ No newline at end of file +Self (infer.ClangFrontend__CTrans_utils.Self)

Module ClangFrontend__CTrans_utils.Self

This module handles the translation of the variable self which is challenging because self is used both as a variable in instance method calls and also as a type in class method calls.

val add_self_parameter_for_super_instance : ATDGenerated.Clang_ast_t.stmt_info -> ClangFrontend.CContext.t -> IR.Procname.t -> IBase.Location.t -> ATDGenerated.Clang_ast_t.obj_c_message_expr_info -> trans_result option
val is_var_self : IR.Pvar.t -> bool -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend__CTrans_utils/index.html b/website/static/odoc/next/infer/ClangFrontend__CTrans_utils/index.html index 5b11b19a2..d0ec04eb7 100644 --- a/website/static/odoc/next/infer/ClangFrontend__CTrans_utils/index.html +++ b/website/static/odoc/next/infer/ClangFrontend__CTrans_utils/index.html @@ -1,2 +1,2 @@ -ClangFrontend__CTrans_utils (infer.ClangFrontend__CTrans_utils)

Module ClangFrontend__CTrans_utils

type continuation = {
break : IR.Procdesc.Node.t list;
continue : IR.Procdesc.Node.t list;
return_temp : bool;

true if temps should not be removed in the node but returned to ancestors

}
type priority_node =
| Free
| Busy of ATDGenerated.Clang_ast_t.pointer
type trans_state = {
context : ClangFrontend.CContext.t;

current context of the translation

succ_nodes : IR.Procdesc.Node.t list;

successor nodes in the cfg

continuation : continuation option;

current continuation

priority : priority_node;
var_exp_typ : (IR.Exp.t * IR.Typ.t) option;
opaque_exp : (IR.Exp.t * IR.Typ.t) option;
is_fst_arg_objc_instance_method_call : bool;
passed_as_noescape_block_to : IR.Procname.t option;
}

A translation state. It provides the translation function with the info it needs to carry on the translation.

val default_trans_state : ClangFrontend.CContext.t -> trans_state
type control = {
root_nodes : IR.Procdesc.Node.t list;

Top cfg nodes (root) created by the translation

leaf_nodes : IR.Procdesc.Node.t list;

Bottom cfg nodes (leaf) created by the translate

instrs : IR.Sil.instr list;

list of SIL instruction that need to be placed in cfg nodes of the parent

initd_exps : IR.Exp.t list;

list of expressions that are initialised by the instructions

}

Part of the translation result that is (loosely) related to control flow graph construction. More importantly, this is the part of a trans_result that some internal translation functions work on when constructing a trans_result before the other components of the translation result are available (such as the return expression). This is made into a separate type to make intermediate computations easier to write and easier to typecheck.

type trans_result = {
control : control;
return : IR.Exp.t * IR.Typ.t;

value returned by the translated statement

method_name : IR.Procname.t option;

in the specific case of translating a method call in C++, we get the method name called at the same time we get the this object that contains the method. The this instance object is returned as the return field, while the method to call is filled in here. This field is None in all other cases.

is_cpp_call_virtual : bool;
}

A translation result. It is returned by the translation function.

val empty_control : control
val mk_trans_result : ?⁠method_name:IR.BuiltinDecl.t -> ?⁠is_cpp_call_virtual:bool -> (IR.Exp.t * IR.Typ.typ) -> control -> trans_result
val undefined_expression : unit -> IR.Exp.t
val collect_controls : IR.Procdesc.t -> control list -> control

Collect the results of translating a list of instructions, and link up the nodes created.

val collect_trans_results : IR.Procdesc.t -> return:(IR.Exp.t * IR.Typ.t) -> trans_result list -> trans_result
val is_return_temp : continuation option -> bool
val mk_cond_continuation : continuation option -> continuation option
val define_condition_side_effects : (IR.Exp.t * IR.Typ.t) -> IR.Sil.instr list -> IBase.Location.t -> (IR.Exp.t * IR.Typ.t) * IR.Sil.instr list
val source_range_of_stmt : ATDGenerated.Clang_ast_t.stmt -> ATDGenerated.Clang_ast_t.source_range
val extract_stmt_from_singleton : ATDGenerated.Clang_ast_t.stmt list -> ATDGenerated.Clang_ast_t.source_range -> string -> ATDGenerated.Clang_ast_t.stmt
val is_null_stmt : ATDGenerated.Clang_ast_t.stmt -> bool
val dereference_var_sil : (IR.Exp.t * IR.Typ.t) -> IBase.Location.t -> IR.Sil.instr * IR.Exp.t
val dereference_value_from_result : ?⁠strip_pointer:bool -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result -> trans_result

Given a trans_result, create a temporary variable with dereferenced value of an expression assigned to it

val cast_operation : ?⁠objc_bridge_cast_kind:ATDGenerated.Clang_ast_t.obj_c_bridge_cast_kind -> ATDGenerated.Clang_ast_t.cast_kind -> (IR.Exp.t * IR.Typ.t) -> IR.Typ.t -> IBase.Location.t -> IR.Sil.instr list * (IR.Exp.t * IR.Typ.t)
val trans_assertion : trans_state -> IBase.Location.t -> trans_result
val contains_opaque_value_expr : ATDGenerated.Clang_ast_t.stmt -> bool
val builtin_trans : trans_state -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result list -> IR.Procname.t -> trans_result option
val cxx_method_builtin_trans : trans_state -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result list -> IR.Procname.t -> trans_result option
val new_or_alloc_trans : trans_state -> IBase.Location.t -> ATDGenerated.Clang_ast_t.stmt_info -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.Name.t option -> string -> trans_result
val cpp_new_trans : IR.Typ.IntegerWidths.t -> IBase.Location.t -> IR.Typ.t -> IR.Exp.t option -> (IR.Exp.t * IR.Typ.typ) list -> trans_result
module Nodes : sig ... end

Module for creating cfg nodes and other utility functions related to them.

module PriorityNode : sig ... end

priority_node is used to enforce some kind of policy for creating nodes in the cfg. Certain elements of the AST _must_ create nodes therefore there is no need for them to use priority_node. Certain elements instead need or need not to create a node depending of certain factors. When an element of the latter kind wants to create a node it must claim priority first (like taking a lock). priority can be claimes only when it is free. If an element of AST succedes in claiming priority its id (pointer) is recorded in priority. After an element has finished it frees the priority. In general an AST element E checks if an ancestor has claimed priority. If priority is already claimed E does not have to create a node. If priority is free then it means E has to create the node. Then E claims priority and release it afterward.

module GotoLabel : sig ... end

Module for translating goto instructions by keeping a map of labels.

module Loops : sig ... end

Module that provides utility functions for translating different types of loops.

module Self : sig ... end

This module handles the translation of the variable self which is challenging because self is used both as a variable in instance method calls and also as a type in class method calls.

val is_logical_negation_of_int : IR.Tenv.t -> ATDGenerated.Clang_ast_t.expr_info -> ATDGenerated.Clang_ast_t.unary_operator_info -> bool
val mk_fresh_void_exp_typ : unit -> IR.Exp.t * IR.Typ.t
val mk_fresh_void_id_typ : unit -> IR.Ident.t * IR.Typ.t
val mk_fresh_void_return : unit -> (IR.Ident.t * IR.Typ.t) * (IR.Exp.t * IR.Typ.t)
val last_or_mk_fresh_void_exp_typ : (IR.Exp.t * IR.Typ.t) list -> IR.Exp.t * IR.Typ.t
\ No newline at end of file +ClangFrontend__CTrans_utils (infer.ClangFrontend__CTrans_utils)

Module ClangFrontend__CTrans_utils

type continuation = {
break : IR.Procdesc.Node.t list;
continue : IR.Procdesc.Node.t list;
return_temp : bool;

true if temps should not be removed in the node but returned to ancestors

}
type priority_node =
| Free
| Busy of ATDGenerated.Clang_ast_t.pointer
type trans_state = {
context : ClangFrontend.CContext.t;

current context of the translation

succ_nodes : IR.Procdesc.Node.t list;

successor nodes in the cfg

continuation : continuation option;

current continuation

priority : priority_node;
var_exp_typ : (IR.Exp.t * IR.Typ.t) option;
opaque_exp : (IR.Exp.t * IR.Typ.t) option;
is_fst_arg_objc_instance_method_call : bool;
passed_as_noescape_block_to : IR.Procname.t option;
}

A translation state. It provides the translation function with the info it needs to carry on the translation.

val default_trans_state : ClangFrontend.CContext.t -> trans_state
type control = {
root_nodes : IR.Procdesc.Node.t list;

Top cfg nodes (root) created by the translation

leaf_nodes : IR.Procdesc.Node.t list;

Bottom cfg nodes (leaf) created by the translate

instrs : IR.Sil.instr list;

list of SIL instruction that need to be placed in cfg nodes of the parent

initd_exps : IR.Exp.t list;

list of expressions that are initialised by the instructions

}

Part of the translation result that is (loosely) related to control flow graph construction. More importantly, this is the part of a trans_result that some internal translation functions work on when constructing a trans_result before the other components of the translation result are available (such as the return expression). This is made into a separate type to make intermediate computations easier to write and easier to typecheck.

type trans_result = {
control : control;
return : IR.Exp.t * IR.Typ.t;

value returned by the translated statement

method_name : IR.Procname.t option;

in the specific case of translating a method call in C++, we get the method name called at the same time we get the this object that contains the method. The this instance object is returned as the return field, while the method to call is filled in here. This field is None in all other cases.

is_cpp_call_virtual : bool;
}

A translation result. It is returned by the translation function.

val empty_control : control
val mk_trans_result : ?⁠method_name:IR.BuiltinDecl.t -> ?⁠is_cpp_call_virtual:bool -> (IR.Exp.t * IR.Typ.t) -> control -> trans_result
val undefined_expression : unit -> IR.Exp.t
val collect_controls : IR.Procdesc.t -> control list -> control

Collect the results of translating a list of instructions, and link up the nodes created.

val collect_trans_results : IR.Procdesc.t -> return:(IR.Exp.t * IR.Typ.t) -> trans_result list -> trans_result
val is_return_temp : continuation option -> bool
val mk_cond_continuation : continuation option -> continuation option
val define_condition_side_effects : (IR.Exp.t * IR.Typ.t) -> IR.Sil.instr list -> IBase.Location.t -> (IR.Exp.t * IR.Typ.t) * IR.Sil.instr list
val source_range_of_stmt : ATDGenerated.Clang_ast_t.stmt -> ATDGenerated.Clang_ast_t.source_range
val extract_stmt_from_singleton : ATDGenerated.Clang_ast_t.stmt list -> ATDGenerated.Clang_ast_t.source_range -> string -> ATDGenerated.Clang_ast_t.stmt
val is_null_stmt : ATDGenerated.Clang_ast_t.stmt -> bool
val dereference_var_sil : (IR.Exp.t * IR.Typ.t) -> IBase.Location.t -> IR.Sil.instr * IR.Exp.t
val dereference_value_from_result : ?⁠strip_pointer:bool -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result -> trans_result

Given a trans_result, create a temporary variable with dereferenced value of an expression assigned to it

val cast_operation : ?⁠objc_bridge_cast_kind:ATDGenerated.Clang_ast_t.obj_c_bridge_cast_kind -> ATDGenerated.Clang_ast_t.cast_kind -> (IR.Exp.t * IR.Typ.t) -> IR.Typ.t -> IBase.Location.t -> IR.Sil.instr list * (IR.Exp.t * IR.Typ.t)
val trans_assertion : trans_state -> IBase.Location.t -> trans_result
val contains_opaque_value_expr : ATDGenerated.Clang_ast_t.stmt -> bool
val builtin_trans : trans_state -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result list -> IR.Procname.t -> trans_result option
val cxx_method_builtin_trans : trans_state -> ATDGenerated.Clang_ast_t.source_range -> IBase.Location.t -> trans_result list -> IR.Procname.t -> trans_result option
val new_or_alloc_trans : trans_state -> IBase.Location.t -> ATDGenerated.Clang_ast_t.stmt_info -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.Name.t option -> string -> trans_result
val cpp_new_trans : IR.Typ.IntegerWidths.t -> IBase.Location.t -> IR.Typ.t -> IR.Exp.t option -> (IR.Exp.t * IR.Typ.t) list -> trans_result
module Nodes : sig ... end

Module for creating cfg nodes and other utility functions related to them.

module PriorityNode : sig ... end

priority_node is used to enforce some kind of policy for creating nodes in the cfg. Certain elements of the AST _must_ create nodes therefore there is no need for them to use priority_node. Certain elements instead need or need not to create a node depending of certain factors. When an element of the latter kind wants to create a node it must claim priority first (like taking a lock). priority can be claimes only when it is free. If an element of AST succedes in claiming priority its id (pointer) is recorded in priority. After an element has finished it frees the priority. In general an AST element E checks if an ancestor has claimed priority. If priority is already claimed E does not have to create a node. If priority is free then it means E has to create the node. Then E claims priority and release it afterward.

module GotoLabel : sig ... end

Module for translating goto instructions by keeping a map of labels.

module Loops : sig ... end

Module that provides utility functions for translating different types of loops.

module Self : sig ... end

This module handles the translation of the variable self which is challenging because self is used both as a variable in instance method calls and also as a type in class method calls.

val is_logical_negation_of_int : IR.Tenv.t -> ATDGenerated.Clang_ast_t.expr_info -> ATDGenerated.Clang_ast_t.unary_operator_info -> bool
val mk_fresh_void_exp_typ : unit -> IR.Exp.t * IR.Typ.t
val mk_fresh_void_id_typ : unit -> IR.Ident.t * IR.Typ.t
val mk_fresh_void_return : unit -> (IR.Ident.t * IR.Typ.t) * (IR.Exp.t * IR.Typ.t)
val last_or_mk_fresh_void_exp_typ : (IR.Exp.t * IR.Typ.t) list -> IR.Exp.t * IR.Typ.t
val should_remove_first_param : trans_state -> ATDGenerated.Clang_ast_t.stmt -> IR.Typ.name option

Return a class name when the first parameter should be removed according to its context, for example, when self or [x class] is given as the first parameter for a class method.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend__CType/index.html b/website/static/odoc/next/infer/ClangFrontend__CType/index.html index ac34c81c4..062c4a1fd 100644 --- a/website/static/odoc/next/infer/ClangFrontend__CType/index.html +++ b/website/static/odoc/next/infer/ClangFrontend__CType/index.html @@ -1,2 +1,2 @@ -ClangFrontend__CType (infer.ClangFrontend__CType)

Module ClangFrontend__CType

val add_pointer_to_typ : IR.Typ.t -> IR.Typ.t
val objc_classname_of_type : IR.Typ.t -> IR.Typ.Name.t
val is_class : IR.Typ.t -> bool
val return_type_of_function_type : ATDGenerated.Clang_ast_t.qual_type -> ATDGenerated.Clang_ast_t.qual_type
val is_block_type : ATDGenerated.Clang_ast_t.qual_type -> bool
val is_reference_type : ATDGenerated.Clang_ast_t.qual_type -> bool
val is_pointer_to_const : ATDGenerated.Clang_ast_t.qual_type -> bool
\ No newline at end of file +ClangFrontend__CType (infer.ClangFrontend__CType)

Module ClangFrontend__CType

val add_pointer_to_typ : IR.Typ.t -> IR.Typ.t
val objc_classname_of_type : IR.Typ.t -> IR.Typ.Name.t
val objc_classname_of_desc : IR.Typ.desc -> IR.Typ.Name.t
val is_class : IR.Typ.t -> bool
val return_type_of_function_type : ATDGenerated.Clang_ast_t.qual_type -> ATDGenerated.Clang_ast_t.qual_type
val is_block_type : ATDGenerated.Clang_ast_t.qual_type -> bool
val is_reference_type : ATDGenerated.Clang_ast_t.qual_type -> bool
val is_pointer_to_const : ATDGenerated.Clang_ast_t.qual_type -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend__CType_decl/index.html b/website/static/odoc/next/infer/ClangFrontend__CType_decl/index.html index 2bdbb97c3..c3714938f 100644 --- a/website/static/odoc/next/infer/ClangFrontend__CType_decl/index.html +++ b/website/static/odoc/next/infer/ClangFrontend__CType_decl/index.html @@ -1,2 +1,2 @@ -ClangFrontend__CType_decl (infer.ClangFrontend__CType_decl)

Module ClangFrontend__CType_decl

module CProcname : sig ... end
val get_record_typename : ?⁠tenv:IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.Name.t
val add_types_from_decl_to_tenv : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.desc
val add_predefined_types : IR.Tenv.t -> unit

Add the predefined types objc_class which is a struct, and Class, which is a pointer to objc_class.

val qual_type_to_sil_type : IR.Tenv.t -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.t
val class_from_pointer_type : IR.Tenv.t -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.Name.t
val get_type_from_expr_info : ATDGenerated.Clang_ast_t.expr_info -> IR.Tenv.t -> IR.Typ.t
val method_signature_of_decl : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> ?⁠block_return_type:ATDGenerated.Clang_ast_t.qual_type -> ?⁠passed_as_noescape_block_to:IR.Procname.t option -> IR.Procname.t -> ClangFrontend.CMethodSignature.t
val method_signature_body_of_decl : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> ?⁠block_return_type:ATDGenerated.Clang_ast_t.qual_type -> ?⁠passed_as_noescape_block_to:IR.Procname.t option -> IR.Procname.t -> ClangFrontend.CMethodSignature.t * ATDGenerated.Clang_ast_t.stmt option * [> `CXXConstructorInit of ATDGenerated.Clang_ast_t.cxx_ctor_initializer ] list
val should_add_return_param : IR.Typ.typ -> is_objc_method:bool -> bool
val type_of_captured_var : IR.Tenv.t -> is_block_inside_objc_class_method:bool -> ATDGenerated.Clang_ast_t.decl_ref -> IR.Typ.typ option
\ No newline at end of file +ClangFrontend__CType_decl (infer.ClangFrontend__CType_decl)

Module ClangFrontend__CType_decl

module CProcname : sig ... end
val get_record_typename : ?⁠tenv:IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.Name.t
val add_types_from_decl_to_tenv : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.desc
val add_predefined_types : IR.Tenv.t -> unit

Add the predefined types objc_class which is a struct, and Class, which is a pointer to objc_class.

val qual_type_to_sil_type : IR.Tenv.t -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.t
val class_from_pointer_type : IR.Tenv.t -> ATDGenerated.Clang_ast_t.qual_type -> IR.Typ.Name.t
val get_type_from_expr_info : ATDGenerated.Clang_ast_t.expr_info -> IR.Tenv.t -> IR.Typ.t
val method_signature_of_decl : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> ?⁠block_return_type:ATDGenerated.Clang_ast_t.qual_type -> ?⁠passed_as_noescape_block_to:IR.Procname.t option -> IR.Procname.t -> ClangFrontend.CMethodSignature.t
val method_signature_body_of_decl : IR.Tenv.t -> ATDGenerated.Clang_ast_t.decl -> ?⁠block_return_type:ATDGenerated.Clang_ast_t.qual_type -> ?⁠passed_as_noescape_block_to:IR.Procname.t option -> IR.Procname.t -> ClangFrontend.CMethodSignature.t * ATDGenerated.Clang_ast_t.stmt option * [> `CXXConstructorInit of ATDGenerated.Clang_ast_t.cxx_ctor_initializer ] list
val should_add_return_param : IR.Typ.t -> is_objc_method:bool -> bool
val type_of_captured_var : IR.Tenv.t -> is_block_inside_objc_class_method:bool -> ATDGenerated.Clang_ast_t.decl_ref -> IR.Typ.t option
\ No newline at end of file diff --git a/website/static/odoc/next/infer/ClangFrontend__CVar_decl/index.html b/website/static/odoc/next/infer/ClangFrontend__CVar_decl/index.html index 907abc466..1ae9f236c 100644 --- a/website/static/odoc/next/infer/ClangFrontend__CVar_decl/index.html +++ b/website/static/odoc/next/infer/ClangFrontend__CVar_decl/index.html @@ -1,2 +1,2 @@ -ClangFrontend__CVar_decl (infer.ClangFrontend__CVar_decl)

Module ClangFrontend__CVar_decl

val sil_var_of_decl : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.decl -> IR.Procname.t -> IR.Pvar.t
val sil_var_of_decl_ref : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.source_range -> ATDGenerated.Clang_ast_t.decl_ref -> IR.Procname.t -> IR.Pvar.t
val add_var_to_locals : IR.Procdesc.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.t -> IR.Pvar.t -> unit
val sil_var_of_captured_var : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.source_range -> IR.Procname.t -> ATDGenerated.Clang_ast_t.decl_ref -> (IR.Pvar.t * IR.Typ.typ) option
val captured_vars_from_block_info : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.source_range -> ATDGenerated.Clang_ast_t.block_captured_variable list -> (IR.Pvar.t * IR.Typ.t) list
val mk_temp_sil_var : IR.Procdesc.t -> name:string -> IR.Pvar.t
val mk_temp_sil_var_for_expr : ClangFrontend.CContext.t -> name:string -> clang_pointer:int -> ATDGenerated.Clang_ast_t.expr_info -> IR.Pvar.t * IR.Typ.t
val materialize_cpp_temporary : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.stmt_info -> ATDGenerated.Clang_ast_t.expr_info -> IR.Pvar.t * IR.Typ.t
\ No newline at end of file +ClangFrontend__CVar_decl (infer.ClangFrontend__CVar_decl)

Module ClangFrontend__CVar_decl

val sil_var_of_decl : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.decl -> IR.Procname.t -> IR.Pvar.t
val sil_var_of_decl_ref : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.source_range -> ATDGenerated.Clang_ast_t.decl_ref -> IR.Procname.t -> IR.Pvar.t
val add_var_to_locals : IR.Procdesc.t -> ATDGenerated.Clang_ast_t.decl -> IR.Typ.t -> IR.Pvar.t -> unit
val sil_var_of_captured_var : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.source_range -> IR.Procname.t -> ATDGenerated.Clang_ast_t.decl_ref -> (IR.Pvar.t * IR.Typ.t) option
val captured_vars_from_block_info : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.source_range -> ATDGenerated.Clang_ast_t.block_captured_variable list -> (IR.Pvar.t * IR.Typ.t) list
val mk_temp_sil_var : IR.Procdesc.t -> name:string -> IR.Pvar.t
val mk_temp_sil_var_for_expr : ClangFrontend.CContext.t -> name:string -> clang_pointer:int -> ATDGenerated.Clang_ast_t.expr_info -> IR.Pvar.t * IR.Typ.t
val materialize_cpp_temporary : ClangFrontend.CContext.t -> ATDGenerated.Clang_ast_t.stmt_info -> ATDGenerated.Clang_ast_t.expr_info -> IR.Pvar.t * IR.Typ.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Concurrency/StarvationDomain/CriticalPair/index.html b/website/static/odoc/next/infer/Concurrency/StarvationDomain/CriticalPair/index.html index ae5392d6c..b65150de5 100644 --- a/website/static/odoc/next/infer/Concurrency/StarvationDomain/CriticalPair/index.html +++ b/website/static/odoc/next/infer/Concurrency/StarvationDomain/CriticalPair/index.html @@ -1,2 +1,2 @@ -CriticalPair (infer.Concurrency.StarvationDomain.CriticalPair)

Module StarvationDomain.CriticalPair

A CriticalPairElement equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.

type t = private {
elem : CriticalPairElement.t;
loc : IBase.Location.t;
trace : Absint.CallSite.t list;
}
include IStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t := t
include IStdlib.IStd.Caml.Set.OrderedType
type t
val compare : t -> t -> int
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val get_loc : t -> IBase.Location.t

outermost callsite location

val get_earliest_lock_or_call_loc : procname:IR.Procname.t -> t -> IBase.Location.t

outermost callsite location OR lock acquisition

val may_deadlock : IR.Tenv.t -> lhs:t -> lhs_lock:Lock.t -> rhs:t -> Lock.t option

if two pairs can run in parallel and satisfy the conditions for deadlock, when lhs_lock of lhs is involved return the lock involved from rhs, as LockAcquire may involve more than one

val make_trace : ?⁠header:string -> ?⁠include_acquisitions:bool -> IR.Procname.t -> t -> Absint.Errlog.loc_trace
val is_uithread : t -> bool

is pair about an event on the UI thread

val can_run_in_parallel : t -> t -> bool

can two pairs describe events on two threads that can run in parallel

\ No newline at end of file +CriticalPair (infer.Concurrency.StarvationDomain.CriticalPair)

Module StarvationDomain.CriticalPair

A CriticalPairElement equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.

type t = private {
elem : CriticalPairElement.t;
loc : IBase.Location.t;
trace : Absint.CallSite.t list;
}
include IStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t := t
include IStdlib.IStd.Caml.Set.OrderedType
type t
val compare : t -> t -> int
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val get_loc : t -> IBase.Location.t

outermost callsite location

val get_earliest_lock_or_call_loc : procname:IR.Procname.t -> t -> IBase.Location.t

outermost callsite location OR lock acquisition

val may_deadlock : IR.Tenv.t -> lhs:t -> lhs_lock:Lock.t -> rhs:t -> Lock.t option

if two pairs can run in parallel and satisfy the conditions for deadlock, when lhs_lock of lhs is involved return the lock involved from rhs, as LockAcquire may involve more than one

val make_trace : ?⁠header:string -> ?⁠include_acquisitions:bool -> IR.Procname.t -> t -> Absint.Errlog.loc_trace
val is_uithread : t -> bool

is pair about an event on the UI thread

val can_run_in_parallel : t -> t -> bool

can two pairs describe events on two threads that can run in parallel

val with_callsite : t -> Absint.CallSite.t -> t
val apply_caller_thread : ThreadDomain.t -> t -> t option
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Concurrency/StarvationDomain/CriticalPairElement/index.html b/website/static/odoc/next/infer/Concurrency/StarvationDomain/CriticalPairElement/index.html index 875b626b7..948b21305 100644 --- a/website/static/odoc/next/infer/Concurrency/StarvationDomain/CriticalPairElement/index.html +++ b/website/static/odoc/next/infer/Concurrency/StarvationDomain/CriticalPairElement/index.html @@ -1,2 +1,2 @@ -CriticalPairElement (infer.Concurrency.StarvationDomain.CriticalPairElement)

Module StarvationDomain.CriticalPairElement

An event and the currently-held locks at the time it occurred.

type t = private {
acquisitions : Acquisitions.t;
event : Event.t;
thread : ThreadDomain.t;
}
\ No newline at end of file +CriticalPairElement (infer.Concurrency.StarvationDomain.CriticalPairElement)

Module StarvationDomain.CriticalPairElement

An event and the currently-held locks at the time it occurred.

type t = private {
acquisitions : Acquisitions.t;
event : Event.t;
}
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Concurrency/StarvationDomain/Event/index.html b/website/static/odoc/next/infer/Concurrency/StarvationDomain/Event/index.html index c7ea1fd47..d694980a0 100644 --- a/website/static/odoc/next/infer/Concurrency/StarvationDomain/Event/index.html +++ b/website/static/odoc/next/infer/Concurrency/StarvationDomain/Event/index.html @@ -1,2 +1,2 @@ -Event (infer.Concurrency.StarvationDomain.Event)

Module StarvationDomain.Event

type t =
| LockAcquire of {
locks : Lock.t list;
}
| MayBlock of {
callee : IR.Procname.t;
severity : StarvationModels.severity;
}
| StrictModeCall of {
callee : IR.Procname.t;
}
| MonitorWait of {
lock : Lock.t;
}
val compare : t -> t -> int
val describe : F.formatter -> t -> unit
\ No newline at end of file +Event (infer.Concurrency.StarvationDomain.Event)

Module StarvationDomain.Event

type t =
| LockAcquire of {
locks : Lock.t list;
thread : ThreadDomain.t;
}
| MayBlock of {
callee : IR.Procname.t;
severity : StarvationModels.severity;
thread : ThreadDomain.t;
}
| StrictModeCall of {
callee : IR.Procname.t;
thread : ThreadDomain.t;
}
| MonitorWait of {
lock : Lock.t;
thread : ThreadDomain.t;
}
val compare : t -> t -> int
val describe : F.formatter -> t -> unit
val get_acquired_locks : t -> Lock.t list
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Concurrency/StarvationDomain/index.html b/website/static/odoc/next/infer/Concurrency/StarvationDomain/index.html index 6271fc3a3..410c76860 100644 --- a/website/static/odoc/next/infer/Concurrency/StarvationDomain/index.html +++ b/website/static/odoc/next/infer/Concurrency/StarvationDomain/index.html @@ -1,2 +1,2 @@ -StarvationDomain (infer.Concurrency.StarvationDomain)

Module Concurrency.StarvationDomain

module F = Stdlib.Format
module ThreadDomain : sig ... end

Domain for thread-type. The main goals are

module Lock : sig ... end

Abstract address for a lock. There are two notions of equality:

module VarDomain : sig ... end
module Event : sig ... end
module Acquisition : sig ... end

a lock acquisition with location information

module Acquisitions : sig ... end

A set of lock acquisitions with source locations and procnames.

module CriticalPairElement : sig ... end

An event and the currently-held locks at the time it occurred.

module CriticalPair : sig ... end

A CriticalPairElement equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.

module CriticalPairs : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = CriticalPair.t
module Attribute : sig ... end

Tracks expression attributes

module AttributeDomain : sig ... end

Tracks all expressions assigned values of Attribute

module ScheduledWorkItem : sig ... end

A record of scheduled parallel work: the method scheduled to run, where, and on what thread.

module ScheduledWorkDomain : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = ScheduledWorkItem.t
type t = {
guard_map : GuardToLockMap.t;
lock_state : LockState.t;
critical_pairs : CriticalPairs.t;
attributes : AttributeDomain.t;
thread : ThreadDomain.t;
scheduled_work : ScheduledWorkDomain.t;
var_state : VarDomain.t;
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val initial : t

initial domain state

val acquire : ?⁠tenv:IR.Tenv.t -> t -> procname:IR.Procname.t -> loc:IBase.Location.t -> Lock.t list -> t

simultaneously acquire a number of locks, no-op if list is empty

val release : t -> Lock.t list -> t

simultaneously release a number of locks, no-op if list is empty

val blocking_call : callee:IR.Procname.t -> StarvationModels.severity -> loc:IBase.Location.t -> t -> t
val wait_on_monitor : loc:IBase.Location.t -> Absint.FormalMap.t -> Absint.HilExp.t list -> t -> t
val future_get : callee:IR.Procname.t -> loc:IBase.Location.t -> Absint.HilExp.t list -> t -> t
val strict_mode_call : callee:IR.Procname.t -> loc:IBase.Location.t -> t -> t
val add_guard : acquire_now:bool -> procname:IR.Procname.t -> loc:IBase.Location.t -> IR.Tenv.t -> t -> Absint.HilExp.t -> Lock.t -> t

Install a mapping from the guard expression to the lock provided, and optionally lock it.

val lock_guard : procname:IR.Procname.t -> loc:IBase.Location.t -> IR.Tenv.t -> t -> Absint.HilExp.t -> t

Acquire the lock the guard was constructed with.

val remove_guard : t -> Absint.HilExp.t -> t

Destroy the guard and release its lock.

val unlock_guard : t -> Absint.HilExp.t -> t

Release the lock the guard was constructed with.

val schedule_work : IBase.Location.t -> StarvationModels.scheduler_thread_constraint -> t -> IR.Procname.t -> t

record the fact that a method is scheduled to run on a certain thread/executor

type summary = {
critical_pairs : CriticalPairs.t;
thread : ThreadDomain.t;
scheduled_work : ScheduledWorkDomain.t;
attributes : AttributeDomain.t;

final-state attributes that affect instance variables only

return_attribute : Attribute.t;
}
val empty_summary : summary
val pp_summary : F.formatter -> summary -> unit
val integrate_summary : ?⁠tenv:IR.Tenv.t -> ?⁠lhs:Absint.HilExp.AccessExpression.t -> ?⁠subst:Lock.subst -> Absint.CallSite.t -> t -> summary -> t

apply a callee summary to the current abstract state; lhs is the expression assigned the returned value, if any

val summary_of_astate : IR.Procdesc.t -> t -> summary
val filter_blocking_calls : t -> t
val remove_dead_vars : t -> IR.Var.t list -> t
\ No newline at end of file +StarvationDomain (infer.Concurrency.StarvationDomain)

Module Concurrency.StarvationDomain

module F = Stdlib.Format
module ThreadDomain : sig ... end

Domain for thread-type. The main goals are

module Lock : sig ... end

Abstract address for a lock. There are two notions of equality:

module VarDomain : sig ... end
module Event : sig ... end
module Acquisition : sig ... end

a lock acquisition with location information

module Acquisitions : sig ... end

A set of lock acquisitions with source locations and procnames.

module CriticalPairElement : sig ... end

An event and the currently-held locks at the time it occurred.

module CriticalPair : sig ... end

A CriticalPairElement equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.

module CriticalPairs : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = CriticalPair.t
module Attribute : sig ... end

Tracks expression attributes

module AttributeDomain : sig ... end

Tracks all expressions assigned values of Attribute

module ScheduledWorkItem : sig ... end

A record of scheduled parallel work: the method scheduled to run, where, and on what thread.

module ScheduledWorkDomain : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = ScheduledWorkItem.t
type t = {
ignore_blocking_calls : bool;
guard_map : GuardToLockMap.t;
lock_state : LockState.t;
critical_pairs : CriticalPairs.t;
attributes : AttributeDomain.t;
thread : ThreadDomain.t;
scheduled_work : ScheduledWorkDomain.t;
var_state : VarDomain.t;
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val initial : t

initial domain state

val acquire : tenv:IR.Tenv.t -> t -> procname:IR.Procname.t -> loc:IBase.Location.t -> Lock.t list -> t

simultaneously acquire a number of locks, no-op if list is empty

val release : t -> Lock.t list -> t

simultaneously release a number of locks, no-op if list is empty

val blocking_call : callee:IR.Procname.t -> StarvationModels.severity -> loc:IBase.Location.t -> t -> t
val wait_on_monitor : loc:IBase.Location.t -> Absint.FormalMap.t -> Absint.HilExp.t list -> t -> t
val future_get : callee:IR.Procname.t -> loc:IBase.Location.t -> Absint.HilExp.t list -> t -> t
val strict_mode_call : callee:IR.Procname.t -> loc:IBase.Location.t -> t -> t
val add_guard : acquire_now:bool -> procname:IR.Procname.t -> loc:IBase.Location.t -> IR.Tenv.t -> t -> Absint.HilExp.t -> Lock.t -> t

Install a mapping from the guard expression to the lock provided, and optionally lock it.

val lock_guard : procname:IR.Procname.t -> loc:IBase.Location.t -> IR.Tenv.t -> t -> Absint.HilExp.t -> t

Acquire the lock the guard was constructed with.

val remove_guard : t -> Absint.HilExp.t -> t

Destroy the guard and release its lock.

val unlock_guard : t -> Absint.HilExp.t -> t

Release the lock the guard was constructed with.

val schedule_work : IBase.Location.t -> StarvationModels.scheduler_thread_constraint -> t -> IR.Procname.t -> t

record the fact that a method is scheduled to run on a certain thread/executor

type summary = {
critical_pairs : CriticalPairs.t;
thread : ThreadDomain.t;
scheduled_work : ScheduledWorkDomain.t;
attributes : AttributeDomain.t;

final-state attributes that affect instance variables only

return_attribute : Attribute.t;
}
val empty_summary : summary
val pp_summary : F.formatter -> summary -> unit
val integrate_summary : tenv:IR.Tenv.t -> lhs:Absint.HilExp.AccessExpression.t -> subst:Lock.subst -> Absint.CallSite.t -> t -> summary -> t

apply a callee summary to the current abstract state; lhs is the expression assigned the returned value, if any

val summary_of_astate : IR.Procdesc.t -> t -> summary
val set_ignore_blocking_calls_flag : t -> t
val remove_dead_vars : t -> IR.Var.t list -> t
val fold_critical_pairs_of_summary : (CriticalPair.t -> 'a -> 'a) -> summary -> 'a -> 'a
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Concurrency__StarvationDomain/CriticalPair/index.html b/website/static/odoc/next/infer/Concurrency__StarvationDomain/CriticalPair/index.html index cd88c4632..b711b5b78 100644 --- a/website/static/odoc/next/infer/Concurrency__StarvationDomain/CriticalPair/index.html +++ b/website/static/odoc/next/infer/Concurrency__StarvationDomain/CriticalPair/index.html @@ -1,2 +1,2 @@ -CriticalPair (infer.Concurrency__StarvationDomain.CriticalPair)

Module Concurrency__StarvationDomain.CriticalPair

A CriticalPairElement equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.

type t = private {
elem : CriticalPairElement.t;
loc : IBase.Location.t;
trace : Absint.CallSite.t list;
}
include IStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t := t
include IStdlib.IStd.Caml.Set.OrderedType
type t
val compare : t -> t -> int
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val get_loc : t -> IBase.Location.t

outermost callsite location

val get_earliest_lock_or_call_loc : procname:IR.Procname.t -> t -> IBase.Location.t

outermost callsite location OR lock acquisition

val may_deadlock : IR.Tenv.t -> lhs:t -> lhs_lock:Lock.t -> rhs:t -> Lock.t option

if two pairs can run in parallel and satisfy the conditions for deadlock, when lhs_lock of lhs is involved return the lock involved from rhs, as LockAcquire may involve more than one

val make_trace : ?⁠header:string -> ?⁠include_acquisitions:bool -> IR.Procname.t -> t -> Absint.Errlog.loc_trace
val is_uithread : t -> bool

is pair about an event on the UI thread

val can_run_in_parallel : t -> t -> bool

can two pairs describe events on two threads that can run in parallel

\ No newline at end of file +CriticalPair (infer.Concurrency__StarvationDomain.CriticalPair)

Module Concurrency__StarvationDomain.CriticalPair

A CriticalPairElement equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.

type t = private {
elem : CriticalPairElement.t;
loc : IBase.Location.t;
trace : Absint.CallSite.t list;
}
include IStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t := t
include IStdlib.IStd.Caml.Set.OrderedType
type t
val compare : t -> t -> int
include IStdlib.PrettyPrintable.PrintableType with type t := t
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val get_loc : t -> IBase.Location.t

outermost callsite location

val get_earliest_lock_or_call_loc : procname:IR.Procname.t -> t -> IBase.Location.t

outermost callsite location OR lock acquisition

val may_deadlock : IR.Tenv.t -> lhs:t -> lhs_lock:Lock.t -> rhs:t -> Lock.t option

if two pairs can run in parallel and satisfy the conditions for deadlock, when lhs_lock of lhs is involved return the lock involved from rhs, as LockAcquire may involve more than one

val make_trace : ?⁠header:string -> ?⁠include_acquisitions:bool -> IR.Procname.t -> t -> Absint.Errlog.loc_trace
val is_uithread : t -> bool

is pair about an event on the UI thread

val can_run_in_parallel : t -> t -> bool

can two pairs describe events on two threads that can run in parallel

val with_callsite : t -> Absint.CallSite.t -> t
val apply_caller_thread : ThreadDomain.t -> t -> t option
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Concurrency__StarvationDomain/CriticalPairElement/index.html b/website/static/odoc/next/infer/Concurrency__StarvationDomain/CriticalPairElement/index.html index 1a1e62cd0..3b6a78444 100644 --- a/website/static/odoc/next/infer/Concurrency__StarvationDomain/CriticalPairElement/index.html +++ b/website/static/odoc/next/infer/Concurrency__StarvationDomain/CriticalPairElement/index.html @@ -1,2 +1,2 @@ -CriticalPairElement (infer.Concurrency__StarvationDomain.CriticalPairElement)

Module Concurrency__StarvationDomain.CriticalPairElement

An event and the currently-held locks at the time it occurred.

type t = private {
acquisitions : Acquisitions.t;
event : Event.t;
thread : ThreadDomain.t;
}
\ No newline at end of file +CriticalPairElement (infer.Concurrency__StarvationDomain.CriticalPairElement)

Module Concurrency__StarvationDomain.CriticalPairElement

An event and the currently-held locks at the time it occurred.

type t = private {
acquisitions : Acquisitions.t;
event : Event.t;
}
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Concurrency__StarvationDomain/Event/index.html b/website/static/odoc/next/infer/Concurrency__StarvationDomain/Event/index.html index 1349d8173..9c90ec4c1 100644 --- a/website/static/odoc/next/infer/Concurrency__StarvationDomain/Event/index.html +++ b/website/static/odoc/next/infer/Concurrency__StarvationDomain/Event/index.html @@ -1,2 +1,2 @@ -Event (infer.Concurrency__StarvationDomain.Event)

Module Concurrency__StarvationDomain.Event

type t =
| LockAcquire of {
locks : Lock.t list;
}
| MayBlock of {
callee : IR.Procname.t;
severity : Concurrency.StarvationModels.severity;
}
| StrictModeCall of {
callee : IR.Procname.t;
}
| MonitorWait of {
lock : Lock.t;
}
val compare : t -> t -> int
val describe : F.formatter -> t -> unit
\ No newline at end of file +Event (infer.Concurrency__StarvationDomain.Event)

Module Concurrency__StarvationDomain.Event

type t =
| LockAcquire of {
locks : Lock.t list;
thread : ThreadDomain.t;
}
| MayBlock of {
callee : IR.Procname.t;
severity : Concurrency.StarvationModels.severity;
thread : ThreadDomain.t;
}
| StrictModeCall of {
callee : IR.Procname.t;
thread : ThreadDomain.t;
}
| MonitorWait of {
lock : Lock.t;
thread : ThreadDomain.t;
}
val compare : t -> t -> int
val describe : F.formatter -> t -> unit
val get_acquired_locks : t -> Lock.t list
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Concurrency__StarvationDomain/index.html b/website/static/odoc/next/infer/Concurrency__StarvationDomain/index.html index 15960a4d0..ec1199536 100644 --- a/website/static/odoc/next/infer/Concurrency__StarvationDomain/index.html +++ b/website/static/odoc/next/infer/Concurrency__StarvationDomain/index.html @@ -1,2 +1,2 @@ -Concurrency__StarvationDomain (infer.Concurrency__StarvationDomain)

Module Concurrency__StarvationDomain

module F = Stdlib.Format
module ThreadDomain : sig ... end

Domain for thread-type. The main goals are

module Lock : sig ... end

Abstract address for a lock. There are two notions of equality:

module VarDomain : sig ... end
module Event : sig ... end
module Acquisition : sig ... end

a lock acquisition with location information

module Acquisitions : sig ... end

A set of lock acquisitions with source locations and procnames.

module CriticalPairElement : sig ... end

An event and the currently-held locks at the time it occurred.

module CriticalPair : sig ... end

A CriticalPairElement equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.

module CriticalPairs : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = CriticalPair.t
module Attribute : sig ... end

Tracks expression attributes

module AttributeDomain : sig ... end

Tracks all expressions assigned values of Attribute

module ScheduledWorkItem : sig ... end

A record of scheduled parallel work: the method scheduled to run, where, and on what thread.

module ScheduledWorkDomain : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = ScheduledWorkItem.t
type t = {
guard_map : GuardToLockMap.t;
lock_state : LockState.t;
critical_pairs : CriticalPairs.t;
attributes : AttributeDomain.t;
thread : ThreadDomain.t;
scheduled_work : ScheduledWorkDomain.t;
var_state : VarDomain.t;
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val initial : t

initial domain state

val acquire : ?⁠tenv:IR.Tenv.t -> t -> procname:IR.Procname.t -> loc:IBase.Location.t -> Lock.t list -> t

simultaneously acquire a number of locks, no-op if list is empty

val release : t -> Lock.t list -> t

simultaneously release a number of locks, no-op if list is empty

val blocking_call : callee:IR.Procname.t -> Concurrency.StarvationModels.severity -> loc:IBase.Location.t -> t -> t
val wait_on_monitor : loc:IBase.Location.t -> Absint.FormalMap.t -> Absint.HilExp.t list -> t -> t
val future_get : callee:IR.Procname.t -> loc:IBase.Location.t -> Absint.HilExp.t list -> t -> t
val strict_mode_call : callee:IR.Procname.t -> loc:IBase.Location.t -> t -> t
val add_guard : acquire_now:bool -> procname:IR.Procname.t -> loc:IBase.Location.t -> IR.Tenv.t -> t -> Absint.HilExp.t -> Lock.t -> t

Install a mapping from the guard expression to the lock provided, and optionally lock it.

val lock_guard : procname:IR.Procname.t -> loc:IBase.Location.t -> IR.Tenv.t -> t -> Absint.HilExp.t -> t

Acquire the lock the guard was constructed with.

val remove_guard : t -> Absint.HilExp.t -> t

Destroy the guard and release its lock.

val unlock_guard : t -> Absint.HilExp.t -> t

Release the lock the guard was constructed with.

val schedule_work : IBase.Location.t -> Concurrency.StarvationModels.scheduler_thread_constraint -> t -> IR.Procname.t -> t

record the fact that a method is scheduled to run on a certain thread/executor

type summary = {
critical_pairs : CriticalPairs.t;
thread : ThreadDomain.t;
scheduled_work : ScheduledWorkDomain.t;
attributes : AttributeDomain.t;

final-state attributes that affect instance variables only

return_attribute : Attribute.t;
}
val empty_summary : summary
val pp_summary : F.formatter -> summary -> unit
val integrate_summary : ?⁠tenv:IR.Tenv.t -> ?⁠lhs:Absint.HilExp.AccessExpression.t -> ?⁠subst:Lock.subst -> Absint.CallSite.t -> t -> summary -> t

apply a callee summary to the current abstract state; lhs is the expression assigned the returned value, if any

val summary_of_astate : IR.Procdesc.t -> t -> summary
val filter_blocking_calls : t -> t
val remove_dead_vars : t -> IR.Var.t list -> t
\ No newline at end of file +Concurrency__StarvationDomain (infer.Concurrency__StarvationDomain)

Module Concurrency__StarvationDomain

module F = Stdlib.Format
module ThreadDomain : sig ... end

Domain for thread-type. The main goals are

module Lock : sig ... end

Abstract address for a lock. There are two notions of equality:

module VarDomain : sig ... end
module Event : sig ... end
module Acquisition : sig ... end

a lock acquisition with location information

module Acquisitions : sig ... end

A set of lock acquisitions with source locations and procnames.

module CriticalPairElement : sig ... end

An event and the currently-held locks at the time it occurred.

module CriticalPair : sig ... end

A CriticalPairElement equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.

module CriticalPairs : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = CriticalPair.t
module Attribute : sig ... end

Tracks expression attributes

module AttributeDomain : sig ... end

Tracks all expressions assigned values of Attribute

module ScheduledWorkItem : sig ... end

A record of scheduled parallel work: the method scheduled to run, where, and on what thread.

module ScheduledWorkDomain : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = ScheduledWorkItem.t
type t = {
ignore_blocking_calls : bool;
guard_map : GuardToLockMap.t;
lock_state : LockState.t;
critical_pairs : CriticalPairs.t;
attributes : AttributeDomain.t;
thread : ThreadDomain.t;
scheduled_work : ScheduledWorkDomain.t;
var_state : VarDomain.t;
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val initial : t

initial domain state

val acquire : tenv:IR.Tenv.t -> t -> procname:IR.Procname.t -> loc:IBase.Location.t -> Lock.t list -> t

simultaneously acquire a number of locks, no-op if list is empty

val release : t -> Lock.t list -> t

simultaneously release a number of locks, no-op if list is empty

val blocking_call : callee:IR.Procname.t -> Concurrency.StarvationModels.severity -> loc:IBase.Location.t -> t -> t
val wait_on_monitor : loc:IBase.Location.t -> Absint.FormalMap.t -> Absint.HilExp.t list -> t -> t
val future_get : callee:IR.Procname.t -> loc:IBase.Location.t -> Absint.HilExp.t list -> t -> t
val strict_mode_call : callee:IR.Procname.t -> loc:IBase.Location.t -> t -> t
val add_guard : acquire_now:bool -> procname:IR.Procname.t -> loc:IBase.Location.t -> IR.Tenv.t -> t -> Absint.HilExp.t -> Lock.t -> t

Install a mapping from the guard expression to the lock provided, and optionally lock it.

val lock_guard : procname:IR.Procname.t -> loc:IBase.Location.t -> IR.Tenv.t -> t -> Absint.HilExp.t -> t

Acquire the lock the guard was constructed with.

val remove_guard : t -> Absint.HilExp.t -> t

Destroy the guard and release its lock.

val unlock_guard : t -> Absint.HilExp.t -> t

Release the lock the guard was constructed with.

val schedule_work : IBase.Location.t -> Concurrency.StarvationModels.scheduler_thread_constraint -> t -> IR.Procname.t -> t

record the fact that a method is scheduled to run on a certain thread/executor

type summary = {
critical_pairs : CriticalPairs.t;
thread : ThreadDomain.t;
scheduled_work : ScheduledWorkDomain.t;
attributes : AttributeDomain.t;

final-state attributes that affect instance variables only

return_attribute : Attribute.t;
}
val empty_summary : summary
val pp_summary : F.formatter -> summary -> unit
val integrate_summary : tenv:IR.Tenv.t -> lhs:Absint.HilExp.AccessExpression.t -> subst:Lock.subst -> Absint.CallSite.t -> t -> summary -> t

apply a callee summary to the current abstract state; lhs is the expression assigned the returned value, if any

val summary_of_astate : IR.Procdesc.t -> t -> summary
val set_ignore_blocking_calls_flag : t -> t
val remove_dead_vars : t -> IR.Var.t list -> t
val fold_critical_pairs_of_summary : (CriticalPair.t -> 'a -> 'a) -> summary -> 'a -> 'a
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/Cost/index.html b/website/static/odoc/next/infer/Costlib/Cost/index.html index 0740e9f11..bc257cdcc 100644 --- a/website/static/odoc/next/infer/Costlib/Cost/index.html +++ b/website/static/odoc/next/infer/Costlib/Cost/index.html @@ -1,2 +1,2 @@ -Cost (infer.Costlib.Cost)

Module Costlib.Cost

val checker : (CostDomain.summary option * BO.BufferOverrunAnalysisSummary.t option * Checkers.PurityDomain.summary option) Absint.InterproceduralAnalysis.t -> CostDomain.summary option
val instantiate_cost : IR.Typ.IntegerWidths.t -> inferbo_caller_mem:BO.BufferOverrunDomain.Mem.t -> callee_pname:IR.Procname.t -> callee_formals:(IR.Pvar.t * IR.Typ.t) list -> params:(IR.Exp.t * IR.Typ.t) list -> callee_cost:CostDomain.BasicCostWithReason.t -> loc:IBase.Location.t -> CostDomain.BasicCostWithReason.t
val is_report_suppressed : IR.Procname.t -> bool
\ No newline at end of file +Cost (infer.Costlib.Cost)

Module Costlib.Cost

val checker : (CostDomain.summary option * BO.BufferOverrunAnalysisSummary.t option * Checkers.PurityDomain.summary option) Absint.InterproceduralAnalysis.t -> CostDomain.summary option
val instantiate_cost : ?⁠get_closure_callee_cost:(IR.Procname.t -> CostDomain.BasicCostWithReason.t option) -> default_closure_cost:BO.Ints.NonNegativeInt.t -> IR.Typ.IntegerWidths.t -> inferbo_caller_mem:BO.BufferOverrunDomain.Mem.t -> callee_pname:IR.Procname.t -> callee_formals:(IR.Pvar.t * IR.Typ.t) list -> params:(IR.Exp.t * IR.Typ.t) list -> callee_cost:CostDomain.BasicCostWithReason.t -> loc:IBase.Location.t -> CostDomain.BasicCostWithReason.t
val is_report_suppressed : IR.Procname.t -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostDomain/BasicCost/index.html b/website/static/odoc/next/infer/Costlib/CostDomain/BasicCost/index.html index 67e580b63..e8efce2eb 100644 --- a/website/static/odoc/next/infer/Costlib/CostDomain/BasicCost/index.html +++ b/website/static/odoc/next/infer/Costlib/CostDomain/BasicCost/index.html @@ -1,2 +1,2 @@ -BasicCost (infer.Costlib.CostDomain.BasicCost)

Module CostDomain.BasicCost

include module type of BO.Polynomials.NonNegativePolynomial with type NonNegativePolynomial.t = BO.Polynomials.NonNegativePolynomial.t
type t = BO.Polynomials.NonNegativePolynomial.t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
type degree_with_term = (BO__Polynomials.UnreachableTraces.tBO__Polynomials.Degree.t * BO__Polynomials.NonNegativeNonTopPolynomial.tBO__Polynomials.TopTraces.t) Absint.AbstractDomain.Types.below_above
val pp_hum : Stdlib.Format.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val top : t
val of_unreachable : IBase.Location.t -> t
val zero : t
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val of_int_exn : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> int -> t
val is_symbolic : t -> bool
val is_top : t -> bool
val is_unreachable : t -> bool
val is_zero : t -> bool
val is_one : t -> bool
val of_non_negative_bound : ?⁠degree_kind:BO__Polynomials.DegreeKind.t -> BO.Bounds.NonNegativeBound.t -> t
val plus : t -> t -> t
val mult_unreachable : t -> t -> t
val mult : t -> t -> t
val mult_loop : iter:t -> body:t -> t
val min_default_left : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> t
val degree : t -> BO__Polynomials.Degree.t option
val degree_str : t -> string
val compare_by_degree : t -> t -> int
val pp_degree : only_bigO:bool -> Stdlib.Format.formatter -> degree_with_term -> unit
val polynomial_traces : ?⁠is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val encode : t -> string
val decode : string -> t
val get_degree_with_term : t -> degree_with_term
val version : int

version used to consistently compare at infer-reportdiff phase

\ No newline at end of file +BasicCost (infer.Costlib.CostDomain.BasicCost)

Module CostDomain.BasicCost

include module type of BO.Polynomials.NonNegativePolynomial with type NonNegativePolynomial.t = BO.Polynomials.NonNegativePolynomial.t
type t = BO.Polynomials.NonNegativePolynomial.t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
type degree_with_term = (BO__Polynomials.UnreachableTraces.tBO__Polynomials.Degree.t * BO__Polynomials.NonNegativeNonTopPolynomial.tBO__Polynomials.TopTraces.t) Absint.AbstractDomain.Types.below_above
val pp_hum : Stdlib.Format.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val top : t
val of_unreachable : IBase.Location.t -> t
val zero : t
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val of_int_exn : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> int -> t
val is_symbolic : t -> bool
val is_top : t -> bool
val is_unreachable : t -> bool
val is_zero : t -> bool
val is_one : t -> bool
val of_non_negative_bound : ?⁠degree_kind:BO__Polynomials.DegreeKind.t -> BO.Bounds.NonNegativeBound.t -> t
val of_func_ptr : BO.Symb.SymbolPath.partial -> t
val plus : t -> t -> t
val mult_unreachable : t -> t -> t
val mult : t -> t -> t
val mult_loop : iter:t -> body:t -> t
val min_default_left : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> BO.FuncPtr.Set.eval_func_ptrs -> (IR.Procname.t -> t option) -> default_closure_cost:BO.Ints.NonNegativeInt.t -> t
val degree : t -> BO__Polynomials.Degree.t option
val degree_str : t -> string
val compare_by_degree : t -> t -> int
val pp_degree : only_bigO:bool -> Stdlib.Format.formatter -> degree_with_term -> unit
val polynomial_traces : ?⁠is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val encode : t -> string
val decode : string -> t
val get_degree_with_term : t -> degree_with_term
val version : int

version used to consistently compare at infer-reportdiff phase

\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostDomain/BasicCostWithReason/index.html b/website/static/odoc/next/infer/Costlib/CostDomain/BasicCostWithReason/index.html index c36a7162e..a29e854ff 100644 --- a/website/static/odoc/next/infer/Costlib/CostDomain/BasicCostWithReason/index.html +++ b/website/static/odoc/next/infer/Costlib/CostDomain/BasicCostWithReason/index.html @@ -1,2 +1,2 @@ -BasicCostWithReason (infer.Costlib.CostDomain.BasicCostWithReason)

Module CostDomain.BasicCostWithReason

type t = {
cost : BasicCost.t;
top_pname_opt : IR.Procname.t option;
}
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val zero : t
val is_top : t -> bool
val of_basic_cost : BasicCost.t -> t
val is_unreachable : t -> bool
val plus : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> t
val degree : t -> BO.Polynomials.Degree.t option
val polynomial_traces : is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val pp_hum : Stdlib.Format.formatter -> t -> unit
\ No newline at end of file +BasicCostWithReason (infer.Costlib.CostDomain.BasicCostWithReason)

Module CostDomain.BasicCostWithReason

type t = {
cost : BasicCost.t;
top_pname_opt : IR.Procname.t option;
}
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val zero : t
val is_top : t -> bool
val of_basic_cost : BasicCost.t -> t
val is_unreachable : t -> bool
val plus : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> BO.FuncPtr.Set.eval_func_ptrs -> (IR.Procname.t -> t option) -> default_closure_cost:BO.Ints.NonNegativeInt.t -> t
val degree : t -> BO.Polynomials.Degree.t option
val polynomial_traces : is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val pp_hum : Stdlib.Format.formatter -> t -> unit
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOf/index.html b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOf/index.html index 1489150fb..8fae8711d 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOf/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOf/index.html @@ -1,2 +1,2 @@ -BoundsOf (infer.Costlib.CostModels.BoundsOf)

Module CostModels.BoundsOf

Parameters

Signature

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOf (infer.Costlib.CostModels.BoundsOf)

Module CostModels.BoundsOf

Parameters

Signature

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfArray/index.html b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfArray/index.html index 094f61764..f7e98104f 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfArray/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfArray/index.html @@ -1,2 +1,2 @@ -BoundsOfArray (infer.Costlib.CostModels.BoundsOfArray)

Module CostModels.BoundsOfArray

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOfArray (infer.Costlib.CostModels.BoundsOfArray)

Module CostModels.BoundsOfArray

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfCString/index.html b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfCString/index.html index 79e17e2ce..c2347b00e 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfCString/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfCString/index.html @@ -1,2 +1,2 @@ -BoundsOfCString (infer.Costlib.CostModels.BoundsOfCString)

Module CostModels.BoundsOfCString

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOfCString (infer.Costlib.CostModels.BoundsOfCString)

Module CostModels.BoundsOfCString

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfCollection/index.html b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfCollection/index.html index 4a504c5f5..b416d572b 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfCollection/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfCollection/index.html @@ -1,2 +1,2 @@ -BoundsOfCollection (infer.Costlib.CostModels.BoundsOfCollection)

Module CostModels.BoundsOfCollection

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOfCollection (infer.Costlib.CostModels.BoundsOfCollection)

Module CostModels.BoundsOfCollection

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfNSCollection/index.html b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfNSCollection/index.html index b6388e2b6..223ff705f 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfNSCollection/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/BoundsOfNSCollection/index.html @@ -1,2 +1,2 @@ -BoundsOfNSCollection (infer.Costlib.CostModels.BoundsOfNSCollection)

Module CostModels.BoundsOfNSCollection

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOfNSCollection (infer.Costlib.CostModels.BoundsOfNSCollection)

Module CostModels.BoundsOfNSCollection

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/Call/index.html b/website/static/odoc/next/infer/Costlib/CostModels/Call/index.html index 11d811068..d54d6859b 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/Call/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/Call/index.html @@ -1,2 +1,2 @@ -Call (infer.Costlib.CostModels.Call)

Module CostModels.Call

val dispatch : (IR.Tenv.tCostUtils.model, unit) Absint.ProcnameDispatcher.Call.dispatcher
\ No newline at end of file +Call (infer.Costlib.CostModels.Call)

Module CostModels.Call

val dispatch : (IR.Tenv.t(IR.Procname.t -> CostDomain.summary option) -> CostUtils.model, unit) Absint.ProcnameDispatcher.Call.dispatcher
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/ImmutableSet/index.html b/website/static/odoc/next/infer/Costlib/CostModels/ImmutableSet/index.html index 3277422c6..b447f281f 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/ImmutableSet/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/ImmutableSet/index.html @@ -1,2 +1,2 @@ -ImmutableSet (infer.Costlib.CostModels.ImmutableSet) \ No newline at end of file +ImmutableSet (infer.Costlib.CostModels.ImmutableSet)

Module CostModels.ImmutableSet

val construct : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val choose_table_size : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/IntHashMap/index.html b/website/static/odoc/next/infer/Costlib/CostModels/IntHashMap/index.html index 856d65f16..79e0a2473 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/IntHashMap/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/IntHashMap/index.html @@ -1,2 +1,2 @@ -IntHashMap (infer.Costlib.CostModels.IntHashMap) \ No newline at end of file +IntHashMap (infer.Costlib.CostModels.IntHashMap) \ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/JavaString/index.html b/website/static/odoc/next/infer/Costlib/CostModels/JavaString/index.html index d20047984..b264a701d 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/JavaString/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/JavaString/index.html @@ -1,2 +1,2 @@ -JavaString (infer.Costlib.CostModels.JavaString)

Module CostModels.JavaString

val substring_aux : begin_idx:IR.Exp.t -> end_v:BO.BufferOverrunDomain.Val.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val substring_no_end : IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val substring : IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val indexOf_char : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t

O(|m|) where m is the given string and |.| is the length function

val indexOf_char_starting_from : IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t

O(|m|-|n|) where m is the given string and n is the index to start searching from

val indexOf_str : IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> BasicCost.t

O(|m|.|n|) where m and n are the given strings

\ No newline at end of file +JavaString (infer.Costlib.CostModels.JavaString)

Module CostModels.JavaString

val substring_aux : begin_idx:IR.Exp.t -> end_v:BO.BufferOverrunDomain.Val.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val substring_no_end : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val substring : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val indexOf_char : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t

O(|m|) where m is the given string and |.| is the length function

val indexOf_char_starting_from : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t

O(|m|-|n|) where m is the given string and n is the index to start searching from

val indexOf_str : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> BasicCost.t

O(|m|.|n|) where m and n are the given strings

\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/NSCollection/index.html b/website/static/odoc/next/infer/Costlib/CostModels/NSCollection/index.html index e838e62df..c16b511ff 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/NSCollection/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/NSCollection/index.html @@ -1,2 +1,2 @@ -NSCollection (infer.Costlib.CostModels.NSCollection)

Module CostModels.NSCollection

val get_length : IR.Exp.t -> of_function:string -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val op_on_two_coll : (CostUtils.BasicCost.t -> CostUtils.BasicCost.t -> 'a) -> of_function:string -> IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> 'a
\ No newline at end of file +NSCollection (infer.Costlib.CostModels.NSCollection)

Module CostModels.NSCollection

val get_length : IR.Exp.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val op_on_two_coll : (CostUtils.BasicCost.t -> CostUtils.BasicCost.t -> 'a) -> of_function:string -> IR.Exp.t -> IR.Exp.t -> 'b -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'c -> BO.BufferOverrunDomain.Mem.t -> 'a
val enumerate_using_block : IR.Exp.t -> (IR.Procname.t -> CostDomain.summary option) -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/NSString/index.html b/website/static/odoc/next/infer/Costlib/CostModels/NSString/index.html index 37fd92f99..9c0f8d6a3 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/NSString/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/NSString/index.html @@ -1,2 +1,2 @@ -NSString (infer.Costlib.CostModels.NSString)

Module CostModels.NSString

val get_length : IR.Exp.t -> of_function:string -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val op_on_two_str : (CostUtils.BasicCost.t -> CostUtils.BasicCost.t -> 'a) -> of_function:string -> IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> 'a
val substring_from_index : IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
\ No newline at end of file +NSString (infer.Costlib.CostModels.NSString)

Module CostModels.NSString

val get_length : IR.Exp.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val op_on_two_str : (CostUtils.BasicCost.t -> CostUtils.BasicCost.t -> 'a) -> of_function:string -> IR.Exp.t -> IR.Exp.t -> 'b -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'c -> BO.BufferOverrunDomain.Mem.t -> 'a
val substring_from_index : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib/CostModels/index.html b/website/static/odoc/next/infer/Costlib/CostModels/index.html index 5d3308dd7..33ec4dd2f 100644 --- a/website/static/odoc/next/infer/Costlib/CostModels/index.html +++ b/website/static/odoc/next/infer/Costlib/CostModels/index.html @@ -1,2 +1,2 @@ -CostModels (infer.Costlib.CostModels)

Module Costlib.CostModels

module BasicCost = CostDomain.BasicCost
val unit_cost_model : 'a -> ret:'b -> 'c -> BasicCost.t
val cost_of_exp : IR.Exp.t -> degree_kind:BO__Polynomials.DegreeKind.t -> of_function:string -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val linear : IR.Exp.t -> of_function:string -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val log : IR.Exp.t -> of_function:string -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val provider_get : BO.BufferOverrunUtils.ModelEnv.model_env -> ret:('a * IR.Typ.t) -> 'b -> BasicCost.t
module BoundsOf : functor (Container : CostUtils.S) -> sig ... end
module IntHashMap : sig ... end
module JavaString : sig ... end
module BoundsOfCollection : sig ... end
module BoundsOfNSCollection : sig ... end
module BoundsOfArray : sig ... end
module BoundsOfCString : sig ... end
module NSString : sig ... end
module NSCollection : sig ... end
module ImmutableSet : sig ... end
module Call : sig ... end
\ No newline at end of file +CostModels (infer.Costlib.CostModels)

Module Costlib.CostModels

module BasicCost = CostDomain.BasicCost
module BasicCostWithReason = CostDomain.BasicCostWithReason
val unit_cost_model : 'a -> 'b -> ret:'c -> 'd -> BasicCost.t
val cost_of_exp : IR.Exp.t -> degree_kind:BO__Polynomials.DegreeKind.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val linear : IR.Exp.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val log : IR.Exp.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> CostUtils.BasicCost.t
val provider_get : 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:('b * IR.Typ.t) -> 'c -> BasicCost.t
module BoundsOf : functor (Container : CostUtils.S) -> sig ... end
module IntHashMap : sig ... end
module JavaString : sig ... end
module BoundsOfCollection : sig ... end
module BoundsOfNSCollection : sig ... end
module BoundsOfArray : sig ... end
module BoundsOfCString : sig ... end
module NSString : sig ... end
module NSCollection : sig ... end
module ImmutableSet : sig ... end
module Call : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__Cost/index.html b/website/static/odoc/next/infer/Costlib__Cost/index.html index 93b361c03..f63d4e6f0 100644 --- a/website/static/odoc/next/infer/Costlib__Cost/index.html +++ b/website/static/odoc/next/infer/Costlib__Cost/index.html @@ -1,2 +1,2 @@ -Costlib__Cost (infer.Costlib__Cost)

Module Costlib__Cost

val checker : (Costlib.CostDomain.summary option * BO.BufferOverrunAnalysisSummary.t option * Checkers.PurityDomain.summary option) Absint.InterproceduralAnalysis.t -> Costlib.CostDomain.summary option
val instantiate_cost : IR.Typ.IntegerWidths.t -> inferbo_caller_mem:BO.BufferOverrunDomain.Mem.t -> callee_pname:IR.Procname.t -> callee_formals:(IR.Pvar.t * IR.Typ.t) list -> params:(IR.Exp.t * IR.Typ.t) list -> callee_cost:Costlib.CostDomain.BasicCostWithReason.t -> loc:IBase.Location.t -> Costlib.CostDomain.BasicCostWithReason.t
val is_report_suppressed : IR.Procname.t -> bool
\ No newline at end of file +Costlib__Cost (infer.Costlib__Cost)

Module Costlib__Cost

val checker : (Costlib.CostDomain.summary option * BO.BufferOverrunAnalysisSummary.t option * Checkers.PurityDomain.summary option) Absint.InterproceduralAnalysis.t -> Costlib.CostDomain.summary option
val instantiate_cost : ?⁠get_closure_callee_cost:(IR.Procname.t -> Costlib.CostDomain.BasicCostWithReason.t option) -> default_closure_cost:BO.Ints.NonNegativeInt.t -> IR.Typ.IntegerWidths.t -> inferbo_caller_mem:BO.BufferOverrunDomain.Mem.t -> callee_pname:IR.Procname.t -> callee_formals:(IR.Pvar.t * IR.Typ.t) list -> params:(IR.Exp.t * IR.Typ.t) list -> callee_cost:Costlib.CostDomain.BasicCostWithReason.t -> loc:IBase.Location.t -> Costlib.CostDomain.BasicCostWithReason.t
val is_report_suppressed : IR.Procname.t -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostDomain/BasicCost/index.html b/website/static/odoc/next/infer/Costlib__CostDomain/BasicCost/index.html index ef485754f..0f2115f7c 100644 --- a/website/static/odoc/next/infer/Costlib__CostDomain/BasicCost/index.html +++ b/website/static/odoc/next/infer/Costlib__CostDomain/BasicCost/index.html @@ -1,2 +1,2 @@ -BasicCost (infer.Costlib__CostDomain.BasicCost)

Module Costlib__CostDomain.BasicCost

include module type of BO.Polynomials.NonNegativePolynomial with type NonNegativePolynomial.t = BO.Polynomials.NonNegativePolynomial.t
type t = BO.Polynomials.NonNegativePolynomial.t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
type degree_with_term = (BO__Polynomials.UnreachableTraces.tBO__Polynomials.Degree.t * BO__Polynomials.NonNegativeNonTopPolynomial.tBO__Polynomials.TopTraces.t) Absint.AbstractDomain.Types.below_above
val pp_hum : Stdlib.Format.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val top : t
val of_unreachable : IBase.Location.t -> t
val zero : t
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val of_int_exn : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> int -> t
val is_symbolic : t -> bool
val is_top : t -> bool
val is_unreachable : t -> bool
val is_zero : t -> bool
val is_one : t -> bool
val of_non_negative_bound : ?⁠degree_kind:BO__Polynomials.DegreeKind.t -> BO.Bounds.NonNegativeBound.t -> t
val plus : t -> t -> t
val mult_unreachable : t -> t -> t
val mult : t -> t -> t
val mult_loop : iter:t -> body:t -> t
val min_default_left : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> t
val degree : t -> BO__Polynomials.Degree.t option
val degree_str : t -> string
val compare_by_degree : t -> t -> int
val pp_degree : only_bigO:bool -> Stdlib.Format.formatter -> degree_with_term -> unit
val polynomial_traces : ?⁠is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val encode : t -> string
val decode : string -> t
val get_degree_with_term : t -> degree_with_term
val version : int

version used to consistently compare at infer-reportdiff phase

\ No newline at end of file +BasicCost (infer.Costlib__CostDomain.BasicCost)

Module Costlib__CostDomain.BasicCost

include module type of BO.Polynomials.NonNegativePolynomial with type NonNegativePolynomial.t = BO.Polynomials.NonNegativePolynomial.t
type t = BO.Polynomials.NonNegativePolynomial.t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
type degree_with_term = (BO__Polynomials.UnreachableTraces.tBO__Polynomials.Degree.t * BO__Polynomials.NonNegativeNonTopPolynomial.tBO__Polynomials.TopTraces.t) Absint.AbstractDomain.Types.below_above
val pp_hum : Stdlib.Format.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool
val top : t
val of_unreachable : IBase.Location.t -> t
val zero : t
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val of_int_exn : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> int -> t
val is_symbolic : t -> bool
val is_top : t -> bool
val is_unreachable : t -> bool
val is_zero : t -> bool
val is_one : t -> bool
val of_non_negative_bound : ?⁠degree_kind:BO__Polynomials.DegreeKind.t -> BO.Bounds.NonNegativeBound.t -> t
val of_func_ptr : BO.Symb.SymbolPath.partial -> t
val plus : t -> t -> t
val mult_unreachable : t -> t -> t
val mult : t -> t -> t
val mult_loop : iter:t -> body:t -> t
val min_default_left : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> BO.FuncPtr.Set.eval_func_ptrs -> (IR.Procname.t -> t option) -> default_closure_cost:BO.Ints.NonNegativeInt.t -> t
val degree : t -> BO__Polynomials.Degree.t option
val degree_str : t -> string
val compare_by_degree : t -> t -> int
val pp_degree : only_bigO:bool -> Stdlib.Format.formatter -> degree_with_term -> unit
val polynomial_traces : ?⁠is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val encode : t -> string
val decode : string -> t
val get_degree_with_term : t -> degree_with_term
val version : int

version used to consistently compare at infer-reportdiff phase

\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostDomain/BasicCostWithReason/index.html b/website/static/odoc/next/infer/Costlib__CostDomain/BasicCostWithReason/index.html index 8a875662b..e2ac0bde0 100644 --- a/website/static/odoc/next/infer/Costlib__CostDomain/BasicCostWithReason/index.html +++ b/website/static/odoc/next/infer/Costlib__CostDomain/BasicCostWithReason/index.html @@ -1,2 +1,2 @@ -BasicCostWithReason (infer.Costlib__CostDomain.BasicCostWithReason)

Module Costlib__CostDomain.BasicCostWithReason

type t = {
cost : BasicCost.t;
top_pname_opt : IR.Procname.t option;
}
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val zero : t
val is_top : t -> bool
val of_basic_cost : BasicCost.t -> t
val is_unreachable : t -> bool
val plus : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> t
val degree : t -> BO.Polynomials.Degree.t option
val polynomial_traces : is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val pp_hum : Stdlib.Format.formatter -> t -> unit
\ No newline at end of file +BasicCostWithReason (infer.Costlib__CostDomain.BasicCostWithReason)

Module Costlib__CostDomain.BasicCostWithReason

type t = {
cost : BasicCost.t;
top_pname_opt : IR.Procname.t option;
}
val one : ?⁠autoreleasepool_trace:BO.Bounds.BoundTrace.t -> unit -> t
val zero : t
val is_top : t -> bool
val of_basic_cost : BasicCost.t -> t
val is_unreachable : t -> bool
val plus : t -> t -> t
val subst : IR.Procname.t -> IBase.Location.t -> t -> BO.Bounds.Bound.eval_sym -> BO.FuncPtr.Set.eval_func_ptrs -> (IR.Procname.t -> t option) -> default_closure_cost:BO.Ints.NonNegativeInt.t -> t
val degree : t -> BO.Polynomials.Degree.t option
val polynomial_traces : is_autoreleasepool_trace:bool -> t -> Absint.Errlog.loc_trace
val pp_hum : Stdlib.Format.formatter -> t -> unit
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOf/index.html b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOf/index.html index 1a8edfe68..87aa19b0d 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOf/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOf/index.html @@ -1,2 +1,2 @@ -BoundsOf (infer.Costlib__CostModels.BoundsOf)

Module Costlib__CostModels.BoundsOf

Parameters

Signature

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOf (infer.Costlib__CostModels.BoundsOf)

Module Costlib__CostModels.BoundsOf

Parameters

Signature

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfArray/index.html b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfArray/index.html index 789a23218..14940e833 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfArray/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfArray/index.html @@ -1,2 +1,2 @@ -BoundsOfArray (infer.Costlib__CostModels.BoundsOfArray)

Module Costlib__CostModels.BoundsOfArray

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOfArray (infer.Costlib__CostModels.BoundsOfArray)

Module Costlib__CostModels.BoundsOfArray

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfCString/index.html b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfCString/index.html index 1211cd340..522314318 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfCString/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfCString/index.html @@ -1,2 +1,2 @@ -BoundsOfCString (infer.Costlib__CostModels.BoundsOfCString)

Module Costlib__CostModels.BoundsOfCString

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOfCString (infer.Costlib__CostModels.BoundsOfCString)

Module Costlib__CostModels.BoundsOfCString

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfCollection/index.html b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfCollection/index.html index 7cb138831..29e2e2f45 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfCollection/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfCollection/index.html @@ -1,2 +1,2 @@ -BoundsOfCollection (infer.Costlib__CostModels.BoundsOfCollection)

Module Costlib__CostModels.BoundsOfCollection

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOfCollection (infer.Costlib__CostModels.BoundsOfCollection)

Module Costlib__CostModels.BoundsOfCollection

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfNSCollection/index.html b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfNSCollection/index.html index 5010e2f15..f42925e63 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfNSCollection/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/BoundsOfNSCollection/index.html @@ -1,2 +1,2 @@ -BoundsOfNSCollection (infer.Costlib__CostModels.BoundsOfNSCollection)

Module Costlib__CostModels.BoundsOfNSCollection

val of_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file +BoundsOfNSCollection (infer.Costlib__CostModels.BoundsOfNSCollection)

Module Costlib__CostModels.BoundsOfNSCollection

val of_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> degree_kind:BO__Polynomials.DegreeKind.t -> Costlib.CostUtils.BasicCost.t
val linear_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val logarithmic_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> Costlib.CostUtils.BasicCost.t
val n_log_n_length : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> of_function:string -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/Call/index.html b/website/static/odoc/next/infer/Costlib__CostModels/Call/index.html index e49964e01..51e305e3c 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/Call/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/Call/index.html @@ -1,2 +1,2 @@ -Call (infer.Costlib__CostModels.Call)

Module Costlib__CostModels.Call

val dispatch : (IR.Tenv.tCostlib.CostUtils.model, unit) Absint.ProcnameDispatcher.Call.dispatcher
\ No newline at end of file +Call (infer.Costlib__CostModels.Call)

Module Costlib__CostModels.Call

val dispatch : (IR.Tenv.t(IR.Procname.t -> Costlib.CostDomain.summary option) -> Costlib.CostUtils.model, unit) Absint.ProcnameDispatcher.Call.dispatcher
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/ImmutableSet/index.html b/website/static/odoc/next/infer/Costlib__CostModels/ImmutableSet/index.html index 0cfed5795..a8cd79b06 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/ImmutableSet/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/ImmutableSet/index.html @@ -1,2 +1,2 @@ -ImmutableSet (infer.Costlib__CostModels.ImmutableSet) \ No newline at end of file +ImmutableSet (infer.Costlib__CostModels.ImmutableSet)

Module Costlib__CostModels.ImmutableSet

val construct : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val choose_table_size : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/IntHashMap/index.html b/website/static/odoc/next/infer/Costlib__CostModels/IntHashMap/index.html index 65e1bbc42..456c23011 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/IntHashMap/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/IntHashMap/index.html @@ -1,2 +1,2 @@ -IntHashMap (infer.Costlib__CostModels.IntHashMap) \ No newline at end of file +IntHashMap (infer.Costlib__CostModels.IntHashMap) \ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/JavaString/index.html b/website/static/odoc/next/infer/Costlib__CostModels/JavaString/index.html index 9d1295eb7..3d0d1deb4 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/JavaString/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/JavaString/index.html @@ -1,2 +1,2 @@ -JavaString (infer.Costlib__CostModels.JavaString)

Module Costlib__CostModels.JavaString

val substring_aux : begin_idx:IR.Exp.t -> end_v:BO.BufferOverrunDomain.Val.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val substring_no_end : IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val substring : IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val indexOf_char : IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t

O(|m|) where m is the given string and |.| is the length function

val indexOf_char_starting_from : IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t

O(|m|-|n|) where m is the given string and n is the index to start searching from

val indexOf_str : IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> BasicCost.t

O(|m|.|n|) where m and n are the given strings

\ No newline at end of file +JavaString (infer.Costlib__CostModels.JavaString)

Module Costlib__CostModels.JavaString

val substring_aux : begin_idx:IR.Exp.t -> end_v:BO.BufferOverrunDomain.Val.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val substring_no_end : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val substring : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val indexOf_char : IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t

O(|m|) where m is the given string and |.| is the length function

val indexOf_char_starting_from : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t

O(|m|-|n|) where m is the given string and n is the index to start searching from

val indexOf_str : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> BasicCost.t

O(|m|.|n|) where m and n are the given strings

\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/NSCollection/index.html b/website/static/odoc/next/infer/Costlib__CostModels/NSCollection/index.html index 4a3b94974..156b59ff1 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/NSCollection/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/NSCollection/index.html @@ -1,2 +1,2 @@ -NSCollection (infer.Costlib__CostModels.NSCollection)

Module Costlib__CostModels.NSCollection

val get_length : IR.Exp.t -> of_function:string -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val op_on_two_coll : (Costlib.CostUtils.BasicCost.t -> Costlib.CostUtils.BasicCost.t -> 'a) -> of_function:string -> IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> 'a
\ No newline at end of file +NSCollection (infer.Costlib__CostModels.NSCollection)

Module Costlib__CostModels.NSCollection

val get_length : IR.Exp.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val op_on_two_coll : (Costlib.CostUtils.BasicCost.t -> Costlib.CostUtils.BasicCost.t -> 'a) -> of_function:string -> IR.Exp.t -> IR.Exp.t -> 'b -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'c -> BO.BufferOverrunDomain.Mem.t -> 'a
val enumerate_using_block : IR.Exp.t -> (IR.Procname.t -> Costlib.CostDomain.summary option) -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/NSString/index.html b/website/static/odoc/next/infer/Costlib__CostModels/NSString/index.html index 193d82b17..6ff2911b1 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/NSString/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/NSString/index.html @@ -1,2 +1,2 @@ -NSString (infer.Costlib__CostModels.NSString) \ No newline at end of file +NSString (infer.Costlib__CostModels.NSString)

Module Costlib__CostModels.NSString

val get_length : IR.Exp.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val op_on_two_str : (Costlib.CostUtils.BasicCost.t -> Costlib.CostUtils.BasicCost.t -> 'a) -> of_function:string -> IR.Exp.t -> IR.Exp.t -> 'b -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'c -> BO.BufferOverrunDomain.Mem.t -> 'a
val substring_from_index : IR.Exp.t -> IR.Exp.t -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/Costlib__CostModels/index.html b/website/static/odoc/next/infer/Costlib__CostModels/index.html index c8bb00d9a..42ccf2004 100644 --- a/website/static/odoc/next/infer/Costlib__CostModels/index.html +++ b/website/static/odoc/next/infer/Costlib__CostModels/index.html @@ -1,2 +1,2 @@ -Costlib__CostModels (infer.Costlib__CostModels)

Module Costlib__CostModels

module BasicCost = Costlib.CostDomain.BasicCost
val unit_cost_model : 'a -> ret:'b -> 'c -> BasicCost.t
val cost_of_exp : IR.Exp.t -> degree_kind:BO__Polynomials.DegreeKind.t -> of_function:string -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val linear : IR.Exp.t -> of_function:string -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val log : IR.Exp.t -> of_function:string -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'a -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val provider_get : BO.BufferOverrunUtils.ModelEnv.model_env -> ret:('a * IR.Typ.t) -> 'b -> BasicCost.t
module BoundsOf : functor (Container : Costlib.CostUtils.S) -> sig ... end
module IntHashMap : sig ... end
module JavaString : sig ... end
module BoundsOfCollection : sig ... end
module BoundsOfNSCollection : sig ... end
module BoundsOfArray : sig ... end
module BoundsOfCString : sig ... end
module NSString : sig ... end
module NSCollection : sig ... end
module ImmutableSet : sig ... end
module Call : sig ... end
\ No newline at end of file +Costlib__CostModels (infer.Costlib__CostModels)

Module Costlib__CostModels

module BasicCost = Costlib.CostDomain.BasicCost
module BasicCostWithReason = Costlib.CostDomain.BasicCostWithReason
val unit_cost_model : 'a -> 'b -> ret:'c -> 'd -> BasicCost.t
val cost_of_exp : IR.Exp.t -> degree_kind:BO__Polynomials.DegreeKind.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val linear : IR.Exp.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val log : IR.Exp.t -> of_function:string -> 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:'b -> BO.BufferOverrunDomain.Mem.t -> Costlib.CostUtils.BasicCost.t
val provider_get : 'a -> BO.BufferOverrunUtils.ModelEnv.model_env -> ret:('b * IR.Typ.t) -> 'c -> BasicCost.t
module BoundsOf : functor (Container : Costlib.CostUtils.S) -> sig ... end
module IntHashMap : sig ... end
module JavaString : sig ... end
module BoundsOfCollection : sig ... end
module BoundsOfNSCollection : sig ... end
module BoundsOfArray : sig ... end
module BoundsOfCString : sig ... end
module NSString : sig ... end
module NSCollection : sig ... end
module ImmutableSet : sig ... end
module Call : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase/Config/index.html b/website/static/odoc/next/infer/IBase/Config/index.html index be91671a5..d01f58a5b 100644 --- a/website/static/odoc/next/infer/IBase/Config/index.html +++ b/website/static/odoc/next/infer/IBase/Config/index.html @@ -1,2 +1,2 @@ -Config (infer.IBase.Config)

Module IBase.Config

type os_type =
| Unix
| Win32
| Cygwin
type build_system =
| BAnt
| BBuck
| BClang
| BGradle
| BJava
| BJavac
| BMake
| BMvn
| BNdk
| BXcode
type scheduler =
| File
| Restart
| SyntacticCallGraph
val equal_scheduler : scheduler -> scheduler -> bool
val build_system_of_exe_name : string -> build_system
val string_of_build_system : build_system -> string
val env_inside_maven : IStdlib.IStd.Unix.env

Constant configuration values

val anonymous_block_num_sep : string
val anonymous_block_prefix : string
val append_buck_flavors : string list
val assign : string
val biabduction_models_sql : string
val biabduction_models_jar : string
val bin_dir : string
val bound_error_allowed_in_procedure_call : bool
val buck_java_flavor_suppress_config : bool
val clang_exe_aliases : string list
val clang_initializer_prefix : string
val clang_inner_destructor_prefix : string
val clang_plugin_path : string
val classpath : string option
val default_failure_name : string
val dotty_frontend_output : string
val etc_dir : string
val fail_on_issue_exit_code : int
val fcp_dir : string
val idempotent_getters : bool
val initial_analysis_time : float
val ivar_attributes : string
val java_lambda_marker_infix : string

marker to recognize methods generated by javalib to eliminate lambdas

val lib_dir : string
val load_average : float option
val max_narrows : int
val max_widens : int
val meet_level : int
val nsnotification_center_checker_backend : bool
val os_type : os_type
val passthroughs : bool
val patterns_modeled_expensive : string * Yojson.Basic.t
val patterns_never_returning_null : string * Yojson.Basic.t
val patterns_skip_implementation : string * Yojson.Basic.t
val patterns_skip_translation : string * Yojson.Basic.t
val pp_version : Stdlib.Format.formatter -> unit -> unit
val property_attributes : string
val relative_path_backtrack : int
val report : bool
val report_custom_error : bool
val report_force_relative_path : bool
val report_nullable_inconsistency : bool
val save_compact_summaries : bool
val smt_output : bool
val source_file_extentions : string list
val kotlin_source_extension : string
val sourcepath : string option
val sources : string list
val trace_absarray : bool
val unsafe_unret : string
val incremental_analysis : bool
val weak : string
val whitelisted_cpp_classes : string list
val whitelisted_cpp_methods : string list
val wrappers_dir : string

Configuration values specified by command-line options

val abs_struct : int
val abs_val : int
val allow_leak : bool
val annotation_reachability_cxx : Yojson.Basic.t
val annotation_reachability_cxx_sources : Yojson.Basic.t
val annotation_reachability_custom_pairs : Yojson.Basic.t
val array_level : int
val biabduction_models_mode : bool
val bo_debug : int
val bo_field_depth_limit : int option
val bootclasspath : string option
val buck : bool
val buck_blacklist : string list
val buck_build_args : string list
val buck_build_args_no_inline : string list
val buck_cache_mode : bool
val buck_merge_all_deps : bool
val buck_mode : BuckMode.t option
val buck_out_gen : string
val buck_targets_blacklist : string list
val call_graph_schedule : bool
val capture : bool
val capture_blacklist : string option
val censor_report : ((bool * Str.regexp) * (bool * Str.regexp) * string) list
val changed_files_index : string option
val check_version : string option
val clang_biniou_file : string option
val clang_compound_literal_init_limit : int
val clang_extra_flags : string list
val clang_blacklisted_flags : string list
val clang_blacklisted_flags_with_arg : string list
val clang_ignore_regex : string option
val clang_isystem_to_override_regex : Str.regexp option
val clang_idirafter_to_override_regex : Str.regexp option
val clang_libcxx_include_to_override_regex : string option
val command : ATDGenerated.InferCommand.t
val continue_analysis : bool
val continue_capture : bool
val costs_current : string option
val cost_issues_tests : string option
val cost_scuba_logging : bool
val costs_previous : string option
val cost_tests_only_autoreleasepool : bool
val cxx : bool
val cxx_scope_guards : Yojson.Basic.t
val deduplicate : bool
val debug_exceptions : bool
val debug_level_analysis : int
val debug_level_capture : int
val debug_level_linters : int
val debug_level_test_determinator : int
val debug_mode : bool
val default_linters : bool
val dependency_mode : bool
val developer_mode : bool
val differential_filter_files : string option
val differential_filter_set : [ `Introduced | `Fixed | `Preexisting ] list
val dotty_cfg_libs : bool
val dump_duplicate_symbols : bool
val eradicate_condition_redundant : bool
val eradicate_field_over_annotated : bool
val eradicate_return_over_annotated : bool
val eradicate_verbose : bool
val fail_on_bug : bool
val fcp_apple_clang : string option
val fcp_syntax_only : bool
val file_renamings : string option
val filter_paths : bool
val filtering : bool
val force_delete_results_dir : bool
val force_integration : build_system option
val from_json_report : string
val from_json_costs_report : string
val frontend_stats : bool
val frontend_tests : bool
val function_pointer_specialization : bool
val generated_classes : string option
val genrule_mode : bool
val get_linter_doc_url : linter_id:string -> string option
val help_checker : Checker.t list
val help_issue_type : IssueType.t list
val hoisting_report_only_expensive : bool
val html : bool
val global_tenv : bool
val icfg_dotty_outfile : string option
val infer_is_clang : bool
val infer_is_javac : bool
val implicit_sdk_root : string option
val inclusive_cost : bool
val inferconfig_file : string option
val inferconfig_dir : string option
val is_checker_enabled : Checker.t -> bool
val issues_tests : string option
val issues_tests_fields : IssuesTestField.t list
val iterations : int
val java_debug_source_file_info : string option
val java_jar_compiler : string option
val java_version : int option
val javac_classes_out : string
val job_id : string option
val jobs : int
val join_cond : int
val keep_going : bool
val linter : string option
val linters_def_file : string list
val linters_def_folder : string list
val linters_developer_mode : bool
val linters_ignore_clang_failures : bool
val linters_validate_syntax_only : bool
val list_checkers : bool
val list_issue_types : bool
val liveness_dangerous_classes : Yojson.Basic.t
val max_nesting : int option
val merge : bool
val method_decls_info : string option
val ml_buckets : [ `MLeak_all | `MLeak_arc | `MLeak_cf | `MLeak_cpp | `MLeak_no_arc | `MLeak_unknown ] list
val modified_lines : string option
val monitor_prop_size : bool
val nelseg : bool
val no_translate_libs : bool
val nullable_annotation : string option
val nullsafe_disable_field_not_initialized_in_nonstrict_classes : bool
val nullsafe_optimistic_third_party_params_in_non_strict : bool
val nullsafe_third_party_signatures : string option
val nullsafe_third_party_location_for_messaging_only : string option
val nullsafe_strict_containers : bool
val oom_threshold : int option
val only_cheap_debug : bool
val only_footprint : bool
val pmd_xml : bool
val print_active_checkers : bool
val print_builtins : bool
val print_jbir : bool
val print_logs : bool
val print_types : bool
val print_using_diff : bool
val procedures : bool
val procedures_attributes : bool
val procedures_cfg : bool
val procedures_definedness : bool
val procedures_filter : string option
val procedures_name : bool
val procedures_source_file : bool
val procedures_summary : bool
val process_clang_ast : bool
val clang_frontend_action_string : string
val profiler_samples : string option
val progress_bar : [ `MultiLine | `Plain | `Quiet ]
val project_root : string
val pulse_cut_to_one_path_procedures_pattern : Str.regexp option
val pulse_recency_limit : int
val pulse_intraprocedural_only : bool
val pulse_max_disjuncts : int
val pulse_model_abort : string list
val pulse_model_alloc_pattern : Str.regexp option
val pulse_model_release_pattern : Str.regexp option
val pulse_model_return_nonnull : string list
val pulse_model_skip_pattern : Str.regexp option
val pulse_model_transfer_ownership_namespace : (string * string) list
val pulse_model_transfer_ownership : string list
val pulse_report_latent_issues : bool
val pulse_widen_threshold : int
val pure_by_default : bool
val quandary_endpoints : Yojson.Basic.t
val quandary_sanitizers : Yojson.Basic.t
val quandary_sinks : Yojson.Basic.t
val quandary_sources : Yojson.Basic.t
val quiet : bool
val racerd_guardedby : bool
val reactive_mode : bool
val reanalyze : bool
val report_blacklist_files_containing : string list
val report_console_limit : int option
val report_current : string option
val report_formatter : [ `No_formatter | `Phabricator_formatter ]
val report_path_regex_blacklist : string list
val report_path_regex_whitelist : string list
val report_previous : string option
val report_suppress_errors : string list
val reports_include_ml_loc : bool
val rest : string list
val results_dir : string
val scheduler : scheduler
val scuba_logging : bool
val scuba_normals : string IStdlib.IStd.String.Map.t
val scuba_tags : string list IStdlib.IStd.String.Map.t
val seconds_per_iteration : float option
val select : int option
val show_buckets : bool
val siof_check_iostreams : bool
val siof_safe_methods : string list
val skip_analysis_in_path : string list
val skip_analysis_in_path_skips_compilation : bool
val skip_duplicated_types : bool
val skip_translation_headers : string list
val source_files : bool
val source_files_cfg : bool
val source_files_filter : string option
val source_files_freshly_captured : bool
val source_files_procedure_names : bool
val source_files_type_environment : bool
val source_preview : bool
val sqlite_cache_size : int
val sqlite_page_size : int
val sqlite_lock_timeout : int
val sqlite_vfs : string option
val starvation_skip_analysis : Yojson.Basic.t
val starvation_strict_mode : bool
val starvation_whole_program : bool
val subtype_multirange : bool
val summaries_caches_max_size : int
val symops_per_iteration : int option
val test_determinator : bool
val export_changed_functions : bool
val test_filtering : bool
val testing_mode : bool
val threadsafe_aliases : Yojson.Basic.t
val topl_properties : string list
val trace_error : bool
val trace_events : bool
val trace_join : bool
val trace_ondemand : bool
val trace_rearrange : bool
val trace_topl : bool
val tv_commit : string option
val tv_limit : int
val tv_limit_filtered : int
val type_size : bool
val uninit_interproc : bool
val unsafe_malloc : bool
val worklist_mode : int
val write_dotty : bool
val write_html : bool
val write_html_whitelist_regex : string list
val write_website : string option
val xcode_developer_dir : string option
val xcode_isysroot_suffix : string option
val xcpretty : bool

Configuration values derived from command-line options

val dynamic_dispatch : bool
val toplevel_results_dir : string

In some integrations, eg Buck, infer subprocesses started by the build system (started by the toplevel infer process) will have their own results directory; this points to the results directory of the toplevel infer process, which can be useful for, eg, storing debug info. In other cases this is equal to results_dir.

val is_in_custom_symbols : string -> string -> bool

Does named symbol match any prefix in the named custom symbol list?

val java_package_is_external : string -> bool

Check if a Java package is external to the repository

val scuba_execution_id : IStdlib.IStd.Int64.t option

a random number to (hopefully) uniquely identify this run

Global variables with initial values specified by command-line options

val clang_compilation_dbs : [ `Escaped of string | `Raw of string ] list IStdlib.IStd.ref
\ No newline at end of file +Config (infer.IBase.Config)

Module IBase.Config

type os_type =
| Unix
| Win32
| Cygwin
type build_system =
| BAnt
| BBuck
| BClang
| BGradle
| BJava
| BJavac
| BMake
| BMvn
| BNdk
| BXcode
type scheduler =
| File
| Restart
| SyntacticCallGraph
val equal_scheduler : scheduler -> scheduler -> bool
val build_system_of_exe_name : string -> build_system
val string_of_build_system : build_system -> string
val env_inside_maven : IStdlib.IStd.Unix.env

Constant configuration values

val anonymous_block_num_sep : string
val anonymous_block_prefix : string
val append_buck_flavors : string list
val assign : string
val biabduction_models_sql : string
val biabduction_models_jar : string
val bin_dir : string
val bound_error_allowed_in_procedure_call : bool
val buck_java_flavor_suppress_config : bool
val clang_exe_aliases : string list
val clang_initializer_prefix : string
val clang_inner_destructor_prefix : string
val clang_plugin_path : string
val classpath : string option
val default_failure_name : string
val dotty_frontend_output : string
val etc_dir : string
val fail_on_issue_exit_code : int
val fcp_dir : string
val idempotent_getters : bool
val initial_analysis_time : float
val ivar_attributes : string
val java_lambda_marker_infix : string

marker to recognize methods generated by javalib to eliminate lambdas

val lib_dir : string
val load_average : float option
val max_narrows : int
val max_widens : int
val meet_level : int
val nsnotification_center_checker_backend : bool
val os_type : os_type
val passthroughs : bool
val patterns_modeled_expensive : string * Yojson.Basic.t
val patterns_never_returning_null : string * Yojson.Basic.t
val patterns_skip_implementation : string * Yojson.Basic.t
val patterns_skip_translation : string * Yojson.Basic.t
val pp_version : Stdlib.Format.formatter -> unit -> unit
val property_attributes : string
val relative_path_backtrack : int
val report : bool
val report_custom_error : bool
val report_force_relative_path : bool
val report_nullable_inconsistency : bool
val save_compact_summaries : bool
val smt_output : bool
val source_file_extentions : string list
val kotlin_source_extension : string
val sourcepath : string option
val sources : string list
val trace_absarray : bool
val unsafe_unret : string
val incremental_analysis : bool
val weak : string
val whitelisted_cpp_classes : string list
val whitelisted_cpp_methods : string list
val wrappers_dir : string

Configuration values specified by command-line options

val abs_struct : int
val abs_val : int
val allow_leak : bool
val annotation_reachability_cxx : Yojson.Basic.t
val annotation_reachability_cxx_sources : Yojson.Basic.t
val annotation_reachability_custom_pairs : Yojson.Basic.t
val array_level : int
val biabduction_models_mode : bool
val bo_debug : int
val bo_field_depth_limit : int option
val bootclasspath : string option
val buck : bool
val buck_blacklist : string list
val buck_build_args : string list
val buck_build_args_no_inline : string list
val buck_cache_mode : bool
val buck_merge_all_deps : bool
val buck_mode : BuckMode.t option
val buck_out_gen : string
val buck_targets_blacklist : string list
val call_graph_schedule : bool
val capture : bool
val capture_blacklist : string option
val censor_report : ((bool * Str.regexp) * (bool * Str.regexp) * string) list
val changed_files_index : string option
val check_version : string option
val clang_ast_file : [ `Biniou of string | `Yojson of string ] option
val clang_compound_literal_init_limit : int
val clang_extra_flags : string list
val clang_blacklisted_flags : string list
val clang_blacklisted_flags_with_arg : string list
val clang_ignore_regex : string option
val clang_isystem_to_override_regex : Str.regexp option
val clang_idirafter_to_override_regex : Str.regexp option
val clang_libcxx_include_to_override_regex : string option
val command : ATDGenerated.InferCommand.t
val continue_analysis : bool
val continue_capture : bool
val costs_current : string option
val cost_issues_tests : string option
val cost_scuba_logging : bool
val costs_previous : string option
val cost_suppress_func_ptr : bool
val cost_tests_only_autoreleasepool : bool
val cxx : bool
val cxx_scope_guards : Yojson.Basic.t
val deduplicate : bool
val debug_exceptions : bool
val debug_level_analysis : int
val debug_level_capture : int
val debug_level_linters : int
val debug_level_test_determinator : int
val debug_mode : bool
val default_linters : bool
val dependency_mode : bool
val developer_mode : bool
val differential_filter_files : string option
val differential_filter_set : [ `Introduced | `Fixed | `Preexisting ] list
val dotty_cfg_libs : bool
val dump_duplicate_symbols : bool
val eradicate_condition_redundant : bool
val eradicate_field_over_annotated : bool
val eradicate_return_over_annotated : bool
val eradicate_verbose : bool
val fail_on_bug : bool
val fcp_apple_clang : string option
val fcp_syntax_only : bool
val file_renamings : string option
val filter_paths : bool
val filtering : bool
val force_delete_results_dir : bool
val force_integration : build_system option
val from_json_report : string
val from_json_costs_report : string
val frontend_stats : bool
val frontend_tests : bool
val function_pointer_specialization : bool
val generated_classes : string option
val genrule_mode : bool
val get_linter_doc_url : linter_id:string -> string option
val help_checker : Checker.t list
val help_issue_type : IssueType.t list
val hoisting_report_only_expensive : bool
val html : bool
val global_tenv : bool
val icfg_dotty_outfile : string option
val infer_is_clang : bool
val infer_is_javac : bool
val implicit_sdk_root : string option
val inclusive_cost : bool
val inferconfig_file : string option
val inferconfig_dir : string option
val is_checker_enabled : Checker.t -> bool
val issues_tests : string option
val issues_tests_fields : IssuesTestField.t list
val iterations : int
val java_debug_source_file_info : string option
val java_jar_compiler : string option
val java_version : int option
val javac_classes_out : string
val job_id : string option
val jobs : int
val join_cond : int
val keep_going : bool
val linter : string option
val linters_def_file : string list
val linters_def_folder : string list
val linters_developer_mode : bool
val linters_ignore_clang_failures : bool
val linters_validate_syntax_only : bool
val list_checkers : bool
val list_issue_types : bool
val liveness_dangerous_classes : Yojson.Basic.t
val max_nesting : int option
val merge : bool
val method_decls_info : string option
val ml_buckets : [ `MLeak_all | `MLeak_arc | `MLeak_cf | `MLeak_cpp | `MLeak_no_arc | `MLeak_unknown ] list
val modified_lines : string option
val monitor_prop_size : bool
val nelseg : bool
val no_translate_libs : bool
val nullable_annotation : string option
val nullsafe_annotation_graph : bool
val nullsafe_disable_field_not_initialized_in_nonstrict_classes : bool
val nullsafe_optimistic_third_party_params_in_non_strict : bool
val nullsafe_third_party_signatures : string option
val nullsafe_third_party_location_for_messaging_only : string option
val nullsafe_strict_containers : bool
val oom_threshold : int option
val only_cheap_debug : bool
val only_footprint : bool
val pmd_xml : bool
val print_active_checkers : bool
val print_builtins : bool
val print_jbir : bool
val print_logs : bool
val print_types : bool
val print_using_diff : bool
val procedures : bool
val procedures_attributes : bool
val procedures_cfg : bool
val procedures_definedness : bool
val procedures_filter : string option
val procedures_name : bool
val procedures_source_file : bool
val procedures_summary : bool
val procedures_summary_json : bool
val process_clang_ast : bool
val clang_frontend_action_string : string
val profiler_samples : string option
val progress_bar : [ `MultiLine | `Plain | `Quiet ]
val project_root : string
val pulse_cut_to_one_path_procedures_pattern : Str.regexp option
val pulse_recency_limit : int
val pulse_intraprocedural_only : bool
val pulse_max_disjuncts : int
val pulse_model_abort : string list
val pulse_model_alloc_pattern : Str.regexp option
val pulse_model_release_pattern : Str.regexp option
val pulse_model_return_nonnull : string list
val pulse_model_skip_pattern : Str.regexp option
val pulse_model_transfer_ownership_namespace : (string * string) list
val pulse_model_transfer_ownership : string list
val pulse_report_latent_issues : bool
val pulse_widen_threshold : int
val pure_by_default : bool
val quandary_endpoints : Yojson.Basic.t
val quandary_sanitizers : Yojson.Basic.t
val quandary_sinks : Yojson.Basic.t
val quandary_sources : Yojson.Basic.t
val quiet : bool
val racerd_guardedby : bool
val reactive_mode : bool
val reanalyze : bool
val report_blacklist_files_containing : string list
val report_console_limit : int option
val report_current : string option
val report_formatter : [ `No_formatter | `Phabricator_formatter ]
val report_path_regex_blacklist : string list
val report_path_regex_whitelist : string list
val report_previous : string option
val report_suppress_errors : string list
val reports_include_ml_loc : bool
val rest : string list
val results_dir : string
val scheduler : scheduler
val scuba_logging : bool
val scuba_normals : string IStdlib.IStd.String.Map.t
val scuba_tags : string list IStdlib.IStd.String.Map.t
val seconds_per_iteration : float option
val select : [ `All | `Select of int ] option
val show_buckets : bool
val siof_check_iostreams : bool
val siof_safe_methods : string list
val skip_analysis_in_path : string list
val skip_analysis_in_path_skips_compilation : bool
val skip_duplicated_types : bool
val skip_translation_headers : string list
val source_files : bool
val source_files_cfg : bool
val source_files_filter : string option
val source_files_freshly_captured : bool
val source_files_procedure_names : bool
val source_files_type_environment : bool
val source_preview : bool
val sqlite_cache_size : int
val sqlite_page_size : int
val sqlite_lock_timeout : int
val sqlite_vfs : string option
val starvation_skip_analysis : Yojson.Basic.t
val starvation_strict_mode : bool
val starvation_whole_program : bool
val subtype_multirange : bool
val summaries_caches_max_size : int
val suppress_lint_ignore_types : bool
val symops_per_iteration : int option
val test_determinator : bool
val export_changed_functions : bool
val test_filtering : bool
val testing_mode : bool
val threadsafe_aliases : Yojson.Basic.t
val topl_properties : string list
val trace_error : bool
val trace_events : bool
val trace_join : bool
val trace_ondemand : bool
val trace_rearrange : bool
val trace_topl : bool
val tv_commit : string option
val tv_limit : int
val tv_limit_filtered : int
val type_size : bool
val uninit_interproc : bool
val unsafe_malloc : bool
val worklist_mode : int
val workspace : string option
val write_dotty : bool
val write_html : bool
val write_html_whitelist_regex : string list
val write_website : string option
val xcode_developer_dir : string option
val xcode_isysroot_suffix : string option
val xcpretty : bool

Configuration values derived from command-line options

val dynamic_dispatch : bool
val toplevel_results_dir : string

In some integrations, eg Buck, infer subprocesses started by the build system (started by the toplevel infer process) will have their own results directory; this points to the results directory of the toplevel infer process, which can be useful for, eg, storing debug info. In other cases this is equal to results_dir.

val is_in_custom_symbols : string -> string -> bool

Does named symbol match any prefix in the named custom symbol list?

val java_package_is_external : string -> bool

Check if a Java package is external to the repository

val scuba_execution_id : IStdlib.IStd.Int64.t option

a random number to (hopefully) uniquely identify this run

Global variables with initial values specified by command-line options

val clang_compilation_dbs : [ `Escaped of string | `Raw of string ] list
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase/IssueType/index.html b/website/static/odoc/next/infer/IBase/IssueType/index.html index d8542345a..604f8d0b3 100644 --- a/website/static/odoc/next/infer/IBase/IssueType/index.html +++ b/website/static/odoc/next/infer/IBase/IssueType/index.html @@ -1,2 +1,2 @@ -IssueType (infer.IBase.IssueType)

Module IBase.IssueType

type visibility =
| User

always add to error log

| Developer

only add to error log in some debug modes

| Silent

never add to error log

visibility of the issue type

val compare_visibility : visibility -> visibility -> int
val equal_visibility : visibility -> visibility -> bool
val string_of_visibility : visibility -> string
type severity =
| Like
| Info
| Advice
| Warning
| Error

severity of the report

val compare_severity : severity -> severity -> int
val equal_severity : severity -> severity -> bool
val all_of_severity : severity list
val string_of_severity : severity -> string
type t = private {
unique_id : string;
checker : Checker.t;
visibility : visibility;
user_documentation : string option;
mutable default_severity : severity;

used for documentation but can be overriden at report time

mutable enabled : bool;
mutable hum : string;
mutable doc_url : string option;
mutable linters_def_file : string option;
}
val compare : t -> t -> int
val equal : t -> t -> bool
val all_issues : unit -> t list

all the issues declared so far

val pp : Stdlib.Format.formatter -> t -> unit

pretty print a localised string

val find_from_string : id:string -> t option

return the issue type if it was previously registered

val register_dynamic : ?⁠enabled:bool -> ?⁠hum:string -> ?⁠doc_url:string -> linters_def_file:string option -> id:string -> ?⁠user_documentation:string -> severity -> Checker.t -> t

Create a new issue and register it in the list of all issues. NOTE: if the issue with the same string id is already registered, overrides `hum`, `doc_url`, and `linters_def_file`, but DOES NOT override `enabled`. This trick allows to deal with disabling/enabling dynamic AL issues from the config, when we don't know all params yet. Thus, the human-readable description can be updated when we encounter the definition of the issue type, eg in AL.

val checker_can_report : Checker.t -> t -> bool

Whether the issue was registered as coming from the given checker. Important to call this before reporting to keep documentation accurate.

val set_enabled : t -> bool -> unit
val abduction_case_not_implemented : t
val array_of_pointsto : t
val array_out_of_bounds_l1 : t
val array_out_of_bounds_l2 : t
val array_out_of_bounds_l3 : t
val assert_failure : t
val bad_footprint : t
val biabduction_analysis_stops : t
val buffer_overrun_l1 : t
val buffer_overrun_l2 : t
val buffer_overrun_l3 : t
val buffer_overrun_l4 : t
val buffer_overrun_l5 : t
val buffer_overrun_s2 : t
val buffer_overrun_u5 : t
val cannot_star : t
val captured_strong_self : t
val checkers_allocates_memory : t

Warning name when a performance critical method directly or indirectly calls a method allocating memory

val checkers_annotation_reachability_error : t
val checkers_calls_expensive_method : t

Warning name when a performance critical method directly or indirectly calls a method annotatd as expensive

val checkers_expensive_overrides_unexpensive : t

Warning name for the subtyping rule: method not annotated as expensive cannot be overridden by a method annotated as expensive

val checkers_fragment_retain_view : t
val checkers_immutable_cast : t
val checkers_printf_args : t
val class_cast_exception : t
val complexity_increase : kind:CostKind.t -> is_on_ui_thread:bool -> t
val component_with_multiple_factory_methods : t
val condition_always_false : t
val condition_always_true : t
val config_checks_between_markers : t
val constant_address_dereference : t
val create_intent_from_uri : t
val cross_site_scripting : t
val dangling_pointer_dereference : t
val dangling_pointer_dereference_maybe : t
val dead_store : t
val deadlock : t
val divide_by_zero : t
val do_not_report : t

an issue type that should never be reported

val empty_vector_access : t
val eradicate_condition_redundant : t
val eradicate_field_not_initialized : t
val eradicate_field_not_nullable : t
val eradicate_field_over_annotated : t
val eradicate_inconsistent_subclass_parameter_annotation : t
val eradicate_inconsistent_subclass_return_annotation : t
val eradicate_redundant_nested_class_annotation : t
val eradicate_bad_nested_class_annotation : t
val eradicate_nullable_dereference : t
val eradicate_parameter_not_nullable : t
val eradicate_return_not_nullable : t
val eradicate_return_over_annotated : t
val eradicate_unvetted_third_party_in_nullsafe : t
val eradicate_unchecked_usage_in_nullsafe : t
val eradicate_meta_class_can_be_nullsafe : t
val eradicate_meta_class_needs_improvement : t
val eradicate_meta_class_is_nullsafe : t
val exposed_insecure_intent_handling : t
val failure_exe : t
val field_not_null_checked : t
val guardedby_violation_racerd : t
val impure_function : t
val inefficient_keyset_iterator : t
val inferbo_alloc_is_big : t
val inferbo_alloc_is_negative : t
val inferbo_alloc_is_zero : t
val inferbo_alloc_may_be_big : t
val inferbo_alloc_may_be_negative : t
val infinite_cost_call : kind:CostKind.t -> t
val inherently_dangerous_function : t
val insecure_intent_handling : t
val integer_overflow_l1 : t
val integer_overflow_l2 : t
val integer_overflow_l5 : t
val integer_overflow_u5 : t
val interface_not_thread_safe : t
val internal_error : t
val invariant_call : t
val javascript_injection : t
val lab_resource_leak : t
val leak_after_array_abstraction : t
val leak_in_footprint : t
val leak_unknown_origin : t
val lockless_violation : t
val lock_consistency_violation : t
val logging_private_data : t
val expensive_loop_invariant_call : t
val memory_leak : t
val missing_fld : t
val missing_required_prop : t
val mixed_self_weakself : t
val multiple_weakself : t
val mutable_local_variable_in_component_file : t
val null_dereference : t
val nullptr_dereference : t
val optional_empty_access : t
val parameter_not_null_checked : t
val precondition_not_found : t
val precondition_not_met : t
val premature_nil_termination : t
val pulse_memory_leak : t
val pure_function : t
val quandary_taint_error : t
val resource_leak : t
val retain_cycle : t
val skip_function : t
val shell_injection : t
val shell_injection_risk : t
val sql_injection : t
val sql_injection_risk : t
val stack_variable_address_escape : t
val starvation : t
val static_initialization_order_fiasco : t
val strict_mode_violation : t
val strong_self_not_checked : t
val symexec_memory_error : t
val thread_safety_violation : t
val topl_biabd_error : t
val topl_pulse_error : t
val uninitialized_value : t
val unreachable_code_after : t
val use_after_delete : t
val use_after_free : t
val use_after_lifetime : t
val untrusted_buffer_access : t
val untrusted_deserialization : t
val untrusted_deserialization_risk : t
val untrusted_file : t
val untrusted_file_risk : t
val untrusted_heap_allocation : t
val untrusted_intent_creation : t
val untrusted_url_risk : t
val untrusted_environment_change_risk : t
val untrusted_variable_length_array : t
val user_controlled_sql_risk : t
val vector_invalidation : t
val weak_self_in_noescape_block : t
val wrong_argument_number : t
val unreachable_cost_call : kind:CostKind.t -> t
val is_autoreleasepool_size_issue : t -> bool
\ No newline at end of file +IssueType (infer.IBase.IssueType)

Module IBase.IssueType

type visibility =
| User

always add to error log

| Developer

only add to error log in some debug modes

| Silent

never add to error log

visibility of the issue type

val compare_visibility : visibility -> visibility -> int
val equal_visibility : visibility -> visibility -> bool
val string_of_visibility : visibility -> string
type severity =
| Like
| Info
| Advice
| Warning
| Error

severity of the report

val compare_severity : severity -> severity -> int
val equal_severity : severity -> severity -> bool
val all_of_severity : severity list
val string_of_severity : severity -> string
type t = private {
unique_id : string;
checker : Checker.t;
visibility : visibility;
user_documentation : string option;
mutable default_severity : severity;

used for documentation but can be overriden at report time

mutable enabled : bool;
mutable hum : string;
mutable doc_url : string option;
mutable linters_def_file : string option;
}
val compare : t -> t -> int
val equal : t -> t -> bool
val all_issues : unit -> t list

all the issues declared so far

val pp : Stdlib.Format.formatter -> t -> unit

pretty print a localised string

val find_from_string : id:string -> t option

return the issue type if it was previously registered

val register_dynamic : ?⁠enabled:bool -> ?⁠hum:string -> ?⁠doc_url:string -> linters_def_file:string option -> id:string -> ?⁠user_documentation:string -> severity -> Checker.t -> t

Create a new issue and register it in the list of all issues. NOTE: if the issue with the same string id is already registered, overrides `hum`, `doc_url`, and `linters_def_file`, but DOES NOT override `enabled`. This trick allows to deal with disabling/enabling dynamic AL issues from the config, when we don't know all params yet. Thus, the human-readable description can be updated when we encounter the definition of the issue type, eg in AL.

val checker_can_report : Checker.t -> t -> bool

Whether the issue was registered as coming from the given checker. Important to call this before reporting to keep documentation accurate.

val set_enabled : t -> bool -> unit
val abduction_case_not_implemented : t
val array_of_pointsto : t
val array_out_of_bounds_l1 : t
val array_out_of_bounds_l2 : t
val array_out_of_bounds_l3 : t
val assert_failure : t
val bad_footprint : t
val biabduction_analysis_stops : t
val buffer_overrun_l1 : t
val buffer_overrun_l2 : t
val buffer_overrun_l3 : t
val buffer_overrun_l4 : t
val buffer_overrun_l5 : t
val buffer_overrun_s2 : t
val buffer_overrun_u5 : t
val cannot_star : t
val captured_strong_self : t
val checkers_allocates_memory : t

Warning name when a performance critical method directly or indirectly calls a method allocating memory

val checkers_annotation_reachability_error : t
val checkers_calls_expensive_method : t

Warning name when a performance critical method directly or indirectly calls a method annotatd as expensive

val checkers_expensive_overrides_unexpensive : t

Warning name for the subtyping rule: method not annotated as expensive cannot be overridden by a method annotated as expensive

val checkers_fragment_retain_view : t
val checkers_immutable_cast : t
val checkers_printf_args : t
val class_cast_exception : t
val complexity_increase : kind:CostKind.t -> is_on_ui_thread:bool -> t
val component_with_multiple_factory_methods : t
val condition_always_false : t
val condition_always_true : t
val config_checks_between_markers : t
val constant_address_dereference : t
val create_intent_from_uri : t
val cross_site_scripting : t
val dangling_pointer_dereference : t
val dangling_pointer_dereference_maybe : t
val dead_store : t
val deadlock : t
val divide_by_zero : t
val do_not_report : t

an issue type that should never be reported

val empty_vector_access : t
val eradicate_annotation_graph : t
val eradicate_condition_redundant : t
val eradicate_field_not_initialized : t
val eradicate_field_not_nullable : t
val eradicate_field_over_annotated : t
val eradicate_inconsistent_subclass_parameter_annotation : t
val eradicate_inconsistent_subclass_return_annotation : t
val eradicate_redundant_nested_class_annotation : t
val eradicate_bad_nested_class_annotation : t
val eradicate_nullable_dereference : t
val eradicate_parameter_not_nullable : t
val eradicate_return_not_nullable : t
val eradicate_return_over_annotated : t
val eradicate_unvetted_third_party_in_nullsafe : t
val eradicate_unchecked_usage_in_nullsafe : t
val eradicate_meta_class_can_be_nullsafe : t
val eradicate_meta_class_needs_improvement : t
val eradicate_meta_class_is_nullsafe : t
val exposed_insecure_intent_handling : t
val failure_exe : t
val field_not_null_checked : t
val guardedby_violation_racerd : t
val impure_function : t
val inefficient_keyset_iterator : t
val inferbo_alloc_is_big : t
val inferbo_alloc_is_negative : t
val inferbo_alloc_is_zero : t
val inferbo_alloc_may_be_big : t
val inferbo_alloc_may_be_negative : t
val infinite_cost_call : kind:CostKind.t -> t
val inherently_dangerous_function : t
val insecure_intent_handling : t
val integer_overflow_l1 : t
val integer_overflow_l2 : t
val integer_overflow_l5 : t
val integer_overflow_u5 : t
val interface_not_thread_safe : t
val internal_error : t
val invariant_call : t
val javascript_injection : t
val lab_resource_leak : t
val leak_after_array_abstraction : t
val leak_in_footprint : t
val leak_unknown_origin : t
val lockless_violation : t
val lock_consistency_violation : t
val logging_private_data : t
val expensive_loop_invariant_call : t
val memory_leak : t
val missing_fld : t
val missing_required_prop : t
val mixed_self_weakself : t
val multiple_weakself : t
val mutable_local_variable_in_component_file : t
val null_dereference : t
val nullptr_dereference : t
val optional_empty_access : t
val parameter_not_null_checked : t
val precondition_not_found : t
val precondition_not_met : t
val premature_nil_termination : t
val pulse_memory_leak : t
val pure_function : t
val quandary_taint_error : t
val resource_leak : t
val retain_cycle : t
val skip_function : t
val shell_injection : t
val shell_injection_risk : t
val sql_injection : t
val sql_injection_risk : t
val stack_variable_address_escape : t
val starvation : t
val static_initialization_order_fiasco : t
val strict_mode_violation : t
val strong_self_not_checked : t
val symexec_memory_error : t
val thread_safety_violation : t
val topl_biabd_error : t
val topl_pulse_error : t
val uninitialized_value : t
val unreachable_code_after : t
val use_after_delete : t
val use_after_free : t
val use_after_lifetime : t
val untrusted_buffer_access : t
val untrusted_deserialization : t
val untrusted_deserialization_risk : t
val untrusted_file : t
val untrusted_file_risk : t
val untrusted_heap_allocation : t
val untrusted_intent_creation : t
val untrusted_url_risk : t
val untrusted_environment_change_risk : t
val untrusted_variable_length_array : t
val user_controlled_sql_risk : t
val vector_invalidation : t
val weak_self_in_noescape_block : t
val wrong_argument_number : t
val unreachable_cost_call : kind:CostKind.t -> t
val is_autoreleasepool_size_issue : t -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase/Location/index.html b/website/static/odoc/next/infer/IBase/Location/index.html index 404ef0d48..34a3e52a6 100644 --- a/website/static/odoc/next/infer/IBase/Location/index.html +++ b/website/static/odoc/next/infer/IBase/Location/index.html @@ -1,2 +1,2 @@ -Location (infer.IBase.Location)

Module IBase.Location

type t = {
line : int;

The line number. -1 means "do not know"

col : int;

The column number. -1 means "do not know"

file : SourceFile.t;

The name of the source file

}

Location in the original source file

val compare : t -> t -> int
val equal : t -> t -> bool
val none : SourceFile.t -> t

Dummy source location for the given file

val dummy : t

Dummy location with no source file

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a location.

val pp_line : Stdlib.Format.formatter -> t -> unit

print just the line information

val to_string : t -> string

String representation of a location.

val pp_file_pos : Stdlib.Format.formatter -> t -> unit

Pretty print a file-position of a location

val pp_range : Stdlib.Format.formatter -> (t * t) -> unit
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
\ No newline at end of file +Location (infer.IBase.Location)

Module IBase.Location

type t = {
line : int;

The line number. -1 means "do not know"

col : int;

The column number. -1 means "do not know"

file : SourceFile.t;

The name of the source file

}

Location in the original source file

val compare : t -> t -> int
val equal : t -> t -> bool
val none : SourceFile.t -> t

Dummy source location for the given file

val dummy : t

Dummy location with no source file

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a location.

val pp_line : Stdlib.Format.formatter -> t -> unit

print just the line information

val to_string : t -> string

String representation of a location.

val pp_file_pos : Stdlib.Format.formatter -> t -> unit

Pretty print a file-position of a location

val pp_range : Stdlib.Format.formatter -> (t * t) -> unit
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase/SourceFile/index.html b/website/static/odoc/next/infer/IBase/SourceFile/index.html index 4a4f0603c..75ad00bd8 100644 --- a/website/static/odoc/next/infer/IBase/SourceFile/index.html +++ b/website/static/odoc/next/infer/IBase/SourceFile/index.html @@ -1,2 +1,2 @@ -SourceFile (infer.IBase.SourceFile)

Module IBase.SourceFile

type t
val compare : t -> t -> int
module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Maps from source_file

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set of source files

module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t
val is_invalid : t -> bool

Is the source file the invalid source file?

val changed_sources_from_changed_files : string list -> Set.t

Set of files read from --changed-files-index file, None if option not specified NOTE: it may include extra source_files if --changed-files-index contains paths to header files

val invalid : string -> t

Invalid source file

val equal : t -> t -> bool

equality of source files

val from_abs_path : ?⁠warn_on_error:bool -> string -> t

create source file from absolute path. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val create : ?⁠warn_on_error:bool -> string -> t

Create a SourceFile from a given path. If relative, it assumes it is w.r.t. project root. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val is_under_project_root : t -> bool

Returns true if the file is in project root

val of_header : ?⁠warn_on_error:bool -> t -> t option

Return approximate source file corresponding to the parameter if it's header file and file exists. returns None otherwise. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given SourceFile (e.g. if it does not exist).

val pp : Stdlib.Format.formatter -> t -> unit

pretty print t

val to_abs_path : t -> string

get the full path of a source file

val to_rel_path : t -> string

get the relative path of a source file

val to_string : ?⁠force_relative:bool -> t -> string

convert a source file to a string WARNING: result may not be valid file path, do not use this function to perform operations on filenames

val has_extension : t -> ext:string -> bool

returns whether the source file has provided extension

module SQLite : SqliteUtils.Data with type t = t
\ No newline at end of file +SourceFile (infer.IBase.SourceFile)

Module IBase.SourceFile

type t
val compare : t -> t -> int
module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Maps from source_file

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set of source files

module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t
val is_invalid : t -> bool

Is the source file the invalid source file?

val changed_sources_from_changed_files : string list -> Set.t

Set of files read from --changed-files-index file, None if option not specified NOTE: it may include extra source_files if --changed-files-index contains paths to header files

val invalid : string -> t

Invalid source file

val equal : t -> t -> bool

equality of source files

val from_abs_path : ?⁠warn_on_error:bool -> string -> t

create source file from absolute path. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val create : ?⁠warn_on_error:bool -> string -> t

Create a SourceFile from a given path. If relative, it assumes it is w.r.t. project root. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val is_under_project_root : t -> bool

Returns true if the file is in project root

val of_header : ?⁠warn_on_error:bool -> t -> t option

Return approximate source file corresponding to the parameter if it's header file and file exists. returns None otherwise. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given SourceFile (e.g. if it does not exist).

val pp : Stdlib.Format.formatter -> t -> unit

pretty print t

val to_abs_path : t -> string

get the full path of a source file

val to_rel_path : t -> string

get the relative path of a source file

val to_string : ?⁠force_relative:bool -> t -> string

convert a source file to a string WARNING: result may not be valid file path, do not use this function to perform operations on filenames

val has_extension : t -> ext:string -> bool

returns whether the source file has provided extension

module SQLite : SqliteUtils.Data with type t = t
module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase/Utils/index.html b/website/static/odoc/next/infer/IBase/Utils/index.html index b95c32bb6..117618d75 100644 --- a/website/static/odoc/next/infer/IBase/Utils/index.html +++ b/website/static/odoc/next/infer/IBase/Utils/index.html @@ -1,2 +1,2 @@ -Utils (infer.IBase.Utils)

Module IBase.Utils

val find_files : path:string -> extension:string -> string list

recursively traverse a path for files ending with a given extension

val fold_folders : init:'acc -> f:('acc -> string -> 'acc) -> path:string -> 'acc

recursively traverse a path for folders, returning resuls by a given fold function

val string_crc_hex32 : string -> string

Compute a 32-character hexadecimal crc using the Digest module

val read_file : string -> (string list, string) IStdlib.IStd.Result.t

read a source file and return a list of lines

val filename_to_absolute : root:string -> string -> string

Convert a filename to an absolute one if it is relative, and normalize "." and ".."

val filename_to_relative : ?⁠force_full_backtrack:bool -> ?⁠backtrack:int -> root:string -> string -> string option

Convert an absolute filename to one relative to a root directory. Returns None if filename is not under root. The backtrack level sets the maximum level of steps in the parent directories to search for a common prefix

type outfile = {
fname : string;

name of the file

out_c : IStdlib.IStd.Out_channel.t;

output channel

fmt : Stdlib.Format.formatter;

formatter for printing

}

type for files used for printing

val create_outfile : string -> outfile option

create an outfile for the command line, the boolean indicates whether to do demangling when closing the file

val close_outf : outfile -> unit

close an outfile

val directory_fold : ('a -> string -> 'a) -> 'a -> string -> 'a

Functional fold function over all the file of a directory

val directory_iter : (string -> unit) -> string -> unit

Functional iter function over all the file of a directory

val directory_is_empty : string -> bool

Returns true if a given directory is empty. The directory is assumed to exist.

val read_json_file : string -> (Yojson.Basic.t, string) IStdlib.IStd.Result.t
val with_file_in : string -> f:(IStdlib.IStd.In_channel.t -> 'a) -> 'a
val with_file_out : string -> f:(IStdlib.IStd.Out_channel.t -> 'a) -> 'a
type file_lock = {
file : string;
oc : Stdlib.out_channel;
fd : Core.Unix.File_descr.t;
lock : unit -> unit;
unlock : unit -> unit;
}
val create_file_lock : unit -> file_lock
val with_file_lock : file_lock:file_lock -> f:(unit -> 'a) -> 'a
val with_intermediate_temp_file_out : string -> f:(IStdlib.IStd.Out_channel.t -> 'a) -> 'a

like with_file_out but uses a fresh intermediate temporary file and rename to avoid write-write races

val write_json_to_file : string -> Yojson.Basic.t -> unit
val consume_in : IStdlib.IStd.In_channel.t -> unit

consume and ignore all the lines from the channel until End_of_file is reached

val echo_in : IStdlib.IStd.In_channel.t -> unit

echo the lines we get to stdout until End_of_file is reached

val with_channel_in : f:(string -> unit) -> IStdlib.IStd.In_channel.t -> unit
val with_process_in : string -> (IStdlib.IStd.In_channel.t -> 'a) -> 'a * IStdlib.IStd.Unix.Exit_or_signal.t
val create_dir : string -> unit

recursively create a directory if it does not exist already

val out_channel_create_with_dir : IStdlib.IStd.Filename.t -> IStdlib.IStd.Out_channel.t

create an out channel with creating missing directories

val realpath : ?⁠warn_on_error:bool -> string -> string

realpath warn_on_error path returns path with all symbolic links resolved. It caches results of previous calls to avoid expensive system calls. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val suppress_stderr2 : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c

wraps a function expecting 2 arguments in another that temporarily redirects stderr to /dev/null for the duration of the function call

val rmtree : string -> unit

rmtree path removes path and, if path is a directory, recursively removes its contents

val try_finally_swallow_timeout : f:(unit -> 'a) -> finally:(unit -> unit) -> 'a

Calls f then finally even if f raised an exception. The original exception is reraised afterwards. Where possible use SymOp.try_finally to avoid swallowing timeouts.

val better_hash : 'a -> IStdlib.IStd.Caml.Digest.t

Hashtbl.hash only hashes the first 10 meaningful values, better_hash uses everything.

delete temporary file on exit

val strip_balanced_once : drop:(char -> bool) -> string -> string

drop at most one layer of well-balanced first and last characters satisfying drop from the string; for instance, strip_balanced ~drop:(function | 'a' | 'x' -> true | _ -> false) "xaabax" returns "aaba"

val assoc_of_yojson : Yojson.Basic.t -> src:string -> (string, Yojson.Basic.t) IStdlib.IStd.List.Assoc.t

Verify we have a json object (or empty list) and return the corresponding assoc list. Otherwise die with a message including src.

val string_of_yojson : Yojson.Basic.t -> src:string -> string

Verify we have a json string and return the corresponding ocaml string. Otherwise die with a message including src.

val string_list_of_yojson : Yojson.Basic.t -> src:string -> string list

Verify we have a json list of strings and return the corresponding ocaml string list. Otherwise die with a message including src.

val yojson_lookup : (string, Yojson.Basic.t) IStdlib.IStd.List.Assoc.t -> string -> src:string -> f:(Yojson.Basic.t -> src:string -> 'a) -> default:'a -> 'a

Lookup a json value on an assoc list. If not present, returns default. Otherwise returns (f json_value ~src) where src has element name appended. f is typically one of the above _of_yojson functions.

val timeit : f:(unit -> 'a) -> 'a * int

Returns the execution time of f in milliseconds together with its result

val do_in_dir : dir:string -> f:(unit -> 'a) -> 'a

executes f after cding into dir and then restores original cwd

val get_available_memory_MB : unit -> int option

On Linux systems, return Some x where MemAvailable x is in /proc/meminfo. Returns None in all other cases.

val iter_infer_deps : project_root:string -> f:(string -> unit) -> string -> unit

Parse each line of the given infer_deps.txt file (split on tabs, assume 3 elements per line) and run f on the third element. project_root is an argument to avoid dependency cycles.

val numcores : int
  • On Linux return the number of physical cores (sockets * cores per socket).
  • On Darwin and Windows returns half of the number of CPUs since most processors have 2 hardware threads per core.
val set_best_cpu_for : int -> unit

Pins processes to CPUs aiming to saturate physical cores evenly

val zip_fold_filenames : init:'a -> f:('a -> string -> 'a) -> zip_filename:string -> 'a

fold over each filename in the given zip_filename.

\ No newline at end of file +Utils (infer.IBase.Utils)

Module IBase.Utils

val find_files : path:string -> extension:string -> string list

recursively traverse a path for files ending with a given extension

val fold_folders : init:'acc -> f:('acc -> string -> 'acc) -> path:string -> 'acc

recursively traverse a path for folders, returning resuls by a given fold function

val string_crc_hex32 : string -> string

Compute a 32-character hexadecimal crc using the Digest module

val read_file : string -> (string list, string) IStdlib.IStd.Result.t

read a source file and return a list of lines

val normalize_path_from : root:string -> string -> string * string

normalize_path_from ~root path removes ".." and "." parts of root/path when possible and returns the new root and path, eg if root = "r" and path = "a/../../../foo/./bar" then the result is ("../foo/bar", ".") (in particular "r/a/../../../foo/./bar" and "./../foo/bar" represent the same file)

val filename_to_absolute : root:string -> string -> string

Convert a filename to an absolute one if it is relative, and normalize "." and ".."

val filename_to_relative : ?⁠force_full_backtrack:bool -> ?⁠backtrack:int -> root:string -> string -> string option

Convert an absolute filename to one relative to a root directory. Returns None if filename is not under root. The backtrack level sets the maximum level of steps in the parent directories to search for a common prefix

type outfile = {
fname : string;

name of the file

out_c : IStdlib.IStd.Out_channel.t;

output channel

fmt : Stdlib.Format.formatter;

formatter for printing

}

type for files used for printing

val create_outfile : string -> outfile option

create an outfile for the command line, the boolean indicates whether to do demangling when closing the file

val close_outf : outfile -> unit

close an outfile

val directory_fold : ('a -> string -> 'a) -> 'a -> string -> 'a

Functional fold function over all the file of a directory

val directory_iter : (string -> unit) -> string -> unit

Functional iter function over all the file of a directory

val directory_is_empty : string -> bool

Returns true if a given directory is empty. The directory is assumed to exist.

val read_json_file : string -> (Yojson.Basic.t, string) IStdlib.IStd.Result.t
val with_file_in : string -> f:(IStdlib.IStd.In_channel.t -> 'a) -> 'a
val with_file_out : string -> f:(IStdlib.IStd.Out_channel.t -> 'a) -> 'a
type file_lock = {
file : string;
oc : Stdlib.out_channel;
fd : Core.Unix.File_descr.t;
lock : unit -> unit;
unlock : unit -> unit;
}
val create_file_lock : unit -> file_lock
val with_file_lock : file_lock:file_lock -> f:(unit -> 'a) -> 'a
val with_intermediate_temp_file_out : string -> f:(IStdlib.IStd.Out_channel.t -> 'a) -> 'a

like with_file_out but uses a fresh intermediate temporary file and rename to avoid write-write races

val write_json_to_file : string -> Yojson.Basic.t -> unit
val consume_in : IStdlib.IStd.In_channel.t -> unit

consume and ignore all the lines from the channel until End_of_file is reached

val echo_in : IStdlib.IStd.In_channel.t -> unit

echo the lines we get to stdout until End_of_file is reached

val with_channel_in : f:(string -> unit) -> IStdlib.IStd.In_channel.t -> unit
val with_process_in : string -> (IStdlib.IStd.In_channel.t -> 'a) -> 'a * IStdlib.IStd.Unix.Exit_or_signal.t
val create_dir : string -> unit

recursively create a directory if it does not exist already

val out_channel_create_with_dir : IStdlib.IStd.Filename.t -> IStdlib.IStd.Out_channel.t

create an out channel with creating missing directories

val realpath : ?⁠warn_on_error:bool -> string -> string

realpath warn_on_error path returns path with all symbolic links resolved. It caches results of previous calls to avoid expensive system calls. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val suppress_stderr2 : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c

wraps a function expecting 2 arguments in another that temporarily redirects stderr to /dev/null for the duration of the function call

val rmtree : string -> unit

rmtree path removes path and, if path is a directory, recursively removes its contents

val try_finally_swallow_timeout : f:(unit -> 'a) -> finally:(unit -> unit) -> 'a

Calls f then finally even if f raised an exception. The original exception is reraised afterwards. Where possible use SymOp.try_finally to avoid swallowing timeouts.

val better_hash : 'a -> IStdlib.IStd.Caml.Digest.t

Hashtbl.hash only hashes the first 10 meaningful values, better_hash uses everything.

delete temporary file on exit

val strip_balanced_once : drop:(char -> bool) -> string -> string

drop at most one layer of well-balanced first and last characters satisfying drop from the string; for instance, strip_balanced ~drop:(function | 'a' | 'x' -> true | _ -> false) "xaabax" returns "aaba"

val assoc_of_yojson : Yojson.Basic.t -> src:string -> (string, Yojson.Basic.t) IStdlib.IStd.List.Assoc.t

Verify we have a json object (or empty list) and return the corresponding assoc list. Otherwise die with a message including src.

val string_of_yojson : Yojson.Basic.t -> src:string -> string

Verify we have a json string and return the corresponding ocaml string. Otherwise die with a message including src.

val string_list_of_yojson : Yojson.Basic.t -> src:string -> string list

Verify we have a json list of strings and return the corresponding ocaml string list. Otherwise die with a message including src.

val yojson_lookup : (string, Yojson.Basic.t) IStdlib.IStd.List.Assoc.t -> string -> src:string -> f:(Yojson.Basic.t -> src:string -> 'a) -> default:'a -> 'a

Lookup a json value on an assoc list. If not present, returns default. Otherwise returns (f json_value ~src) where src has element name appended. f is typically one of the above _of_yojson functions.

val timeit : f:(unit -> 'a) -> 'a * int

Returns the execution time of f in milliseconds together with its result

val do_in_dir : dir:string -> f:(unit -> 'a) -> 'a

executes f after cding into dir and then restores original cwd

val get_available_memory_MB : unit -> int option

On Linux systems, return Some x where MemAvailable x is in /proc/meminfo. Returns None in all other cases.

val iter_infer_deps : project_root:string -> f:(string -> unit) -> string -> unit

Parse each line of the given infer_deps.txt file (split on tabs, assume 3 elements per line) and run f on the third element. project_root is an argument to avoid dependency cycles.

val numcores : int
  • On Linux return the number of physical cores (sockets * cores per socket).
  • On Darwin and Windows returns half of the number of CPUs since most processors have 2 hardware threads per core.
val set_best_cpu_for : int -> unit

Pins processes to CPUs aiming to saturate physical cores evenly

val zip_fold_filenames : init:'a -> f:('a -> string -> 'a) -> zip_filename:string -> 'a

fold over each filename in the given zip_filename.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase__Config/index.html b/website/static/odoc/next/infer/IBase__Config/index.html index 2b027c90a..4f502b01a 100644 --- a/website/static/odoc/next/infer/IBase__Config/index.html +++ b/website/static/odoc/next/infer/IBase__Config/index.html @@ -1,2 +1,2 @@ -IBase__Config (infer.IBase__Config)

Module IBase__Config

type os_type =
| Unix
| Win32
| Cygwin
type build_system =
| BAnt
| BBuck
| BClang
| BGradle
| BJava
| BJavac
| BMake
| BMvn
| BNdk
| BXcode
type scheduler =
| File
| Restart
| SyntacticCallGraph
val equal_scheduler : scheduler -> scheduler -> bool
val build_system_of_exe_name : string -> build_system
val string_of_build_system : build_system -> string
val env_inside_maven : IStdlib.IStd.Unix.env

Constant configuration values

val anonymous_block_num_sep : string
val anonymous_block_prefix : string
val append_buck_flavors : string list
val assign : string
val biabduction_models_sql : string
val biabduction_models_jar : string
val bin_dir : string
val bound_error_allowed_in_procedure_call : bool
val buck_java_flavor_suppress_config : bool
val clang_exe_aliases : string list
val clang_initializer_prefix : string
val clang_inner_destructor_prefix : string
val clang_plugin_path : string
val classpath : string option
val default_failure_name : string
val dotty_frontend_output : string
val etc_dir : string
val fail_on_issue_exit_code : int
val fcp_dir : string
val idempotent_getters : bool
val initial_analysis_time : float
val ivar_attributes : string
val java_lambda_marker_infix : string

marker to recognize methods generated by javalib to eliminate lambdas

val lib_dir : string
val load_average : float option
val max_narrows : int
val max_widens : int
val meet_level : int
val nsnotification_center_checker_backend : bool
val os_type : os_type
val passthroughs : bool
val patterns_modeled_expensive : string * Yojson.Basic.t
val patterns_never_returning_null : string * Yojson.Basic.t
val patterns_skip_implementation : string * Yojson.Basic.t
val patterns_skip_translation : string * Yojson.Basic.t
val pp_version : Stdlib.Format.formatter -> unit -> unit
val property_attributes : string
val relative_path_backtrack : int
val report : bool
val report_custom_error : bool
val report_force_relative_path : bool
val report_nullable_inconsistency : bool
val save_compact_summaries : bool
val smt_output : bool
val source_file_extentions : string list
val kotlin_source_extension : string
val sourcepath : string option
val sources : string list
val trace_absarray : bool
val unsafe_unret : string
val incremental_analysis : bool
val weak : string
val whitelisted_cpp_classes : string list
val whitelisted_cpp_methods : string list
val wrappers_dir : string

Configuration values specified by command-line options

val abs_struct : int
val abs_val : int
val allow_leak : bool
val annotation_reachability_cxx : Yojson.Basic.t
val annotation_reachability_cxx_sources : Yojson.Basic.t
val annotation_reachability_custom_pairs : Yojson.Basic.t
val array_level : int
val biabduction_models_mode : bool
val bo_debug : int
val bo_field_depth_limit : int option
val bootclasspath : string option
val buck : bool
val buck_blacklist : string list
val buck_build_args : string list
val buck_build_args_no_inline : string list
val buck_cache_mode : bool
val buck_merge_all_deps : bool
val buck_mode : IBase.BuckMode.t option
val buck_out_gen : string
val buck_targets_blacklist : string list
val call_graph_schedule : bool
val capture : bool
val capture_blacklist : string option
val censor_report : ((bool * Str.regexp) * (bool * Str.regexp) * string) list
val changed_files_index : string option
val check_version : string option
val clang_biniou_file : string option
val clang_compound_literal_init_limit : int
val clang_extra_flags : string list
val clang_blacklisted_flags : string list
val clang_blacklisted_flags_with_arg : string list
val clang_ignore_regex : string option
val clang_isystem_to_override_regex : Str.regexp option
val clang_idirafter_to_override_regex : Str.regexp option
val clang_libcxx_include_to_override_regex : string option
val command : ATDGenerated.InferCommand.t
val continue_analysis : bool
val continue_capture : bool
val costs_current : string option
val cost_issues_tests : string option
val cost_scuba_logging : bool
val costs_previous : string option
val cost_tests_only_autoreleasepool : bool
val cxx : bool
val cxx_scope_guards : Yojson.Basic.t
val deduplicate : bool
val debug_exceptions : bool
val debug_level_analysis : int
val debug_level_capture : int
val debug_level_linters : int
val debug_level_test_determinator : int
val debug_mode : bool
val default_linters : bool
val dependency_mode : bool
val developer_mode : bool
val differential_filter_files : string option
val differential_filter_set : [ `Introduced | `Fixed | `Preexisting ] list
val dotty_cfg_libs : bool
val dump_duplicate_symbols : bool
val eradicate_condition_redundant : bool
val eradicate_field_over_annotated : bool
val eradicate_return_over_annotated : bool
val eradicate_verbose : bool
val fail_on_bug : bool
val fcp_apple_clang : string option
val fcp_syntax_only : bool
val file_renamings : string option
val filter_paths : bool
val filtering : bool
val force_delete_results_dir : bool
val force_integration : build_system option
val from_json_report : string
val from_json_costs_report : string
val frontend_stats : bool
val frontend_tests : bool
val function_pointer_specialization : bool
val generated_classes : string option
val genrule_mode : bool
val get_linter_doc_url : linter_id:string -> string option
val help_checker : IBase.Checker.t list
val help_issue_type : IBase.IssueType.t list
val hoisting_report_only_expensive : bool
val html : bool
val global_tenv : bool
val icfg_dotty_outfile : string option
val infer_is_clang : bool
val infer_is_javac : bool
val implicit_sdk_root : string option
val inclusive_cost : bool
val inferconfig_file : string option
val inferconfig_dir : string option
val is_checker_enabled : IBase.Checker.t -> bool
val issues_tests : string option
val issues_tests_fields : IBase.IssuesTestField.t list
val iterations : int
val java_debug_source_file_info : string option
val java_jar_compiler : string option
val java_version : int option
val javac_classes_out : string
val job_id : string option
val jobs : int
val join_cond : int
val keep_going : bool
val linter : string option
val linters_def_file : string list
val linters_def_folder : string list
val linters_developer_mode : bool
val linters_ignore_clang_failures : bool
val linters_validate_syntax_only : bool
val list_checkers : bool
val list_issue_types : bool
val liveness_dangerous_classes : Yojson.Basic.t
val max_nesting : int option
val merge : bool
val method_decls_info : string option
val ml_buckets : [ `MLeak_all | `MLeak_arc | `MLeak_cf | `MLeak_cpp | `MLeak_no_arc | `MLeak_unknown ] list
val modified_lines : string option
val monitor_prop_size : bool
val nelseg : bool
val no_translate_libs : bool
val nullable_annotation : string option
val nullsafe_disable_field_not_initialized_in_nonstrict_classes : bool
val nullsafe_optimistic_third_party_params_in_non_strict : bool
val nullsafe_third_party_signatures : string option
val nullsafe_third_party_location_for_messaging_only : string option
val nullsafe_strict_containers : bool
val oom_threshold : int option
val only_cheap_debug : bool
val only_footprint : bool
val pmd_xml : bool
val print_active_checkers : bool
val print_builtins : bool
val print_jbir : bool
val print_logs : bool
val print_types : bool
val print_using_diff : bool
val procedures : bool
val procedures_attributes : bool
val procedures_cfg : bool
val procedures_definedness : bool
val procedures_filter : string option
val procedures_name : bool
val procedures_source_file : bool
val procedures_summary : bool
val process_clang_ast : bool
val clang_frontend_action_string : string
val profiler_samples : string option
val progress_bar : [ `MultiLine | `Plain | `Quiet ]
val project_root : string
val pulse_cut_to_one_path_procedures_pattern : Str.regexp option
val pulse_recency_limit : int
val pulse_intraprocedural_only : bool
val pulse_max_disjuncts : int
val pulse_model_abort : string list
val pulse_model_alloc_pattern : Str.regexp option
val pulse_model_release_pattern : Str.regexp option
val pulse_model_return_nonnull : string list
val pulse_model_skip_pattern : Str.regexp option
val pulse_model_transfer_ownership_namespace : (string * string) list
val pulse_model_transfer_ownership : string list
val pulse_report_latent_issues : bool
val pulse_widen_threshold : int
val pure_by_default : bool
val quandary_endpoints : Yojson.Basic.t
val quandary_sanitizers : Yojson.Basic.t
val quandary_sinks : Yojson.Basic.t
val quandary_sources : Yojson.Basic.t
val quiet : bool
val racerd_guardedby : bool
val reactive_mode : bool
val reanalyze : bool
val report_blacklist_files_containing : string list
val report_console_limit : int option
val report_current : string option
val report_formatter : [ `No_formatter | `Phabricator_formatter ]
val report_path_regex_blacklist : string list
val report_path_regex_whitelist : string list
val report_previous : string option
val report_suppress_errors : string list
val reports_include_ml_loc : bool
val rest : string list
val results_dir : string
val scheduler : scheduler
val scuba_logging : bool
val scuba_normals : string IStdlib.IStd.String.Map.t
val scuba_tags : string list IStdlib.IStd.String.Map.t
val seconds_per_iteration : float option
val select : int option
val show_buckets : bool
val siof_check_iostreams : bool
val siof_safe_methods : string list
val skip_analysis_in_path : string list
val skip_analysis_in_path_skips_compilation : bool
val skip_duplicated_types : bool
val skip_translation_headers : string list
val source_files : bool
val source_files_cfg : bool
val source_files_filter : string option
val source_files_freshly_captured : bool
val source_files_procedure_names : bool
val source_files_type_environment : bool
val source_preview : bool
val sqlite_cache_size : int
val sqlite_page_size : int
val sqlite_lock_timeout : int
val sqlite_vfs : string option
val starvation_skip_analysis : Yojson.Basic.t
val starvation_strict_mode : bool
val starvation_whole_program : bool
val subtype_multirange : bool
val summaries_caches_max_size : int
val symops_per_iteration : int option
val test_determinator : bool
val export_changed_functions : bool
val test_filtering : bool
val testing_mode : bool
val threadsafe_aliases : Yojson.Basic.t
val topl_properties : string list
val trace_error : bool
val trace_events : bool
val trace_join : bool
val trace_ondemand : bool
val trace_rearrange : bool
val trace_topl : bool
val tv_commit : string option
val tv_limit : int
val tv_limit_filtered : int
val type_size : bool
val uninit_interproc : bool
val unsafe_malloc : bool
val worklist_mode : int
val write_dotty : bool
val write_html : bool
val write_html_whitelist_regex : string list
val write_website : string option
val xcode_developer_dir : string option
val xcode_isysroot_suffix : string option
val xcpretty : bool

Configuration values derived from command-line options

val dynamic_dispatch : bool
val toplevel_results_dir : string

In some integrations, eg Buck, infer subprocesses started by the build system (started by the toplevel infer process) will have their own results directory; this points to the results directory of the toplevel infer process, which can be useful for, eg, storing debug info. In other cases this is equal to results_dir.

val is_in_custom_symbols : string -> string -> bool

Does named symbol match any prefix in the named custom symbol list?

val java_package_is_external : string -> bool

Check if a Java package is external to the repository

val scuba_execution_id : IStdlib.IStd.Int64.t option

a random number to (hopefully) uniquely identify this run

Global variables with initial values specified by command-line options

val clang_compilation_dbs : [ `Escaped of string | `Raw of string ] list IStdlib.IStd.ref
\ No newline at end of file +IBase__Config (infer.IBase__Config)

Module IBase__Config

type os_type =
| Unix
| Win32
| Cygwin
type build_system =
| BAnt
| BBuck
| BClang
| BGradle
| BJava
| BJavac
| BMake
| BMvn
| BNdk
| BXcode
type scheduler =
| File
| Restart
| SyntacticCallGraph
val equal_scheduler : scheduler -> scheduler -> bool
val build_system_of_exe_name : string -> build_system
val string_of_build_system : build_system -> string
val env_inside_maven : IStdlib.IStd.Unix.env

Constant configuration values

val anonymous_block_num_sep : string
val anonymous_block_prefix : string
val append_buck_flavors : string list
val assign : string
val biabduction_models_sql : string
val biabduction_models_jar : string
val bin_dir : string
val bound_error_allowed_in_procedure_call : bool
val buck_java_flavor_suppress_config : bool
val clang_exe_aliases : string list
val clang_initializer_prefix : string
val clang_inner_destructor_prefix : string
val clang_plugin_path : string
val classpath : string option
val default_failure_name : string
val dotty_frontend_output : string
val etc_dir : string
val fail_on_issue_exit_code : int
val fcp_dir : string
val idempotent_getters : bool
val initial_analysis_time : float
val ivar_attributes : string
val java_lambda_marker_infix : string

marker to recognize methods generated by javalib to eliminate lambdas

val lib_dir : string
val load_average : float option
val max_narrows : int
val max_widens : int
val meet_level : int
val nsnotification_center_checker_backend : bool
val os_type : os_type
val passthroughs : bool
val patterns_modeled_expensive : string * Yojson.Basic.t
val patterns_never_returning_null : string * Yojson.Basic.t
val patterns_skip_implementation : string * Yojson.Basic.t
val patterns_skip_translation : string * Yojson.Basic.t
val pp_version : Stdlib.Format.formatter -> unit -> unit
val property_attributes : string
val relative_path_backtrack : int
val report : bool
val report_custom_error : bool
val report_force_relative_path : bool
val report_nullable_inconsistency : bool
val save_compact_summaries : bool
val smt_output : bool
val source_file_extentions : string list
val kotlin_source_extension : string
val sourcepath : string option
val sources : string list
val trace_absarray : bool
val unsafe_unret : string
val incremental_analysis : bool
val weak : string
val whitelisted_cpp_classes : string list
val whitelisted_cpp_methods : string list
val wrappers_dir : string

Configuration values specified by command-line options

val abs_struct : int
val abs_val : int
val allow_leak : bool
val annotation_reachability_cxx : Yojson.Basic.t
val annotation_reachability_cxx_sources : Yojson.Basic.t
val annotation_reachability_custom_pairs : Yojson.Basic.t
val array_level : int
val biabduction_models_mode : bool
val bo_debug : int
val bo_field_depth_limit : int option
val bootclasspath : string option
val buck : bool
val buck_blacklist : string list
val buck_build_args : string list
val buck_build_args_no_inline : string list
val buck_cache_mode : bool
val buck_merge_all_deps : bool
val buck_mode : IBase.BuckMode.t option
val buck_out_gen : string
val buck_targets_blacklist : string list
val call_graph_schedule : bool
val capture : bool
val capture_blacklist : string option
val censor_report : ((bool * Str.regexp) * (bool * Str.regexp) * string) list
val changed_files_index : string option
val check_version : string option
val clang_ast_file : [ `Biniou of string | `Yojson of string ] option
val clang_compound_literal_init_limit : int
val clang_extra_flags : string list
val clang_blacklisted_flags : string list
val clang_blacklisted_flags_with_arg : string list
val clang_ignore_regex : string option
val clang_isystem_to_override_regex : Str.regexp option
val clang_idirafter_to_override_regex : Str.regexp option
val clang_libcxx_include_to_override_regex : string option
val command : ATDGenerated.InferCommand.t
val continue_analysis : bool
val continue_capture : bool
val costs_current : string option
val cost_issues_tests : string option
val cost_scuba_logging : bool
val costs_previous : string option
val cost_suppress_func_ptr : bool
val cost_tests_only_autoreleasepool : bool
val cxx : bool
val cxx_scope_guards : Yojson.Basic.t
val deduplicate : bool
val debug_exceptions : bool
val debug_level_analysis : int
val debug_level_capture : int
val debug_level_linters : int
val debug_level_test_determinator : int
val debug_mode : bool
val default_linters : bool
val dependency_mode : bool
val developer_mode : bool
val differential_filter_files : string option
val differential_filter_set : [ `Introduced | `Fixed | `Preexisting ] list
val dotty_cfg_libs : bool
val dump_duplicate_symbols : bool
val eradicate_condition_redundant : bool
val eradicate_field_over_annotated : bool
val eradicate_return_over_annotated : bool
val eradicate_verbose : bool
val fail_on_bug : bool
val fcp_apple_clang : string option
val fcp_syntax_only : bool
val file_renamings : string option
val filter_paths : bool
val filtering : bool
val force_delete_results_dir : bool
val force_integration : build_system option
val from_json_report : string
val from_json_costs_report : string
val frontend_stats : bool
val frontend_tests : bool
val function_pointer_specialization : bool
val generated_classes : string option
val genrule_mode : bool
val get_linter_doc_url : linter_id:string -> string option
val help_checker : IBase.Checker.t list
val help_issue_type : IBase.IssueType.t list
val hoisting_report_only_expensive : bool
val html : bool
val global_tenv : bool
val icfg_dotty_outfile : string option
val infer_is_clang : bool
val infer_is_javac : bool
val implicit_sdk_root : string option
val inclusive_cost : bool
val inferconfig_file : string option
val inferconfig_dir : string option
val is_checker_enabled : IBase.Checker.t -> bool
val issues_tests : string option
val issues_tests_fields : IBase.IssuesTestField.t list
val iterations : int
val java_debug_source_file_info : string option
val java_jar_compiler : string option
val java_version : int option
val javac_classes_out : string
val job_id : string option
val jobs : int
val join_cond : int
val keep_going : bool
val linter : string option
val linters_def_file : string list
val linters_def_folder : string list
val linters_developer_mode : bool
val linters_ignore_clang_failures : bool
val linters_validate_syntax_only : bool
val list_checkers : bool
val list_issue_types : bool
val liveness_dangerous_classes : Yojson.Basic.t
val max_nesting : int option
val merge : bool
val method_decls_info : string option
val ml_buckets : [ `MLeak_all | `MLeak_arc | `MLeak_cf | `MLeak_cpp | `MLeak_no_arc | `MLeak_unknown ] list
val modified_lines : string option
val monitor_prop_size : bool
val nelseg : bool
val no_translate_libs : bool
val nullable_annotation : string option
val nullsafe_annotation_graph : bool
val nullsafe_disable_field_not_initialized_in_nonstrict_classes : bool
val nullsafe_optimistic_third_party_params_in_non_strict : bool
val nullsafe_third_party_signatures : string option
val nullsafe_third_party_location_for_messaging_only : string option
val nullsafe_strict_containers : bool
val oom_threshold : int option
val only_cheap_debug : bool
val only_footprint : bool
val pmd_xml : bool
val print_active_checkers : bool
val print_builtins : bool
val print_jbir : bool
val print_logs : bool
val print_types : bool
val print_using_diff : bool
val procedures : bool
val procedures_attributes : bool
val procedures_cfg : bool
val procedures_definedness : bool
val procedures_filter : string option
val procedures_name : bool
val procedures_source_file : bool
val procedures_summary : bool
val procedures_summary_json : bool
val process_clang_ast : bool
val clang_frontend_action_string : string
val profiler_samples : string option
val progress_bar : [ `MultiLine | `Plain | `Quiet ]
val project_root : string
val pulse_cut_to_one_path_procedures_pattern : Str.regexp option
val pulse_recency_limit : int
val pulse_intraprocedural_only : bool
val pulse_max_disjuncts : int
val pulse_model_abort : string list
val pulse_model_alloc_pattern : Str.regexp option
val pulse_model_release_pattern : Str.regexp option
val pulse_model_return_nonnull : string list
val pulse_model_skip_pattern : Str.regexp option
val pulse_model_transfer_ownership_namespace : (string * string) list
val pulse_model_transfer_ownership : string list
val pulse_report_latent_issues : bool
val pulse_widen_threshold : int
val pure_by_default : bool
val quandary_endpoints : Yojson.Basic.t
val quandary_sanitizers : Yojson.Basic.t
val quandary_sinks : Yojson.Basic.t
val quandary_sources : Yojson.Basic.t
val quiet : bool
val racerd_guardedby : bool
val reactive_mode : bool
val reanalyze : bool
val report_blacklist_files_containing : string list
val report_console_limit : int option
val report_current : string option
val report_formatter : [ `No_formatter | `Phabricator_formatter ]
val report_path_regex_blacklist : string list
val report_path_regex_whitelist : string list
val report_previous : string option
val report_suppress_errors : string list
val reports_include_ml_loc : bool
val rest : string list
val results_dir : string
val scheduler : scheduler
val scuba_logging : bool
val scuba_normals : string IStdlib.IStd.String.Map.t
val scuba_tags : string list IStdlib.IStd.String.Map.t
val seconds_per_iteration : float option
val select : [ `All | `Select of int ] option
val show_buckets : bool
val siof_check_iostreams : bool
val siof_safe_methods : string list
val skip_analysis_in_path : string list
val skip_analysis_in_path_skips_compilation : bool
val skip_duplicated_types : bool
val skip_translation_headers : string list
val source_files : bool
val source_files_cfg : bool
val source_files_filter : string option
val source_files_freshly_captured : bool
val source_files_procedure_names : bool
val source_files_type_environment : bool
val source_preview : bool
val sqlite_cache_size : int
val sqlite_page_size : int
val sqlite_lock_timeout : int
val sqlite_vfs : string option
val starvation_skip_analysis : Yojson.Basic.t
val starvation_strict_mode : bool
val starvation_whole_program : bool
val subtype_multirange : bool
val summaries_caches_max_size : int
val suppress_lint_ignore_types : bool
val symops_per_iteration : int option
val test_determinator : bool
val export_changed_functions : bool
val test_filtering : bool
val testing_mode : bool
val threadsafe_aliases : Yojson.Basic.t
val topl_properties : string list
val trace_error : bool
val trace_events : bool
val trace_join : bool
val trace_ondemand : bool
val trace_rearrange : bool
val trace_topl : bool
val tv_commit : string option
val tv_limit : int
val tv_limit_filtered : int
val type_size : bool
val uninit_interproc : bool
val unsafe_malloc : bool
val worklist_mode : int
val workspace : string option
val write_dotty : bool
val write_html : bool
val write_html_whitelist_regex : string list
val write_website : string option
val xcode_developer_dir : string option
val xcode_isysroot_suffix : string option
val xcpretty : bool

Configuration values derived from command-line options

val dynamic_dispatch : bool
val toplevel_results_dir : string

In some integrations, eg Buck, infer subprocesses started by the build system (started by the toplevel infer process) will have their own results directory; this points to the results directory of the toplevel infer process, which can be useful for, eg, storing debug info. In other cases this is equal to results_dir.

val is_in_custom_symbols : string -> string -> bool

Does named symbol match any prefix in the named custom symbol list?

val java_package_is_external : string -> bool

Check if a Java package is external to the repository

val scuba_execution_id : IStdlib.IStd.Int64.t option

a random number to (hopefully) uniquely identify this run

Global variables with initial values specified by command-line options

val clang_compilation_dbs : [ `Escaped of string | `Raw of string ] list
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase__IssueType/index.html b/website/static/odoc/next/infer/IBase__IssueType/index.html index c5a03a849..29da97110 100644 --- a/website/static/odoc/next/infer/IBase__IssueType/index.html +++ b/website/static/odoc/next/infer/IBase__IssueType/index.html @@ -1,2 +1,2 @@ -IBase__IssueType (infer.IBase__IssueType)

Module IBase__IssueType

type visibility =
| User

always add to error log

| Developer

only add to error log in some debug modes

| Silent

never add to error log

visibility of the issue type

val compare_visibility : visibility -> visibility -> int
val equal_visibility : visibility -> visibility -> bool
val string_of_visibility : visibility -> string
type severity =
| Like
| Info
| Advice
| Warning
| Error

severity of the report

val compare_severity : severity -> severity -> int
val equal_severity : severity -> severity -> bool
val all_of_severity : severity list
val string_of_severity : severity -> string
type t = private {
unique_id : string;
checker : IBase.Checker.t;
visibility : visibility;
user_documentation : string option;
mutable default_severity : severity;

used for documentation but can be overriden at report time

mutable enabled : bool;
mutable hum : string;
mutable doc_url : string option;
mutable linters_def_file : string option;
}
val compare : t -> t -> int
val equal : t -> t -> bool
val all_issues : unit -> t list

all the issues declared so far

val pp : Stdlib.Format.formatter -> t -> unit

pretty print a localised string

val find_from_string : id:string -> t option

return the issue type if it was previously registered

val register_dynamic : ?⁠enabled:bool -> ?⁠hum:string -> ?⁠doc_url:string -> linters_def_file:string option -> id:string -> ?⁠user_documentation:string -> severity -> IBase.Checker.t -> t

Create a new issue and register it in the list of all issues. NOTE: if the issue with the same string id is already registered, overrides `hum`, `doc_url`, and `linters_def_file`, but DOES NOT override `enabled`. This trick allows to deal with disabling/enabling dynamic AL issues from the config, when we don't know all params yet. Thus, the human-readable description can be updated when we encounter the definition of the issue type, eg in AL.

val checker_can_report : IBase.Checker.t -> t -> bool

Whether the issue was registered as coming from the given checker. Important to call this before reporting to keep documentation accurate.

val set_enabled : t -> bool -> unit
val abduction_case_not_implemented : t
val array_of_pointsto : t
val array_out_of_bounds_l1 : t
val array_out_of_bounds_l2 : t
val array_out_of_bounds_l3 : t
val assert_failure : t
val bad_footprint : t
val biabduction_analysis_stops : t
val buffer_overrun_l1 : t
val buffer_overrun_l2 : t
val buffer_overrun_l3 : t
val buffer_overrun_l4 : t
val buffer_overrun_l5 : t
val buffer_overrun_s2 : t
val buffer_overrun_u5 : t
val cannot_star : t
val captured_strong_self : t
val checkers_allocates_memory : t

Warning name when a performance critical method directly or indirectly calls a method allocating memory

val checkers_annotation_reachability_error : t
val checkers_calls_expensive_method : t

Warning name when a performance critical method directly or indirectly calls a method annotatd as expensive

val checkers_expensive_overrides_unexpensive : t

Warning name for the subtyping rule: method not annotated as expensive cannot be overridden by a method annotated as expensive

val checkers_fragment_retain_view : t
val checkers_immutable_cast : t
val checkers_printf_args : t
val class_cast_exception : t
val complexity_increase : kind:IBase.CostKind.t -> is_on_ui_thread:bool -> t
val component_with_multiple_factory_methods : t
val condition_always_false : t
val condition_always_true : t
val config_checks_between_markers : t
val constant_address_dereference : t
val create_intent_from_uri : t
val cross_site_scripting : t
val dangling_pointer_dereference : t
val dangling_pointer_dereference_maybe : t
val dead_store : t
val deadlock : t
val divide_by_zero : t
val do_not_report : t

an issue type that should never be reported

val empty_vector_access : t
val eradicate_condition_redundant : t
val eradicate_field_not_initialized : t
val eradicate_field_not_nullable : t
val eradicate_field_over_annotated : t
val eradicate_inconsistent_subclass_parameter_annotation : t
val eradicate_inconsistent_subclass_return_annotation : t
val eradicate_redundant_nested_class_annotation : t
val eradicate_bad_nested_class_annotation : t
val eradicate_nullable_dereference : t
val eradicate_parameter_not_nullable : t
val eradicate_return_not_nullable : t
val eradicate_return_over_annotated : t
val eradicate_unvetted_third_party_in_nullsafe : t
val eradicate_unchecked_usage_in_nullsafe : t
val eradicate_meta_class_can_be_nullsafe : t
val eradicate_meta_class_needs_improvement : t
val eradicate_meta_class_is_nullsafe : t
val exposed_insecure_intent_handling : t
val failure_exe : t
val field_not_null_checked : t
val guardedby_violation_racerd : t
val impure_function : t
val inefficient_keyset_iterator : t
val inferbo_alloc_is_big : t
val inferbo_alloc_is_negative : t
val inferbo_alloc_is_zero : t
val inferbo_alloc_may_be_big : t
val inferbo_alloc_may_be_negative : t
val infinite_cost_call : kind:IBase.CostKind.t -> t
val inherently_dangerous_function : t
val insecure_intent_handling : t
val integer_overflow_l1 : t
val integer_overflow_l2 : t
val integer_overflow_l5 : t
val integer_overflow_u5 : t
val interface_not_thread_safe : t
val internal_error : t
val invariant_call : t
val javascript_injection : t
val lab_resource_leak : t
val leak_after_array_abstraction : t
val leak_in_footprint : t
val leak_unknown_origin : t
val lockless_violation : t
val lock_consistency_violation : t
val logging_private_data : t
val expensive_loop_invariant_call : t
val memory_leak : t
val missing_fld : t
val missing_required_prop : t
val mixed_self_weakself : t
val multiple_weakself : t
val mutable_local_variable_in_component_file : t
val null_dereference : t
val nullptr_dereference : t
val optional_empty_access : t
val parameter_not_null_checked : t
val precondition_not_found : t
val precondition_not_met : t
val premature_nil_termination : t
val pulse_memory_leak : t
val pure_function : t
val quandary_taint_error : t
val resource_leak : t
val retain_cycle : t
val skip_function : t
val shell_injection : t
val shell_injection_risk : t
val sql_injection : t
val sql_injection_risk : t
val stack_variable_address_escape : t
val starvation : t
val static_initialization_order_fiasco : t
val strict_mode_violation : t
val strong_self_not_checked : t
val symexec_memory_error : t
val thread_safety_violation : t
val topl_biabd_error : t
val topl_pulse_error : t
val uninitialized_value : t
val unreachable_code_after : t
val use_after_delete : t
val use_after_free : t
val use_after_lifetime : t
val untrusted_buffer_access : t
val untrusted_deserialization : t
val untrusted_deserialization_risk : t
val untrusted_file : t
val untrusted_file_risk : t
val untrusted_heap_allocation : t
val untrusted_intent_creation : t
val untrusted_url_risk : t
val untrusted_environment_change_risk : t
val untrusted_variable_length_array : t
val user_controlled_sql_risk : t
val vector_invalidation : t
val weak_self_in_noescape_block : t
val wrong_argument_number : t
val unreachable_cost_call : kind:IBase.CostKind.t -> t
val is_autoreleasepool_size_issue : t -> bool
\ No newline at end of file +IBase__IssueType (infer.IBase__IssueType)

Module IBase__IssueType

type visibility =
| User

always add to error log

| Developer

only add to error log in some debug modes

| Silent

never add to error log

visibility of the issue type

val compare_visibility : visibility -> visibility -> int
val equal_visibility : visibility -> visibility -> bool
val string_of_visibility : visibility -> string
type severity =
| Like
| Info
| Advice
| Warning
| Error

severity of the report

val compare_severity : severity -> severity -> int
val equal_severity : severity -> severity -> bool
val all_of_severity : severity list
val string_of_severity : severity -> string
type t = private {
unique_id : string;
checker : IBase.Checker.t;
visibility : visibility;
user_documentation : string option;
mutable default_severity : severity;

used for documentation but can be overriden at report time

mutable enabled : bool;
mutable hum : string;
mutable doc_url : string option;
mutable linters_def_file : string option;
}
val compare : t -> t -> int
val equal : t -> t -> bool
val all_issues : unit -> t list

all the issues declared so far

val pp : Stdlib.Format.formatter -> t -> unit

pretty print a localised string

val find_from_string : id:string -> t option

return the issue type if it was previously registered

val register_dynamic : ?⁠enabled:bool -> ?⁠hum:string -> ?⁠doc_url:string -> linters_def_file:string option -> id:string -> ?⁠user_documentation:string -> severity -> IBase.Checker.t -> t

Create a new issue and register it in the list of all issues. NOTE: if the issue with the same string id is already registered, overrides `hum`, `doc_url`, and `linters_def_file`, but DOES NOT override `enabled`. This trick allows to deal with disabling/enabling dynamic AL issues from the config, when we don't know all params yet. Thus, the human-readable description can be updated when we encounter the definition of the issue type, eg in AL.

val checker_can_report : IBase.Checker.t -> t -> bool

Whether the issue was registered as coming from the given checker. Important to call this before reporting to keep documentation accurate.

val set_enabled : t -> bool -> unit
val abduction_case_not_implemented : t
val array_of_pointsto : t
val array_out_of_bounds_l1 : t
val array_out_of_bounds_l2 : t
val array_out_of_bounds_l3 : t
val assert_failure : t
val bad_footprint : t
val biabduction_analysis_stops : t
val buffer_overrun_l1 : t
val buffer_overrun_l2 : t
val buffer_overrun_l3 : t
val buffer_overrun_l4 : t
val buffer_overrun_l5 : t
val buffer_overrun_s2 : t
val buffer_overrun_u5 : t
val cannot_star : t
val captured_strong_self : t
val checkers_allocates_memory : t

Warning name when a performance critical method directly or indirectly calls a method allocating memory

val checkers_annotation_reachability_error : t
val checkers_calls_expensive_method : t

Warning name when a performance critical method directly or indirectly calls a method annotatd as expensive

val checkers_expensive_overrides_unexpensive : t

Warning name for the subtyping rule: method not annotated as expensive cannot be overridden by a method annotated as expensive

val checkers_fragment_retain_view : t
val checkers_immutable_cast : t
val checkers_printf_args : t
val class_cast_exception : t
val complexity_increase : kind:IBase.CostKind.t -> is_on_ui_thread:bool -> t
val component_with_multiple_factory_methods : t
val condition_always_false : t
val condition_always_true : t
val config_checks_between_markers : t
val constant_address_dereference : t
val create_intent_from_uri : t
val cross_site_scripting : t
val dangling_pointer_dereference : t
val dangling_pointer_dereference_maybe : t
val dead_store : t
val deadlock : t
val divide_by_zero : t
val do_not_report : t

an issue type that should never be reported

val empty_vector_access : t
val eradicate_annotation_graph : t
val eradicate_condition_redundant : t
val eradicate_field_not_initialized : t
val eradicate_field_not_nullable : t
val eradicate_field_over_annotated : t
val eradicate_inconsistent_subclass_parameter_annotation : t
val eradicate_inconsistent_subclass_return_annotation : t
val eradicate_redundant_nested_class_annotation : t
val eradicate_bad_nested_class_annotation : t
val eradicate_nullable_dereference : t
val eradicate_parameter_not_nullable : t
val eradicate_return_not_nullable : t
val eradicate_return_over_annotated : t
val eradicate_unvetted_third_party_in_nullsafe : t
val eradicate_unchecked_usage_in_nullsafe : t
val eradicate_meta_class_can_be_nullsafe : t
val eradicate_meta_class_needs_improvement : t
val eradicate_meta_class_is_nullsafe : t
val exposed_insecure_intent_handling : t
val failure_exe : t
val field_not_null_checked : t
val guardedby_violation_racerd : t
val impure_function : t
val inefficient_keyset_iterator : t
val inferbo_alloc_is_big : t
val inferbo_alloc_is_negative : t
val inferbo_alloc_is_zero : t
val inferbo_alloc_may_be_big : t
val inferbo_alloc_may_be_negative : t
val infinite_cost_call : kind:IBase.CostKind.t -> t
val inherently_dangerous_function : t
val insecure_intent_handling : t
val integer_overflow_l1 : t
val integer_overflow_l2 : t
val integer_overflow_l5 : t
val integer_overflow_u5 : t
val interface_not_thread_safe : t
val internal_error : t
val invariant_call : t
val javascript_injection : t
val lab_resource_leak : t
val leak_after_array_abstraction : t
val leak_in_footprint : t
val leak_unknown_origin : t
val lockless_violation : t
val lock_consistency_violation : t
val logging_private_data : t
val expensive_loop_invariant_call : t
val memory_leak : t
val missing_fld : t
val missing_required_prop : t
val mixed_self_weakself : t
val multiple_weakself : t
val mutable_local_variable_in_component_file : t
val null_dereference : t
val nullptr_dereference : t
val optional_empty_access : t
val parameter_not_null_checked : t
val precondition_not_found : t
val precondition_not_met : t
val premature_nil_termination : t
val pulse_memory_leak : t
val pure_function : t
val quandary_taint_error : t
val resource_leak : t
val retain_cycle : t
val skip_function : t
val shell_injection : t
val shell_injection_risk : t
val sql_injection : t
val sql_injection_risk : t
val stack_variable_address_escape : t
val starvation : t
val static_initialization_order_fiasco : t
val strict_mode_violation : t
val strong_self_not_checked : t
val symexec_memory_error : t
val thread_safety_violation : t
val topl_biabd_error : t
val topl_pulse_error : t
val uninitialized_value : t
val unreachable_code_after : t
val use_after_delete : t
val use_after_free : t
val use_after_lifetime : t
val untrusted_buffer_access : t
val untrusted_deserialization : t
val untrusted_deserialization_risk : t
val untrusted_file : t
val untrusted_file_risk : t
val untrusted_heap_allocation : t
val untrusted_intent_creation : t
val untrusted_url_risk : t
val untrusted_environment_change_risk : t
val untrusted_variable_length_array : t
val user_controlled_sql_risk : t
val vector_invalidation : t
val weak_self_in_noescape_block : t
val wrong_argument_number : t
val unreachable_cost_call : kind:IBase.CostKind.t -> t
val is_autoreleasepool_size_issue : t -> bool
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase__Location/index.html b/website/static/odoc/next/infer/IBase__Location/index.html index b5884dbc4..d5d9e71eb 100644 --- a/website/static/odoc/next/infer/IBase__Location/index.html +++ b/website/static/odoc/next/infer/IBase__Location/index.html @@ -1,2 +1,2 @@ -IBase__Location (infer.IBase__Location)

Module IBase__Location

type t = {
line : int;

The line number. -1 means "do not know"

col : int;

The column number. -1 means "do not know"

file : IBase.SourceFile.t;

The name of the source file

}

Location in the original source file

val compare : t -> t -> int
val equal : t -> t -> bool
val none : IBase.SourceFile.t -> t

Dummy source location for the given file

val dummy : t

Dummy location with no source file

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a location.

val pp_line : Stdlib.Format.formatter -> t -> unit

print just the line information

val to_string : t -> string

String representation of a location.

val pp_file_pos : Stdlib.Format.formatter -> t -> unit

Pretty print a file-position of a location

val pp_range : Stdlib.Format.formatter -> (t * t) -> unit
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
\ No newline at end of file +IBase__Location (infer.IBase__Location)

Module IBase__Location

type t = {
line : int;

The line number. -1 means "do not know"

col : int;

The column number. -1 means "do not know"

file : IBase.SourceFile.t;

The name of the source file

}

Location in the original source file

val compare : t -> t -> int
val equal : t -> t -> bool
val none : IBase.SourceFile.t -> t

Dummy source location for the given file

val dummy : t

Dummy location with no source file

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a location.

val pp_line : Stdlib.Format.formatter -> t -> unit

print just the line information

val to_string : t -> string

String representation of a location.

val pp_file_pos : Stdlib.Format.formatter -> t -> unit

Pretty print a file-position of a location

val pp_range : Stdlib.Format.formatter -> (t * t) -> unit
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase__SourceFile/index.html b/website/static/odoc/next/infer/IBase__SourceFile/index.html index b53600052..f7c7c336d 100644 --- a/website/static/odoc/next/infer/IBase__SourceFile/index.html +++ b/website/static/odoc/next/infer/IBase__SourceFile/index.html @@ -1,2 +1,2 @@ -IBase__SourceFile (infer.IBase__SourceFile)

Module IBase__SourceFile

type t
val compare : t -> t -> int
module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Maps from source_file

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set of source files

module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t
val is_invalid : t -> bool

Is the source file the invalid source file?

val changed_sources_from_changed_files : string list -> Set.t

Set of files read from --changed-files-index file, None if option not specified NOTE: it may include extra source_files if --changed-files-index contains paths to header files

val invalid : string -> t

Invalid source file

val equal : t -> t -> bool

equality of source files

val from_abs_path : ?⁠warn_on_error:bool -> string -> t

create source file from absolute path. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val create : ?⁠warn_on_error:bool -> string -> t

Create a SourceFile from a given path. If relative, it assumes it is w.r.t. project root. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val is_under_project_root : t -> bool

Returns true if the file is in project root

val of_header : ?⁠warn_on_error:bool -> t -> t option

Return approximate source file corresponding to the parameter if it's header file and file exists. returns None otherwise. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given SourceFile (e.g. if it does not exist).

val pp : Stdlib.Format.formatter -> t -> unit

pretty print t

val to_abs_path : t -> string

get the full path of a source file

val to_rel_path : t -> string

get the relative path of a source file

val to_string : ?⁠force_relative:bool -> t -> string

convert a source file to a string WARNING: result may not be valid file path, do not use this function to perform operations on filenames

val has_extension : t -> ext:string -> bool

returns whether the source file has provided extension

module SQLite : IBase.SqliteUtils.Data with type t = t
\ No newline at end of file +IBase__SourceFile (infer.IBase__SourceFile)

Module IBase__SourceFile

type t
val compare : t -> t -> int
module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Maps from source_file

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set of source files

module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t
val is_invalid : t -> bool

Is the source file the invalid source file?

val changed_sources_from_changed_files : string list -> Set.t

Set of files read from --changed-files-index file, None if option not specified NOTE: it may include extra source_files if --changed-files-index contains paths to header files

val invalid : string -> t

Invalid source file

val equal : t -> t -> bool

equality of source files

val from_abs_path : ?⁠warn_on_error:bool -> string -> t

create source file from absolute path. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val create : ?⁠warn_on_error:bool -> string -> t

Create a SourceFile from a given path. If relative, it assumes it is w.r.t. project root. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val is_under_project_root : t -> bool

Returns true if the file is in project root

val of_header : ?⁠warn_on_error:bool -> t -> t option

Return approximate source file corresponding to the parameter if it's header file and file exists. returns None otherwise. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given SourceFile (e.g. if it does not exist).

val pp : Stdlib.Format.formatter -> t -> unit

pretty print t

val to_abs_path : t -> string

get the full path of a source file

val to_rel_path : t -> string

get the relative path of a source file

val to_string : ?⁠force_relative:bool -> t -> string

convert a source file to a string WARNING: result may not be valid file path, do not use this function to perform operations on filenames

val has_extension : t -> ext:string -> bool

returns whether the source file has provided extension

module SQLite : IBase.SqliteUtils.Data with type t = t
module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IBase__Utils/index.html b/website/static/odoc/next/infer/IBase__Utils/index.html index d4a089ea4..1c970ebd2 100644 --- a/website/static/odoc/next/infer/IBase__Utils/index.html +++ b/website/static/odoc/next/infer/IBase__Utils/index.html @@ -1,2 +1,2 @@ -IBase__Utils (infer.IBase__Utils)

Module IBase__Utils

val find_files : path:string -> extension:string -> string list

recursively traverse a path for files ending with a given extension

val fold_folders : init:'acc -> f:('acc -> string -> 'acc) -> path:string -> 'acc

recursively traverse a path for folders, returning resuls by a given fold function

val string_crc_hex32 : string -> string

Compute a 32-character hexadecimal crc using the Digest module

val read_file : string -> (string list, string) IStdlib.IStd.Result.t

read a source file and return a list of lines

val filename_to_absolute : root:string -> string -> string

Convert a filename to an absolute one if it is relative, and normalize "." and ".."

val filename_to_relative : ?⁠force_full_backtrack:bool -> ?⁠backtrack:int -> root:string -> string -> string option

Convert an absolute filename to one relative to a root directory. Returns None if filename is not under root. The backtrack level sets the maximum level of steps in the parent directories to search for a common prefix

type outfile = {
fname : string;

name of the file

out_c : IStdlib.IStd.Out_channel.t;

output channel

fmt : Stdlib.Format.formatter;

formatter for printing

}

type for files used for printing

val create_outfile : string -> outfile option

create an outfile for the command line, the boolean indicates whether to do demangling when closing the file

val close_outf : outfile -> unit

close an outfile

val directory_fold : ('a -> string -> 'a) -> 'a -> string -> 'a

Functional fold function over all the file of a directory

val directory_iter : (string -> unit) -> string -> unit

Functional iter function over all the file of a directory

val directory_is_empty : string -> bool

Returns true if a given directory is empty. The directory is assumed to exist.

val read_json_file : string -> (Yojson.Basic.t, string) IStdlib.IStd.Result.t
val with_file_in : string -> f:(IStdlib.IStd.In_channel.t -> 'a) -> 'a
val with_file_out : string -> f:(IStdlib.IStd.Out_channel.t -> 'a) -> 'a
type file_lock = {
file : string;
oc : Stdlib.out_channel;
fd : Core.Unix.File_descr.t;
lock : unit -> unit;
unlock : unit -> unit;
}
val create_file_lock : unit -> file_lock
val with_file_lock : file_lock:file_lock -> f:(unit -> 'a) -> 'a
val with_intermediate_temp_file_out : string -> f:(IStdlib.IStd.Out_channel.t -> 'a) -> 'a

like with_file_out but uses a fresh intermediate temporary file and rename to avoid write-write races

val write_json_to_file : string -> Yojson.Basic.t -> unit
val consume_in : IStdlib.IStd.In_channel.t -> unit

consume and ignore all the lines from the channel until End_of_file is reached

val echo_in : IStdlib.IStd.In_channel.t -> unit

echo the lines we get to stdout until End_of_file is reached

val with_channel_in : f:(string -> unit) -> IStdlib.IStd.In_channel.t -> unit
val with_process_in : string -> (IStdlib.IStd.In_channel.t -> 'a) -> 'a * IStdlib.IStd.Unix.Exit_or_signal.t
val create_dir : string -> unit

recursively create a directory if it does not exist already

val out_channel_create_with_dir : IStdlib.IStd.Filename.t -> IStdlib.IStd.Out_channel.t

create an out channel with creating missing directories

val realpath : ?⁠warn_on_error:bool -> string -> string

realpath warn_on_error path returns path with all symbolic links resolved. It caches results of previous calls to avoid expensive system calls. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val suppress_stderr2 : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c

wraps a function expecting 2 arguments in another that temporarily redirects stderr to /dev/null for the duration of the function call

val rmtree : string -> unit

rmtree path removes path and, if path is a directory, recursively removes its contents

val try_finally_swallow_timeout : f:(unit -> 'a) -> finally:(unit -> unit) -> 'a

Calls f then finally even if f raised an exception. The original exception is reraised afterwards. Where possible use SymOp.try_finally to avoid swallowing timeouts.

val better_hash : 'a -> IStdlib.IStd.Caml.Digest.t

Hashtbl.hash only hashes the first 10 meaningful values, better_hash uses everything.

delete temporary file on exit

val strip_balanced_once : drop:(char -> bool) -> string -> string

drop at most one layer of well-balanced first and last characters satisfying drop from the string; for instance, strip_balanced ~drop:(function | 'a' | 'x' -> true | _ -> false) "xaabax" returns "aaba"

val assoc_of_yojson : Yojson.Basic.t -> src:string -> (string, Yojson.Basic.t) IStdlib.IStd.List.Assoc.t

Verify we have a json object (or empty list) and return the corresponding assoc list. Otherwise die with a message including src.

val string_of_yojson : Yojson.Basic.t -> src:string -> string

Verify we have a json string and return the corresponding ocaml string. Otherwise die with a message including src.

val string_list_of_yojson : Yojson.Basic.t -> src:string -> string list

Verify we have a json list of strings and return the corresponding ocaml string list. Otherwise die with a message including src.

val yojson_lookup : (string, Yojson.Basic.t) IStdlib.IStd.List.Assoc.t -> string -> src:string -> f:(Yojson.Basic.t -> src:string -> 'a) -> default:'a -> 'a

Lookup a json value on an assoc list. If not present, returns default. Otherwise returns (f json_value ~src) where src has element name appended. f is typically one of the above _of_yojson functions.

val timeit : f:(unit -> 'a) -> 'a * int

Returns the execution time of f in milliseconds together with its result

val do_in_dir : dir:string -> f:(unit -> 'a) -> 'a

executes f after cding into dir and then restores original cwd

val get_available_memory_MB : unit -> int option

On Linux systems, return Some x where MemAvailable x is in /proc/meminfo. Returns None in all other cases.

val iter_infer_deps : project_root:string -> f:(string -> unit) -> string -> unit

Parse each line of the given infer_deps.txt file (split on tabs, assume 3 elements per line) and run f on the third element. project_root is an argument to avoid dependency cycles.

val numcores : int
  • On Linux return the number of physical cores (sockets * cores per socket).
  • On Darwin and Windows returns half of the number of CPUs since most processors have 2 hardware threads per core.
val set_best_cpu_for : int -> unit

Pins processes to CPUs aiming to saturate physical cores evenly

val zip_fold_filenames : init:'a -> f:('a -> string -> 'a) -> zip_filename:string -> 'a

fold over each filename in the given zip_filename.

\ No newline at end of file +IBase__Utils (infer.IBase__Utils)

Module IBase__Utils

val find_files : path:string -> extension:string -> string list

recursively traverse a path for files ending with a given extension

val fold_folders : init:'acc -> f:('acc -> string -> 'acc) -> path:string -> 'acc

recursively traverse a path for folders, returning resuls by a given fold function

val string_crc_hex32 : string -> string

Compute a 32-character hexadecimal crc using the Digest module

val read_file : string -> (string list, string) IStdlib.IStd.Result.t

read a source file and return a list of lines

val normalize_path_from : root:string -> string -> string * string

normalize_path_from ~root path removes ".." and "." parts of root/path when possible and returns the new root and path, eg if root = "r" and path = "a/../../../foo/./bar" then the result is ("../foo/bar", ".") (in particular "r/a/../../../foo/./bar" and "./../foo/bar" represent the same file)

val filename_to_absolute : root:string -> string -> string

Convert a filename to an absolute one if it is relative, and normalize "." and ".."

val filename_to_relative : ?⁠force_full_backtrack:bool -> ?⁠backtrack:int -> root:string -> string -> string option

Convert an absolute filename to one relative to a root directory. Returns None if filename is not under root. The backtrack level sets the maximum level of steps in the parent directories to search for a common prefix

type outfile = {
fname : string;

name of the file

out_c : IStdlib.IStd.Out_channel.t;

output channel

fmt : Stdlib.Format.formatter;

formatter for printing

}

type for files used for printing

val create_outfile : string -> outfile option

create an outfile for the command line, the boolean indicates whether to do demangling when closing the file

val close_outf : outfile -> unit

close an outfile

val directory_fold : ('a -> string -> 'a) -> 'a -> string -> 'a

Functional fold function over all the file of a directory

val directory_iter : (string -> unit) -> string -> unit

Functional iter function over all the file of a directory

val directory_is_empty : string -> bool

Returns true if a given directory is empty. The directory is assumed to exist.

val read_json_file : string -> (Yojson.Basic.t, string) IStdlib.IStd.Result.t
val with_file_in : string -> f:(IStdlib.IStd.In_channel.t -> 'a) -> 'a
val with_file_out : string -> f:(IStdlib.IStd.Out_channel.t -> 'a) -> 'a
type file_lock = {
file : string;
oc : Stdlib.out_channel;
fd : Core.Unix.File_descr.t;
lock : unit -> unit;
unlock : unit -> unit;
}
val create_file_lock : unit -> file_lock
val with_file_lock : file_lock:file_lock -> f:(unit -> 'a) -> 'a
val with_intermediate_temp_file_out : string -> f:(IStdlib.IStd.Out_channel.t -> 'a) -> 'a

like with_file_out but uses a fresh intermediate temporary file and rename to avoid write-write races

val write_json_to_file : string -> Yojson.Basic.t -> unit
val consume_in : IStdlib.IStd.In_channel.t -> unit

consume and ignore all the lines from the channel until End_of_file is reached

val echo_in : IStdlib.IStd.In_channel.t -> unit

echo the lines we get to stdout until End_of_file is reached

val with_channel_in : f:(string -> unit) -> IStdlib.IStd.In_channel.t -> unit
val with_process_in : string -> (IStdlib.IStd.In_channel.t -> 'a) -> 'a * IStdlib.IStd.Unix.Exit_or_signal.t
val create_dir : string -> unit

recursively create a directory if it does not exist already

val out_channel_create_with_dir : IStdlib.IStd.Filename.t -> IStdlib.IStd.Out_channel.t

create an out channel with creating missing directories

val realpath : ?⁠warn_on_error:bool -> string -> string

realpath warn_on_error path returns path with all symbolic links resolved. It caches results of previous calls to avoid expensive system calls. WARNING: If warn_on_error is false, no warning will be shown whenever an error occurs for the given path (e.g. if it does not exist).

val suppress_stderr2 : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c

wraps a function expecting 2 arguments in another that temporarily redirects stderr to /dev/null for the duration of the function call

val rmtree : string -> unit

rmtree path removes path and, if path is a directory, recursively removes its contents

val try_finally_swallow_timeout : f:(unit -> 'a) -> finally:(unit -> unit) -> 'a

Calls f then finally even if f raised an exception. The original exception is reraised afterwards. Where possible use SymOp.try_finally to avoid swallowing timeouts.

val better_hash : 'a -> IStdlib.IStd.Caml.Digest.t

Hashtbl.hash only hashes the first 10 meaningful values, better_hash uses everything.

delete temporary file on exit

val strip_balanced_once : drop:(char -> bool) -> string -> string

drop at most one layer of well-balanced first and last characters satisfying drop from the string; for instance, strip_balanced ~drop:(function | 'a' | 'x' -> true | _ -> false) "xaabax" returns "aaba"

val assoc_of_yojson : Yojson.Basic.t -> src:string -> (string, Yojson.Basic.t) IStdlib.IStd.List.Assoc.t

Verify we have a json object (or empty list) and return the corresponding assoc list. Otherwise die with a message including src.

val string_of_yojson : Yojson.Basic.t -> src:string -> string

Verify we have a json string and return the corresponding ocaml string. Otherwise die with a message including src.

val string_list_of_yojson : Yojson.Basic.t -> src:string -> string list

Verify we have a json list of strings and return the corresponding ocaml string list. Otherwise die with a message including src.

val yojson_lookup : (string, Yojson.Basic.t) IStdlib.IStd.List.Assoc.t -> string -> src:string -> f:(Yojson.Basic.t -> src:string -> 'a) -> default:'a -> 'a

Lookup a json value on an assoc list. If not present, returns default. Otherwise returns (f json_value ~src) where src has element name appended. f is typically one of the above _of_yojson functions.

val timeit : f:(unit -> 'a) -> 'a * int

Returns the execution time of f in milliseconds together with its result

val do_in_dir : dir:string -> f:(unit -> 'a) -> 'a

executes f after cding into dir and then restores original cwd

val get_available_memory_MB : unit -> int option

On Linux systems, return Some x where MemAvailable x is in /proc/meminfo. Returns None in all other cases.

val iter_infer_deps : project_root:string -> f:(string -> unit) -> string -> unit

Parse each line of the given infer_deps.txt file (split on tabs, assume 3 elements per line) and run f on the third element. project_root is an argument to avoid dependency cycles.

val numcores : int
  • On Linux return the number of physical cores (sockets * cores per socket).
  • On Darwin and Windows returns half of the number of CPUs since most processors have 2 hardware threads per core.
val set_best_cpu_for : int -> unit

Pins processes to CPUs aiming to saturate physical cores evenly

val zip_fold_filenames : init:'a -> f:('a -> string -> 'a) -> zip_filename:string -> 'a

fold over each filename in the given zip_filename.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Annot/Item/index.html b/website/static/odoc/next/infer/IR/Annot/Item/index.html index c243830ad..bc471314d 100644 --- a/website/static/odoc/next/infer/IR/Annot/Item/index.html +++ b/website/static/odoc/next/infer/IR/Annot/Item/index.html @@ -1,2 +1,2 @@ -Item (infer.IR.Annot.Item)

Module Annot.Item

type nonrec t = (t * bool) list

Annotation for one item: a list of annotations with visibility.

val compare : t -> t -> int
val equal : t -> t -> bool
val pp : F.formatter -> t -> unit

Pretty print an item annotation.

val empty : t

Empty item annotation.

val is_final : t -> bool

Check if final annotation is included in.

\ No newline at end of file +Item (infer.IR.Annot.Item)

Module Annot.Item

type nonrec t = (t * bool) list

Annotation for one item: a list of annotations with visibility.

val compare : t -> t -> int
val equal : t -> t -> bool
val pp : F.formatter -> t -> unit

Pretty print an item annotation.

val empty : t

Empty item annotation.

val is_final : t -> bool

Check if final annotation is included in.

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Fieldname/index.html b/website/static/odoc/next/infer/IR/Fieldname/index.html index 02de4467b..cd5531228 100644 --- a/website/static/odoc/next/infer/IR/Fieldname/index.html +++ b/website/static/odoc/next/infer/IR/Fieldname/index.html @@ -1,2 +1,2 @@ -Fieldname (infer.IR.Fieldname)

Module IR.Fieldname

module F = Stdlib.Format
type t

Names for fields of class/struct/union

val compare : t -> t -> int
val equal : t -> t -> bool
val make : Typ.Name.t -> string -> t

create a field of the given class and fieldname

val get_class_name : t -> Typ.Name.t
val get_field_name : t -> string
val is_java : t -> bool
val is_java_synthetic : t -> bool

Check if the field is autogenerated/synthetic *

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set for fieldnames

module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Map for fieldnames

val is_java_outer_instance : t -> bool

Check if the field is the synthetic this$n of a nested class, used to access the n-th outer instance.

val to_string : t -> string

Convert a field name to a string.

val to_full_string : t -> string
val to_simplified_string : t -> string

Convert a fieldname to a simplified string with at most one-level path.

val pp : F.formatter -> t -> unit

Pretty print a field name.

\ No newline at end of file +Fieldname (infer.IR.Fieldname)

Module IR.Fieldname

module F = Stdlib.Format
type t

Names for fields of class/struct/union

val compare : t -> t -> int
val equal : t -> t -> bool
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val make : Typ.Name.t -> string -> t

create a field of the given class and fieldname

val get_class_name : t -> Typ.Name.t
val get_field_name : t -> string
val is_java : t -> bool
val is_java_synthetic : t -> bool

Check if the field is autogenerated/synthetic *

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set for fieldnames

module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Map for fieldnames

val is_java_outer_instance : t -> bool

Check if the field is the synthetic this$n of a nested class, used to access the n-th outer instance.

val to_string : t -> string

Convert a field name to a string.

val to_full_string : t -> string
val to_simplified_string : t -> string

Convert a fieldname to a simplified string with at most one-level path.

val pp : F.formatter -> t -> unit

Pretty print a field name.

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Ident/index.html b/website/static/odoc/next/infer/IR/Ident/index.html index cd9c4f943..24fb8f9a1 100644 --- a/website/static/odoc/next/infer/IR/Ident/index.html +++ b/website/static/odoc/next/infer/IR/Ident/index.html @@ -1,2 +1,2 @@ -Ident (infer.IR.Ident)

Module IR.Ident

type t

Program and logical variables.

val compare : t -> t -> int
val equal : t -> t -> bool

Equality for identifiers.

type name

Names used to replace strings.

val compare_name : name -> name -> int
val equal_name : name -> name -> bool

Equality for names.

type kind

Kind of identifiers.

val compare_kind : kind -> kind -> int
val equal_kind : kind -> kind -> bool

Equality for kind.

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set for identifiers.

module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t

Hash table with ident as key.

module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Map with ident as key.

module HashQueue : IStdlib.IStd.Hash_queue.S with type HashQueue.key = t
module NameGenerator : sig ... end
val idlist_to_idset : t list -> Set.t

Convert an identifier list to an identifier set

val kprimed : kind
val knormal : kind
val kfootprint : kind
val name_spec : name

Name used for spec variables

val name_return : Mangled.t

Name used for the return variable

val name_return_param : Mangled.t

Name used for the return param variable

val string_to_name : string -> name

Convert a string to a name.

val name_to_string : name -> string

Convert a name to a string.

val get_name : t -> name

Name of the identifier.

val create : kind -> int -> t

Create an identifier with default name for the given kind

val create_normal : name -> int -> t

Generate a normal identifier with the given name and stamp.

val create_none : unit -> t

Create a "null" identifier for situations where the IR requires an id that will never be read

val create_footprint : name -> int -> t

Generate a footprint identifier with the given name and stamp.

val update_name_generator : t list -> unit

Update the name generator so that the given id's are not generated again

val create_fresh : kind -> t

Create a fresh identifier with default name for the given kind.

val create_path : string -> t

Generate a normal identifier whose name encodes a path given as a string.

val is_primed : t -> bool

Check whether an identifier is primed or not.

val is_normal : t -> bool

Check whether an identifier is normal or not.

val is_footprint : t -> bool

Check whether an identifier is footprint or not.

val is_path : t -> bool

Check whether an identifier represents a path or not.

val is_none : t -> bool

Check whether an identifier is the special "none" identifier

val get_stamp : t -> int

Get the stamp of the identifier

val set_stamp : t -> int -> t

Set the stamp of the identifier

Pretty Printing

val pp_name : Stdlib.Format.formatter -> name -> unit

Pretty print a name.

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print an identifier.

val to_string : t -> string

Convert an identifier to a string.

val hashqueue_of_sequence : ?⁠init:unit HashQueue.t -> t IStdlib.IStd.Sequence.t -> unit HashQueue.t
val set_of_sequence : ?⁠init:Set.t -> t IStdlib.IStd.Sequence.t -> Set.t
val counts_of_sequence : t IStdlib.IStd.Sequence.t -> t -> int
\ No newline at end of file +Ident (infer.IR.Ident)

Module IR.Ident

type t

Program and logical variables.

val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val equal : t -> t -> bool

Equality for identifiers.

type name

Names used to replace strings.

val compare_name : name -> name -> int
val equal_name : name -> name -> bool

Equality for names.

type kind

Kind of identifiers.

val compare_kind : kind -> kind -> int
val equal_kind : kind -> kind -> bool

Equality for kind.

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set for identifiers.

module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t

Hash table with ident as key.

module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Map with ident as key.

module HashQueue : IStdlib.IStd.Hash_queue.S with type HashQueue.key = t
module NameGenerator : sig ... end
val idlist_to_idset : t list -> Set.t

Convert an identifier list to an identifier set

val kprimed : kind
val knormal : kind
val kfootprint : kind
val name_spec : name

Name used for spec variables

val name_return : Mangled.t

Name used for the return variable

val name_return_param : Mangled.t

Name used for the return param variable

val string_to_name : string -> name

Convert a string to a name.

val name_to_string : name -> string

Convert a name to a string.

val get_name : t -> name

Name of the identifier.

val create : kind -> int -> t

Create an identifier with default name for the given kind

val create_normal : name -> int -> t

Generate a normal identifier with the given name and stamp.

val create_none : unit -> t

Create a "null" identifier for situations where the IR requires an id that will never be read

val create_footprint : name -> int -> t

Generate a footprint identifier with the given name and stamp.

val update_name_generator : t list -> unit

Update the name generator so that the given id's are not generated again

val create_fresh : kind -> t

Create a fresh identifier with default name for the given kind.

val create_path : string -> t

Generate a normal identifier whose name encodes a path given as a string.

val is_primed : t -> bool

Check whether an identifier is primed or not.

val is_normal : t -> bool

Check whether an identifier is normal or not.

val is_footprint : t -> bool

Check whether an identifier is footprint or not.

val is_path : t -> bool

Check whether an identifier represents a path or not.

val is_none : t -> bool

Check whether an identifier is the special "none" identifier

val get_stamp : t -> int

Get the stamp of the identifier

val set_stamp : t -> int -> t

Set the stamp of the identifier

Pretty Printing

val pp_name : Stdlib.Format.formatter -> name -> unit

Pretty print a name.

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print an identifier.

val to_string : t -> string

Convert an identifier to a string.

val hashqueue_of_sequence : ?⁠init:unit HashQueue.t -> t IStdlib.IStd.Sequence.t -> unit HashQueue.t
val set_of_sequence : ?⁠init:Set.t -> t IStdlib.IStd.Sequence.t -> Set.t
val counts_of_sequence : t IStdlib.IStd.Sequence.t -> t -> int
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/IntLit/index.html b/website/static/odoc/next/infer/IR/IntLit/index.html index 34858cfa3..ce60ff9f7 100644 --- a/website/static/odoc/next/infer/IR/IntLit/index.html +++ b/website/static/odoc/next/infer/IR/IntLit/index.html @@ -1,2 +1,2 @@ -IntLit (infer.IR.IntLit)

Module IR.IntLit

module F = Stdlib.Format
type t

signed and unsigned integer literals

exception OversizedShift
val add : t -> t -> t
val compare : t -> t -> int

compare integers ignoring the distinction between pointers and non-pointers

val compare_value : t -> t -> int

compare the value of the integers, notice this is different from const compare, which distinguished between signed and unsigned +1

val div : t -> t -> t
val eq : t -> t -> bool
val equal : t -> t -> bool

an alias for eq, for convenience

val of_int : int -> t
val of_big_int : Z.t -> t
val of_int32 : int32 -> t
val of_int64 : int64 -> t
val of_string : string -> t
val geq : t -> t -> bool
val gt : t -> t -> bool
val isminusone : t -> bool
val isnegative : t -> bool
val isnull : t -> bool
val isone : t -> bool
val iszero : t -> bool
val leq : t -> t -> bool
val logand : t -> t -> t
val lognot : t -> t
val logor : t -> t -> t
val logxor : t -> t -> t
val lt : t -> t -> bool
val minus_one : t
val mul : t -> t -> t
val neg : t -> t
val neq : t -> t -> bool
val null : t

null behaves like zero except for the function isnull

val one : t
val pp : F.formatter -> t -> unit
val rem : t -> t -> t
val shift_left : t -> t -> t
val shift_right : t -> t -> t
val sub : t -> t -> t
val max : t -> t -> t
val min : t -> t -> t
val to_int : t -> int option
val to_int_exn : t -> int
val to_big_int : t -> Z.t
val to_float : t -> float
val to_signed : t -> t option
val to_string : t -> string

convert to signed if the value is representable

val two : t
val zero : t
\ No newline at end of file +IntLit (infer.IR.IntLit)

Module IR.IntLit

module F = Stdlib.Format
type t

signed and unsigned integer literals

val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
exception OversizedShift
val add : t -> t -> t
val compare : t -> t -> int

compare integers ignoring the distinction between pointers and non-pointers

val compare_value : t -> t -> int

compare the value of the integers, notice this is different from const compare, which distinguished between signed and unsigned +1

val div : t -> t -> t
val eq : t -> t -> bool
val equal : t -> t -> bool

an alias for eq, for convenience

val of_int : int -> t
val of_big_int : Z.t -> t
val of_int32 : int32 -> t
val of_int64 : int64 -> t
val of_string : string -> t
val geq : t -> t -> bool
val gt : t -> t -> bool
val isminusone : t -> bool
val isnegative : t -> bool
val isnull : t -> bool
val isone : t -> bool
val iszero : t -> bool
val leq : t -> t -> bool
val logand : t -> t -> t
val lognot : t -> t
val logor : t -> t -> t
val logxor : t -> t -> t
val lt : t -> t -> bool
val minus_one : t
val mul : t -> t -> t
val neg : t -> t
val neq : t -> t -> bool
val null : t

null behaves like zero except for the function isnull

val one : t
val pp : F.formatter -> t -> unit
val rem : t -> t -> t
val shift_left : t -> t -> t
val shift_right : t -> t -> t
val sub : t -> t -> t
val max : t -> t -> t
val min : t -> t -> t
val to_int : t -> int option
val to_int_exn : t -> int
val to_big_int : t -> Z.t
val to_float : t -> float
val to_signed : t -> t option
val to_string : t -> string

convert to signed if the value is representable

val two : t
val zero : t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/JavaClassName/index.html b/website/static/odoc/next/infer/IR/JavaClassName/index.html index aa40587f6..6ae8845ba 100644 --- a/website/static/odoc/next/infer/IR/JavaClassName/index.html +++ b/website/static/odoc/next/infer/IR/JavaClassName/index.html @@ -1,2 +1,2 @@ -JavaClassName (infer.IR.JavaClassName)

Module IR.JavaClassName

type t
val compare : t -> t -> int
val equal : t -> t -> bool
module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t
module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t
val make : package:string option -> classname:string -> t

make ~package:(Some "java.lang") "Object" creates a value representing java.lang.Object

val from_string : string -> t

from_string "java.lang.Object" is same as make ~package:(Some "java.lang") "Object"

val to_string : t -> string

to_string (from_string "X.Y.Z") = "X.Y.Z"

val pp : Stdlib.Format.formatter -> t -> unit

pp includes package if any

val pp_with_verbosity : verbose:bool -> Stdlib.Format.formatter -> t -> unit

if verbose then print package if present, otherwise only print class

val package : t -> string option
val classname : t -> string
val is_external_via_config : t -> bool

Considered external based on config flags.

val get_outer_class_name : t -> t option

If this is an inner class, return the closest outer, e.g. A$B for A$B$C. None if the class is outermost

val is_anonymous_inner_class_name : t -> bool

True if it is either "classic" anonymous Java class: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html, or a synthetic Java class corresponding to a lambda expression.

val get_user_defined_class_if_anonymous_inner : t -> t option

If the current class is anonymous (is_anonymous_inner_class_name is true), return the corresponding user defined (not anonymous) class this anonymous class belongs to.

In general case, BOTH anonymous classes and user-defined classes can be nested: SomeClass$NestedClass$1$17$5. In this example, we should return SomeClass$NestedClass.

If this is not an anonymous class, returns None.

\ No newline at end of file +JavaClassName (infer.IR.JavaClassName)

Module IR.JavaClassName

type t
val compare : t -> t -> int
val equal : t -> t -> bool
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t
module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t
val make : package:string option -> classname:string -> t

make ~package:(Some "java.lang") "Object" creates a value representing java.lang.Object

val from_string : string -> t

from_string "java.lang.Object" is same as make ~package:(Some "java.lang") "Object"

val to_string : t -> string

to_string (from_string "X.Y.Z") = "X.Y.Z"

val pp : Stdlib.Format.formatter -> t -> unit

pp includes package if any

val pp_with_verbosity : verbose:bool -> Stdlib.Format.formatter -> t -> unit

if verbose then print package if present, otherwise only print class

val package : t -> string option
val classname : t -> string
val is_external_via_config : t -> bool

Considered external based on config flags.

val get_outer_class_name : t -> t option

If this is an inner class, return the closest outer, e.g. A$B for A$B$C. None if the class is outermost

val is_anonymous_inner_class_name : t -> bool

True if it is either "classic" anonymous Java class: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html, or a synthetic Java class corresponding to a lambda expression.

val get_user_defined_class_if_anonymous_inner : t -> t option

If the current class is anonymous (is_anonymous_inner_class_name is true), return the corresponding user defined (not anonymous) class this anonymous class belongs to.

In general case, BOTH anonymous classes and user-defined classes can be nested: SomeClass$NestedClass$1$17$5. In this example, we should return SomeClass$NestedClass.

If this is not an anonymous class, returns None.

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Mangled/index.html b/website/static/odoc/next/infer/IR/Mangled/index.html index 44e1ed183..95be3bddb 100644 --- a/website/static/odoc/next/infer/IR/Mangled/index.html +++ b/website/static/odoc/next/infer/IR/Mangled/index.html @@ -1,2 +1,2 @@ -Mangled (infer.IR.Mangled)

Module IR.Mangled

type t

Type of mangled names

val compare : t -> t -> int
val equal : t -> t -> bool

Equality for mangled names

val from_string : string -> t

Convert a string to a mangled name

val mangled : string -> string -> t

Create a mangled name from a plain and mangled string

val to_string : t -> string

Convert a mangled name to a string

val to_string_full : t -> string

Convert a full mangled name to a string

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a mangled name

val this : t
val is_this : t -> bool
val self : t
val is_self : t -> bool
val rename : f:(string -> string) -> t -> t

Maps over both the plain and the mangled components.

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Set of Mangled.

module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t

Map with Mangled as key

\ No newline at end of file +Mangled (infer.IR.Mangled)

Module IR.Mangled

type t

Type of mangled names

val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val equal : t -> t -> bool

Equality for mangled names

val from_string : string -> t

Convert a string to a mangled name

val mangled : string -> string -> t

Create a mangled name from a plain and mangled string

val to_string : t -> string

Convert a mangled name to a string

val to_string_full : t -> string

Convert a full mangled name to a string

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a mangled name

val this : t
val is_this : t -> bool
val self : t
val is_self : t -> bool
val rename : f:(string -> string) -> t -> t

Maps over both the plain and the mangled components.

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Set of Mangled.

module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t

Map with Mangled as key

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Procname/index.html b/website/static/odoc/next/infer/IR/Procname/index.html index c87b75bff..1323a4e4d 100644 --- a/website/static/odoc/next/infer/IR/Procname/index.html +++ b/website/static/odoc/next/infer/IR/Procname/index.html @@ -1,2 +1,2 @@ -Procname (infer.IR.Procname)

Module IR.Procname

module F = Stdlib.Format
module Java : sig ... end

Type of java procedure names.

module Parameter : sig ... end
module ObjC_Cpp : sig ... end
module C : sig ... end
module Block : sig ... end
type t =
| Java of Java.t
| C of C.t
| Linters_dummy_method
| Block of Block.t
| ObjC_Cpp of ObjC_Cpp.t
| WithBlockParameters of t * Block.t list

Type of procedure names. WithBlockParameters is used for creating an instantiation of a method that contains block parameters and it's called with concrete blocks. For example: foo(Block block) {block();} bar() {foo(my_block)} is executed as foo_my_block() {my_block(); } where foo_my_block is created with WithBlockParameters (foo, my_block)

val compare : t -> t -> int
val block_of_procname : t -> Block.t
val equal : t -> t -> bool
val get_class_type_name : t -> Typ.Name.t option
val get_class_name : t -> string option
val get_parameters : t -> Parameter.t list
val replace_parameters : Parameter.t list -> t -> t
val parameter_of_name : t -> Typ.Name.t -> Parameter.t
val is_java_access_method : t -> bool
val is_java_class_initializer : t -> bool
val is_java_anonymous_inner_class_method : t -> bool
val is_java_autogen_method : t -> bool
val is_objc_method : t -> bool
module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t

Hash tables with proc names as keys.

module LRUHash : IStdlib.LRUHashtbl.S with type key = t
module HashQueue : IStdlib.IStd.Hash_queue.S with type HashQueue.key = t
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t

Maps from proc names.

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Sets of proc names.

module SQLite : sig ... end
module SQLiteList : IBase.SqliteUtils.Data with type t = t list
module UnitCache : sig ... end

One-sized cache for one procedure at a time. Returns getter and setter.

val make_java : class_name:Typ.Name.t -> return_type:Typ.t option -> method_name:string -> parameters:Typ.t list -> kind:Java.kind -> unit -> t

Create a Java procedure name.

val make_objc_dealloc : Typ.Name.t -> t

Create a Objective-C dealloc name. This is a destructor for an Objective-C class. This procname is given by the class name, since it is always an instance method with the name "dealloc"

val empty_block : t

Empty block name.

val get_language : t -> IBase.Language.t

Return the language of the procedure.

val get_method : t -> string

Return the method/function of a procname.

val is_objc_block : t -> bool

Return whether the procname is a block procname.

val is_objc_dealloc : t -> bool

Return whether the dealloc method of an Objective-C class.

val is_c_method : t -> bool

Return true this is an Objective-C/C++ method name.

val is_constructor : t -> bool

Check if this is a constructor.

val is_java : t -> bool

Check if this is a Java procedure name.

val as_java_exn : explanation:string -> t -> Java.t

Converts to a Java.t. Throws if is_java is false

val with_block_parameters : t -> Block.t list -> t

Create a procedure name instantiated with block parameters from a base procedure name and a list of block procedures.

val objc_cpp_replace_method_name : t -> string -> t
val is_infer_undefined : t -> bool

Check if this is a special Infer undefined procedure.

val get_global_name_of_initializer : t -> string option

Return the name of the global for which this procedure is the initializer if this is an initializer, None otherwise.

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a proc name for the user to see.

val to_string : t -> string

Convert a proc name into a string for the user to see.

val describe : Stdlib.Format.formatter -> t -> unit

to use in user messages

val replace_class : t -> Typ.Name.t -> t

Replace the class name component of a procedure name. In case of Java, replace package and class name.

val is_method_in_objc_protocol : t -> bool
val pp_simplified_string : ?⁠withclass:bool -> F.formatter -> t -> unit

Pretty print a proc name as an easy string for the user to see in an IDE.

val to_simplified_string : ?⁠withclass:bool -> t -> string

Convert a proc name into an easy string for the user to see in an IDE.

val from_string_c_fun : string -> t

Convert a string to a c function name.

val hashable_name : t -> string

Convert the procedure name in a format suitable for computing the bug hash.

val pp_unique_id : F.formatter -> t -> unit

Print a proc name as a unique identifier.

val to_unique_id : t -> string

Convert a proc name into a unique identifier.

val to_filename : t -> string

Convert a proc name to a filename.

val get_qualifiers : t -> QualifiedCppName.t

get qualifiers of C/objc/C++ method/function

\ No newline at end of file +Procname (infer.IR.Procname)

Module IR.Procname

module F = Stdlib.Format
module Java : sig ... end

Type of java procedure names.

module Parameter : sig ... end
module ObjC_Cpp : sig ... end
module C : sig ... end
module Block : sig ... end
type t =
| Java of Java.t
| C of C.t
| Linters_dummy_method
| Block of Block.t
| ObjC_Cpp of ObjC_Cpp.t
| WithBlockParameters of t * Block.t list

Type of procedure names. WithBlockParameters is used for creating an instantiation of a method that contains block parameters and it's called with concrete blocks. For example: foo(Block block) {block();} bar() {foo(my_block)} is executed as foo_my_block() {my_block(); } where foo_my_block is created with WithBlockParameters (foo, my_block)

val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val block_of_procname : t -> Block.t
val equal : t -> t -> bool
val get_class_type_name : t -> Typ.Name.t option
val get_class_name : t -> string option
val get_parameters : t -> Parameter.t list
val replace_parameters : Parameter.t list -> t -> t
val parameter_of_name : t -> Typ.Name.t -> Parameter.t
val is_java_access_method : t -> bool
val is_java_class_initializer : t -> bool
val is_java_anonymous_inner_class_method : t -> bool
val is_java_autogen_method : t -> bool
val is_objc_method : t -> bool
module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t

Hash tables with proc names as keys.

module LRUHash : IStdlib.LRUHashtbl.S with type key = t
module HashQueue : IStdlib.IStd.Hash_queue.S with type HashQueue.key = t
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t

Maps from proc names.

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Sets of proc names.

module SQLite : sig ... end
module SQLiteList : IBase.SqliteUtils.Data with type t = t list
module UnitCache : sig ... end

One-sized cache for one procedure at a time. Returns getter and setter.

val make_java : class_name:Typ.Name.t -> return_type:Typ.t option -> method_name:string -> parameters:Typ.t list -> kind:Java.kind -> unit -> t

Create a Java procedure name.

val make_objc_dealloc : Typ.Name.t -> t

Create a Objective-C dealloc name. This is a destructor for an Objective-C class. This procname is given by the class name, since it is always an instance method with the name "dealloc"

val make_objc_copyWithZone : is_mutable:bool -> Typ.Name.t -> t

Create an Objective-C method for copyWithZone: or mutableCopyWithZone: according to is_mutable.

val empty_block : t

Empty block name.

val get_language : t -> IBase.Language.t

Return the language of the procedure.

val get_method : t -> string

Return the method/function of a procname.

val is_objc_block : t -> bool

Return whether the procname is a block procname.

val is_objc_dealloc : t -> bool

Return whether the dealloc method of an Objective-C class.

val is_c_method : t -> bool

Return true this is an Objective-C/C++ method name.

val is_constructor : t -> bool

Check if this is a constructor.

val is_java : t -> bool

Check if this is a Java procedure name.

val as_java_exn : explanation:string -> t -> Java.t

Converts to a Java.t. Throws if is_java is false

val with_block_parameters : t -> Block.t list -> t

Create a procedure name instantiated with block parameters from a base procedure name and a list of block procedures.

val objc_cpp_replace_method_name : t -> string -> t
val is_infer_undefined : t -> bool

Check if this is a special Infer undefined procedure.

val get_global_name_of_initializer : t -> string option

Return the name of the global for which this procedure is the initializer if this is an initializer, None otherwise.

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a proc name for the user to see.

val to_string : t -> string

Convert a proc name into a string for the user to see.

val describe : Stdlib.Format.formatter -> t -> unit

to use in user messages

val replace_class : t -> Typ.Name.t -> t

Replace the class name component of a procedure name. In case of Java, replace package and class name.

val is_method_in_objc_protocol : t -> bool
val pp_simplified_string : ?⁠withclass:bool -> F.formatter -> t -> unit

Pretty print a proc name as an easy string for the user to see in an IDE.

val to_simplified_string : ?⁠withclass:bool -> t -> string

Convert a proc name into an easy string for the user to see in an IDE.

val from_string_c_fun : string -> t

Convert a string to a c function name.

val hashable_name : t -> string

Convert the procedure name in a format suitable for computing the bug hash.

val pp_unique_id : F.formatter -> t -> unit

Print a proc name as a unique identifier.

val to_unique_id : t -> string

Convert a proc name into a unique identifier.

val to_filename : t -> string

Convert a proc name to a filename.

val get_qualifiers : t -> QualifiedCppName.t

get qualifiers of C/objc/C++ method/function

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Pvar/index.html b/website/static/odoc/next/infer/IR/Pvar/index.html index 2bde22d64..52b31d304 100644 --- a/website/static/odoc/next/infer/IR/Pvar/index.html +++ b/website/static/odoc/next/infer/IR/Pvar/index.html @@ -1,2 +1,2 @@ -Pvar (infer.IR.Pvar)

Module IR.Pvar

module F = Stdlib.Format
type translation_unit = IBase.SourceFile.t option
val compare_translation_unit : translation_unit -> translation_unit -> int
type t

Type for program variables. There are 4 kinds of variables:

  1. local variables, used for local variables and formal parameters
  2. callee program variables, used to handle recursion (x | callee is distinguished from x)
  3. global variables
  4. seed variables, used to store the initial value of formal parameters
val compare : t -> t -> int
val compare_modulo_this : t -> t -> int

Comparison considering all pvars named 'this'/'self' to be equal

val equal : t -> t -> bool

Equality for pvar's

val get_declaring_function : t -> Procname.t option

if not a global, return function declaring var

val d : t -> unit

Dump a program variable.

val get_name : t -> Mangled.t

Get the name component of a program variable.

val get_ret_pvar : Procname.t -> t

get_ret_pvar proc_name retuns the return pvar associated with the procedure name

val get_ret_param_pvar : Procname.t -> t

get_ret_param_pvar proc_name retuns the return_param pvar associated with the procedure name

val get_simplified_name : t -> string

Get a simplified version of the name component of a program variable.

val is_abduced : t -> bool

Check if the pvar is an abduced return var or param passed by ref

val is_callee : t -> bool

Check if the pvar is a callee var

val is_global : t -> bool

Check if the pvar is a global var or a static local var

val is_static_local : t -> bool

Check if the pvar is a static variable declared inside a function

val is_constant_array : t -> bool

Check if the pvar has a constant array type

val is_local : t -> bool

Check if the pvar is a (non-static) local var

val is_seed : t -> bool

Check if the pvar is a seed var

val is_return : t -> bool

Check if the pvar is a return var

val is_this : t -> bool

Check if a pvar is the special "this" var

val is_self : t -> bool

Check if a pvar is the special "self" var

val is_frontend_tmp : t -> bool

return true if pvar is a temporary variable generated by the frontend

val is_clang_tmp : t -> bool

return true if pvar is a temporary variable generated by clang

val is_ssa_frontend_tmp : t -> bool

return true if pvar is a temporary variable generated by the frontend and is only assigned once on a non-looping control-flow path

val is_cpp_temporary : t -> bool

return true if this pvar represents a C++ temporary object (see http://en.cppreference.com/w/cpp/language/lifetime)

val is_objc_static_local_of_proc_name : string -> t -> bool

Check if a pvar is a local static in objc

val is_block_pvar : t -> bool

Check if a pvar is a local pointing to a block in objc

val mk : Mangled.t -> Procname.t -> t

mk name proc_name creates a program var with the given function name

val mk_abduced_ref_param : Procname.t -> int -> IBase.Location.t -> t

create an abduced variable for a parameter passed by reference

val mk_abduced_ret : Procname.t -> IBase.Location.t -> t

create an abduced return variable for a call to proc_name at loc

val mk_callee : Mangled.t -> Procname.t -> t

mk_callee name proc_name creates a program var for a callee function with the given function name

val mk_global : ?⁠is_constexpr:bool -> ?⁠is_ice:bool -> ?⁠is_pod:bool -> ?⁠is_static_local:bool -> ?⁠is_static_global:bool -> ?⁠is_constant_array:bool -> ?⁠translation_unit:IBase.SourceFile.t -> Mangled.t -> t

create a global variable with the given name

val mk_tmp : string -> Procname.t -> t

create a fresh temporary variable local to procedure pname. for use in the frontends only!

val pp : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a program variable.

val pp_value : F.formatter -> t -> unit

Pretty print a pvar which denotes a value, not an address

val pp_value_non_verbose : F.formatter -> t -> unit

Non-verbose version of pp_value

val pp_translation_unit : F.formatter -> translation_unit -> unit
val to_callee : Procname.t -> t -> t

Turn an ordinary program variable into a callee program variable

val to_seed : t -> t

Turn a pvar into a seed pvar (which stores the initial value of a stack var)

val to_string : t -> string

Convert a pvar to string.

val get_translation_unit : t -> translation_unit

Get the translation unit corresponding to a global. Raises Invalid_arg if not a global.

val is_compile_constant : t -> bool

Is the variable's value a compile-time constant? Always (potentially incorrectly) returns false for non-globals.

val is_ice : t -> bool

Is the variable's type an integral constant expression? Always (potentially incorrectly) returns false for non-globals.

val is_pod : t -> bool

Is the variable's type a "Plain Old Data" type (C++)? Always (potentially incorrectly) returns true for non-globals.

val get_initializer_pname : t -> Procname.t option

Get the procname of the initializer function for the given global variable

val build_formal_from_pvar : t -> Mangled.t

build_formal_from_pvar var Return a name that is composed of the name of var (and the name of the procname in case of locals)

val materialized_cpp_temporary : string
val swap_proc_in_local_pvar : t -> Procname.t -> t
val rename : f:(string -> string) -> t -> t
module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Sets of pvars.

type capture_mode =
| ByReference
| ByValue
val compare_capture_mode : capture_mode -> capture_mode -> int
val equal_capture_mode : capture_mode -> capture_mode -> bool
val string_of_capture_mode : capture_mode -> string
\ No newline at end of file +Pvar (infer.IR.Pvar)

Module IR.Pvar

module F = Stdlib.Format
type translation_unit = IBase.SourceFile.t option
val compare_translation_unit : translation_unit -> translation_unit -> int
type t

Type for program variables. There are 4 kinds of variables:

  1. local variables, used for local variables and formal parameters
  2. callee program variables, used to handle recursion (x | callee is distinguished from x)
  3. global variables
  4. seed variables, used to store the initial value of formal parameters
val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val compare_modulo_this : t -> t -> int

Comparison considering all pvars named 'this'/'self' to be equal

val equal : t -> t -> bool

Equality for pvar's

val get_declaring_function : t -> Procname.t option

if not a global, return function declaring var

val d : t -> unit

Dump a program variable.

val get_name : t -> Mangled.t

Get the name component of a program variable.

val get_ret_pvar : Procname.t -> t

get_ret_pvar proc_name retuns the return pvar associated with the procedure name

val get_ret_param_pvar : Procname.t -> t

get_ret_param_pvar proc_name retuns the return_param pvar associated with the procedure name

val get_simplified_name : t -> string

Get a simplified version of the name component of a program variable.

val is_abduced : t -> bool

Check if the pvar is an abduced return var or param passed by ref

val is_callee : t -> bool

Check if the pvar is a callee var

val is_global : t -> bool

Check if the pvar is a global var or a static local var

val is_static_local : t -> bool

Check if the pvar is a static variable declared inside a function

val is_constant_array : t -> bool

Check if the pvar has a constant array type

val is_local : t -> bool

Check if the pvar is a (non-static) local var

val is_seed : t -> bool

Check if the pvar is a seed var

val is_return : t -> bool

Check if the pvar is a return var

val is_this : t -> bool

Check if a pvar is the special "this" var

val is_self : t -> bool

Check if a pvar is the special "self" var

val is_frontend_tmp : t -> bool

return true if pvar is a temporary variable generated by the frontend

val is_clang_tmp : t -> bool

return true if pvar is a temporary variable generated by clang

val is_ssa_frontend_tmp : t -> bool

return true if pvar is a temporary variable generated by the frontend and is only assigned once on a non-looping control-flow path

val is_cpp_temporary : t -> bool

return true if this pvar represents a C++ temporary object (see http://en.cppreference.com/w/cpp/language/lifetime)

val is_objc_static_local_of_proc_name : string -> t -> bool

Check if a pvar is a local static in objc

val is_block_pvar : t -> bool

Check if a pvar is a local pointing to a block in objc

val mk : Mangled.t -> Procname.t -> t

mk name proc_name creates a program var with the given function name

val mk_abduced_ref_param : Procname.t -> int -> IBase.Location.t -> t

create an abduced variable for a parameter passed by reference

val mk_abduced_ret : Procname.t -> IBase.Location.t -> t

create an abduced return variable for a call to proc_name at loc

val mk_callee : Mangled.t -> Procname.t -> t

mk_callee name proc_name creates a program var for a callee function with the given function name

val mk_global : ?⁠is_constexpr:bool -> ?⁠is_ice:bool -> ?⁠is_pod:bool -> ?⁠is_static_local:bool -> ?⁠is_static_global:bool -> ?⁠is_constant_array:bool -> ?⁠translation_unit:IBase.SourceFile.t -> Mangled.t -> t

create a global variable with the given name

val mk_tmp : string -> Procname.t -> t

create a fresh temporary variable local to procedure pname. for use in the frontends only!

val pp : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a program variable.

val pp_value : F.formatter -> t -> unit

Pretty print a pvar which denotes a value, not an address

val pp_value_non_verbose : F.formatter -> t -> unit

Non-verbose version of pp_value

val pp_translation_unit : F.formatter -> translation_unit -> unit
val to_callee : Procname.t -> t -> t

Turn an ordinary program variable into a callee program variable

val to_seed : t -> t

Turn a pvar into a seed pvar (which stores the initial value of a stack var)

val to_string : t -> string

Convert a pvar to string.

val get_translation_unit : t -> translation_unit

Get the translation unit corresponding to a global. Raises Invalid_arg if not a global.

val is_compile_constant : t -> bool

Is the variable's value a compile-time constant? Always (potentially incorrectly) returns false for non-globals.

val is_ice : t -> bool

Is the variable's type an integral constant expression? Always (potentially incorrectly) returns false for non-globals.

val is_pod : t -> bool

Is the variable's type a "Plain Old Data" type (C++)? Always (potentially incorrectly) returns true for non-globals.

val get_initializer_pname : t -> Procname.t option

Get the procname of the initializer function for the given global variable

val build_formal_from_pvar : t -> Mangled.t

build_formal_from_pvar var Return a name that is composed of the name of var (and the name of the procname in case of locals)

val materialized_cpp_temporary : string
val swap_proc_in_local_pvar : t -> Procname.t -> t
val rename : f:(string -> string) -> t -> t
module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Sets of pvars.

type capture_mode =
| ByReference
| ByValue
val compare_capture_mode : capture_mode -> capture_mode -> int
val equal_capture_mode : capture_mode -> capture_mode -> bool
val string_of_capture_mode : capture_mode -> string
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/QualifiedCppName/index.html b/website/static/odoc/next/infer/IR/QualifiedCppName/index.html index e3dd4f10e..1f508e235 100644 --- a/website/static/odoc/next/infer/IR/QualifiedCppName/index.html +++ b/website/static/odoc/next/infer/IR/QualifiedCppName/index.html @@ -1,2 +1,2 @@ -QualifiedCppName (infer.IR.QualifiedCppName)

Module IR.QualifiedCppName

exception ParseError of string
type t
val compare : t -> t -> int
val empty : t

empty qualified name

val of_qual_string : string -> t

attempts to parse the argument into a list::of::possibly::templated<T>::qualifiers

val to_qual_string : t -> string

returns qualified name as a string with "::" as a separator between qualifiers

val append_qualifier : t -> qual:string -> t

append qualifier to the end (innermost scope) of the qualified name

val extract_last : t -> (string * t) option

returns last (innermost scope) qualifier and qualified name without last qualifier

val strip_template_args : t -> t

returns qualified name without template arguments. For example:

  • input: std::shared_ptr<int>::shared_ptr<long>
  • output: std::shared_ptr::shared_ptr
val append_template_args_to_last : t -> args:string -> t

append template arguments to the last qualifier. Fails if qualified name is empty or it already has template args

val to_list : t -> string list

returns list of qualifiers

val to_rev_list : t -> string list

returns reversed list of qualifiers, ie innermost scope is the first element

val of_list : string list -> t

given list of qualifiers in normal order produce qualified name "std", "move"

val of_rev_list : string list -> t

given reversed list of qualifiers, produce qualified name (ie. "move", "std" for std::move )

val from_field_qualified_name : t -> t
val pp : Stdlib.Format.formatter -> t -> unit
module Match : sig ... end

Module to match qualified C++ procnames "fuzzily", that is up to namescapes and templating. In particular, this deals with the following issues:

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t
\ No newline at end of file +QualifiedCppName (infer.IR.QualifiedCppName)

Module IR.QualifiedCppName

exception ParseError of string
type t
val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val empty : t

empty qualified name

val of_qual_string : string -> t

attempts to parse the argument into a list::of::possibly::templated<T>::qualifiers

val to_qual_string : t -> string

returns qualified name as a string with "::" as a separator between qualifiers

val append_qualifier : t -> qual:string -> t

append qualifier to the end (innermost scope) of the qualified name

val extract_last : t -> (string * t) option

returns last (innermost scope) qualifier and qualified name without last qualifier

val strip_template_args : t -> t

returns qualified name without template arguments. For example:

  • input: std::shared_ptr<int>::shared_ptr<long>
  • output: std::shared_ptr::shared_ptr
val append_template_args_to_last : t -> args:string -> t

append template arguments to the last qualifier. Fails if qualified name is empty or it already has template args

val append_protocols : t -> protocols:string -> t

append protocols to the qualified name

val to_list : t -> string list

returns list of qualifiers

val to_rev_list : t -> string list

returns reversed list of qualifiers, ie innermost scope is the first element

val of_list : string list -> t

given list of qualifiers in normal order produce qualified name "std", "move"

val of_rev_list : string list -> t

given reversed list of qualifiers, produce qualified name (ie. "move", "std" for std::move )

val from_field_qualified_name : t -> t
val pp : Stdlib.Format.formatter -> t -> unit
module Match : sig ... end

Module to match qualified C++ procnames "fuzzily", that is up to namescapes and templating. In particular, this deals with the following issues:

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Struct/index.html b/website/static/odoc/next/infer/IR/Struct/index.html index ddaf1a300..556e20326 100644 --- a/website/static/odoc/next/infer/IR/Struct/index.html +++ b/website/static/odoc/next/infer/IR/Struct/index.html @@ -1,2 +1,2 @@ -Struct (infer.IR.Struct)

Module IR.Struct

module F = Stdlib.Format
type field = Fieldname.t * Typ.t * Annot.Item.t
val compare_field : field -> field -> int
type fields = field list
type java_class_kind =
| Interface
| AbstractClass
| NormalClass
val equal_java_class_kind : java_class_kind -> java_class_kind -> bool
type java_class_info = {
kind : java_class_kind;

class kind in Java

loc : IBase.Location.t option;

None should correspond to rare cases when it was impossible to fetch the location in source file

}
type t = {
fields : fields;

non-static fields

statics : fields;

static fields

supers : Typ.Name.t list;

superclasses

methods : Procname.t list;

methods defined

exported_objc_methods : Procname.t list;

methods in ObjC interface, subset of methods

annots : Annot.Item.t;

annotations

java_class_info : java_class_info option;

present if and only if the class is Java

dummy : bool;

dummy struct for class including static method

}

Type for a structured value.

type lookup = Typ.Name.t -> t option
val pp_field : IStdlib.Pp.env -> F.formatter -> field -> unit
val pp : IStdlib.Pp.env -> Typ.Name.t -> F.formatter -> t -> unit

Pretty print a struct type.

val internal_mk_struct : ?⁠default:t -> ?⁠fields:fields -> ?⁠statics:fields -> ?⁠methods:Procname.t list -> ?⁠exported_objc_methods:Procname.t list -> ?⁠supers:Typ.Name.t list -> ?⁠annots:Annot.Item.t -> ?⁠java_class_info:java_class_info -> ?⁠dummy:bool -> unit -> t

Construct a struct_typ, normalizing field types

val get_extensible_array_element_typ : lookup:lookup -> Typ.t -> Typ.t option

the element typ of the final extensible array in the given typ, if any

type field_info = {
typ : Typ.t;
annotations : Annot.Item.t;
is_static : bool;
}
val get_field_info : lookup:lookup -> Fieldname.t -> Typ.t -> field_info option

Lookup for info associated with the field fn. None if typ has no field named fn

val fld_typ : lookup:lookup -> default:Typ.t -> Fieldname.t -> Typ.t -> Typ.t

If a struct type with field f, return the type of f. If not, return the default type if given, otherwise raise an exception

val get_field_type_and_annotation : lookup:lookup -> Fieldname.t -> Typ.t -> (Typ.t * Annot.Item.t) option

Return the type of the field fn and its annotation, None if typ has no field named fn

val merge : Typ.Name.t -> newer:t -> current:t -> t

best effort directed merge of two structs for the same typename

val is_not_java_interface : t -> bool

check that a struct either defines a non-java type, or a non-java-interface type (abstract or normal class)

\ No newline at end of file +Struct (infer.IR.Struct)

Module IR.Struct

module F = Stdlib.Format
type field = Fieldname.t * Typ.t * Annot.Item.t
val compare_field : field -> field -> int
type fields = field list
type java_class_kind =
| Interface
| AbstractClass
| NormalClass
val equal_java_class_kind : java_class_kind -> java_class_kind -> bool
type java_class_info = {
kind : java_class_kind;

class kind in Java

loc : IBase.Location.t option;

None should correspond to rare cases when it was impossible to fetch the location in source file

}
type t = {
fields : fields;

non-static fields

statics : fields;

static fields

supers : Typ.Name.t list;

superclasses

objc_protocols : Typ.Name.t list;

ObjC protocols

methods : Procname.t list;

methods defined

exported_objc_methods : Procname.t list;

methods in ObjC interface, subset of methods

annots : Annot.Item.t;

annotations

java_class_info : java_class_info option;

present if and only if the class is Java

dummy : bool;

dummy struct for class including static method

}

Type for a structured value.

type lookup = Typ.Name.t -> t option
val pp_field : IStdlib.Pp.env -> F.formatter -> field -> unit
val pp : IStdlib.Pp.env -> Typ.Name.t -> F.formatter -> t -> unit

Pretty print a struct type.

val internal_mk_struct : ?⁠default:t -> ?⁠fields:fields -> ?⁠statics:fields -> ?⁠methods:Procname.t list -> ?⁠exported_objc_methods:Procname.t list -> ?⁠supers:Typ.Name.t list -> ?⁠objc_protocols:Typ.Name.t list -> ?⁠annots:Annot.Item.t -> ?⁠java_class_info:java_class_info -> ?⁠dummy:bool -> unit -> t

Construct a struct_typ, normalizing field types

val get_extensible_array_element_typ : lookup:lookup -> Typ.t -> Typ.t option

the element typ of the final extensible array in the given typ, if any

type field_info = {
typ : Typ.t;
annotations : Annot.Item.t;
is_static : bool;
}
val get_field_info : lookup:lookup -> Fieldname.t -> Typ.t -> field_info option

Lookup for info associated with the field fn. None if typ has no field named fn

val fld_typ : lookup:lookup -> default:Typ.t -> Fieldname.t -> Typ.t -> Typ.t

If a struct type with field f, return the type of f. If not, return the default type if given, otherwise raise an exception

val get_field_type_and_annotation : lookup:lookup -> Fieldname.t -> Typ.t -> (Typ.t * Annot.Item.t) option

Return the type of the field fn and its annotation, None if typ has no field named fn

val merge : Typ.Name.t -> newer:t -> current:t -> t

best effort directed merge of two structs for the same typename

val is_not_java_interface : t -> bool

check that a struct either defines a non-java type, or a non-java-interface type (abstract or normal class)

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Tenv/index.html b/website/static/odoc/next/infer/IR/Tenv/index.html index 6c62ec804..cbb0fe98e 100644 --- a/website/static/odoc/next/infer/IR/Tenv/index.html +++ b/website/static/odoc/next/infer/IR/Tenv/index.html @@ -1,2 +1,2 @@ -Tenv (infer.IR.Tenv)

Module IR.Tenv

type t

Type for type environment.

val create : unit -> t

Create a new type environment.

val load : IBase.SourceFile.t -> t option

Load a type environment for a source file

val store_debug_file_for_source : IBase.SourceFile.t -> t -> unit
val read : IBase.DB.filename -> t option

read and return a type environment from the given file

val load_global : unit -> t option

load the global type environment (Java)

val store_global : t -> unit

save a global type environment (Java)

val lookup : t -> Typ.Name.t -> Struct.t option

Look up a name in the global type environment.

val mk_struct : t -> ?⁠default:Struct.t -> ?⁠fields:Struct.fields -> ?⁠statics:Struct.fields -> ?⁠methods:Procname.t list -> ?⁠exported_objc_methods:Procname.t list -> ?⁠supers:Typ.Name.t list -> ?⁠annots:Annot.Item.t -> ?⁠java_class_info:Struct.java_class_info -> ?⁠dummy:bool -> Typ.Name.t -> Struct.t

Construct a struct_typ, normalizing field types

val add_field : t -> Typ.Name.t -> Struct.field -> unit

Add a field to a given struct in the global type environment.

val pp : Stdlib.Format.formatter -> t -> unit

print a type environment

type per_file =
| Global
| FileLocal of t
val pp_per_file : Stdlib.Format.formatter -> per_file -> unit

print per file type environment

val merge : src:t -> dst:t -> unit

Merge src into dst possibly overwriting pre existing procs in dst.

val merge_per_file : src:per_file -> dst:per_file -> per_file

Best-effort merge of src into dst. If a procedure is both in dst and src, the one in dst will get overwritten.

val resolve_method : method_exists:(Procname.t -> Procname.t list -> bool) -> t -> Typ.Name.t -> Procname.t -> Procname.t option

resolve_method ~method_exists tenv class_name procname tries to resolve procname to a method in class_name or its super-classes, that is non-virtual (non-Java-interface method). method_exists adapted_procname methods should check if adapted_procname (procname but with its class potentially changed to some other_class) is among the methods of other_class.

\ No newline at end of file +Tenv (infer.IR.Tenv)

Module IR.Tenv

type t

Type for type environment.

val create : unit -> t

Create a new type environment.

val load : IBase.SourceFile.t -> t option

Load a type environment for a source file

val store_debug_file_for_source : IBase.SourceFile.t -> t -> unit
val read : IBase.DB.filename -> t option

read and return a type environment from the given file

val load_global : unit -> t option

load the global type environment (Java)

val store_global : t -> unit

save a global type environment (Java)

val lookup : t -> Typ.Name.t -> Struct.t option

Look up a name in the global type environment.

val mk_struct : t -> ?⁠default:Struct.t -> ?⁠fields:Struct.fields -> ?⁠statics:Struct.fields -> ?⁠methods:Procname.t list -> ?⁠exported_objc_methods:Procname.t list -> ?⁠supers:Typ.Name.t list -> ?⁠objc_protocols:Typ.Name.t list -> ?⁠annots:Annot.Item.t -> ?⁠java_class_info:Struct.java_class_info -> ?⁠dummy:bool -> Typ.Name.t -> Struct.t

Construct a struct_typ, normalizing field types

val add_field : t -> Typ.Name.t -> Struct.field -> unit

Add a field to a given struct in the global type environment.

val pp : Stdlib.Format.formatter -> t -> unit

print a type environment

type per_file =
| Global
| FileLocal of t
val pp_per_file : Stdlib.Format.formatter -> per_file -> unit

print per file type environment

val merge : src:t -> dst:t -> unit

Merge src into dst possibly overwriting pre existing procs in dst.

val merge_per_file : src:per_file -> dst:per_file -> per_file

Best-effort merge of src into dst. If a procedure is both in dst and src, the one in dst will get overwritten.

val resolve_method : method_exists:(Procname.t -> Procname.t list -> bool) -> t -> Typ.Name.t -> Procname.t -> Procname.t option

resolve_method ~method_exists tenv class_name procname tries to resolve procname to a method in class_name or its super-classes, that is non-virtual (non-Java-interface method). method_exists adapted_procname methods should check if adapted_procname (procname but with its class potentially changed to some other_class) is among the methods of other_class.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Typ/Name/Java/index.html b/website/static/odoc/next/infer/IR/Typ/Name/Java/index.html index f8ed2e183..f8658dfc4 100644 --- a/website/static/odoc/next/infer/IR/Typ/Name/Java/index.html +++ b/website/static/odoc/next/infer/IR/Typ/Name/Java/index.html @@ -1,2 +1,2 @@ -Java (infer.IR.Typ.Name.Java)

Module Name.Java

val from_string : string -> t

Create a typename from a Java classname in the form "package.class"

val is_class : t -> bool

is_class name holds if name names a Java class

val get_java_class_name_exn : t -> JavaClassName.t

Ensure name is a java class name and return underlying JavaClassName

val is_external : t -> bool

return true if the typename is in the .inferconfig list of external classes

val is_anonymous_inner_class_name_exn : t -> bool

Throws if it is not a Java class

val is_anonymous_inner_class_name_opt : t -> bool option

return None if it is not a Java class

val java_lang_object : t
val java_io_serializable : t
val java_lang_cloneable : t
val java_lang_class : t
val java_lang_string : t
\ No newline at end of file +Java (infer.IR.Typ.Name.Java)

Module Name.Java

val from_string : string -> t

Create a typename from a Java classname in the form "package.class"

val is_class : t -> bool

is_class name holds if name names a Java class

val get_java_class_name_exn : t -> JavaClassName.t

Ensure name is a java class name and return underlying JavaClassName

val is_external : t -> bool

return true if the typename is in the .inferconfig list of external classes

val is_anonymous_inner_class_name_exn : t -> bool

Throws if it is not a Java class

val is_anonymous_inner_class_name_opt : t -> bool option

return None if it is not a Java class

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Typ/Name/index.html b/website/static/odoc/next/infer/IR/Typ/Name/index.html index afe6d07f9..94028a4d3 100644 --- a/website/static/odoc/next/infer/IR/Typ/Name/index.html +++ b/website/static/odoc/next/infer/IR/Typ/Name/index.html @@ -1,2 +1,2 @@ -Name (infer.IR.Typ.Name)

Module Typ.Name

type t = name

Named types.

val compare : t -> t -> int
val equal : t -> t -> bool

Equality for typenames

val hash : t -> int
val to_string : t -> string

convert the typename to a string

val pp : Stdlib.Format.formatter -> t -> unit
val is_class : t -> bool

is_class name holds if name names CPP/Objc/Java class

val is_union : t -> bool

is_union name holds if name names C/CPP union

val is_same_type : t -> t -> bool

is_class name1 name2 holds if name1 and name2 name same kind of type

val name : t -> string

name of the typename without qualifier

val qual_name : t -> QualifiedCppName.t

qualified name of the type, may return nonsense for Java classes

val unqualified_name : t -> QualifiedCppName.t
val get_template_spec_info : t -> template_spec_info option
val is_objc_protocol : t -> bool
module C : sig ... end
module Java : sig ... end
module Cpp : sig ... end
module Objc : sig ... end
module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
\ No newline at end of file +Name (infer.IR.Typ.Name)

Module Typ.Name

type t = name

Named types.

val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val equal : t -> t -> bool

Equality for typenames

val hash : t -> int
val to_string : t -> string

convert the typename to a string

val pp : Stdlib.Format.formatter -> t -> unit
val is_class : t -> bool

is_class name holds if name names CPP/Objc/Java class

val is_union : t -> bool

is_union name holds if name names C/CPP union

val is_same_type : t -> t -> bool

is_class name1 name2 holds if name1 and name2 name same kind of type

val name : t -> string

name of the typename without qualifier

val qual_name : t -> QualifiedCppName.t

qualified name of the type, may return nonsense for Java classes

val unqualified_name : t -> QualifiedCppName.t
val get_template_spec_info : t -> template_spec_info option
val is_objc_protocol : t -> bool
module C : sig ... end
module Java : sig ... end
module Cpp : sig ... end
module Objc : sig ... end
module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Typ/index.html b/website/static/odoc/next/infer/IR/Typ/index.html index 8c14c8651..6d704e555 100644 --- a/website/static/odoc/next/infer/IR/Typ/index.html +++ b/website/static/odoc/next/infer/IR/Typ/index.html @@ -1,2 +1,2 @@ -Typ (infer.IR.Typ)

Module IR.Typ

module F = Stdlib.Format
module IntegerWidths : sig ... end
type ikind =
| IChar

char

| ISChar

signed char

| IUChar

unsigned char

| IBool

bool

| IInt

int

| IUInt

unsigned int

| IShort

short

| IUShort

unsigned short

| ILong

long

| IULong

unsigned long

| ILongLong

long long (or _int64 on Microsoft Visual C)

| IULongLong

unsigned long long (or unsigned _int64 on Microsoft Visual C)

| I128

__int128_t

| IU128

__uint128_t

Kinds of integers

val compare_ikind : ikind -> ikind -> int
val equal_ikind : ikind -> ikind -> bool
val width_of_ikind : IntegerWidths.t -> ikind -> int
val range_of_ikind : IntegerWidths.t -> ikind -> Z.t * Z.t
val ikind_is_char : ikind -> bool

Check whether the integer kind is a char

val ikind_is_unsigned : ikind -> bool

Check whether the integer kind is unsigned

type fkind =
| FFloat

float

| FDouble

double

| FLongDouble

long double

Kinds of floating-point numbers

val compare_fkind : fkind -> fkind -> int
type ptr_kind =
| Pk_pointer

C/C++, Java, Objc standard/__strong pointer

| Pk_reference

C++ reference

| Pk_objc_weak

Obj-C __weak pointer

| Pk_objc_unsafe_unretained

Obj-C __unsafe_unretained pointer

| Pk_objc_autoreleasing

Obj-C __autoreleasing pointer

kind of pointer

val compare_ptr_kind : ptr_kind -> ptr_kind -> int
val equal_ptr_kind : ptr_kind -> ptr_kind -> bool
type type_quals
val compare_type_quals : type_quals -> type_quals -> int
val mk_type_quals : ?⁠default:type_quals -> ?⁠is_const:bool -> ?⁠is_restrict:bool -> ?⁠is_volatile:bool -> unit -> type_quals
val is_const : type_quals -> bool
val is_restrict : type_quals -> bool
val is_volatile : type_quals -> bool
type t = {
desc : desc;
quals : type_quals;
}

types for sil (structured) expressions

and desc =
| Tint of ikind

integer type

| Tfloat of fkind

float type

| Tvoid

void type

| Tfun

function type

| Tptr of t * ptr_kind

pointer type

| Tstruct of name

structured value type name

| TVar of string

type variable (ie. C++ template variables)

| Tarray of {
elt : t;
length : IntLit.t option;
stride : IntLit.t option;
}

array type with statically fixed length and stride

and name =
| CStruct of QualifiedCppName.t
| CUnion of QualifiedCppName.t
| CppClass of QualifiedCppName.t * template_spec_info
| JavaClass of JavaClassName.t
| ObjcClass of QualifiedCppName.t
| ObjcProtocol of QualifiedCppName.t
and template_arg =
| TType of t
| TInt of IStdlib.IStd.Int64.t
| TNull
| TNullPtr
| TOpaque
and template_spec_info =
| NoTemplate
| Template of {
mangled : string option;

WARNING: because of type substitutions performed by sub_type and sub_tname, mangling is not guaranteed to be unique to a single type. All the information in the template arguments is also needed for uniqueness.

args : template_arg list;
}
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val pp_template_spec_info : IStdlib.Pp.env -> F.formatter -> template_spec_info -> unit
val mk : ?⁠default:t -> ?⁠quals:type_quals -> desc -> t

Create Typ.t from given desc. if default is passed then use its value to set other fields such as quals

val mk_array : ?⁠default:t -> ?⁠quals:type_quals -> ?⁠length:IntLit.t -> ?⁠stride:IntLit.t -> t -> t

Create an array type from a given element type. If length or stride value is given, use them as static length and size.

val mk_struct : name -> t
val mk_ptr : ?⁠ptr_kind:ptr_kind -> t -> t

make a pointer to t, default kind is Pk_pointer

val void : t

void type

val java_char : t
val java_byte : t
val java_short : t
val boolean : t
val char : t
val int : t

signed int type

val uint : t

unsigned int type

val long : t
val float : t
val double : t
val void_star : t

void* type

val pointer_to_java_lang_object : t
val pointer_to_java_lang_string : t
val get_ikind_opt : t -> ikind option

Get ikind if the type is integer.

val size_t : ikind

ikind of size_t

val is_weak_pointer : t -> bool
val is_strong_pointer : t -> bool
module Name : sig ... end
val equal : t -> t -> bool

Equality for types.

val equal_desc : desc -> desc -> bool
val equal_name : name -> name -> bool
val equal_quals : type_quals -> type_quals -> bool
val equal_ignore_quals : t -> t -> bool

Equality for types, but ignoring quals in it.

val pp_full : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a type with all the details.

val pp : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a type.

val pp_java : verbose:bool -> F.formatter -> t -> unit

Pretty print a Java type. Raises if type isn't produced by the Java frontend

val to_string : t -> string
val d_full : t -> unit

Dump a type with all the details.

val d_list : t list -> unit

Dump a list of types.

val name : t -> Name.t option

The name of a type

val strip_ptr : t -> t

turn a *T into a T. fails if t is not a pointer type

val is_ptr_to_ignore_quals : t -> ptr:t -> bool

check if ptr is a pointer type to t, ignoring quals

val array_elem : t option -> t -> t

If an array type, return the type of the element. If not, return the default type if given, otherwise raise an exception

val is_objc_class : t -> bool
val is_cpp_class : t -> bool
val is_pointer_to_cpp_class : t -> bool
val is_pointer_to_objc_non_tagged_class : t -> bool
val is_pointer_to_void : t -> bool
val is_void : t -> bool
val is_pointer_to_int : t -> bool
val is_pointer_to_function : t -> bool
val is_pointer : t -> bool
val is_reference : t -> bool
val is_struct : t -> bool
val is_int : t -> bool
val is_unsigned_int : t -> bool
val is_char : t -> bool
val is_java_type : t -> bool

is t a type produced by the Java frontend?

val has_block_prefix : string -> bool
val unsome : string -> t option -> t
type typ = t
\ No newline at end of file +Typ (infer.IR.Typ)

Module IR.Typ

module F = Stdlib.Format
module IntegerWidths : sig ... end
type ikind =
| IChar

char

| ISChar

signed char

| IUChar

unsigned char

| IBool

bool

| IInt

int

| IUInt

unsigned int

| IShort

short

| IUShort

unsigned short

| ILong

long

| IULong

unsigned long

| ILongLong

long long (or _int64 on Microsoft Visual C)

| IULongLong

unsigned long long (or unsigned _int64 on Microsoft Visual C)

| I128

__int128_t

| IU128

__uint128_t

Kinds of integers

val compare_ikind : ikind -> ikind -> int
val equal_ikind : ikind -> ikind -> bool
val width_of_ikind : IntegerWidths.t -> ikind -> int
val range_of_ikind : IntegerWidths.t -> ikind -> Z.t * Z.t
val ikind_is_char : ikind -> bool

Check whether the integer kind is a char

val ikind_is_unsigned : ikind -> bool

Check whether the integer kind is unsigned

type fkind =
| FFloat

float

| FDouble

double

| FLongDouble

long double

Kinds of floating-point numbers

val compare_fkind : fkind -> fkind -> int
type ptr_kind =
| Pk_pointer

C/C++, Java, Objc standard/__strong pointer

| Pk_reference

C++ reference

| Pk_objc_weak

Obj-C __weak pointer

| Pk_objc_unsafe_unretained

Obj-C __unsafe_unretained pointer

| Pk_objc_autoreleasing

Obj-C __autoreleasing pointer

kind of pointer

val compare_ptr_kind : ptr_kind -> ptr_kind -> int
val equal_ptr_kind : ptr_kind -> ptr_kind -> bool
type type_quals
val compare_type_quals : type_quals -> type_quals -> int
val mk_type_quals : ?⁠default:type_quals -> ?⁠is_const:bool -> ?⁠is_restrict:bool -> ?⁠is_volatile:bool -> unit -> type_quals
val is_const : type_quals -> bool
val is_restrict : type_quals -> bool
val is_volatile : type_quals -> bool
type t = {
desc : desc;
quals : type_quals;
}

types for sil (structured) expressions

and desc =
| Tint of ikind

integer type

| Tfloat of fkind

float type

| Tvoid

void type

| Tfun

function type

| Tptr of t * ptr_kind

pointer type

| Tstruct of name

structured value type name

| TVar of string

type variable (ie. C++ template variables)

| Tarray of {
elt : t;
length : IntLit.t option;
stride : IntLit.t option;
}

array type with statically fixed length and stride

and name =
| CStruct of QualifiedCppName.t
| CUnion of QualifiedCppName.t
| CppClass of QualifiedCppName.t * template_spec_info
| JavaClass of JavaClassName.t
| ObjcClass of QualifiedCppName.t * name list
| ObjcProtocol of QualifiedCppName.t
and template_arg =
| TType of t
| TInt of IStdlib.IStd.Int64.t
| TNull
| TNullPtr
| TOpaque
and template_spec_info =
| NoTemplate
| Template of {
mangled : string option;

WARNING: because of type substitutions performed by sub_type and sub_tname, mangling is not guaranteed to be unique to a single type. All the information in the template arguments is also needed for uniqueness.

args : template_arg list;
}
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val yojson_of_desc : desc -> Ppx_yojson_conv_lib.Yojson.Safe.t
val yojson_of_name : name -> Ppx_yojson_conv_lib.Yojson.Safe.t
val yojson_of_template_arg : template_arg -> Ppx_yojson_conv_lib.Yojson.Safe.t
val yojson_of_template_spec_info : template_spec_info -> Ppx_yojson_conv_lib.Yojson.Safe.t
val pp_template_spec_info : IStdlib.Pp.env -> F.formatter -> template_spec_info -> unit
val mk : ?⁠default:t -> ?⁠quals:type_quals -> desc -> t

Create Typ.t from given desc. if default is passed then use its value to set other fields such as quals

val mk_array : ?⁠default:t -> ?⁠quals:type_quals -> ?⁠length:IntLit.t -> ?⁠stride:IntLit.t -> t -> t

Create an array type from a given element type. If length or stride value is given, use them as static length and size.

val mk_struct : name -> t
val mk_ptr : ?⁠ptr_kind:ptr_kind -> t -> t

make a pointer to t, default kind is Pk_pointer

val get_ikind_opt : t -> ikind option

Get ikind if the type is integer.

val size_t : ikind

ikind of size_t

val is_weak_pointer : t -> bool
val is_strong_pointer : t -> bool
module Name : sig ... end
val equal : t -> t -> bool

Equality for types.

val equal_desc : desc -> desc -> bool
val equal_name : name -> name -> bool
val equal_quals : type_quals -> type_quals -> bool
val equal_ignore_quals : t -> t -> bool

Equality for types, but ignoring quals in it.

val pp_full : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a type with all the details.

val pp : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a type.

val pp_desc : IStdlib.Pp.env -> F.formatter -> desc -> unit

Pretty print a type desc.

val pp_java : verbose:bool -> F.formatter -> t -> unit

Pretty print a Java type. Raises if type isn't produced by the Java frontend

val pp_protocols : IStdlib.Pp.env -> F.formatter -> name list -> unit
val to_string : t -> string
val desc_to_string : desc -> string
val d_full : t -> unit

Dump a type with all the details.

val d_list : t list -> unit

Dump a list of types.

val name : t -> Name.t option

The name of a type

val strip_ptr : t -> t

turn a *T into a T. fails if t is not a pointer type

val is_ptr_to_ignore_quals : t -> ptr:t -> bool

check if ptr is a pointer type to t, ignoring quals

val array_elem : t option -> t -> t

If an array type, return the type of the element. If not, return the default type if given, otherwise raise an exception

val is_objc_class : t -> bool
val is_cpp_class : t -> bool
val is_pointer_to_cpp_class : t -> bool
val is_pointer_to_objc_non_tagged_class : t -> bool
val is_pointer_to_void : t -> bool
val is_void : t -> bool
val is_pointer_to_int : t -> bool
val is_pointer_to_function : t -> bool
val is_pointer : t -> bool
val is_reference : t -> bool
val is_struct : t -> bool
val is_int : t -> bool
val is_unsigned_int : t -> bool
val is_char : t -> bool
val is_java_type : t -> bool

is t a type produced by the Java frontend?

val has_block_prefix : string -> bool
val unsome : string -> t option -> t
module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/Var/index.html b/website/static/odoc/next/infer/IR/Var/index.html index ca5bf2a53..2823020f2 100644 --- a/website/static/odoc/next/infer/IR/Var/index.html +++ b/website/static/odoc/next/infer/IR/Var/index.html @@ -1,2 +1,2 @@ -Var (infer.IR.Var)

Module IR.Var

type t = private
| LogicalVar of Ident.t
| ProgramVar of Pvar.t
val compare : t -> t -> int
val equal : t -> t -> bool
val compare_modulo_this : t -> t -> int
val of_id : Ident.t -> t
val of_pvar : Pvar.t -> t
val of_formal_index : int -> t

Create a variable representing the ith formal of the current procedure

val get_all_vars_in_exp : Exp.t -> t IStdlib.IStd.Sequence.t

Get all free and program vars

val to_exp : t -> Exp.t
val get_ident : t -> Ident.t option
val get_pvar : t -> Pvar.t option
val is_global : t -> bool
val is_local_to_procedure : Procname.t -> t -> bool
val is_return : t -> bool
val is_footprint : t -> bool
val is_none : t -> bool
val is_this : t -> bool
val appears_in_source_code : t -> bool

return true if this variable appears in source code (i.e., is not a LogicalVar or a frontend-generated ProgramVar)

val is_cpp_temporary : t -> bool
val get_footprint_index : t -> int option
val pp : Stdlib.Format.formatter -> t -> unit
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
\ No newline at end of file +Var (infer.IR.Var)

Module IR.Var

type t = private
| LogicalVar of Ident.t
| ProgramVar of Pvar.t
val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val equal : t -> t -> bool
val compare_modulo_this : t -> t -> int
val of_id : Ident.t -> t
val of_pvar : Pvar.t -> t
val of_formal_index : int -> t

Create a variable representing the ith formal of the current procedure

val get_all_vars_in_exp : Exp.t -> t IStdlib.IStd.Sequence.t

Get all free and program vars

val to_exp : t -> Exp.t
val get_ident : t -> Ident.t option
val get_pvar : t -> Pvar.t option
val is_global : t -> bool
val is_local_to_procedure : Procname.t -> t -> bool
val is_return : t -> bool
val is_footprint : t -> bool
val is_none : t -> bool
val is_this : t -> bool
val appears_in_source_code : t -> bool

return true if this variable appears in source code (i.e., is not a LogicalVar or a frontend-generated ProgramVar)

val is_cpp_temporary : t -> bool
val get_footprint_index : t -> int option
val pp : Stdlib.Format.formatter -> t -> unit
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR/index.html b/website/static/odoc/next/infer/IR/index.html index 37332c0af..1b4ed7ce1 100644 --- a/website/static/odoc/next/infer/IR/index.html +++ b/website/static/odoc/next/infer/IR/index.html @@ -1,2 +1,2 @@ -IR (infer.IR)

Module IR

module Annot : sig ... end
module Attributes : sig ... end
module BUILTINS : sig ... end
module BiabductionModels : sig ... end
module Binop : sig ... end
module BuiltinDecl : sig ... end
module CallFlags : sig ... end
module Cfg : sig ... end
module ClangMethodKind : sig ... end
module Const : sig ... end
module DecompiledExp : sig ... end
module DotCfg : sig ... end
module Exp : sig ... end
module Fieldname : sig ... end
module Filtering : sig ... end
module Ident : sig ... end
module Inferconfig : sig ... end
module Instrs : sig ... end
module IntLit : sig ... end
module Io_infer : sig ... end
module JConfig : sig ... end
module JavaClassName : sig ... end
module Mangled : sig ... end
module PredSymb : sig ... end
module ProcAttributes : sig ... end
module Procdesc : sig ... end
module Procname : sig ... end
module Pvar : sig ... end
module QualifiedCppName : sig ... end
module Sil : sig ... end
module SourceFiles : sig ... end
module SpecializeProcdesc : sig ... end
module Struct : sig ... end
module Subtype : sig ... end
module Tenv : sig ... end
module Typ : sig ... end
module Unop : sig ... end
module Var : sig ... end
module WeakTopologicalOrder : sig ... end
\ No newline at end of file +IR (infer.IR)

Module IR

module Annot : sig ... end
module Attributes : sig ... end
module BUILTINS : sig ... end
module BiabductionModels : sig ... end
module Binop : sig ... end
module BuiltinDecl : sig ... end
module CallFlags : sig ... end
module Cfg : sig ... end
module ClangMethodKind : sig ... end
module Const : sig ... end
module DecompiledExp : sig ... end
module DotCfg : sig ... end
module Exp : sig ... end
module Fieldname : sig ... end
module Filtering : sig ... end
module Ident : sig ... end
module Inferconfig : sig ... end
module Instrs : sig ... end
module IntLit : sig ... end
module Io_infer : sig ... end
module JConfig : sig ... end
module JavaClassName : sig ... end
module Mangled : sig ... end
module PredSymb : sig ... end
module ProcAttributes : sig ... end
module Procdesc : sig ... end
module Procname : sig ... end
module Pvar : sig ... end
module QualifiedCppName : sig ... end
module Sil : sig ... end
module SourceFiles : sig ... end
module SpecializeProcdesc : sig ... end
module StdTyp : sig ... end
module Struct : sig ... end
module Subtype : sig ... end
module Tenv : sig ... end
module Typ : sig ... end
module Unop : sig ... end
module Var : sig ... end
module WeakTopologicalOrder : sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Annot/Item/index.html b/website/static/odoc/next/infer/IR__Annot/Item/index.html index 6dfdde05f..5f236ae61 100644 --- a/website/static/odoc/next/infer/IR__Annot/Item/index.html +++ b/website/static/odoc/next/infer/IR__Annot/Item/index.html @@ -1,2 +1,2 @@ -Item (infer.IR__Annot.Item)

Module IR__Annot.Item

type nonrec t = (t * bool) list

Annotation for one item: a list of annotations with visibility.

val compare : t -> t -> int
val equal : t -> t -> bool
val pp : F.formatter -> t -> unit

Pretty print an item annotation.

val empty : t

Empty item annotation.

val is_final : t -> bool

Check if final annotation is included in.

\ No newline at end of file +Item (infer.IR__Annot.Item)

Module IR__Annot.Item

type nonrec t = (t * bool) list

Annotation for one item: a list of annotations with visibility.

val compare : t -> t -> int
val equal : t -> t -> bool
val pp : F.formatter -> t -> unit

Pretty print an item annotation.

val empty : t

Empty item annotation.

val is_final : t -> bool

Check if final annotation is included in.

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Fieldname/index.html b/website/static/odoc/next/infer/IR__Fieldname/index.html index a6976743b..42b129c0f 100644 --- a/website/static/odoc/next/infer/IR__Fieldname/index.html +++ b/website/static/odoc/next/infer/IR__Fieldname/index.html @@ -1,2 +1,2 @@ -IR__Fieldname (infer.IR__Fieldname)

Module IR__Fieldname

module F = Stdlib.Format
type t

Names for fields of class/struct/union

val compare : t -> t -> int
val equal : t -> t -> bool
val make : IR.Typ.Name.t -> string -> t

create a field of the given class and fieldname

val get_class_name : t -> IR.Typ.Name.t
val get_field_name : t -> string
val is_java : t -> bool
val is_java_synthetic : t -> bool

Check if the field is autogenerated/synthetic *

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set for fieldnames

module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Map for fieldnames

val is_java_outer_instance : t -> bool

Check if the field is the synthetic this$n of a nested class, used to access the n-th outer instance.

val to_string : t -> string

Convert a field name to a string.

val to_full_string : t -> string
val to_simplified_string : t -> string

Convert a fieldname to a simplified string with at most one-level path.

val pp : F.formatter -> t -> unit

Pretty print a field name.

\ No newline at end of file +IR__Fieldname (infer.IR__Fieldname)

Module IR__Fieldname

module F = Stdlib.Format
type t

Names for fields of class/struct/union

val compare : t -> t -> int
val equal : t -> t -> bool
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val make : IR.Typ.Name.t -> string -> t

create a field of the given class and fieldname

val get_class_name : t -> IR.Typ.Name.t
val get_field_name : t -> string
val is_java : t -> bool
val is_java_synthetic : t -> bool

Check if the field is autogenerated/synthetic *

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set for fieldnames

module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Map for fieldnames

val is_java_outer_instance : t -> bool

Check if the field is the synthetic this$n of a nested class, used to access the n-th outer instance.

val to_string : t -> string

Convert a field name to a string.

val to_full_string : t -> string
val to_simplified_string : t -> string

Convert a fieldname to a simplified string with at most one-level path.

val pp : F.formatter -> t -> unit

Pretty print a field name.

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Ident/index.html b/website/static/odoc/next/infer/IR__Ident/index.html index d88f793a1..fa2af07f3 100644 --- a/website/static/odoc/next/infer/IR__Ident/index.html +++ b/website/static/odoc/next/infer/IR__Ident/index.html @@ -1,2 +1,2 @@ -IR__Ident (infer.IR__Ident)

Module IR__Ident

Identifiers: program variables and logical variables

type t

Program and logical variables.

val compare : t -> t -> int
val equal : t -> t -> bool

Equality for identifiers.

type name

Names used to replace strings.

val compare_name : name -> name -> int
val equal_name : name -> name -> bool

Equality for names.

type kind

Kind of identifiers.

val compare_kind : kind -> kind -> int
val equal_kind : kind -> kind -> bool

Equality for kind.

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set for identifiers.

module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t

Hash table with ident as key.

module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Map with ident as key.

module HashQueue : IStdlib.IStd.Hash_queue.S with type HashQueue.key = t
module NameGenerator : sig ... end
val idlist_to_idset : t list -> Set.t

Convert an identifier list to an identifier set

val kprimed : kind
val knormal : kind
val kfootprint : kind
val name_spec : name

Name used for spec variables

val name_return : IR.Mangled.t

Name used for the return variable

val name_return_param : IR.Mangled.t

Name used for the return param variable

val string_to_name : string -> name

Convert a string to a name.

val name_to_string : name -> string

Convert a name to a string.

val get_name : t -> name

Name of the identifier.

val create : kind -> int -> t

Create an identifier with default name for the given kind

val create_normal : name -> int -> t

Generate a normal identifier with the given name and stamp.

val create_none : unit -> t

Create a "null" identifier for situations where the IR requires an id that will never be read

val create_footprint : name -> int -> t

Generate a footprint identifier with the given name and stamp.

val update_name_generator : t list -> unit

Update the name generator so that the given id's are not generated again

val create_fresh : kind -> t

Create a fresh identifier with default name for the given kind.

val create_path : string -> t

Generate a normal identifier whose name encodes a path given as a string.

val is_primed : t -> bool

Check whether an identifier is primed or not.

val is_normal : t -> bool

Check whether an identifier is normal or not.

val is_footprint : t -> bool

Check whether an identifier is footprint or not.

val is_path : t -> bool

Check whether an identifier represents a path or not.

val is_none : t -> bool

Check whether an identifier is the special "none" identifier

val get_stamp : t -> int

Get the stamp of the identifier

val set_stamp : t -> int -> t

Set the stamp of the identifier

Pretty Printing

val pp_name : Stdlib.Format.formatter -> name -> unit

Pretty print a name.

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print an identifier.

val to_string : t -> string

Convert an identifier to a string.

val hashqueue_of_sequence : ?⁠init:unit HashQueue.t -> t IStdlib.IStd.Sequence.t -> unit HashQueue.t
val set_of_sequence : ?⁠init:Set.t -> t IStdlib.IStd.Sequence.t -> Set.t
val counts_of_sequence : t IStdlib.IStd.Sequence.t -> t -> int
\ No newline at end of file +IR__Ident (infer.IR__Ident)

Module IR__Ident

Identifiers: program variables and logical variables

type t

Program and logical variables.

val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val equal : t -> t -> bool

Equality for identifiers.

type name

Names used to replace strings.

val compare_name : name -> name -> int
val equal_name : name -> name -> bool

Equality for names.

type kind

Kind of identifiers.

val compare_kind : kind -> kind -> int
val equal_kind : kind -> kind -> bool

Equality for kind.

module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t

Set for identifiers.

module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t

Hash table with ident as key.

module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t

Map with ident as key.

module HashQueue : IStdlib.IStd.Hash_queue.S with type HashQueue.key = t
module NameGenerator : sig ... end
val idlist_to_idset : t list -> Set.t

Convert an identifier list to an identifier set

val kprimed : kind
val knormal : kind
val kfootprint : kind
val name_spec : name

Name used for spec variables

val name_return : IR.Mangled.t

Name used for the return variable

val name_return_param : IR.Mangled.t

Name used for the return param variable

val string_to_name : string -> name

Convert a string to a name.

val name_to_string : name -> string

Convert a name to a string.

val get_name : t -> name

Name of the identifier.

val create : kind -> int -> t

Create an identifier with default name for the given kind

val create_normal : name -> int -> t

Generate a normal identifier with the given name and stamp.

val create_none : unit -> t

Create a "null" identifier for situations where the IR requires an id that will never be read

val create_footprint : name -> int -> t

Generate a footprint identifier with the given name and stamp.

val update_name_generator : t list -> unit

Update the name generator so that the given id's are not generated again

val create_fresh : kind -> t

Create a fresh identifier with default name for the given kind.

val create_path : string -> t

Generate a normal identifier whose name encodes a path given as a string.

val is_primed : t -> bool

Check whether an identifier is primed or not.

val is_normal : t -> bool

Check whether an identifier is normal or not.

val is_footprint : t -> bool

Check whether an identifier is footprint or not.

val is_path : t -> bool

Check whether an identifier represents a path or not.

val is_none : t -> bool

Check whether an identifier is the special "none" identifier

val get_stamp : t -> int

Get the stamp of the identifier

val set_stamp : t -> int -> t

Set the stamp of the identifier

Pretty Printing

val pp_name : Stdlib.Format.formatter -> name -> unit

Pretty print a name.

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print an identifier.

val to_string : t -> string

Convert an identifier to a string.

val hashqueue_of_sequence : ?⁠init:unit HashQueue.t -> t IStdlib.IStd.Sequence.t -> unit HashQueue.t
val set_of_sequence : ?⁠init:Set.t -> t IStdlib.IStd.Sequence.t -> Set.t
val counts_of_sequence : t IStdlib.IStd.Sequence.t -> t -> int
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__IntLit/index.html b/website/static/odoc/next/infer/IR__IntLit/index.html index 802fa4e62..2aee4fd74 100644 --- a/website/static/odoc/next/infer/IR__IntLit/index.html +++ b/website/static/odoc/next/infer/IR__IntLit/index.html @@ -1,2 +1,2 @@ -IR__IntLit (infer.IR__IntLit)

Module IR__IntLit

module F = Stdlib.Format
type t

signed and unsigned integer literals

exception OversizedShift
val add : t -> t -> t
val compare : t -> t -> int

compare integers ignoring the distinction between pointers and non-pointers

val compare_value : t -> t -> int

compare the value of the integers, notice this is different from const compare, which distinguished between signed and unsigned +1

val div : t -> t -> t
val eq : t -> t -> bool
val equal : t -> t -> bool

an alias for eq, for convenience

val of_int : int -> t
val of_big_int : Z.t -> t
val of_int32 : int32 -> t
val of_int64 : int64 -> t
val of_string : string -> t
val geq : t -> t -> bool
val gt : t -> t -> bool
val isminusone : t -> bool
val isnegative : t -> bool
val isnull : t -> bool
val isone : t -> bool
val iszero : t -> bool
val leq : t -> t -> bool
val logand : t -> t -> t
val lognot : t -> t
val logor : t -> t -> t
val logxor : t -> t -> t
val lt : t -> t -> bool
val minus_one : t
val mul : t -> t -> t
val neg : t -> t
val neq : t -> t -> bool
val null : t

null behaves like zero except for the function isnull

val one : t
val pp : F.formatter -> t -> unit
val rem : t -> t -> t
val shift_left : t -> t -> t
val shift_right : t -> t -> t
val sub : t -> t -> t
val max : t -> t -> t
val min : t -> t -> t
val to_int : t -> int option
val to_int_exn : t -> int
val to_big_int : t -> Z.t
val to_float : t -> float
val to_signed : t -> t option
val to_string : t -> string

convert to signed if the value is representable

val two : t
val zero : t
\ No newline at end of file +IR__IntLit (infer.IR__IntLit)

Module IR__IntLit

module F = Stdlib.Format
type t

signed and unsigned integer literals

val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
exception OversizedShift
val add : t -> t -> t
val compare : t -> t -> int

compare integers ignoring the distinction between pointers and non-pointers

val compare_value : t -> t -> int

compare the value of the integers, notice this is different from const compare, which distinguished between signed and unsigned +1

val div : t -> t -> t
val eq : t -> t -> bool
val equal : t -> t -> bool

an alias for eq, for convenience

val of_int : int -> t
val of_big_int : Z.t -> t
val of_int32 : int32 -> t
val of_int64 : int64 -> t
val of_string : string -> t
val geq : t -> t -> bool
val gt : t -> t -> bool
val isminusone : t -> bool
val isnegative : t -> bool
val isnull : t -> bool
val isone : t -> bool
val iszero : t -> bool
val leq : t -> t -> bool
val logand : t -> t -> t
val lognot : t -> t
val logor : t -> t -> t
val logxor : t -> t -> t
val lt : t -> t -> bool
val minus_one : t
val mul : t -> t -> t
val neg : t -> t
val neq : t -> t -> bool
val null : t

null behaves like zero except for the function isnull

val one : t
val pp : F.formatter -> t -> unit
val rem : t -> t -> t
val shift_left : t -> t -> t
val shift_right : t -> t -> t
val sub : t -> t -> t
val max : t -> t -> t
val min : t -> t -> t
val to_int : t -> int option
val to_int_exn : t -> int
val to_big_int : t -> Z.t
val to_float : t -> float
val to_signed : t -> t option
val to_string : t -> string

convert to signed if the value is representable

val two : t
val zero : t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__JavaClassName/index.html b/website/static/odoc/next/infer/IR__JavaClassName/index.html index 3efab059b..59f6b95ed 100644 --- a/website/static/odoc/next/infer/IR__JavaClassName/index.html +++ b/website/static/odoc/next/infer/IR__JavaClassName/index.html @@ -1,2 +1,2 @@ -IR__JavaClassName (infer.IR__JavaClassName)

Module IR__JavaClassName

type t
val compare : t -> t -> int
val equal : t -> t -> bool
module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t
module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t
val make : package:string option -> classname:string -> t

make ~package:(Some "java.lang") "Object" creates a value representing java.lang.Object

val from_string : string -> t

from_string "java.lang.Object" is same as make ~package:(Some "java.lang") "Object"

val to_string : t -> string

to_string (from_string "X.Y.Z") = "X.Y.Z"

val pp : Stdlib.Format.formatter -> t -> unit

pp includes package if any

val pp_with_verbosity : verbose:bool -> Stdlib.Format.formatter -> t -> unit

if verbose then print package if present, otherwise only print class

val package : t -> string option
val classname : t -> string
val is_external_via_config : t -> bool

Considered external based on config flags.

val get_outer_class_name : t -> t option

If this is an inner class, return the closest outer, e.g. A$B for A$B$C. None if the class is outermost

val is_anonymous_inner_class_name : t -> bool

True if it is either "classic" anonymous Java class: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html, or a synthetic Java class corresponding to a lambda expression.

val get_user_defined_class_if_anonymous_inner : t -> t option

If the current class is anonymous (is_anonymous_inner_class_name is true), return the corresponding user defined (not anonymous) class this anonymous class belongs to.

In general case, BOTH anonymous classes and user-defined classes can be nested: SomeClass$NestedClass$1$17$5. In this example, we should return SomeClass$NestedClass.

If this is not an anonymous class, returns None.

\ No newline at end of file +IR__JavaClassName (infer.IR__JavaClassName)

Module IR__JavaClassName

type t
val compare : t -> t -> int
val equal : t -> t -> bool
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
module Map : IStdlib.IStd.Caml.Map.S with type Map.key = t
module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t
val make : package:string option -> classname:string -> t

make ~package:(Some "java.lang") "Object" creates a value representing java.lang.Object

val from_string : string -> t

from_string "java.lang.Object" is same as make ~package:(Some "java.lang") "Object"

val to_string : t -> string

to_string (from_string "X.Y.Z") = "X.Y.Z"

val pp : Stdlib.Format.formatter -> t -> unit

pp includes package if any

val pp_with_verbosity : verbose:bool -> Stdlib.Format.formatter -> t -> unit

if verbose then print package if present, otherwise only print class

val package : t -> string option
val classname : t -> string
val is_external_via_config : t -> bool

Considered external based on config flags.

val get_outer_class_name : t -> t option

If this is an inner class, return the closest outer, e.g. A$B for A$B$C. None if the class is outermost

val is_anonymous_inner_class_name : t -> bool

True if it is either "classic" anonymous Java class: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html, or a synthetic Java class corresponding to a lambda expression.

val get_user_defined_class_if_anonymous_inner : t -> t option

If the current class is anonymous (is_anonymous_inner_class_name is true), return the corresponding user defined (not anonymous) class this anonymous class belongs to.

In general case, BOTH anonymous classes and user-defined classes can be nested: SomeClass$NestedClass$1$17$5. In this example, we should return SomeClass$NestedClass.

If this is not an anonymous class, returns None.

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Mangled/index.html b/website/static/odoc/next/infer/IR__Mangled/index.html index fd0b1fee4..489d0505a 100644 --- a/website/static/odoc/next/infer/IR__Mangled/index.html +++ b/website/static/odoc/next/infer/IR__Mangled/index.html @@ -1,2 +1,2 @@ -IR__Mangled (infer.IR__Mangled)

Module IR__Mangled

type t

Type of mangled names

val compare : t -> t -> int
val equal : t -> t -> bool

Equality for mangled names

val from_string : string -> t

Convert a string to a mangled name

val mangled : string -> string -> t

Create a mangled name from a plain and mangled string

val to_string : t -> string

Convert a mangled name to a string

val to_string_full : t -> string

Convert a full mangled name to a string

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a mangled name

val this : t
val is_this : t -> bool
val self : t
val is_self : t -> bool
val rename : f:(string -> string) -> t -> t

Maps over both the plain and the mangled components.

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Set of Mangled.

module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t

Map with Mangled as key

\ No newline at end of file +IR__Mangled (infer.IR__Mangled)

Module IR__Mangled

type t

Type of mangled names

val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val equal : t -> t -> bool

Equality for mangled names

val from_string : string -> t

Convert a string to a mangled name

val mangled : string -> string -> t

Create a mangled name from a plain and mangled string

val to_string : t -> string

Convert a mangled name to a string

val to_string_full : t -> string

Convert a full mangled name to a string

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a mangled name

val this : t
val is_this : t -> bool
val self : t
val is_self : t -> bool
val rename : f:(string -> string) -> t -> t

Maps over both the plain and the mangled components.

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Set of Mangled.

module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t

Map with Mangled as key

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Procname/index.html b/website/static/odoc/next/infer/IR__Procname/index.html index c17f66885..66efb43cb 100644 --- a/website/static/odoc/next/infer/IR__Procname/index.html +++ b/website/static/odoc/next/infer/IR__Procname/index.html @@ -1,2 +1,2 @@ -IR__Procname (infer.IR__Procname)

Module IR__Procname

module F = Stdlib.Format
module Java : sig ... end

Type of java procedure names.

module Parameter : sig ... end
module ObjC_Cpp : sig ... end
module C : sig ... end
module Block : sig ... end
type t =
| Java of Java.t
| C of C.t
| Linters_dummy_method
| Block of Block.t
| ObjC_Cpp of ObjC_Cpp.t
| WithBlockParameters of t * Block.t list

Type of procedure names. WithBlockParameters is used for creating an instantiation of a method that contains block parameters and it's called with concrete blocks. For example: foo(Block block) {block();} bar() {foo(my_block)} is executed as foo_my_block() {my_block(); } where foo_my_block is created with WithBlockParameters (foo, my_block)

val compare : t -> t -> int
val block_of_procname : t -> Block.t
val equal : t -> t -> bool
val get_class_type_name : t -> IR.Typ.Name.t option
val get_class_name : t -> string option
val get_parameters : t -> Parameter.t list
val replace_parameters : Parameter.t list -> t -> t
val parameter_of_name : t -> IR.Typ.Name.t -> Parameter.t
val is_java_access_method : t -> bool
val is_java_class_initializer : t -> bool
val is_java_anonymous_inner_class_method : t -> bool
val is_java_autogen_method : t -> bool
val is_objc_method : t -> bool
module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t

Hash tables with proc names as keys.

module LRUHash : IStdlib.LRUHashtbl.S with type key = t
module HashQueue : IStdlib.IStd.Hash_queue.S with type HashQueue.key = t
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t

Maps from proc names.

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Sets of proc names.

module SQLite : sig ... end
module SQLiteList : IBase.SqliteUtils.Data with type t = t list
module UnitCache : sig ... end

One-sized cache for one procedure at a time. Returns getter and setter.

val make_java : class_name:IR.Typ.Name.t -> return_type:IR.Typ.t option -> method_name:string -> parameters:IR.Typ.t list -> kind:Java.kind -> unit -> t

Create a Java procedure name.

val make_objc_dealloc : IR.Typ.Name.t -> t

Create a Objective-C dealloc name. This is a destructor for an Objective-C class. This procname is given by the class name, since it is always an instance method with the name "dealloc"

val empty_block : t

Empty block name.

val get_language : t -> IBase.Language.t

Return the language of the procedure.

val get_method : t -> string

Return the method/function of a procname.

val is_objc_block : t -> bool

Return whether the procname is a block procname.

val is_objc_dealloc : t -> bool

Return whether the dealloc method of an Objective-C class.

val is_c_method : t -> bool

Return true this is an Objective-C/C++ method name.

val is_constructor : t -> bool

Check if this is a constructor.

val is_java : t -> bool

Check if this is a Java procedure name.

val as_java_exn : explanation:string -> t -> Java.t

Converts to a Java.t. Throws if is_java is false

val with_block_parameters : t -> Block.t list -> t

Create a procedure name instantiated with block parameters from a base procedure name and a list of block procedures.

val objc_cpp_replace_method_name : t -> string -> t
val is_infer_undefined : t -> bool

Check if this is a special Infer undefined procedure.

val get_global_name_of_initializer : t -> string option

Return the name of the global for which this procedure is the initializer if this is an initializer, None otherwise.

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a proc name for the user to see.

val to_string : t -> string

Convert a proc name into a string for the user to see.

val describe : Stdlib.Format.formatter -> t -> unit

to use in user messages

val replace_class : t -> IR.Typ.Name.t -> t

Replace the class name component of a procedure name. In case of Java, replace package and class name.

val is_method_in_objc_protocol : t -> bool
val pp_simplified_string : ?⁠withclass:bool -> F.formatter -> t -> unit

Pretty print a proc name as an easy string for the user to see in an IDE.

val to_simplified_string : ?⁠withclass:bool -> t -> string

Convert a proc name into an easy string for the user to see in an IDE.

val from_string_c_fun : string -> t

Convert a string to a c function name.

val hashable_name : t -> string

Convert the procedure name in a format suitable for computing the bug hash.

val pp_unique_id : F.formatter -> t -> unit

Print a proc name as a unique identifier.

val to_unique_id : t -> string

Convert a proc name into a unique identifier.

val to_filename : t -> string

Convert a proc name to a filename.

val get_qualifiers : t -> IR.QualifiedCppName.t

get qualifiers of C/objc/C++ method/function

\ No newline at end of file +IR__Procname (infer.IR__Procname)

Module IR__Procname

module F = Stdlib.Format
module Java : sig ... end

Type of java procedure names.

module Parameter : sig ... end
module ObjC_Cpp : sig ... end
module C : sig ... end
module Block : sig ... end
type t =
| Java of Java.t
| C of C.t
| Linters_dummy_method
| Block of Block.t
| ObjC_Cpp of ObjC_Cpp.t
| WithBlockParameters of t * Block.t list

Type of procedure names. WithBlockParameters is used for creating an instantiation of a method that contains block parameters and it's called with concrete blocks. For example: foo(Block block) {block();} bar() {foo(my_block)} is executed as foo_my_block() {my_block(); } where foo_my_block is created with WithBlockParameters (foo, my_block)

val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val block_of_procname : t -> Block.t
val equal : t -> t -> bool
val get_class_type_name : t -> IR.Typ.Name.t option
val get_class_name : t -> string option
val get_parameters : t -> Parameter.t list
val replace_parameters : Parameter.t list -> t -> t
val parameter_of_name : t -> IR.Typ.Name.t -> Parameter.t
val is_java_access_method : t -> bool
val is_java_class_initializer : t -> bool
val is_java_anonymous_inner_class_method : t -> bool
val is_java_autogen_method : t -> bool
val is_objc_method : t -> bool
module Hash : IStdlib.IStd.Caml.Hashtbl.S with type Hash.key = t

Hash tables with proc names as keys.

module LRUHash : IStdlib.LRUHashtbl.S with type key = t
module HashQueue : IStdlib.IStd.Hash_queue.S with type HashQueue.key = t
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t

Maps from proc names.

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Sets of proc names.

module SQLite : sig ... end
module SQLiteList : IBase.SqliteUtils.Data with type t = t list
module UnitCache : sig ... end

One-sized cache for one procedure at a time. Returns getter and setter.

val make_java : class_name:IR.Typ.Name.t -> return_type:IR.Typ.t option -> method_name:string -> parameters:IR.Typ.t list -> kind:Java.kind -> unit -> t

Create a Java procedure name.

val make_objc_dealloc : IR.Typ.Name.t -> t

Create a Objective-C dealloc name. This is a destructor for an Objective-C class. This procname is given by the class name, since it is always an instance method with the name "dealloc"

val make_objc_copyWithZone : is_mutable:bool -> IR.Typ.Name.t -> t

Create an Objective-C method for copyWithZone: or mutableCopyWithZone: according to is_mutable.

val empty_block : t

Empty block name.

val get_language : t -> IBase.Language.t

Return the language of the procedure.

val get_method : t -> string

Return the method/function of a procname.

val is_objc_block : t -> bool

Return whether the procname is a block procname.

val is_objc_dealloc : t -> bool

Return whether the dealloc method of an Objective-C class.

val is_c_method : t -> bool

Return true this is an Objective-C/C++ method name.

val is_constructor : t -> bool

Check if this is a constructor.

val is_java : t -> bool

Check if this is a Java procedure name.

val as_java_exn : explanation:string -> t -> Java.t

Converts to a Java.t. Throws if is_java is false

val with_block_parameters : t -> Block.t list -> t

Create a procedure name instantiated with block parameters from a base procedure name and a list of block procedures.

val objc_cpp_replace_method_name : t -> string -> t
val is_infer_undefined : t -> bool

Check if this is a special Infer undefined procedure.

val get_global_name_of_initializer : t -> string option

Return the name of the global for which this procedure is the initializer if this is an initializer, None otherwise.

val pp : Stdlib.Format.formatter -> t -> unit

Pretty print a proc name for the user to see.

val to_string : t -> string

Convert a proc name into a string for the user to see.

val describe : Stdlib.Format.formatter -> t -> unit

to use in user messages

val replace_class : t -> IR.Typ.Name.t -> t

Replace the class name component of a procedure name. In case of Java, replace package and class name.

val is_method_in_objc_protocol : t -> bool
val pp_simplified_string : ?⁠withclass:bool -> F.formatter -> t -> unit

Pretty print a proc name as an easy string for the user to see in an IDE.

val to_simplified_string : ?⁠withclass:bool -> t -> string

Convert a proc name into an easy string for the user to see in an IDE.

val from_string_c_fun : string -> t

Convert a string to a c function name.

val hashable_name : t -> string

Convert the procedure name in a format suitable for computing the bug hash.

val pp_unique_id : F.formatter -> t -> unit

Print a proc name as a unique identifier.

val to_unique_id : t -> string

Convert a proc name into a unique identifier.

val to_filename : t -> string

Convert a proc name to a filename.

val get_qualifiers : t -> IR.QualifiedCppName.t

get qualifiers of C/objc/C++ method/function

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Pvar/index.html b/website/static/odoc/next/infer/IR__Pvar/index.html index f7b1ab2c1..fc49fe4c2 100644 --- a/website/static/odoc/next/infer/IR__Pvar/index.html +++ b/website/static/odoc/next/infer/IR__Pvar/index.html @@ -1,2 +1,2 @@ -IR__Pvar (infer.IR__Pvar)

Module IR__Pvar

Program variables.

module F = Stdlib.Format
type translation_unit = IBase.SourceFile.t option
val compare_translation_unit : translation_unit -> translation_unit -> int
type t

Type for program variables. There are 4 kinds of variables:

  1. local variables, used for local variables and formal parameters
  2. callee program variables, used to handle recursion (x | callee is distinguished from x)
  3. global variables
  4. seed variables, used to store the initial value of formal parameters
val compare : t -> t -> int
val compare_modulo_this : t -> t -> int

Comparison considering all pvars named 'this'/'self' to be equal

val equal : t -> t -> bool

Equality for pvar's

val get_declaring_function : t -> IR.Procname.t option

if not a global, return function declaring var

val d : t -> unit

Dump a program variable.

val get_name : t -> IR.Mangled.t

Get the name component of a program variable.

val get_ret_pvar : IR.Procname.t -> t

get_ret_pvar proc_name retuns the return pvar associated with the procedure name

val get_ret_param_pvar : IR.Procname.t -> t

get_ret_param_pvar proc_name retuns the return_param pvar associated with the procedure name

val get_simplified_name : t -> string

Get a simplified version of the name component of a program variable.

val is_abduced : t -> bool

Check if the pvar is an abduced return var or param passed by ref

val is_callee : t -> bool

Check if the pvar is a callee var

val is_global : t -> bool

Check if the pvar is a global var or a static local var

val is_static_local : t -> bool

Check if the pvar is a static variable declared inside a function

val is_constant_array : t -> bool

Check if the pvar has a constant array type

val is_local : t -> bool

Check if the pvar is a (non-static) local var

val is_seed : t -> bool

Check if the pvar is a seed var

val is_return : t -> bool

Check if the pvar is a return var

val is_this : t -> bool

Check if a pvar is the special "this" var

val is_self : t -> bool

Check if a pvar is the special "self" var

val is_frontend_tmp : t -> bool

return true if pvar is a temporary variable generated by the frontend

val is_clang_tmp : t -> bool

return true if pvar is a temporary variable generated by clang

val is_ssa_frontend_tmp : t -> bool

return true if pvar is a temporary variable generated by the frontend and is only assigned once on a non-looping control-flow path

val is_cpp_temporary : t -> bool

return true if this pvar represents a C++ temporary object (see http://en.cppreference.com/w/cpp/language/lifetime)

val is_objc_static_local_of_proc_name : string -> t -> bool

Check if a pvar is a local static in objc

val is_block_pvar : t -> bool

Check if a pvar is a local pointing to a block in objc

val mk : IR.Mangled.t -> IR.Procname.t -> t

mk name proc_name creates a program var with the given function name

val mk_abduced_ref_param : IR.Procname.t -> int -> IBase.Location.t -> t

create an abduced variable for a parameter passed by reference

val mk_abduced_ret : IR.Procname.t -> IBase.Location.t -> t

create an abduced return variable for a call to proc_name at loc

val mk_callee : IR.Mangled.t -> IR.Procname.t -> t

mk_callee name proc_name creates a program var for a callee function with the given function name

val mk_global : ?⁠is_constexpr:bool -> ?⁠is_ice:bool -> ?⁠is_pod:bool -> ?⁠is_static_local:bool -> ?⁠is_static_global:bool -> ?⁠is_constant_array:bool -> ?⁠translation_unit:IBase.SourceFile.t -> IR.Mangled.t -> t

create a global variable with the given name

val mk_tmp : string -> IR.Procname.t -> t

create a fresh temporary variable local to procedure pname. for use in the frontends only!

val pp : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a program variable.

val pp_value : F.formatter -> t -> unit

Pretty print a pvar which denotes a value, not an address

val pp_value_non_verbose : F.formatter -> t -> unit

Non-verbose version of pp_value

val pp_translation_unit : F.formatter -> translation_unit -> unit
val to_callee : IR.Procname.t -> t -> t

Turn an ordinary program variable into a callee program variable

val to_seed : t -> t

Turn a pvar into a seed pvar (which stores the initial value of a stack var)

val to_string : t -> string

Convert a pvar to string.

val get_translation_unit : t -> translation_unit

Get the translation unit corresponding to a global. Raises Invalid_arg if not a global.

val is_compile_constant : t -> bool

Is the variable's value a compile-time constant? Always (potentially incorrectly) returns false for non-globals.

val is_ice : t -> bool

Is the variable's type an integral constant expression? Always (potentially incorrectly) returns false for non-globals.

val is_pod : t -> bool

Is the variable's type a "Plain Old Data" type (C++)? Always (potentially incorrectly) returns true for non-globals.

val get_initializer_pname : t -> IR.Procname.t option

Get the procname of the initializer function for the given global variable

val build_formal_from_pvar : t -> IR.Mangled.t

build_formal_from_pvar var Return a name that is composed of the name of var (and the name of the procname in case of locals)

val materialized_cpp_temporary : string
val swap_proc_in_local_pvar : t -> IR.Procname.t -> t
val rename : f:(string -> string) -> t -> t
module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Sets of pvars.

type capture_mode =
| ByReference
| ByValue
val compare_capture_mode : capture_mode -> capture_mode -> int
val equal_capture_mode : capture_mode -> capture_mode -> bool
val string_of_capture_mode : capture_mode -> string
\ No newline at end of file +IR__Pvar (infer.IR__Pvar)

Module IR__Pvar

Program variables.

module F = Stdlib.Format
type translation_unit = IBase.SourceFile.t option
val compare_translation_unit : translation_unit -> translation_unit -> int
type t

Type for program variables. There are 4 kinds of variables:

  1. local variables, used for local variables and formal parameters
  2. callee program variables, used to handle recursion (x | callee is distinguished from x)
  3. global variables
  4. seed variables, used to store the initial value of formal parameters
val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val compare_modulo_this : t -> t -> int

Comparison considering all pvars named 'this'/'self' to be equal

val equal : t -> t -> bool

Equality for pvar's

val get_declaring_function : t -> IR.Procname.t option

if not a global, return function declaring var

val d : t -> unit

Dump a program variable.

val get_name : t -> IR.Mangled.t

Get the name component of a program variable.

val get_ret_pvar : IR.Procname.t -> t

get_ret_pvar proc_name retuns the return pvar associated with the procedure name

val get_ret_param_pvar : IR.Procname.t -> t

get_ret_param_pvar proc_name retuns the return_param pvar associated with the procedure name

val get_simplified_name : t -> string

Get a simplified version of the name component of a program variable.

val is_abduced : t -> bool

Check if the pvar is an abduced return var or param passed by ref

val is_callee : t -> bool

Check if the pvar is a callee var

val is_global : t -> bool

Check if the pvar is a global var or a static local var

val is_static_local : t -> bool

Check if the pvar is a static variable declared inside a function

val is_constant_array : t -> bool

Check if the pvar has a constant array type

val is_local : t -> bool

Check if the pvar is a (non-static) local var

val is_seed : t -> bool

Check if the pvar is a seed var

val is_return : t -> bool

Check if the pvar is a return var

val is_this : t -> bool

Check if a pvar is the special "this" var

val is_self : t -> bool

Check if a pvar is the special "self" var

val is_frontend_tmp : t -> bool

return true if pvar is a temporary variable generated by the frontend

val is_clang_tmp : t -> bool

return true if pvar is a temporary variable generated by clang

val is_ssa_frontend_tmp : t -> bool

return true if pvar is a temporary variable generated by the frontend and is only assigned once on a non-looping control-flow path

val is_cpp_temporary : t -> bool

return true if this pvar represents a C++ temporary object (see http://en.cppreference.com/w/cpp/language/lifetime)

val is_objc_static_local_of_proc_name : string -> t -> bool

Check if a pvar is a local static in objc

val is_block_pvar : t -> bool

Check if a pvar is a local pointing to a block in objc

val mk : IR.Mangled.t -> IR.Procname.t -> t

mk name proc_name creates a program var with the given function name

val mk_abduced_ref_param : IR.Procname.t -> int -> IBase.Location.t -> t

create an abduced variable for a parameter passed by reference

val mk_abduced_ret : IR.Procname.t -> IBase.Location.t -> t

create an abduced return variable for a call to proc_name at loc

val mk_callee : IR.Mangled.t -> IR.Procname.t -> t

mk_callee name proc_name creates a program var for a callee function with the given function name

val mk_global : ?⁠is_constexpr:bool -> ?⁠is_ice:bool -> ?⁠is_pod:bool -> ?⁠is_static_local:bool -> ?⁠is_static_global:bool -> ?⁠is_constant_array:bool -> ?⁠translation_unit:IBase.SourceFile.t -> IR.Mangled.t -> t

create a global variable with the given name

val mk_tmp : string -> IR.Procname.t -> t

create a fresh temporary variable local to procedure pname. for use in the frontends only!

val pp : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a program variable.

val pp_value : F.formatter -> t -> unit

Pretty print a pvar which denotes a value, not an address

val pp_value_non_verbose : F.formatter -> t -> unit

Non-verbose version of pp_value

val pp_translation_unit : F.formatter -> translation_unit -> unit
val to_callee : IR.Procname.t -> t -> t

Turn an ordinary program variable into a callee program variable

val to_seed : t -> t

Turn a pvar into a seed pvar (which stores the initial value of a stack var)

val to_string : t -> string

Convert a pvar to string.

val get_translation_unit : t -> translation_unit

Get the translation unit corresponding to a global. Raises Invalid_arg if not a global.

val is_compile_constant : t -> bool

Is the variable's value a compile-time constant? Always (potentially incorrectly) returns false for non-globals.

val is_ice : t -> bool

Is the variable's type an integral constant expression? Always (potentially incorrectly) returns false for non-globals.

val is_pod : t -> bool

Is the variable's type a "Plain Old Data" type (C++)? Always (potentially incorrectly) returns true for non-globals.

val get_initializer_pname : t -> IR.Procname.t option

Get the procname of the initializer function for the given global variable

val build_formal_from_pvar : t -> IR.Mangled.t

build_formal_from_pvar var Return a name that is composed of the name of var (and the name of the procname in case of locals)

val materialized_cpp_temporary : string
val swap_proc_in_local_pvar : t -> IR.Procname.t -> t
val rename : f:(string -> string) -> t -> t
module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t

Sets of pvars.

type capture_mode =
| ByReference
| ByValue
val compare_capture_mode : capture_mode -> capture_mode -> int
val equal_capture_mode : capture_mode -> capture_mode -> bool
val string_of_capture_mode : capture_mode -> string
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__QualifiedCppName/index.html b/website/static/odoc/next/infer/IR__QualifiedCppName/index.html index 0a2426df2..290b01bff 100644 --- a/website/static/odoc/next/infer/IR__QualifiedCppName/index.html +++ b/website/static/odoc/next/infer/IR__QualifiedCppName/index.html @@ -1,2 +1,2 @@ -IR__QualifiedCppName (infer.IR__QualifiedCppName)

Module IR__QualifiedCppName

exception ParseError of string
type t
val compare : t -> t -> int
val empty : t

empty qualified name

val of_qual_string : string -> t

attempts to parse the argument into a list::of::possibly::templated<T>::qualifiers

val to_qual_string : t -> string

returns qualified name as a string with "::" as a separator between qualifiers

val append_qualifier : t -> qual:string -> t

append qualifier to the end (innermost scope) of the qualified name

val extract_last : t -> (string * t) option

returns last (innermost scope) qualifier and qualified name without last qualifier

val strip_template_args : t -> t

returns qualified name without template arguments. For example:

  • input: std::shared_ptr<int>::shared_ptr<long>
  • output: std::shared_ptr::shared_ptr
val append_template_args_to_last : t -> args:string -> t

append template arguments to the last qualifier. Fails if qualified name is empty or it already has template args

val to_list : t -> string list

returns list of qualifiers

val to_rev_list : t -> string list

returns reversed list of qualifiers, ie innermost scope is the first element

val of_list : string list -> t

given list of qualifiers in normal order produce qualified name "std", "move"

val of_rev_list : string list -> t

given reversed list of qualifiers, produce qualified name (ie. "move", "std" for std::move )

val from_field_qualified_name : t -> t
val pp : Stdlib.Format.formatter -> t -> unit
module Match : sig ... end

Module to match qualified C++ procnames "fuzzily", that is up to namescapes and templating. In particular, this deals with the following issues:

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t
\ No newline at end of file +IR__QualifiedCppName (infer.IR__QualifiedCppName)

Module IR__QualifiedCppName

exception ParseError of string
type t
val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val empty : t

empty qualified name

val of_qual_string : string -> t

attempts to parse the argument into a list::of::possibly::templated<T>::qualifiers

val to_qual_string : t -> string

returns qualified name as a string with "::" as a separator between qualifiers

val append_qualifier : t -> qual:string -> t

append qualifier to the end (innermost scope) of the qualified name

val extract_last : t -> (string * t) option

returns last (innermost scope) qualifier and qualified name without last qualifier

val strip_template_args : t -> t

returns qualified name without template arguments. For example:

  • input: std::shared_ptr<int>::shared_ptr<long>
  • output: std::shared_ptr::shared_ptr
val append_template_args_to_last : t -> args:string -> t

append template arguments to the last qualifier. Fails if qualified name is empty or it already has template args

val append_protocols : t -> protocols:string -> t

append protocols to the qualified name

val to_list : t -> string list

returns list of qualifiers

val to_rev_list : t -> string list

returns reversed list of qualifiers, ie innermost scope is the first element

val of_list : string list -> t

given list of qualifiers in normal order produce qualified name "std", "move"

val of_rev_list : string list -> t

given reversed list of qualifiers, produce qualified name (ie. "move", "std" for std::move )

val from_field_qualified_name : t -> t
val pp : Stdlib.Format.formatter -> t -> unit
module Match : sig ... end

Module to match qualified C++ procnames "fuzzily", that is up to namescapes and templating. In particular, this deals with the following issues:

module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Struct/index.html b/website/static/odoc/next/infer/IR__Struct/index.html index 1d24c9abb..d524cea5d 100644 --- a/website/static/odoc/next/infer/IR__Struct/index.html +++ b/website/static/odoc/next/infer/IR__Struct/index.html @@ -1,2 +1,2 @@ -IR__Struct (infer.IR__Struct)

Module IR__Struct

module F = Stdlib.Format
type field = IR.Fieldname.t * IR.Typ.t * IR.Annot.Item.t
val compare_field : field -> field -> int
type fields = field list
type java_class_kind =
| Interface
| AbstractClass
| NormalClass
val equal_java_class_kind : java_class_kind -> java_class_kind -> bool
type java_class_info = {
kind : java_class_kind;

class kind in Java

loc : IBase.Location.t option;

None should correspond to rare cases when it was impossible to fetch the location in source file

}
type t = {
fields : fields;

non-static fields

statics : fields;

static fields

supers : IR.Typ.Name.t list;

superclasses

methods : IR.Procname.t list;

methods defined

exported_objc_methods : IR.Procname.t list;

methods in ObjC interface, subset of methods

annots : IR.Annot.Item.t;

annotations

java_class_info : java_class_info option;

present if and only if the class is Java

dummy : bool;

dummy struct for class including static method

}

Type for a structured value.

type lookup = IR.Typ.Name.t -> t option
val pp_field : IStdlib.Pp.env -> F.formatter -> field -> unit
val pp : IStdlib.Pp.env -> IR.Typ.Name.t -> F.formatter -> t -> unit

Pretty print a struct type.

val internal_mk_struct : ?⁠default:t -> ?⁠fields:fields -> ?⁠statics:fields -> ?⁠methods:IR.Procname.t list -> ?⁠exported_objc_methods:IR.Procname.t list -> ?⁠supers:IR.Typ.Name.t list -> ?⁠annots:IR.Annot.Item.t -> ?⁠java_class_info:java_class_info -> ?⁠dummy:bool -> unit -> t

Construct a struct_typ, normalizing field types

val get_extensible_array_element_typ : lookup:lookup -> IR.Typ.t -> IR.Typ.t option

the element typ of the final extensible array in the given typ, if any

type field_info = {
typ : IR.Typ.t;
annotations : IR.Annot.Item.t;
is_static : bool;
}
val get_field_info : lookup:lookup -> IR.Fieldname.t -> IR.Typ.t -> field_info option

Lookup for info associated with the field fn. None if typ has no field named fn

val fld_typ : lookup:lookup -> default:IR.Typ.t -> IR.Fieldname.t -> IR.Typ.t -> IR.Typ.t

If a struct type with field f, return the type of f. If not, return the default type if given, otherwise raise an exception

val get_field_type_and_annotation : lookup:lookup -> IR.Fieldname.t -> IR.Typ.t -> (IR.Typ.t * IR.Annot.Item.t) option

Return the type of the field fn and its annotation, None if typ has no field named fn

val merge : IR.Typ.Name.t -> newer:t -> current:t -> t

best effort directed merge of two structs for the same typename

val is_not_java_interface : t -> bool

check that a struct either defines a non-java type, or a non-java-interface type (abstract or normal class)

\ No newline at end of file +IR__Struct (infer.IR__Struct)

Module IR__Struct

module F = Stdlib.Format
type field = IR.Fieldname.t * IR.Typ.t * IR.Annot.Item.t
val compare_field : field -> field -> int
type fields = field list
type java_class_kind =
| Interface
| AbstractClass
| NormalClass
val equal_java_class_kind : java_class_kind -> java_class_kind -> bool
type java_class_info = {
kind : java_class_kind;

class kind in Java

loc : IBase.Location.t option;

None should correspond to rare cases when it was impossible to fetch the location in source file

}
type t = {
fields : fields;

non-static fields

statics : fields;

static fields

supers : IR.Typ.Name.t list;

superclasses

objc_protocols : IR.Typ.Name.t list;

ObjC protocols

methods : IR.Procname.t list;

methods defined

exported_objc_methods : IR.Procname.t list;

methods in ObjC interface, subset of methods

annots : IR.Annot.Item.t;

annotations

java_class_info : java_class_info option;

present if and only if the class is Java

dummy : bool;

dummy struct for class including static method

}

Type for a structured value.

type lookup = IR.Typ.Name.t -> t option
val pp_field : IStdlib.Pp.env -> F.formatter -> field -> unit
val pp : IStdlib.Pp.env -> IR.Typ.Name.t -> F.formatter -> t -> unit

Pretty print a struct type.

val internal_mk_struct : ?⁠default:t -> ?⁠fields:fields -> ?⁠statics:fields -> ?⁠methods:IR.Procname.t list -> ?⁠exported_objc_methods:IR.Procname.t list -> ?⁠supers:IR.Typ.Name.t list -> ?⁠objc_protocols:IR.Typ.Name.t list -> ?⁠annots:IR.Annot.Item.t -> ?⁠java_class_info:java_class_info -> ?⁠dummy:bool -> unit -> t

Construct a struct_typ, normalizing field types

val get_extensible_array_element_typ : lookup:lookup -> IR.Typ.t -> IR.Typ.t option

the element typ of the final extensible array in the given typ, if any

type field_info = {
typ : IR.Typ.t;
annotations : IR.Annot.Item.t;
is_static : bool;
}
val get_field_info : lookup:lookup -> IR.Fieldname.t -> IR.Typ.t -> field_info option

Lookup for info associated with the field fn. None if typ has no field named fn

val fld_typ : lookup:lookup -> default:IR.Typ.t -> IR.Fieldname.t -> IR.Typ.t -> IR.Typ.t

If a struct type with field f, return the type of f. If not, return the default type if given, otherwise raise an exception

val get_field_type_and_annotation : lookup:lookup -> IR.Fieldname.t -> IR.Typ.t -> (IR.Typ.t * IR.Annot.Item.t) option

Return the type of the field fn and its annotation, None if typ has no field named fn

val merge : IR.Typ.Name.t -> newer:t -> current:t -> t

best effort directed merge of two structs for the same typename

val is_not_java_interface : t -> bool

check that a struct either defines a non-java type, or a non-java-interface type (abstract or normal class)

module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Tenv/index.html b/website/static/odoc/next/infer/IR__Tenv/index.html index f6d3957a7..c37713730 100644 --- a/website/static/odoc/next/infer/IR__Tenv/index.html +++ b/website/static/odoc/next/infer/IR__Tenv/index.html @@ -1,2 +1,2 @@ -IR__Tenv (infer.IR__Tenv)

Module IR__Tenv

type t

Type for type environment.

val create : unit -> t

Create a new type environment.

val load : IBase.SourceFile.t -> t option

Load a type environment for a source file

val store_debug_file_for_source : IBase.SourceFile.t -> t -> unit
val read : IBase.DB.filename -> t option

read and return a type environment from the given file

val load_global : unit -> t option

load the global type environment (Java)

val store_global : t -> unit

save a global type environment (Java)

val lookup : t -> IR.Typ.Name.t -> IR.Struct.t option

Look up a name in the global type environment.

val mk_struct : t -> ?⁠default:IR.Struct.t -> ?⁠fields:IR.Struct.fields -> ?⁠statics:IR.Struct.fields -> ?⁠methods:IR.Procname.t list -> ?⁠exported_objc_methods:IR.Procname.t list -> ?⁠supers:IR.Typ.Name.t list -> ?⁠annots:IR.Annot.Item.t -> ?⁠java_class_info:IR.Struct.java_class_info -> ?⁠dummy:bool -> IR.Typ.Name.t -> IR.Struct.t

Construct a struct_typ, normalizing field types

val add_field : t -> IR.Typ.Name.t -> IR.Struct.field -> unit

Add a field to a given struct in the global type environment.

val pp : Stdlib.Format.formatter -> t -> unit

print a type environment

type per_file =
| Global
| FileLocal of t
val pp_per_file : Stdlib.Format.formatter -> per_file -> unit

print per file type environment

val merge : src:t -> dst:t -> unit

Merge src into dst possibly overwriting pre existing procs in dst.

val merge_per_file : src:per_file -> dst:per_file -> per_file

Best-effort merge of src into dst. If a procedure is both in dst and src, the one in dst will get overwritten.

val resolve_method : method_exists:(IR.Procname.t -> IR.Procname.t list -> bool) -> t -> IR.Typ.Name.t -> IR.Procname.t -> IR.Procname.t option

resolve_method ~method_exists tenv class_name procname tries to resolve procname to a method in class_name or its super-classes, that is non-virtual (non-Java-interface method). method_exists adapted_procname methods should check if adapted_procname (procname but with its class potentially changed to some other_class) is among the methods of other_class.

\ No newline at end of file +IR__Tenv (infer.IR__Tenv)

Module IR__Tenv

type t

Type for type environment.

val create : unit -> t

Create a new type environment.

val load : IBase.SourceFile.t -> t option

Load a type environment for a source file

val store_debug_file_for_source : IBase.SourceFile.t -> t -> unit
val read : IBase.DB.filename -> t option

read and return a type environment from the given file

val load_global : unit -> t option

load the global type environment (Java)

val store_global : t -> unit

save a global type environment (Java)

val lookup : t -> IR.Typ.Name.t -> IR.Struct.t option

Look up a name in the global type environment.

val mk_struct : t -> ?⁠default:IR.Struct.t -> ?⁠fields:IR.Struct.fields -> ?⁠statics:IR.Struct.fields -> ?⁠methods:IR.Procname.t list -> ?⁠exported_objc_methods:IR.Procname.t list -> ?⁠supers:IR.Typ.Name.t list -> ?⁠objc_protocols:IR.Typ.Name.t list -> ?⁠annots:IR.Annot.Item.t -> ?⁠java_class_info:IR.Struct.java_class_info -> ?⁠dummy:bool -> IR.Typ.Name.t -> IR.Struct.t

Construct a struct_typ, normalizing field types

val add_field : t -> IR.Typ.Name.t -> IR.Struct.field -> unit

Add a field to a given struct in the global type environment.

val pp : Stdlib.Format.formatter -> t -> unit

print a type environment

type per_file =
| Global
| FileLocal of t
val pp_per_file : Stdlib.Format.formatter -> per_file -> unit

print per file type environment

val merge : src:t -> dst:t -> unit

Merge src into dst possibly overwriting pre existing procs in dst.

val merge_per_file : src:per_file -> dst:per_file -> per_file

Best-effort merge of src into dst. If a procedure is both in dst and src, the one in dst will get overwritten.

val resolve_method : method_exists:(IR.Procname.t -> IR.Procname.t list -> bool) -> t -> IR.Typ.Name.t -> IR.Procname.t -> IR.Procname.t option

resolve_method ~method_exists tenv class_name procname tries to resolve procname to a method in class_name or its super-classes, that is non-virtual (non-Java-interface method). method_exists adapted_procname methods should check if adapted_procname (procname but with its class potentially changed to some other_class) is among the methods of other_class.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Typ/Name/Java/index.html b/website/static/odoc/next/infer/IR__Typ/Name/Java/index.html index a6ec7cdde..0f62de0b8 100644 --- a/website/static/odoc/next/infer/IR__Typ/Name/Java/index.html +++ b/website/static/odoc/next/infer/IR__Typ/Name/Java/index.html @@ -1,2 +1,2 @@ -Java (infer.IR__Typ.Name.Java)

Module Name.Java

val from_string : string -> t

Create a typename from a Java classname in the form "package.class"

val is_class : t -> bool

is_class name holds if name names a Java class

val get_java_class_name_exn : t -> IR.JavaClassName.t

Ensure name is a java class name and return underlying JavaClassName

val is_external : t -> bool

return true if the typename is in the .inferconfig list of external classes

val is_anonymous_inner_class_name_exn : t -> bool

Throws if it is not a Java class

val is_anonymous_inner_class_name_opt : t -> bool option

return None if it is not a Java class

val java_lang_object : t
val java_io_serializable : t
val java_lang_cloneable : t
val java_lang_class : t
val java_lang_string : t
\ No newline at end of file +Java (infer.IR__Typ.Name.Java)

Module Name.Java

val from_string : string -> t

Create a typename from a Java classname in the form "package.class"

val is_class : t -> bool

is_class name holds if name names a Java class

val get_java_class_name_exn : t -> IR.JavaClassName.t

Ensure name is a java class name and return underlying JavaClassName

val is_external : t -> bool

return true if the typename is in the .inferconfig list of external classes

val is_anonymous_inner_class_name_exn : t -> bool

Throws if it is not a Java class

val is_anonymous_inner_class_name_opt : t -> bool option

return None if it is not a Java class

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Typ/Name/index.html b/website/static/odoc/next/infer/IR__Typ/Name/index.html index 8793ea7d9..d23fbcfd8 100644 --- a/website/static/odoc/next/infer/IR__Typ/Name/index.html +++ b/website/static/odoc/next/infer/IR__Typ/Name/index.html @@ -1,2 +1,2 @@ -Name (infer.IR__Typ.Name)

Module IR__Typ.Name

type t = name

Named types.

val compare : t -> t -> int
val equal : t -> t -> bool

Equality for typenames

val hash : t -> int
val to_string : t -> string

convert the typename to a string

val pp : Stdlib.Format.formatter -> t -> unit
val is_class : t -> bool

is_class name holds if name names CPP/Objc/Java class

val is_union : t -> bool

is_union name holds if name names C/CPP union

val is_same_type : t -> t -> bool

is_class name1 name2 holds if name1 and name2 name same kind of type

val name : t -> string

name of the typename without qualifier

val qual_name : t -> IR.QualifiedCppName.t

qualified name of the type, may return nonsense for Java classes

val unqualified_name : t -> IR.QualifiedCppName.t
val get_template_spec_info : t -> template_spec_info option
val is_objc_protocol : t -> bool
module C : sig ... end
module Java : sig ... end
module Cpp : sig ... end
module Objc : sig ... end
module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
\ No newline at end of file +Name (infer.IR__Typ.Name)

Module IR__Typ.Name

type t = name

Named types.

val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val equal : t -> t -> bool

Equality for typenames

val hash : t -> int
val to_string : t -> string

convert the typename to a string

val pp : Stdlib.Format.formatter -> t -> unit
val is_class : t -> bool

is_class name holds if name names CPP/Objc/Java class

val is_union : t -> bool

is_union name holds if name names C/CPP union

val is_same_type : t -> t -> bool

is_class name1 name2 holds if name1 and name2 name same kind of type

val name : t -> string

name of the typename without qualifier

val qual_name : t -> IR.QualifiedCppName.t

qualified name of the type, may return nonsense for Java classes

val unqualified_name : t -> IR.QualifiedCppName.t
val get_template_spec_info : t -> template_spec_info option
val is_objc_protocol : t -> bool
module C : sig ... end
module Java : sig ... end
module Cpp : sig ... end
module Objc : sig ... end
module Set : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = t
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Typ/index.html b/website/static/odoc/next/infer/IR__Typ/index.html index c90cf9a99..d952f80b9 100644 --- a/website/static/odoc/next/infer/IR__Typ/index.html +++ b/website/static/odoc/next/infer/IR__Typ/index.html @@ -1,2 +1,2 @@ -IR__Typ (infer.IR__Typ)

Module IR__Typ

The Smallfoot Intermediate Language: Types

module F = Stdlib.Format
module IntegerWidths : sig ... end
type ikind =
| IChar

char

| ISChar

signed char

| IUChar

unsigned char

| IBool

bool

| IInt

int

| IUInt

unsigned int

| IShort

short

| IUShort

unsigned short

| ILong

long

| IULong

unsigned long

| ILongLong

long long (or _int64 on Microsoft Visual C)

| IULongLong

unsigned long long (or unsigned _int64 on Microsoft Visual C)

| I128

__int128_t

| IU128

__uint128_t

Kinds of integers

val compare_ikind : ikind -> ikind -> int
val equal_ikind : ikind -> ikind -> bool
val width_of_ikind : IntegerWidths.t -> ikind -> int
val range_of_ikind : IntegerWidths.t -> ikind -> Z.t * Z.t
val ikind_is_char : ikind -> bool

Check whether the integer kind is a char

val ikind_is_unsigned : ikind -> bool

Check whether the integer kind is unsigned

type fkind =
| FFloat

float

| FDouble

double

| FLongDouble

long double

Kinds of floating-point numbers

val compare_fkind : fkind -> fkind -> int
type ptr_kind =
| Pk_pointer

C/C++, Java, Objc standard/__strong pointer

| Pk_reference

C++ reference

| Pk_objc_weak

Obj-C __weak pointer

| Pk_objc_unsafe_unretained

Obj-C __unsafe_unretained pointer

| Pk_objc_autoreleasing

Obj-C __autoreleasing pointer

kind of pointer

val compare_ptr_kind : ptr_kind -> ptr_kind -> int
val equal_ptr_kind : ptr_kind -> ptr_kind -> bool
type type_quals
val compare_type_quals : type_quals -> type_quals -> int
val mk_type_quals : ?⁠default:type_quals -> ?⁠is_const:bool -> ?⁠is_restrict:bool -> ?⁠is_volatile:bool -> unit -> type_quals
val is_const : type_quals -> bool
val is_restrict : type_quals -> bool
val is_volatile : type_quals -> bool
type t = {
desc : desc;
quals : type_quals;
}

types for sil (structured) expressions

and desc =
| Tint of ikind

integer type

| Tfloat of fkind

float type

| Tvoid

void type

| Tfun

function type

| Tptr of t * ptr_kind

pointer type

| Tstruct of name

structured value type name

| TVar of string

type variable (ie. C++ template variables)

| Tarray of {
elt : t;
length : IR.IntLit.t option;
stride : IR.IntLit.t option;
}

array type with statically fixed length and stride

and name =
| CStruct of IR.QualifiedCppName.t
| CUnion of IR.QualifiedCppName.t
| CppClass of IR.QualifiedCppName.t * template_spec_info
| JavaClass of IR.JavaClassName.t
| ObjcClass of IR.QualifiedCppName.t
| ObjcProtocol of IR.QualifiedCppName.t
and template_arg =
| TType of t
| TInt of IStdlib.IStd.Int64.t
| TNull
| TNullPtr
| TOpaque
and template_spec_info =
| NoTemplate
| Template of {
mangled : string option;

WARNING: because of type substitutions performed by sub_type and sub_tname, mangling is not guaranteed to be unique to a single type. All the information in the template arguments is also needed for uniqueness.

args : template_arg list;
}
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val pp_template_spec_info : IStdlib.Pp.env -> F.formatter -> template_spec_info -> unit
val mk : ?⁠default:t -> ?⁠quals:type_quals -> desc -> t

Create Typ.t from given desc. if default is passed then use its value to set other fields such as quals

val mk_array : ?⁠default:t -> ?⁠quals:type_quals -> ?⁠length:IR.IntLit.t -> ?⁠stride:IR.IntLit.t -> t -> t

Create an array type from a given element type. If length or stride value is given, use them as static length and size.

val mk_struct : name -> t
val mk_ptr : ?⁠ptr_kind:ptr_kind -> t -> t

make a pointer to t, default kind is Pk_pointer

val void : t

void type

val java_char : t
val java_byte : t
val java_short : t
val boolean : t
val char : t
val int : t

signed int type

val uint : t

unsigned int type

val long : t
val float : t
val double : t
val void_star : t

void* type

val pointer_to_java_lang_object : t
val pointer_to_java_lang_string : t
val get_ikind_opt : t -> ikind option

Get ikind if the type is integer.

val size_t : ikind

ikind of size_t

val is_weak_pointer : t -> bool
val is_strong_pointer : t -> bool
module Name : sig ... end
val equal : t -> t -> bool

Equality for types.

val equal_desc : desc -> desc -> bool
val equal_name : name -> name -> bool
val equal_quals : type_quals -> type_quals -> bool
val equal_ignore_quals : t -> t -> bool

Equality for types, but ignoring quals in it.

val pp_full : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a type with all the details.

val pp : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a type.

val pp_java : verbose:bool -> F.formatter -> t -> unit

Pretty print a Java type. Raises if type isn't produced by the Java frontend

val to_string : t -> string
val d_full : t -> unit

Dump a type with all the details.

val d_list : t list -> unit

Dump a list of types.

val name : t -> Name.t option

The name of a type

val strip_ptr : t -> t

turn a *T into a T. fails if t is not a pointer type

val is_ptr_to_ignore_quals : t -> ptr:t -> bool

check if ptr is a pointer type to t, ignoring quals

val array_elem : t option -> t -> t

If an array type, return the type of the element. If not, return the default type if given, otherwise raise an exception

val is_objc_class : t -> bool
val is_cpp_class : t -> bool
val is_pointer_to_cpp_class : t -> bool
val is_pointer_to_objc_non_tagged_class : t -> bool
val is_pointer_to_void : t -> bool
val is_void : t -> bool
val is_pointer_to_int : t -> bool
val is_pointer_to_function : t -> bool
val is_pointer : t -> bool
val is_reference : t -> bool
val is_struct : t -> bool
val is_int : t -> bool
val is_unsigned_int : t -> bool
val is_char : t -> bool
val is_java_type : t -> bool

is t a type produced by the Java frontend?

val has_block_prefix : string -> bool
val unsome : string -> t option -> t
type typ = t
\ No newline at end of file +IR__Typ (infer.IR__Typ)

Module IR__Typ

The Smallfoot Intermediate Language: Types

module F = Stdlib.Format
module IntegerWidths : sig ... end
type ikind =
| IChar

char

| ISChar

signed char

| IUChar

unsigned char

| IBool

bool

| IInt

int

| IUInt

unsigned int

| IShort

short

| IUShort

unsigned short

| ILong

long

| IULong

unsigned long

| ILongLong

long long (or _int64 on Microsoft Visual C)

| IULongLong

unsigned long long (or unsigned _int64 on Microsoft Visual C)

| I128

__int128_t

| IU128

__uint128_t

Kinds of integers

val compare_ikind : ikind -> ikind -> int
val equal_ikind : ikind -> ikind -> bool
val width_of_ikind : IntegerWidths.t -> ikind -> int
val range_of_ikind : IntegerWidths.t -> ikind -> Z.t * Z.t
val ikind_is_char : ikind -> bool

Check whether the integer kind is a char

val ikind_is_unsigned : ikind -> bool

Check whether the integer kind is unsigned

type fkind =
| FFloat

float

| FDouble

double

| FLongDouble

long double

Kinds of floating-point numbers

val compare_fkind : fkind -> fkind -> int
type ptr_kind =
| Pk_pointer

C/C++, Java, Objc standard/__strong pointer

| Pk_reference

C++ reference

| Pk_objc_weak

Obj-C __weak pointer

| Pk_objc_unsafe_unretained

Obj-C __unsafe_unretained pointer

| Pk_objc_autoreleasing

Obj-C __autoreleasing pointer

kind of pointer

val compare_ptr_kind : ptr_kind -> ptr_kind -> int
val equal_ptr_kind : ptr_kind -> ptr_kind -> bool
type type_quals
val compare_type_quals : type_quals -> type_quals -> int
val mk_type_quals : ?⁠default:type_quals -> ?⁠is_const:bool -> ?⁠is_restrict:bool -> ?⁠is_volatile:bool -> unit -> type_quals
val is_const : type_quals -> bool
val is_restrict : type_quals -> bool
val is_volatile : type_quals -> bool
type t = {
desc : desc;
quals : type_quals;
}

types for sil (structured) expressions

and desc =
| Tint of ikind

integer type

| Tfloat of fkind

float type

| Tvoid

void type

| Tfun

function type

| Tptr of t * ptr_kind

pointer type

| Tstruct of name

structured value type name

| TVar of string

type variable (ie. C++ template variables)

| Tarray of {
elt : t;
length : IR.IntLit.t option;
stride : IR.IntLit.t option;
}

array type with statically fixed length and stride

and name =
| CStruct of IR.QualifiedCppName.t
| CUnion of IR.QualifiedCppName.t
| CppClass of IR.QualifiedCppName.t * template_spec_info
| JavaClass of IR.JavaClassName.t
| ObjcClass of IR.QualifiedCppName.t * name list
| ObjcProtocol of IR.QualifiedCppName.t
and template_arg =
| TType of t
| TInt of IStdlib.IStd.Int64.t
| TNull
| TNullPtr
| TOpaque
and template_spec_info =
| NoTemplate
| Template of {
mangled : string option;

WARNING: because of type substitutions performed by sub_type and sub_tname, mangling is not guaranteed to be unique to a single type. All the information in the template arguments is also needed for uniqueness.

args : template_arg list;
}
val compare : t -> t -> int
val compare_desc : desc -> desc -> int
val compare_name : name -> name -> int
val compare_template_arg : template_arg -> template_arg -> int
val compare_template_spec_info : template_spec_info -> template_spec_info -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val yojson_of_desc : desc -> Ppx_yojson_conv_lib.Yojson.Safe.t
val yojson_of_name : name -> Ppx_yojson_conv_lib.Yojson.Safe.t
val yojson_of_template_arg : template_arg -> Ppx_yojson_conv_lib.Yojson.Safe.t
val yojson_of_template_spec_info : template_spec_info -> Ppx_yojson_conv_lib.Yojson.Safe.t
val pp_template_spec_info : IStdlib.Pp.env -> F.formatter -> template_spec_info -> unit
val mk : ?⁠default:t -> ?⁠quals:type_quals -> desc -> t

Create Typ.t from given desc. if default is passed then use its value to set other fields such as quals

val mk_array : ?⁠default:t -> ?⁠quals:type_quals -> ?⁠length:IR.IntLit.t -> ?⁠stride:IR.IntLit.t -> t -> t

Create an array type from a given element type. If length or stride value is given, use them as static length and size.

val mk_struct : name -> t
val mk_ptr : ?⁠ptr_kind:ptr_kind -> t -> t

make a pointer to t, default kind is Pk_pointer

val get_ikind_opt : t -> ikind option

Get ikind if the type is integer.

val size_t : ikind

ikind of size_t

val is_weak_pointer : t -> bool
val is_strong_pointer : t -> bool
module Name : sig ... end
val equal : t -> t -> bool

Equality for types.

val equal_desc : desc -> desc -> bool
val equal_name : name -> name -> bool
val equal_quals : type_quals -> type_quals -> bool
val equal_ignore_quals : t -> t -> bool

Equality for types, but ignoring quals in it.

val pp_full : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a type with all the details.

val pp : IStdlib.Pp.env -> F.formatter -> t -> unit

Pretty print a type.

val pp_desc : IStdlib.Pp.env -> F.formatter -> desc -> unit

Pretty print a type desc.

val pp_java : verbose:bool -> F.formatter -> t -> unit

Pretty print a Java type. Raises if type isn't produced by the Java frontend

val pp_protocols : IStdlib.Pp.env -> F.formatter -> name list -> unit
val to_string : t -> string
val desc_to_string : desc -> string
val d_full : t -> unit

Dump a type with all the details.

val d_list : t list -> unit

Dump a list of types.

val name : t -> Name.t option

The name of a type

val strip_ptr : t -> t

turn a *T into a T. fails if t is not a pointer type

val is_ptr_to_ignore_quals : t -> ptr:t -> bool

check if ptr is a pointer type to t, ignoring quals

val array_elem : t option -> t -> t

If an array type, return the type of the element. If not, return the default type if given, otherwise raise an exception

val is_objc_class : t -> bool
val is_cpp_class : t -> bool
val is_pointer_to_cpp_class : t -> bool
val is_pointer_to_objc_non_tagged_class : t -> bool
val is_pointer_to_void : t -> bool
val is_void : t -> bool
val is_pointer_to_int : t -> bool
val is_pointer_to_function : t -> bool
val is_pointer : t -> bool
val is_reference : t -> bool
val is_struct : t -> bool
val is_int : t -> bool
val is_unsigned_int : t -> bool
val is_char : t -> bool
val is_java_type : t -> bool

is t a type produced by the Java frontend?

val has_block_prefix : string -> bool
val unsome : string -> t option -> t
module Normalizer : IStdlib.HashNormalizer.S with type t = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IR__Var/index.html b/website/static/odoc/next/infer/IR__Var/index.html index a82c27516..09abbb5f3 100644 --- a/website/static/odoc/next/infer/IR__Var/index.html +++ b/website/static/odoc/next/infer/IR__Var/index.html @@ -1,2 +1,2 @@ -IR__Var (infer.IR__Var)

Module IR__Var

type t = private
| LogicalVar of IR.Ident.t
| ProgramVar of IR.Pvar.t
val compare : t -> t -> int
val equal : t -> t -> bool
val compare_modulo_this : t -> t -> int
val of_id : IR.Ident.t -> t
val of_pvar : IR.Pvar.t -> t
val of_formal_index : int -> t

Create a variable representing the ith formal of the current procedure

val get_all_vars_in_exp : IR.Exp.t -> t IStdlib.IStd.Sequence.t

Get all free and program vars

val to_exp : t -> IR.Exp.t
val get_ident : t -> IR.Ident.t option
val get_pvar : t -> IR.Pvar.t option
val is_global : t -> bool
val is_local_to_procedure : IR.Procname.t -> t -> bool
val is_return : t -> bool
val is_footprint : t -> bool
val is_none : t -> bool
val is_this : t -> bool
val appears_in_source_code : t -> bool

return true if this variable appears in source code (i.e., is not a LogicalVar or a frontend-generated ProgramVar)

val is_cpp_temporary : t -> bool
val get_footprint_index : t -> int option
val pp : Stdlib.Format.formatter -> t -> unit
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
\ No newline at end of file +IR__Var (infer.IR__Var)

Module IR__Var

type t = private
| LogicalVar of IR.Ident.t
| ProgramVar of IR.Pvar.t
val compare : t -> t -> int
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val equal : t -> t -> bool
val compare_modulo_this : t -> t -> int
val of_id : IR.Ident.t -> t
val of_pvar : IR.Pvar.t -> t
val of_formal_index : int -> t

Create a variable representing the ith formal of the current procedure

val get_all_vars_in_exp : IR.Exp.t -> t IStdlib.IStd.Sequence.t

Get all free and program vars

val to_exp : t -> IR.Exp.t
val get_ident : t -> IR.Ident.t option
val get_pvar : t -> IR.Pvar.t option
val is_global : t -> bool
val is_local_to_procedure : IR.Procname.t -> t -> bool
val is_return : t -> bool
val is_footprint : t -> bool
val is_none : t -> bool
val is_this : t -> bool
val appears_in_source_code : t -> bool

return true if this variable appears in source code (i.e., is not a LogicalVar or a frontend-generated ProgramVar)

val is_cpp_temporary : t -> bool
val get_footprint_index : t -> int option
val pp : Stdlib.Format.formatter -> t -> unit
module Map : IStdlib.PrettyPrintable.PPMap with type PPMap.key = t
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IStdlib/IOption/index.html b/website/static/odoc/next/infer/IStdlib/IOption/index.html index faf44e912..bf0f5170b 100644 --- a/website/static/odoc/next/infer/IStdlib/IOption/index.html +++ b/website/static/odoc/next/infer/IStdlib/IOption/index.html @@ -1,2 +1,2 @@ -IOption (infer.IStdlib.IOption)

Module IStdlib.IOption

val find_value_exn : 'a option -> 'a

Like Option.value_exn but raises Caml.Not_found when called with None.

val value_default_f : f:(unit -> 'a) -> 'a option -> 'a

Like Option.value ~default:(f ()) but f is called only if None.

val if_none_evalopt : f:(unit -> 'a option) -> 'a option -> 'a option

if_none_evalopt ~f x evaluates to f () if x = None, otherwise returns x. Useful for chaining matchers where the first returning non-None determines the result.

val if_none_eval : f:(unit -> 'a) -> 'a option -> 'a

if_none_eval ~f x evaluates to y if x=Some y else to f (). Useful for terminating chains built with if_none_evalopt. This is exactly the same as value_default_f but with a better name.

val exists2 : 'a option -> 'b option -> f:('a -> 'b -> bool) -> bool

Like Option.exists but gets two parameters.

include sig ... end
module Let_syntax : sig ... end

Provides signatures for OCaml 4.08 binding operators

\ No newline at end of file +IOption (infer.IStdlib.IOption)

Module IStdlib.IOption

val find_value_exn : 'a option -> 'a

Like Option.value_exn but raises Caml.Not_found when called with None.

val value_default_f : f:(unit -> 'a) -> 'a option -> 'a

Like Option.value ~default:(f ()) but f is called only if None.

val if_none_evalopt : f:(unit -> 'a option) -> 'a option -> 'a option

if_none_evalopt ~f x evaluates to f () if x = None, otherwise returns x. Useful for chaining matchers where the first returning non-None determines the result.

val if_none_eval : f:(unit -> 'a) -> 'a option -> 'a

if_none_eval ~f x evaluates to y if x=Some y else to f (). Useful for terminating chains built with if_none_evalopt. This is exactly the same as value_default_f but with a better name.

val exists2 : 'a option -> 'b option -> f:('a -> 'b -> bool) -> bool

Like Option.exists but gets two parameters.

val map_changed : 'a option -> equal:('a -> 'a -> bool) -> f:('a -> 'a) -> 'a option

Like Option.map but maintain physical equality

include sig ... end
module Let_syntax : sig ... end

Provides signatures for OCaml 4.08 binding operators

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IStdlib/MaximumSharing/ForHashtbl/index.html b/website/static/odoc/next/infer/IStdlib/MaximumSharing/ForHashtbl/index.html deleted file mode 100644 index cd84abc7f..000000000 --- a/website/static/odoc/next/infer/IStdlib/MaximumSharing/ForHashtbl/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -ForHashtbl (infer.IStdlib.MaximumSharing.ForHashtbl)

Module MaximumSharing.ForHashtbl

Parameters

Signature

val normalize : 'a H.t -> 'a H.t

Duplicate a hash table with maximum sharing.

\ No newline at end of file diff --git a/website/static/odoc/next/infer/IStdlib/MaximumSharing/Sharer/index.html b/website/static/odoc/next/infer/IStdlib/MaximumSharing/Sharer/index.html deleted file mode 100644 index e5d481c37..000000000 --- a/website/static/odoc/next/infer/IStdlib/MaximumSharing/Sharer/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Sharer (infer.IStdlib.MaximumSharing.Sharer)

Module MaximumSharing.Sharer

type t
val create : unit -> t
val normalize_value : t -> 'a -> 'a
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IStdlib/MaximumSharing/index.html b/website/static/odoc/next/infer/IStdlib/MaximumSharing/index.html deleted file mode 100644 index 68fbc059d..000000000 --- a/website/static/odoc/next/infer/IStdlib/MaximumSharing/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -MaximumSharing (infer.IStdlib.MaximumSharing)

Module IStdlib.MaximumSharing

module Sharer : sig ... end
module ForHashtbl : functor (H : IStdlib.IStd.Caml.Hashtbl.S) -> sig ... end
\ No newline at end of file diff --git a/website/static/odoc/next/infer/IStdlib/PhysEqual/index.html b/website/static/odoc/next/infer/IStdlib/PhysEqual/index.html index 9cfa293a8..acb1e8f22 100644 --- a/website/static/odoc/next/infer/IStdlib/PhysEqual/index.html +++ b/website/static/odoc/next/infer/IStdlib/PhysEqual/index.html @@ -1,5 +1,5 @@ -PhysEqual (infer.IStdlib.PhysEqual)

Module IStdlib.PhysEqual

val shallow_equal : 'a -> 'a -> bool