[website] make doc-publish

Summary:
New website! Now with one page per checker, and only one page containing
all issue types for easy tooling. Each checker page also lists the
issue types it can report.

For now only issue types with documentation appear in either page,
filling these up is still TODO.

Reviewed By: mityal

Differential Revision: D21934465

fbshipit-source-id: 82ae1e417
master
Jules Villard 5 years ago committed by Facebook GitHub Bot
parent a1b7016e11
commit f195161742

@ -1,7 +1,15 @@
{
"doc_entries": [
"checkers-bug-types",
"eradicate-warnings",
"linters-bug-types"
]
}
"README":
"This is a @generated file, run `make doc-publish` from the root of the infer repository to generate it",
"doc_entries": [
"all-issue-types", "checker-annotation-reachability",
"checker-biabduction", "checker-bufferoverrun", "checker-class-loads",
"checker-cost", "checker-eradicate", "checker-fragment-retains-view",
"checker-immutable-cast", "checker-inefficient-keyset-iterator",
"checker-linters", "checker-litho-required-props", "checker-liveness",
"checker-loop-hoisting", "checker-printf-args", "checker-pulse",
"checker-quandary", "checker-racerd", "checker-siof",
"checker-self-in-block", "checker-starvation", "checker-topl",
"checker-uninit"
]
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,13 @@
---
title: "Annotation Reachability"
description: "Given a pair of source and sink annotation, e.g. `@PerformanceCritical` and `@Expensive`, this checker will warn whenever some method annotated with `@PerformanceCritical` calls, directly or indirectly, another method annotated with `@Expensive`"
---
Given a pair of source and sink annotation, e.g. `@PerformanceCritical` and `@Expensive`, this checker will warn whenever some method annotated with `@PerformanceCritical` calls, directly or indirectly, another method annotated with `@Expensive`
Activate with `--annotation-reachability`.
Supported languages:
- C/C++/ObjC: Yes
- Java: Yes

@ -0,0 +1,26 @@
---
title: "Biabduction"
description: "This analysis deals with a range of issues, many linked to memory safety."
---
This analysis deals with a range of issues, many linked to memory safety.
Activate with `--biabduction`.
Supported languages:
- C/C++/ObjC: Yes
- Java: Yes
Read more about its foundations in the [Separation Logic and Biabduction page](separation-logic-and-bi-abduction).
## List of Issue Types
The following issue types are reported by this checker:
- [EMPTY_VECTOR_ACCESS](all-issue-types.md#empty_vector_access)
- [IVAR_NOT_NULL_CHECKED](all-issue-types.md#ivar_not_null_checked)
- [MEMORY_LEAK](all-issue-types.md#memory_leak)
- [NULL_DEREFERENCE](all-issue-types.md#null_dereference)
- [PARAMETER_NOT_NULL_CHECKED](all-issue-types.md#parameter_not_null_checked)
- [PREMATURE_NIL_TERMINATION_ARGUMENT](all-issue-types.md#premature_nil_termination_argument)
- [RESOURCE_LEAK](all-issue-types.md#resource_leak)
- [RETAIN_CYCLE](all-issue-types.md#retain_cycle)

@ -0,0 +1,18 @@
---
title: "Buffer Overrun Analysis (InferBO)"
description: "InferBO is a detector for out-of-bounds array accesses."
---
InferBO is a detector for out-of-bounds array accesses.
Activate with `--bufferoverrun`.
Supported languages:
- C/C++/ObjC: Yes
- Java: Yes
You can read about its origins in this [blog post](https://research.fb.com/inferbo-infer-based-buffer-overrun-analyzer/).
## List of Issue Types
The following issue types are reported by this checker:

@ -0,0 +1,15 @@
---
title: "Class loading analysis"
description: "Compute set of Java classes loaded."
---
Compute set of Java classes loaded.
**\*\*\*DEPRECATED\*\*\*** Unmaintained prototype.
Activate with `--class-loads`.
Supported languages:
- C/C++/ObjC: No
- Java: Yes

@ -0,0 +1,13 @@
---
title: "Cost: Runtime Complexity Analysis"
description: "Computes the time complexity of functions and methods. Can be used to detect changes in runtime complexity with `infer reportdiff`."
---
Computes the time complexity of functions and methods. Can be used to detect changes in runtime complexity with `infer reportdiff`.
Activate with `--cost`.
Supported languages:
- C/C++/ObjC: Yes
- Java: Yes

@ -0,0 +1,101 @@
---
title: "Eradicate"
description: "The eradicate `@Nullable` checker for Java annotations."
---
The eradicate `@Nullable` checker for Java annotations.
Activate with `--eradicate`.
Supported languages:
- C/C++/ObjC: No
- Java: Yes
> "I call it my billion-dollar mistake. It was the invention of the null
> reference in 1965."
>
> [Tony Hoare](http://en.wikipedia.org/wiki/Tony_Hoare)
### What is Infer:Eradicate?
Infer:Eradicate is a type checker for `@Nullable` annotations for Java. It is part
of the Infer static analysis suite of tools. The goal is to eradicate null
pointer exceptions.
<a href="https://developer.android.com/reference/android/support/annotation/Nullable.html">@Nullable</a>
annotations denote that a parameter, field or the return value of a method can
be null. When decorating a parameter, this denotes that the parameter can
legitimately be null and the method will need to deal with it. When decorating a
method, this denotes the method might legitimately return null.
Starting from @Nullable-annotated programs, the checker performs a flow
sensitive analysis to propagate the nullability through assignments and calls,
and flags errors for unprotected accesses to nullable values or
inconsistent/missing annotations. It can also be used to add annotations to a
previously un-annotated program.
### What is the @Nullable convention?
If you say nothing, you're saying that the value cannot be null. This is the
recommended option when possible:
Program safely, annotate nothing!
When this cannot be done, add a @Nullable annotation before the type to indicate
that the value can be null.
### What is annotated?
Annotations are placed at the interface of method calls and field accesses:
- Parameters and return type of a method declaration.
- Field declarations.
Local variable declarations are not annotated: their nullability is inferred.
### How is Infer:Eradicate invoked?
Eradicate can be invoked by adding the option `--eradicate` to the checkers mode
as in this example:
```bash
infer run -a checkers --eradicate -- javac Test.java
```
The checker will report an error on the following program that accesses a
nullable value without null check:
```java
class C {
int getLength(@Nullable String s) {
return s.length();
}
}
```
But it will not report an error on this guarded dereference:
```java
class C {
int getLength(@Nullable String s) {
if (s != null) {
return s.length();
} else {
return -1;
}
}
}
```
## List of Issue Types
The following issue types are reported by this checker:
- [ERADICATE_CONDITION_REDUNDANT](all-issue-types.md#eradicate_condition_redundant)
- [ERADICATE_FIELD_NOT_INITIALIZED](all-issue-types.md#eradicate_field_not_initialized)
- [ERADICATE_FIELD_NOT_NULLABLE](all-issue-types.md#eradicate_field_not_nullable)
- [ERADICATE_INCONSISTENT_SUBCLASS_PARAMETER_ANNOTATION](all-issue-types.md#eradicate_inconsistent_subclass_parameter_annotation)
- [ERADICATE_INCONSISTENT_SUBCLASS_RETURN_ANNOTATION](all-issue-types.md#eradicate_inconsistent_subclass_return_annotation)
- [ERADICATE_PARAMETER_NOT_NULLABLE](all-issue-types.md#eradicate_parameter_not_nullable)
- [ERADICATE_RETURN_NOT_NULLABLE](all-issue-types.md#eradicate_return_not_nullable)
- [ERADICATE_RETURN_OVER_ANNOTATED](all-issue-types.md#eradicate_return_over_annotated)

@ -0,0 +1,21 @@
---
title: "Fragment Retains View"
description: "Detects when Android fragments are not explicitly nullified before becoming unreachable."
---
Detects when Android fragments are not explicitly nullified before becoming unreachable.
**\*\*\*DEPRECATED\*\*\*** Unmaintained due to poor precision.
Activate with `--fragment-retains-view`.
Supported languages:
- C/C++/ObjC: No
- Java: Yes
## List of Issue Types
The following issue types are reported by this checker:
- [CHECKERS_FRAGMENT_RETAINS_VIEW](all-issue-types.md#checkers_fragment_retains_view)

@ -0,0 +1,21 @@
---
title: "Immutable Cast"
description: "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`."
---
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`.
**\*\*\*DEPRECATED\*\*\*** Unmaintained due to poor actionability of the reports.
Activate with `--immutable-cast`.
Supported languages:
- C/C++/ObjC: No
- Java: Yes
Casts flagged by this checker are unsafe because calling mutation operations on the cast objects will fail at runtime.
## List of Issue Types
The following issue types are reported by this checker:
- [CHECKERS_IMMUTABLE_CAST](all-issue-types.md#checkers_immutable_cast)

@ -0,0 +1,13 @@
---
title: "Inefficient keySet Iterator"
description: "Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."
---
Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly.
Activate with `--inefficient-keyset-iterator`.
Supported languages:
- C/C++/ObjC: No
- Java: Yes

@ -0,0 +1,724 @@
---
title: "AST Language (AL)"
description: "Declarative linting framework over the Clang AST."
---
Declarative linting framework over the Clang AST.
**\*\*\*DEPRECATED\*\*\*** On end-of-life support, may be removed in the future.
Activate with `--linters`.
Supported languages:
- C/C++/ObjC: Yes
- Java: No
For C/C++ and Objective-C languages, we provide a linters framework. These are
checks about the syntax of the program; it could be about a property, or about
code inside one method, or that a class or method have certain properties. We
provide [a few checks](/docs/linters-bug-types) and we have developed a domain
specific language (DSL) to make it easier to write checks.
## AL: A declarative language for writing linters in Infer
One of the major advantage of Infer when compared with other static analyzers is
the fact it performs sophisticated inter-procedural/inter-file analysis. That
is, Infer can detect bugs which involve tracking values through many procedure
calls and the procedures may live in different files. These may be very subtle
bugs and designing static analyses to do that is quite involved and normally
requires deep static analysis expertise.
However, there are many important software bugs that are confined in the code of
a single procedure (called intra-procedural). To detect these bugs simpler
analyses may suffice which do not require deep technical expertise in static
analysis. Often these bugs can be expressed by referring to the syntax of the
program, or the types of certain expressions. We have defined a new language to
easily design checkers which identify these kind of bugs. The language is called
AL (AST Language) and its main feature is the ability to reason about the
Abstract Syntax Tree of a program in a concise declarative way. AL's checkers
are interpreted by Infer to analyze programs. Thus, to detect new kind of bugs
in Infer one can just write a check in AL. We will see in more detail later,
that for writing AL formulas we also need predicates: simple functions that
check a property of the AST. Predicates are written in OCaml inside Infer, thus
it requires a bit of OCaml knowledge and getting familiar with the OCaml data
structure for the clang AST.
## Getting the clang AST
When you write a linter that traverses the AST of some programs to check some
property, you probably need to understand what the AST looks like. You can get
the AST of programs using clang directly, or using Infer.
If you have a clang command `clang <clang arguments> File.m` then you can get
the AST with
```bash
clang <clang arguments> -Xclang -ast-dump -fsyntax-only File.m
```
You can also get the AST using Infer. One advantage of this is that you don't
need to know the speicifc clang command, just the general build command.
Moreover, what you get here is exactly the form of the AST that Infer has as
input.
For this you need to install an OCaml package `biniou` with
`opam install biniou`. See [the opam website](https://opam.ocaml.org/) for
instructions on how to install opam.
Then, the AST can be created by Infer in debug mode. Call Infer with
```bash
infer --debug -- <build command>
```
This will, among other things, generate a file `/path/to/File.m.ast.sh` for
every file `/path/to/File.m` that is being analyzed. Run this script with
`bash File.m.ast.sh` and a file `/path/to/File.m.ast.bdump` will be generated,
that contains the AST of the program in `bdump` format (similar to json). If you
get an error about `bdump` not being found you may need to run
`eval $(opam env)` to get the `bdump` executable (provided by the biniou opam
package) into your `PATH`.
For general info on the clang AST, you can check out
[clang's website](http://clang.llvm.org/docs/IntroductionToTheClangAST.html).
## Using AL to write linters
Let's start with an example. Suppose we want to write the following
Objective-C's linter:
_"a property containing the word 'delegate', but not containing the word 'queue'
should not be declared strong"_.
We can write this property in the following way:
```bash
DEFINE-CHECKER STRONG_DELEGATE_WARNING = {
LET name_contains_delegate =
declaration_has_name(REGEXP("[dD]elegate"));
LET name_does_not_contain_queue =
NOT declaration_has_name(REGEXP("[qQ]ueue"));
SET report_when =
WHEN
name_contains_delegate
AND name_does_not_contain_queue
AND is_strong_property()
HOLDS-IN-NODE ObjCPropertyDecl;
SET message = "Property or ivar %decl_name% declared strong";
SET suggestion = "In general delegates should be declared weak or assign";
SET severity = "WARNING"
};
```
The linter definition starts with the keyword `DEFINE-CHECKER` followed by the
checker's name. The first `LET` clause defines the _formula variable_
`name_contains_delegate` using the predicate `declaration_has_name` which return
true/false depending whether the property's name contains a word in the language
of the regular expression `[dD]elegate`. In general a predicate is a simple
atomic formula evaluated on an AST node. The list of available predicates is in
the module
[`cPredicates.mli`](https://github.com/facebook/infer/blob/master/infer/src/clang/cPredicates.mli)
(this list is continuously growing and if you need a new predicate you can add
it in ocaml). Formula variables can be used to simplify other definitions. The
`SET report_when` is mandatory and defines a formula that, when evaluates to
true, will tell Infer to report an error. In the case above, the formula is
saying that we should report when visiting an `ObjCPropertyDecl` (that is the
AST node declaring a property in Objective-C) where it holds that: the name
contains "delegate/Delegate" (`name_contains_delegate`) and the name doesn't
contain "queue/Queue" (`name_does_not_contain_queue`) and the node is defining a
"strong" property (`is_strong_property()`).
The `SET message` clause defines the error message that will be displayed to the
user. Notice that the message can include placeholders like `%decl_name%`.
Placeholders are evaluated by Infer and substituted by their current value when
the error message is reported. In this case the name of the declaration. The
`SET suggestion` clause define an optional hint to give to programmer on how to
fix the problem.
The general structure of a checker is the following:
```bash
DEFINE-CHECKER id_of_the_checker = {
LET formula = <formula definition>;
LET ….
SET report_when = <formula definition>;
SET name = <optional name>;
SET message = <error message to show the user>;
SET suggestion = <optional suggestion to the user>;
SET doc_url = <optional URL to documentation of the issue>;
SET severity = INFO | LIKE | ADVICE | WARNING | ERROR;
SET mode = ON | OFF
SET whitelist_path = {path1, path2, ..., pathn };
SET blacklist_path = {path1, path2, ..., pathn };
};
```
The default severity is `WARNING` and the default mode is `ON`, so these are
optional. If the check is `OFF` it will only be available in debug mode (flags
`--debug` or `--linters-developer-mode`). `INFOs` are generally also not
reported, except with some specialzed flags. `name` and `doc_url` are used only
for CI comments at the moment (in Phabricator).
## Defining Paths
`whitelist_path` and `blacklist_path` are optional, by default the rule is
enabled everywhere. For specifying paths, one can use either string constants
(`"File.m"`) or regexes (`REGEXP("path/to/.*")`) or variables. The variables
stand for a list of paths, and are defined in a separate block:
```bash
GLOBAL-PATHS {
path1 = {"A.m", REGEXP("path/to/.*")};
};
```
## Defining Macros
It is possible to define macros that can be used in several checkers. This is
done in the following way:
```bash
GLOBAL-MACROS {
LET is_subclass_of(x) =
is_class(x) HOLDS-IN-SOME-SUPERCLASS-OF ObjCInterfaceDecl;
};
```
`GLOBAL-MACROS` is the section of an AL specification where one can define a
list of global macros. In the example we are defining the macro `is_subclass(x)`
which can now be used in checkers instead of its complex definition.
It is possible to import a library of macros and paths with the following
command:
```
#IMPORT <library.al>
```
In an AL file, the command above import and make available all the macros and
paths defined in the `library.al` file.
## AL Predicates
The simplest formulas we can write are predicates. They are defined inside
Infer. We provide a
[library](https://github.com/facebook/infer/blob/master/infer/src/clang/cPredicates.mli),
but if the predicate that you require is not available, you will need to extend
the library. Here are the some of the currently defined predicates:
```
call_class_method ("class_name", "method_name")
call_function ("method_name")
call_instance_method ("class_name", "method_name")
call_method ("method_name")
captures_cxx_references ()
context_in_synchronized_block ()
declaration_has_name ("decl_name")
declaration_ref_name ("decl_ref_name")
decl_unavailable_in_supported_ios_sdk ()
has_cast_kind("cast_kind") // useful in a cast node
has_type ("type") // only builtin types, pointers and Objective-C classes available at the moment
isa ("class_name")
is_assign_property ()
is_binop_with_kind ("kind")
is_class ("class_name")
is_const_var ()
is_global_var ()
is_ivar_atomic ()
is_method_property_accessor_of_ivar ()
is_node ("node_name")
is_objc_constructor ()
is_objc_dealloc ()
is_objc_extension ()
is_objc_interface_named ("name")
is_property_pointer_type ()
is_strong_property ()
is_weak_property ()
is_unop_with_kind ("kind")
method_return_type ("type") // only builtin type, pointers, and Objective-C classes available at the moment
objc_method_has_nth_parameter_of_type("type")
using_namespace("namespace")
within_responds_to_selector_block ()
```
In general, the parameters of predicates can be constants, or variables, or
regular expressions. Variables are used in macros, see below. The syntax for
using regexes is `REGEX("your_reg_exp_here")`.
**NOTE:** The predicates that expect types, such as `has_type` or
`method_return_type` or `objc_method_has_nth_parameter_of_type` also accept
regexes, but the syntax is a bit different: `REGEX('your_reg_exp_here')`, and
this regex can be embedded inside another string, for example:
`has_type("REGEXP('NS.+')*" )` which stands for pointer to a class of name
starting with NS.
If you need to add a new predicate, write the predicate in
[cPredicates.ml](https://github.com/facebook/infer/blob/master/infer/src/clang/cPredicates.ml)
and then register it in
[CTL.ml](https://github.com/facebook/infer/blob/master/infer/src/clang/cTL.ml#L728).
## AL Formulas
Formulas are defined using a variation of the
[_CTL temporal logic_](https://en.wikipedia.org/wiki/Computation_tree_logic).
CTL is a logic expressing properties of a tree model. In the case of AL, the
tree is the AST of the program. Formulas are defined according to the following
grammar:
```
formula ::= predicate
| NOT formula
| formula1 OR formula2
| formula1 AND formula2
| formula1 IMPLIES formula2
| formula1 HOLDS-UNTIL formula2
| formula1 HOLDS-EVERYWHERE-UNTIL formula2
| formula HOLDS-EVENTUALLY
| formula HOLDS-EVERYWHERE-EVENTUALLY
| formula HOLDS-NEXT
| formula HOLDS-EVERYWHERE-NEXT
| formula HOLDS-ALWAYS
| formula HOLDS-EVERYWHERE-ALWAYS
| WHEN formula HOLDS-IN-NODE node-name-list
| IN-NODE node-name-list WITH-TRANSITION transition-name
formula HOLDS-EVENTUALLY
```
The first four cases (`NOT`, `OR`, `AND`, `IMPLIES`) are classic boolean
operators with the usual semantics. The others are temporal operators describing
how the truth-value of a formula is evaluated in a tree. Let's consider case by
case.
| Formula | Semantic meaning |
| ------------------- | :-------------------------------------------------------------------------------------------: |
| F1 _HOLDS-UNTIL_ F2 | from the current node, there exists a path where F1 holds at every node until F2 becomes true |
An example is depicted in the following tree. When `F1` or `F2` hold in a node
this is indicated between square brackets. The formula `F1 HOLDS-UNTIL F2` holds
in the green nodes.
![](/img/AL/holds_until.jpeg)
---
| Formula | Semantic meaning |
| -------------------- | :--------------------------------------------------------------------------: |
| F _HOLDS-EVENTUALLY_ | from the current node there exists a path where at some point F becomes true |
In the picture below, as `F` holds in `n10`, then `F HOLDS-EVENTUALLY` holds in
the green nodes `n1`, `n7`, `n10`. This is because from these nodes there is a
path reaching `n10` where `F` holds. Note that it holds for `n10` as well
because there exists a trivial path of length 0 from `n1` to itself.
![](/img/AL/holds_eventually.jpeg)
---
| Formula | Semantic meaning |
| ----------------------------- | :-----------------------------------------------------------------------: |
| F HOLDS-EVERYWHERE-EVENTUALLY | in every path starting from the current node at some point F becomes true |
For example, in the tree below, the formula holds in every green node because
every paths starting from each of them eventually reaches a node where F holds.
![](/img/AL/holds_everywhere_eventually.jpeg)
---
| Formula | Semantic meaning |
| ------------ | :--------------------------------------------------------------------------: |
| F HOLDS-NEXT | from the current node (we are visiting) there exists a child where F is true |
In the tree below, the formula `F HOLDS-NEXT` it is true only in n1 as it's the
only node with a child where `F` holds (node n3). In AL, `NEXT` is synonym of
child as, in terms of a path in the tree, a child is the next node.
![](/img/AL/holds_next.jpeg)
---
| Formula | Semantic meaning |
| ----------------------- | :-----------------------------------------------------: |
| F HOLDS-EVERYWHERE-NEXT | from the current node in every existing child F is true |
In the tree below, the formula `F HOLDS-EVERYWHERE-NEXT` it is true in n1 as
it's the only node for which in every child `F` holds (node n2, n3, and n7).
![](/img/AL/holds_everywhere_next.jpeg)
---
| Formula | Semantic meaning |
| -------------- | :-------------------------------------------------------------------: |
| F HOLDS-ALWAYS | from the current node there exists a path where F holds at every node |
In the tree below `F HOLDS-ALWAYS` holds in `n1`, `n2`, `n8` because for each of
these nodes there exists a path where `F` holds at each node in the path.
![](/img/AL/always_holds.jpeg)
---
| Formula | Semantic meaning |
| ------------------------- | :--------------------------------------------------------: |
| F HOLDS-EVERYWHERE-ALWAYS | from the current node, in every path F holds at every node |
`F HOLDS-EVERYWHERE-ALWAYS` holds in `n2`, `n4`, `n5`, and `n8` because when we
visit those nodes in every path that start from them `F` holds in every node.
![](/img/AL/always_holds_everywhere.jpeg)
---
| Formula | Semantic meaning |
| ---------------------------------- | :----------------------------------------------: |
| WHEN F HOLDS-IN-NODE node1,…,nodeK | we are in a node among node1,…,nodeK and F holds |
`WHEN F HOLDS-IN-NODE` `n2`, `n7`, `n6` holds only in node `n2` as it is the
only node in the list `n2`, `n7`, `n6` where F holds.
![](/img/AL/holds_in_node.jpeg)
Let's consider an example of checker using formula
`WHEN F HOLDS-IN-NODE node1,…,nodeK` for checking that a property with pointer
type should not be declared _"assign"_:
```
DEFINE-CHECKER ASSIGN_POINTER_WARNING = {
SET report_when =
WHEN
is_assign_property() AND is_property_pointer_type()
HOLDS-IN-NODE ObjCPropertyDecl;
SET message = "Property `%decl_name%` is a pointer type marked with the `assign` attribute";
SET suggestion = "Use a different attribute like `strong` or `weak`.";
SET severity = "WARNING";
};
```
The checker uses two predefined predicates `is_assign_property()` and
`is_property_pointer_type()` which are true if the property being declared is
assign and has a pointer type respectively. We want to check both conditions
only on nodes declaring properties, i.e., `ObjCPropertyDecl`.
---
| Formula | Semantic meaning |
| ----------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------: |
| IN-NODE node1,…, nodeK WITH-TRANSITION t F HOLDS-EVENTUALLY | from the current node there exists a path which eventually reaches a node among “node1,…,nodeK” with a transition t reaching a child where F holds |
The following tree explain the concept:
![](/img/AL/in_node_with_transition.jpeg)
The concept of transition is needed because of the special structure of the
clang AST. Certain kind of nodes, for example statements, have a list of
children that are statements as well. In this case there is no special tag
attached to the edge between the node and the children. Other nodes have
records, where some of the fields point to other nodes. For example a node
representing a function declaration will have a record where one of the fields
is body. This is pointing to a statement representing the function's body. For
records, sometimes we need to specify that we need a particular node reachable
via a particular field (i.e., a transition).
**Hint** A good way to learn how to write checkers is looking at existing
checkers in the file
[linters.al](https://github.com/facebook/infer/blob/master/infer/lib/linter_rules/linters.al).
## Example checks
In the following we show a few examples of simple checks you may wish to write
and the corresponding formulas:
- A check for flagging a Objective-C class that inherits from a class that
shouldn't be subclassed.
```
DEFINE-CHECKER SUBCLASSING_TEST_EXAMPLE = {
SET report_when = is_class("A") HOLDS-IN-SOME-SUPERCLASS-OF ObjCInterfaceDecl;
SET message = "This is subclassing A. Class A should not be subclassed.";
};
```
- A check for flagging an Objective-C instance method call:
```
DEFINE-CHECKER CALL_INSTANCE_METHOD = {
SET report_when = call_instance_method("A", "foo:");
SET message = "Do not call this method";
};
```
- A check for flagging an Objective-C instance method call of any method of a
class:
```
DEFINE-CHECKER CALL_ANY_INSTANCE_METHODS = {
SET report_when = call_instance_method(A, REGEXP("*"));
SET message = "Do not call any method of class A";
};
```
- A check for flagging an Objective-C class method call:
```
DEFINE-CHECKER CALL_CLASS_METHOD = {
SET report_when = call_class_method("A", "foo:");
SET message = "Do not call this method";
};
```
- A check for flagging an Objective-C method call of a method with int return
type:
```
DEFINE-CHECKER TEST_RETURN_METHOD = {
SET report_when = WHEN method_return_type("int")
HOLDS-IN-NODE ObjCMethodDecl;
SET message = "Method return int";
};
```
- A check for flagging a variable declaration with type long
```
DEFINE-CHECKER TEST_VAR_TYPE_CHECK = {
SET report_when = WHEN has_type("long")
HOLDS-IN-NODE VarDecl;
SET message = "Var %name% has type long";
};
```
- A check for flagging a method that has a parameter of type A\*
```
DEFINE-CHECKER TEST_PARAM_TYPE_CHECK = {
LET method_has_a_parameter_with_type(x) =
WHEN HOLDS-NEXT WITH-TRANSITION Parameters (has_type(x))
HOLDS-IN-NODE ObjCMethodDecl;
SET report_when =
method_has_a_parameter_with_type("A*" );
SET message = "Found a method with a parameter of type A";
};
```
- A check for flagging a method that has all the parameters of type A\* (and at
least one)
```
DEFINE-CHECKER TEST_PARAM_TYPE_CHECK2 = {
LET method_has_at_least_a_parameter =
WHEN HOLDS-NEXT WITH-TRANSITION Parameters (TRUE)
HOLDS-IN-NODE ObjCMethodDecl;
LET method_has_all_parameter_with_type(x) =
WHEN HOLDS-EVERYWHERE-NEXT WITH-TRANSITION Parameters (has_type(x))
HOLDS-IN-NODE ObjCMethodDecl;
SET report_when = method_has_at_least_a_parameter AND
method_has_all_parameter_with_type("int");
SET message = "All the parameters of the method have type int";
};
```
- A check for flagging a method that has the 2nd parameter of type A\*
```
DEFINE-CHECKER TEST_NTH_PARAM_TYPE_CHECK = {
SET report_when =
WHEN objc_method_has_nth_parameter_of_type("2", "A*")
HOLDS-IN-NODE ObjCMethodDecl;
SET message = "Found a method with the 2nd parameter of type A*";
SET severity = "LIKE";
};
```
- A check for flagging a protocol that inherits from a given protocol.
`HOLDS-EVENTUALLY WITH-TRANSITION Protocol` means follow the `Protocol` branch
in the AST until the condition holds.
```
DEFINE-CHECKER TEST_PROTOCOL_DEF_INHERITANCE = {
LET is_subprotocol_of(x) = declaration_has_name(x) HOLDS-EVENTUALLY WITH-TRANSITION Protocol;
SET report_when =
WHEN is_subprotocol_of("P")
HOLDS-IN-NODE ObjCProtocolDecl;
SET message = "Do not inherit from Protocol P";
};
```
- A check for flagging when a constructor is defined with a parameter of a type
that implements a given protocol (or that inherits from it).
`HOLDS-NEXT WITH-TRANSITION Parameters` means, starting in the
`ObjCMethodDecl` node, follow the `Parameters` branch in the AST and check
that the condition holds there.
```
DEFINE-CHECKER TEST_PROTOCOL_TYPE_INHERITANCE = {
LET method_has_parameter_subprotocol_of(x) =
WHEN
HOLDS-NEXT WITH-TRANSITION Parameters
(has_type_subprotocol_of(x))
HOLDS-IN-NODE ObjCMethodDecl;
SET report_when =
WHEN
declaration_has_name(REGEXP("^newWith.*:$")) AND
method_has_parameter_subprotocol_of("P")
HOLDS-IN-NODE ObjCMethodDecl;
SET message = "Do not define parameters of type P.";
};
```
- A check for flagging a variable declaration of type NSArray applied to A.
```
DEFINE-CHECKER TEST_GENERICS_TYPE = {
SET report_when =
WHEN has_type("NSArray<A>*")
HOLDS-IN-NODE VarDecl;
SET message = "Do not create arrays of type A";
};
```
- A check for flagging using a property or variable that is not available in the
supported API. decl_unavailable_in_supported_ios_sdk is a predicate that works
on a declaration, checks the available attribute from the declaration and
compares it with the supported iOS SDK. Notice that we flag the occurrence of
the variable or property, but the attribute is in the declaration, so we need
the transition `PointerToDecl` that follows the pointer from the usage to the
declaration.
```
DEFINE-CHECKER UNAVAILABLE_API_IN_SUPPORTED_IOS_SDK = {
SET report_when =
WHEN HOLDS-NEXT WITH-TRANSITION PointerToDecl
(decl_unavailable_in_supported_ios_sdk() AND
HOLDS-IN-NODE DeclRefExpr;
SET message = "%name% is not available in the required iOS SDK version";
};
```
- A check for flagging using a given namespace
```
DEFINE-CHECKER TEST_USING_NAMESPACE = {
SET report_when = using_namespace("N");
SET message = "Do not use namespace N";
};
```
- A check for flagging the use of given enum constants
```
DEFINE-CHECKER ENUM_CONSTANTS = {
SET report_when = is_enum_constant(REGEXP("MyName.*"));
SET message = "Do not use the enum MyName";
};
```
## AST info in messages
When you write the message of your rule, you may want to specify which
particular AST items were involved in the issue, such as a type or a variable
name. We have a mechanism for that, we specified a few placeholders that can be
used in rules with the syntax `%placeholder%` and it will be substituted by the
correct AST info. At the moment we have `%type%`, `%child_type%` and `%name%`
that print the type of the node, the type of the node's child, and a string
representation of the node, respectively. As with predicates, we can add more as
needed.
## Testing your rule
To test your rule you need to run it with Infer. If you are adding a new linter
you can test it in a separate al file that you can pass to Infer with the option
`--linters-def-file file.al`. Pass the option
`--linters-developer-mode --linter <LINTER_NAME>` to Infer to print debug
information and only run the linter you are developing, so it will be faster and
the debug info will be only about your linter.
To test your code, write a small example that triggers the rule. Then, run your
code with
```
infer --linters-developer-mode --linters-def-file file.al -- clang -c Test.m
```
the bug should be printed in the screen, like, for instance:
```
infer/tests/codetoanalyze/objcpp/linters/global-var/B.mm:34: warning: GLOBAL_VARIABLE_INITIALIZED_WITH_FUNCTION_OR_METHOD_CALL
Global variable kLineSize is initialized using a function or method call at line 34, column 1. If the function/method call is expensive,
it can affect the starting time of the app.
32. static float kPadding = [A bar] ? 10.0 : 11.0; // Error
33.
34. > static const float kLineSize = 1 / [A scale]; // Error
35.
36. static const float ok = 37;
37.
```
Moreover, the bug can be found in the file `infer-out/report.json` where
`infer-out` is the results directory where Infer operates, that is created in
the current directory. You can specify a different directory with the option
`-o`.
## Debugging
If there are syntax errors or other parsing errors with your al file, you will
get an error message when testing the rule, remember to use
`linters-developer-mode` when you are developing a rule. If the rule gets parsed
but still doesn't behave as you expect, you can debug it, by adding the
following line to a test source file in the line where you want to debug the
rule: `//INFER_BREAKPOINT`. Then run infer again in linters developer mode, and
it will stop the execution of the linter on the line of the breakpoint. Then you
can follow the execution step by step. It shows the current formula that is
being evaluated, and the current part of the AST that is being checked. A red
node means that the formula failed, a green node means that it succeeded.
## Demo
<iframe src="https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Finferstaticanalyzer%2Fvideos%2F810308939133850%2F&show_text=0&width=400" width="500" height="500" scrolling="no" frameborder="0" allowTransparency="true" allowFullScreen="true"></iframe>
## Command line options for linters
The linters are run by default when you run Infer. However, there is a way of
running only the linters, which is faster than also running Infer. This is by
adding the option `--linters` to the analysis command as in this example:
```bash
infer run --linters -- clang -c Test.m
```
There are a few other command-line options that are useful for using or
developing new linters in Infer. Read about them in the [`infer capture` manual](man-pages).
## List of Issue Types
The following issue types are reported by this checker:
- [ASSIGN_POINTER_WARNING](all-issue-types.md#assign_pointer_warning)
- [BAD_POINTER_COMPARISON](all-issue-types.md#bad_pointer_comparison)
- [COMPONENT_FACTORY_FUNCTION](all-issue-types.md#component_factory_function)
- [COMPONENT_INITIALIZER_WITH_SIDE_EFFECTS](all-issue-types.md#component_initializer_with_side_effects)
- [COMPONENT_WITH_MULTIPLE_FACTORY_METHODS](all-issue-types.md#component_with_multiple_factory_methods)
- [COMPONENT_WITH_UNCONVENTIONAL_SUPERCLASS](all-issue-types.md#component_with_unconventional_superclass)
- [CXX_REFERENCE_CAPTURED_IN_OBJC_BLOCK](all-issue-types.md#cxx_reference_captured_in_objc_block)
- [DIRECT_ATOMIC_PROPERTY_ACCESS](all-issue-types.md#direct_atomic_property_access)
- [DISCOURAGED_WEAK_PROPERTY_CUSTOM_SETTER](all-issue-types.md#discouraged_weak_property_custom_setter)
- [GLOBAL_VARIABLE_INITIALIZED_WITH_FUNCTION_OR_METHOD_CALL](all-issue-types.md#global_variable_initialized_with_function_or_method_call)
- [MUTABLE_LOCAL_VARIABLE_IN_COMPONENT_FILE](all-issue-types.md#mutable_local_variable_in_component_file)
- [POINTER_TO_CONST_OBJC_CLASS](all-issue-types.md#pointer_to_const_objc_class)
- [REGISTERED_OBSERVER_BEING_DEALLOCATED](all-issue-types.md#registered_observer_being_deallocated)
- [STRONG_DELEGATE_WARNING](all-issue-types.md#strong_delegate_warning)
- [UNAVAILABLE_API_IN_SUPPORTED_IOS_SDK](all-issue-types.md#unavailable_api_in_supported_ios_sdk)

@ -0,0 +1,13 @@
---
title: "Litho \"Required Props\""
description: "Checks that all non-option `@Prop`s have been specified when constructing Litho components."
---
Checks that all non-option `@Prop`s have been specified when constructing Litho components.
Activate with `--litho-required-props`.
Supported languages:
- C/C++/ObjC: No
- Java: Yes

@ -0,0 +1,19 @@
---
title: "Liveness"
description: "Detection of dead stores and unused variables."
---
Detection of dead stores and unused variables.
Activate with `--liveness`.
Supported languages:
- C/C++/ObjC: Yes
- Java: No
## List of Issue Types
The following issue types are reported by this checker:
- [DEAD_STORE](all-issue-types.md#dead_store)

@ -0,0 +1,13 @@
---
title: "Loop Hoisting"
description: "Detect opportunities to hoist function calls that are invariant outside of loop bodies for efficiency."
---
Detect opportunities to hoist function calls that are invariant outside of loop bodies for efficiency.
Activate with `--loop-hoisting`.
Supported languages:
- C/C++/ObjC: Yes
- Java: Yes

@ -0,0 +1,15 @@
---
title: "`printf()` Argument Types"
description: "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\")`"
---
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")`
**\*\*\*DEPRECATED\*\*\*** Unmaintained.
Activate with `--printf-args`.
Supported languages:
- C/C++/ObjC: No
- Java: Yes

@ -0,0 +1,13 @@
---
title: "Pulse"
description: "Memory and lifetime analysis."
---
Memory and lifetime analysis.
Activate with `--pulse`.
Supported languages:
- C/C++/ObjC: Experimental
- Java: Experimental

@ -0,0 +1,26 @@
---
title: "Quandary"
description: "The Quandary taint analysis detects flows of values between sources and sinks, except if the value went through a \"sanitizer\". In addition to some defaults, users can specify their own sources, sinks, and sanitizers functions."
---
The Quandary taint analysis detects flows of values between sources and sinks, except if the value went through a "sanitizer". In addition to some defaults, users can specify their own sources, sinks, and sanitizers functions.
Activate with `--quandary`.
Supported languages:
- C/C++/ObjC: Yes
- Java: Yes
Quandary is a static taint analyzer that identifies a variety of unsafe
information flows. It has a small list of built-in
[sources](https://github.com/facebook/infer/blob/master/infer/src/quandary/JavaTrace.ml#L36)
and
[sinks](https://github.com/facebook/infer/blob/master/infer/src/quandary/JavaTrace.ml#L178),
and you can define custom sources and sinks in your `.inferconfig` file (see
example
[here](https://github.com/facebook/infer/blob/master/infer/tests/codetoanalyze/java/quandary/.inferconfig)).
## List of Issue Types
The following issue types are reported by this checker:

@ -0,0 +1,510 @@
---
title: "RacerD"
description: "Thread safety analysis."
---
Thread safety analysis.
Activate with `--racerd`.
Supported languages:
- C/C++/ObjC: Yes
- Java: Yes
RacerD finds data races in your C++ and Java code. This page gives a more in-depth
explanation of how the analysis works *for Java code*, but may be less complete than the
[Thread Safety Violation bug description page](#thread-safety-violation).
To run the analysis, you can use plain `infer` (to run RacerD along with other
analyses that are run by default) or `infer --racerd-only` (to run only RacerD).
For example, the command `infer --racerd-only -- javac File.java` will run
RacerD on File.java.
## Background
RacerD statically analyzes Java code to detect potential concurrency bugs. This
analysis does not attempt to prove the absence of concurrency issues, rather, it
searches for a high-confidence class of data races. At the moment RacerD
concentrates on race conditions between methods in a class that is itself
intended to be thread safe. A race condition occurs when there are two
concurrent accesses to a class member variable that are not separated by mutual
exclusion, and at least one of the accesses is a write. Mutual exclusion can be
ensured by synchronization primitives such as locks, or by knowledge that both
accesses occur on the same thread.
## Triggering the analysis
RacerD doesn't try to check _all_ code for concurrency issues; it only looks at
code that it believes can run in a concurrent context. There are two signals
that RacerD looks for: (1) Explicitly annotating a class/method with
`@ThreadSafe` and (2) using a lock via the `synchronized` keyword. In both
cases, RacerD will look for concurrency issues in the code containing the signal
and all of its dependencies. In particular, it will report races between any
non-`private` methods of the same class that can peform conflicting accesses.
Annotating a class/interface with `@ThreadSafe` also triggers checking for all
of the subclasses of the class/implementations of the interface.
## Warnings
Let's take a look at the different types of concurrency issues that RacerD
flags. Two of the warning types are data races (`Unprotected write` and
`Read/write race`), and the third warning type encourages adding `@ThreadSafe`
annotations to interfaces to trigger additional checking.
### Unprotected write
RacerD will report an unprotected write when one or more writes can run in
parallel without synchronization. These come in two flavors: (1) a self-race (a
write-write race that occurs due to a method running in parallel with itself)
and (2) two conflicting writes to the same location. Here's an example of the
self-race flavor:
```
@ThreadSafe
public class Dinner {
private int mTemperature;
public void makeDinner() {
boilWater();
}
private void boilWater() {
mTemperature = 100; // unprotected write.
}
}
```
The class `Dinner` will generate the following report on the public method
`makeDinner()`:
`There may be a Thread Safety Violation: makeDinner() indirectly writes to mTemperature outside of synchronization.`
This warning can be fixed by synchronizing the access to `mTemperature`, making
`mTemperature` `volatile`, marking `makeDinner` as `@VisibleForTesting`, or
suppressing the warning by annotating the `Dinner` class or `makeDinner` method
with `@ThreadSafe(enableChecks = false)`.
### Read/Write Race
We sometimes need to protect read accesses as well as writes. Consider the
following class with unsynchronized methods.
```
@ThreadSafe
public class Account {
int mBalance = 0;
public void deposit(int amount) {
if (amount > 0) {
mBalance += amount;
}
}
public int withdraw(int amount){
if (amount >= 0 && mBalance - amount >= 0) {
mBalance -= amount;
return mBalance;
} else {
return 0;
}
}
}
```
If you run the `withdraw()` method in parallel with itself or with `deposit()`
you can get unexpected results here. For instance, if the stored balance is 11
and you run `withdraw(10)` in parallel with itself you can get a negative
balance. Furthermore, if you synchronize only the write statement
`mBalance -= amount`, then you can still get this bad result. The reason is that
there is a read/write race between the boolean condition
`mBalance - amount >= 0` and the writes. RacerD will duly warn
`Read/Write race. Public method int Account.withdraw(int) reads from field Account.mBalance. Potentially races with writes in methods void Account.deposit(int), int Account.withdraw(int)`
on the line with this boolean condition.
A solution to the threading problem here is to make both methods `synchronized`
to wrap both read and write accesses, or to use an `AtomicInteger` for
`mBalance` rather than an ordinary `int`.
### Interface not thread-safe
In the following code, RacerD will report an `Interface not thread-safe` warning
on the call to `i.bar()`:
```
interface I {
void bar();
}
@ThreadSafe
class C {
void foo(I i) {
i.bar(); // RacerD warns here
}
}
```
The way to fix this warning is to add a `@ThreadSafe` annotation to the
interface `I`, which will enforce the thread-safety of each of the
implementations of `I`.
You might wonder why it's necessary to annotate `I` -- can't RacerD just look at
all the implementations of `i` at the call site for `bar`? Although this is a
fine idea idea in principle, it's a bad idea in practice due to a (a) separate
compilation and (b) our diff-based deployment model. In the example above, the
compiler doesn't have to know about all implementations (or indeed, any
implementations) of `I` at the time it compiles this code, so there's no
guarantee that RacerD will know about or be able to check all implementations of
`I`. That's (a). For (b), say that we check that all implementations of `I` are
thread-safe at the time this code is written, but we don't add the annotation.
If someone else comes along and adds a new implementation of `I` that is not
thread-safe, RacerD will have no way of knowing that this will cause a potential
bug in `foo`. But if `I` is annotated, RacerD will enforce that all new
implementations of `I` are thread-safe, and `foo` will remain bug-free.
## Annotations to help RacerD understand your code
Getting started with RacerD doesn't require any annotations at all -- RacerD
will look at your usage of locks and figure out what data is not guarded
consistently. But increasing the coverage and signal-to-noise ratio may require
adding `@ThreadSafe` annotations along with some of the other annotations
described below. Most of annotations described below can be used via the Maven
Central package available
[here](https://maven-repository.com/artifact/com.facebook.infer.annotation/infer-annotation).
### `@ThreadConfined`
The intuitive idea of thread-safety is that a class is impervious to concurrency
issues for all concurrent contexts, even those that have not been written yet
(it is future-proof). RacerD implements this by naively assuming that any method
can potentially be called on any thread. You may determine, however, that an
object, method, or field is only ever accessed on a single thread during program
execution. Annotating such elements with `@ThreadConfined` informs RacerD of
this restriction. Note that a thread-confined method cannot race with itself but
it can still race with other methods.
```
List mCache;
@ThreadConfined(UI)
void prepareCache() {
// populate the cache
mCache.add(...);
// post cache cleanup task to run later
mUIExecutor.execute(new Runnable() {
@ThreadConfined(UI)
public void run() {
mCache.clear();
}
});
}
```
In this example, both `prepareCache` and `run` touch `mCache`. But there's no
possibility of a race between the two methods because both of them will run
sequentially on the UI thread. Adding a `@ThreadConfined(UI)` or `@UiThread`
annotation to these methods will stop it from warning that there is a race on
`mCache`. We could also choose to add a `@ThreadConfined` annotation to `mCache`
itself.
### `@Functional`
Not all races are bugs; a race can be benign. Consider the following:
```
@Functional Boolean askNetworkIfShouldShowFeature();
private Boolean mShouldShowFeature;
@ThreadSafe boolean shouldShowFeature() {
if (mShouldShowFeature == null) {
mShouldShowFeature = askNetworkIfShouldShowFeature();
}
return mShouldShowFeature;
}
```
This code caches the result of an expensive network call that checks whether the
current user should be shown an experimental feature. This code looks racy, and
indeed it is: if two threads execute `shouldShowFeature()` at the same time, one
may read `mShouldShowFeature` at the same time the other is writing it.
However, this is actually a _benign_ race that the programmer intentionally
allows for performance reasons. The reason this code is safe is that the
programmer knows that `askNetworkIfShouldShowFeature()` will always return the
same value in the same run of the app. Adding synchronization would remove the
race, but acquiring/releasing locks and lock contention would potentially slow
down every call to `shouldShowFeature()`. The benign race approach makes every
call after the first fast without changing the safety of the code.
RacerD will report a race on this code by default, but adding the
`@Functional annotation to askNetworkIfShouldShowFeature()` informs RacerD that
the function is always expected to return the same value. This assumption allows
RacerD to understand that this particular code is safe, though it will still
(correctly) warn if `mShouldShowFeature` is read/written elsewhere.
Be sure not to use the `@Functional` pattern for _singleton instantiation_, as
it's possible the "singleton" can be constructed more than once.
```
public class MySingleton {
private static sInstance;
// Not @Functional
public MySingleton getInstance() {
if (sInstance == null) {
// Different threads may construct their own instances.
sInstance == new MySingleton();
}
return sInstance;
}
}
```
### `@ReturnsOwnership`
RacerD does not warn on unprotected writes to _owned_ objects. An object is
owned if it has been freshly allocated in the current thread and has not escaped
to another thread. RacerDf automatically tracks ownership in most cases, but it
needs help with `abstract` and `interface` methods that return ownership:
```
@ThreadSafe
public interface Car {
@ReturnsOwnership abstract Car buyCar();
void carsStuff() {
Car myCar = new Car();
myCar.wheels = 4; // RacerD won't warn here because it knows myCar is owned
Car otherCar = buyCar();
otherCar.wheels = 3; // RacerD would normally warn here, but won't because of the `@ReturnsOwnership` annotation
}
}
```
### `@VisibleForTesting`
RacerD reports races between any two non`-private` methods of a class that may
run in a concurrent context. Sometimes, a RacerD report may be false because one
of the methods cannot actually be called from outside the current class. One fix
is making the method `private` to enforce this, but this might break unit tests
that need to call the method in order to test it. In this case, the
`@VisibleForTesting` annotation will allow RacerD to consider the method as
effectively `private` will still allowing it to be called from the unit test:
```
@VisibleForTesting void setF() {
this.f = ...; // RacerD would normally warn here, but @VisibleForTesting will silence the warning
}
synchronized void setFWithLock() {
setF();
}
```
Unlike the other annotations shown here, this one lives in
[Android](https://developer.android.com/reference/android/support/annotation/VisibleForTesting.html).
## <a name="interprocedural"></a> Interprocedural Reasoning
An important feature of RacerD is that it finds races by analyzing not just one
file or class, but by looking at memory accesses that occur after going through
several procedure calls. It handles this even between classes and between files.
Here is a very basic example
```
@ThreadSafe
class A{
void m1(B bb) {
bb.meth_write();
}
}
class B{
Integer x;
void meth_write() {
x = 88;
}
}
```
Class `B` is not annotated `@ThreadSafe` and does not have any locks, so RacerD
does not directly look for threading issues there. However, method `m1()` in
class `A` has a potential self-race, if it is run in parallel with itself and
the same argument for each call. RacerD discovers this.
```
InterProc.java:17: error: THREAD_SAFETY_VIOLATION
Unprotected write. Non-private method `A.m1` indirectly writes to field `&this.B.x` outside of synchronization.
Reporting because the current class is annotated `@ThreadSafe`, so we assume that this method can run in
parallel with other non-private methods in the class (incuding itself).
15.
16. void m1(B bb) {
17. > bb.meth_write();
18. }
19. }
```
RacerD does this sort of reasoning using what is known as a _compositional
inteprocedural analysis_. There, each method is analyzed independently of its
context to produce a summary of the behaviour of the procedure. In this case the
summaries for `m1()' and`meth()' include information as follows.
```
Procedure: void A.m1(B)
Accesses: { Unprotected({ 1 }) -> { Write to &bb.B.x at void B.meth_write() at line 17 } }
Procedure: void B.meth_write()
Accesses { Unprotected({ 0 }) -> { Write to &this.B.x at at line 25 } }
```
The descriptions here are cryptic and do not include all the information in the
summaries, but the main point is that you can use RacerD to look for races in
codebases where the mutations done by threads might occur only after a chain of
procedure calls.
## <a name="context"></a> Context and Selected Related Work
Reasoning about concurrency divides into bug detection and proving absence of
bugs. RacerD is on the detection side of reasoning.
The rapid growth in the number of interleavings is problematic for tools that
attempt exhaustive exploration. With just 150 instructions for two threads, the
number 10^88 of interleavings is more that the estimated number of atoms in the
known universe.
[There has been important work which uses various techniques to attempt to reduce the number of interleavings](https://en.wikipedia.org/wiki/Partial_order_reduction)
while still in principle covering all possibilities, but scale is still a
challenge. Note that RacerD is not exhaustive: it has false negatives (missed
bugs). But in compensation it is fast, and effective (it finds bugs in
practice).
Static analysis for concurrency has attracted a lot of attention from
researchers, but difficulties with scalability and precision have meant that
previous techniques have had little industrial impact. Automatic static race
detection itself has seen significant work. The most advanced approaches,
exemplified by the [Chord](http://www.cis.upenn.edu/~mhnaik/pubs/pldi06.pdf)
tool, often use a whole-program analysis paired with a sophisticated alias
analysis, two features we have consciously avoided. Generally speaking, the
leading research tools can be more precise, but RacerD is faster and can operate
without the whole program: we have opted to go for speed in a way that enables
industrial deployment on a large, rapidly changing codebase, while trying to use
as simple techniques as possible to cover many (not all) of the patterns covered
by slower but precise research tools.
An industrial static analysis tool from
[Contemplate](http://homepages.inf.ed.ac.uk/dts/pub/avocs2015.pdf) also targets
@ThreadSafe annotations, but limits the amount of inter-procedural reasoning:
“This analysis is interprocedural, but to keep the overall analysis scalable,
only calls to private and protected methods on the same class are followed”.
RacerD does deep, cross-file and cross-class inter-procedural reasoning, and yet
still scales; the inter-class capability was one of the first requests from
Facebook engineers.
[A separate blog post looked at 100 recent data race fixes](https://code.facebook.com/posts/1537144479682247/finding-inter-procedural-bugs-at-scale-with-infer-static-analyzer/)
in Infer's deployment in various bug categories, and for data races observed
that 53 of them were inter-file (and thus involving multiple classes).
[See above](racerd#interprocedural) for an example of RacerD's interprocedural
capabilities.
One reaction to the challenge of developing effective static race detectors has
been to ask the programmer to do more work to help the analyzer. Examples of
this approach include the
[Clang Thread Safety Analyzer](https://clang.llvm.org/docs/ThreadSafetyAnalysis.html),
the typing of [locks](https://doc.rust-lang.org/std/sync/struct.Mutex.html) in
Rust, and the use/checking of @GuardedBy annotations in
[Java](https://homes.cs.washington.edu/~mernst/pubs/locking-semantics-nfm2016.pdf)
including in
[Google's Error Prone analyzer](https://github.com/google/error-prone/blob/master/docs/bugpattern/GuardedBy.md).
When lock annotations are present they make the analyzer's life easier, and we
have
[GuardedBy checking as part of Infer](checkers-bug-types#UNSAFE_GUARDEDBY_ACCESS)
(though separate from the race detector). Our GuardedBy checker can find some
bugs that RacerD does not (see
[this example on anonymous inner classes](checkers-bug-types#anonymous_inner)),
but the race detector finds a greater number because it can work on un-annotated
code. It is possible to have a very effective race analysis without decreeing
that such annotations must be present. This was essential for our deployment,
since _requiring_ lock annotations would have been a show stopper for converting
many thousands of lines of code to a concurrent context. We believe that this
finding should be transportable to new type systems and language designs, as
well as to other analyses for existing languages.
Another reaction to difficulties in static race detection has been to instead
develop dynamic analyses, automatic testing tools which work by running a
program to attempt to find flaws. Google's Thread Sanitizer is a widely used and
mature tool in this area, which has been used in production to find many bugs in
C-family languages.
[The Thread Sanitizer authors explicitly call out limitations with static race analyzers](http://www.cs.columbia.edu/~junfeng/11fa-e6121/papers/thread-sanitizer.pdf)
as part of their motivation: “It seems unlikely that static detectors will work
effectively in our environment: Googles code is large and complex enough that
it would be expensive to add the annotations required by a typical static
detector”.
We have worked to limit the annotations that RacerD needs, for reasons similar
those expressed by the Thread Sanitizer authors. And we have sought to bring the
complementary benefits of static analysis — possibility of cheaper analysis and
fast reporting, and ability to analyze code before it is placed in a context to
run — to race detection. But we are interested as well in the future in
leveraging ideas in the dynamic techniques to improve or add to our analysis for
race detection.
## Limitations
There are a number of known limitations to the design of the race detector.
- It looks for races involving syntactically identical access paths, and misses
races due to aliasing
- It misses races that arise from a locally declared object escaping its scope
- It uses a boolean locks abstraction, and so misses races where two accesses
are mistakenly protected by different locks
- It assumes a deep ownership model, which misses races where local objects
refer to or contain non-owned objects.
- It avoids reasoning about weak memory and Java's volatile keyword
Most of these limitations are consistent with the design goal of reducing false
positives, even if they lead to false negatives. They also allow technical
tradeoffs which are different than if we were to favour reduction of false
negatives over false positives.
A different kind of limitation concerns the bugs searched for: Data races are
the most basic form of concurrency error, but there are many types of
concurrency issues out there that RacerD does not check for (but might in the
future). Examples include deadlock, atomicity, and check-then-act bugs (shown
below). You must look for these bugs yourself!
```
@ThreadSafe
public class SynchronizedList<T> {
synchronized boolean isEmpty() { ... }
synchronized T add(T item) { ... }
// Not thread safe!!!
public class ListUtil<T> {
public void addIfEmpty(SynchronizedList<T> list, T item) {
if (list.isEmpty()) {
// In a race, another thread can add to the list here.
list.add(item);
}
}
}
```
Finally, using `synchronized` blindly as a means to fix every unprotected write
or read is not always safe. Even with RacerD, finding, understanding, and fixing
concurrency issues is difficult. If you would like to learn more about best
practices, [Java Concurrency in Practice](http://jcip.net/) is an excellent
resource.
## List of Issue Types
The following issue types are reported by this checker:
- [INTERFACE_NOT_THREAD_SAFE](all-issue-types.md#interface_not_thread_safe)
- [LOCK_CONSISTENCY_VIOLATION](all-issue-types.md#lock_consistency_violation)
- [THREAD_SAFETY_VIOLATION](all-issue-types.md#thread_safety_violation)

@ -0,0 +1,23 @@
---
title: "Self in Block"
description: "An Objective-C-specific analysis to detect when a block captures `self`."
---
An Objective-C-specific analysis to detect when a block captures `self`.
Activate with `--self-in-block`.
Supported languages:
- C/C++/ObjC: Yes
- Java: No
## List of Issue Types
The following issue types are reported by this checker:
- [CAPTURED_STRONG_SELF](all-issue-types.md#captured_strong_self)
- [MIXED_SELF_WEAKSELF](all-issue-types.md#mixed_self_weakself)
- [MULTIPLE_WEAKSELF](all-issue-types.md#multiple_weakself)
- [STRONG_SELF_NOT_CHECKED](all-issue-types.md#strong_self_not_checked)
- [WEAK_SELF_IN_NO_ESCAPE_BLOCK](all-issue-types.md#weak_self_in_no_escape_block)

@ -0,0 +1,19 @@
---
title: "Static Initialization Order Fiasco"
description: "Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."
---
Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors.
Activate with `--siof`.
Supported languages:
- C/C++/ObjC: Yes
- Java: No
## List of Issue Types
The following issue types are reported by this checker:
- [STATIC_INITIALIZATION_ORDER_FIASCO](all-issue-types.md#static_initialization_order_fiasco)

@ -0,0 +1,26 @@
---
title: "Starvation"
description: "Detect various kinds of situations when no progress is being made because of concurrency errors."
---
Detect various kinds of situations when no progress is being made because of concurrency errors.
Activate with `--starvation`.
Supported languages:
- C/C++/ObjC: Yes
- Java: Yes
Detect several kinds of "starvation" problems:
- deadlocks
- violations of `@Lockless` annotations
- violations of [Android's "strict mode"](https://developer.android.com/reference/android/os/StrictMode)
- doing expensive operations on the Android UI thread
## List of Issue Types
The following issue types are reported by this checker:
- [DEADLOCK](all-issue-types.md#deadlock)
- [STARVATION](all-issue-types.md#starvation)
- [STRICT_MODE_VIOLATION](all-issue-types.md#strict_mode_violation)

@ -0,0 +1,13 @@
---
title: "TOPL"
description: "Detects errors based on user-provided state machines describing multi-object monitors."
---
Detects errors based on user-provided state machines describing multi-object monitors.
Activate with `--topl`.
Supported languages:
- C/C++/ObjC: Experimental
- Java: Experimental

@ -0,0 +1,13 @@
---
title: "Uninitialized Variable"
description: "Warns when values are used before having been initialized."
---
Warns when values are used before having been initialized.
Activate with `--uninit`.
Supported languages:
- C/C++/ObjC: Yes
- Java: No

@ -1,5 +1,5 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed May 13 17:23:54 2020 -->
<!-- CreationDate: Thu Jun 11 11:55:07 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
@ -72,45 +72,48 @@ report.</p>
<p style="margin-left:11%; margin-top: 1em"><b>--annotation-reachability</b></p>
<p style="margin-left:17%;">Activates: the annotation
reachability checker. Given a pair of source and sink
annotation, e.g. @PerformanceCritical and @Expensive, this
checker will warn whenever some method annotated with
@PerformanceCritical calls, directly or indirectly, another
method annotated with @Expensive (Conversely:
<p style="margin-left:17%;">Activates: checker
annotation-reachability: Given a pair of source and sink
annotation, e.g. &rsquo;@PerformanceCritical&rsquo; and
&rsquo;@Expensive&rsquo;, this checker will warn whenever
some method annotated with
&rsquo;@PerformanceCritical&rsquo; calls, directly or
indirectly, another method annotated with
&rsquo;@Expensive&rsquo; (Conversely:
<b>--no-annotation-reachability</b>)</p>
<p style="margin-left:11%;"><b>--annotation-reachability-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--annotation-reachability</b> and disable all other
checkers (Conversely:
<b>--no-annotation-reachability-only</b>)</p>
annotation-reachability and disable all other checkers
(Conversely: <b>--no-annotation-reachability-only</b>)</p>
<p style="margin-left:11%;"><b>--no-biabduction</b></p>
<p style="margin-left:17%;">Deactivates: the separation
logic based bi-abduction analysis using the checkers
framework (Conversely: <b>--biabduction</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
biabduction: This analysis deals with a range of issues,
many linked to memory safety. (Conversely:
<b>--biabduction</b>)</p>
<p style="margin-left:11%;"><b>--biabduction-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--biabduction</b> and disable all other checkers
(Conversely: <b>--no-biabduction-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable biabduction
and disable all other checkers (Conversely:
<b>--no-biabduction-only</b>)</p>
<p style="margin-left:11%;"><b>--bufferoverrun</b></p>
<p style="margin-left:17%;">Activates: the buffer overrun
analysis (Conversely: <b>--no-bufferoverrun</b>)</p>
<p style="margin-left:17%;">Activates: checker
bufferoverrun: InferBO is a detector for out-of-bounds array
accesses. (Conversely: <b>--no-bufferoverrun</b>)</p>
<p style="margin-left:11%;"><b>--bufferoverrun-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--bufferoverrun</b> and disable all other checkers
(Conversely: <b>--no-bufferoverrun-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable bufferoverrun
and disable all other checkers (Conversely:
<b>--no-bufferoverrun-only</b>)</p>
<p style="margin-left:11%;"><b>--changed-files-index</b>
<i>file</i></p>
@ -122,14 +125,15 @@ root or be absolute</p>
<p style="margin-left:11%;"><b>--class-loads</b></p>
<p style="margin-left:17%;">Activates: Java class loading
analysis (Conversely: <b>--no-class-loads</b>)</p>
<p style="margin-left:17%;">Activates: checker class-loads:
Compute set of Java classes loaded. (Conversely:
<b>--no-class-loads</b>)</p>
<p style="margin-left:11%;"><b>--class-loads-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--class-loads</b> and disable all other checkers
(Conversely: <b>--no-class-loads-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable class-loads
and disable all other checkers (Conversely:
<b>--no-class-loads-only</b>)</p>
<p style="margin-left:11%;"><b>--continue-analysis</b></p>
@ -142,13 +146,16 @@ given the same before. Not compatible with
<p style="margin-left:11%;"><b>--cost</b></p>
<p style="margin-left:17%;">Activates: checker for
performance cost analysis (Conversely: <b>--no-cost</b>)</p>
<p style="margin-left:17%;">Activates: checker cost:
Computes the time complexity of functions and methods. Can
be used to detect changes in runtime complexity with
&rsquo;infer reportdiff&rsquo;. (Conversely:
<b>--no-cost</b>)</p>
<p style="margin-left:11%;"><b>--cost-only</b></p>
<p style="margin-left:17%;">Activates: Enable <b>--cost</b>
and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable cost and
disable all other checkers (Conversely:
<b>--no-cost-only</b>)</p>
<p style="margin-left:11%;"><b>--custom-symbols</b>
@ -210,36 +217,35 @@ reporting. (Conversely: <b>--deduplicate</b>)</p>
<b>--biabduction</b>, <b>--fragment-retains-view</b>,
<b>--inefficient-keyset-iterator</b>, <b>--linters</b>,
<b>--liveness</b>, <b>--racerd</b>, <b>--siof</b>,
<b>--self_in_block</b>, <b>--starvation</b>, <b>--uninit</b>
<b>--self-in-block</b>, <b>--starvation</b>, <b>--uninit</b>
(Conversely: <b>--default-checkers</b>)</p>
<p style="margin-left:11%;"><b>--eradicate</b></p>
<p style="margin-left:17%;">Activates: the eradicate
@Nullable checker for Java annotations (Conversely:
<b>--no-eradicate</b>)</p>
<p style="margin-left:17%;">Activates: checker eradicate:
The eradicate &rsquo;@Nullable&rsquo; checker for Java
annotations. (Conversely: <b>--no-eradicate</b>)</p>
<p style="margin-left:11%;"><b>--eradicate-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--eradicate</b> and disable all other checkers
(Conversely: <b>--no-eradicate-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable eradicate and
disable all other checkers (Conversely:
<b>--no-eradicate-only</b>)</p>
<p style="margin-left:11%;"><b>--no-fragment-retains-view</b></p>
<p style="margin-left:17%;">Deactivates: detects when
Android fragments are not explicitly nullified before
becoming unreabable (Conversely:
<b>--fragment-retains-view</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
fragment-retains-view: Detects when Android fragments are
not explicitly nullified before becoming unreachable.
(Conversely: <b>--fragment-retains-view</b>)</p>
<p style="margin-left:11%;"><b>--fragment-retains-view-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--fragment-retains-view</b> and disable all other
checkers (Conversely:
<b>--no-fragment-retains-view-only</b>)</p>
fragment-retains-view and disable all other checkers
(Conversely: <b>--no-fragment-retains-view-only</b>)</p>
<p style="margin-left:11%;"><b>--help</b></p>
@ -260,44 +266,49 @@ internal options in the INTERNAL OPTIONS section</p>
<p style="margin-left:11%;"><b>--immutable-cast</b></p>
<p style="margin-left:17%;">Activates: the detection of
object cast from immutable type to mutable type. For
instance, it will detect cast from ImmutableList to List,
ImmutableMap to Map, and ImmutableSet to Set. (Conversely:
<b>--no-immutable-cast</b>)</p>
<p style="margin-left:17%;">Activates: checker
immutable-cast: Detection of object cast from immutable
types to mutable types. For instance, it will detect casts
from &rsquo;ImmutableList&rsquo; to &rsquo;List&rsquo;,
&rsquo;ImmutableMap&rsquo; to &rsquo;Map&rsquo;, and
&rsquo;ImmutableSet&rsquo; to &rsquo;Set&rsquo;.
(Conversely: <b>--no-immutable-cast</b>)</p>
<p style="margin-left:11%;"><b>--immutable-cast-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--immutable-cast</b> and disable all other checkers
(Conversely: <b>--no-immutable-cast-only</b>)</p>
immutable-cast and disable all other checkers (Conversely:
<b>--no-immutable-cast-only</b>)</p>
<p style="margin-left:11%;"><b>--impurity</b></p>
<p style="margin-left:17%;">Activates: [EXPERIMENTAL]
Impurity analysis (Conversely: <b>--no-impurity</b>)</p>
<p style="margin-left:17%;">Activates: checker impurity:
Detects functions with potential side-effects. Same as
&quot;purity&quot;, but implemented on top of Pulse.
(Conversely: <b>--no-impurity</b>)</p>
<p style="margin-left:11%;"><b>--impurity-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--impurity</b> and disable all other checkers
(Conversely: <b>--no-impurity-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable impurity and
disable all other checkers (Conversely:
<b>--no-impurity-only</b>)</p>
<p style="margin-left:11%;"><b>--no-inefficient-keyset-iterator</b></p>
<p style="margin-left:17%;">Deactivates: Check for
inefficient uses of keySet iterator that access both the key
and the value. (Conversely:
<b>--inefficient-keyset-iterator</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
inefficient-keyset-iterator: Check for inefficient uses of
iterators that iterate on keys then lookup their values,
instead of iterating on key-value pairs directly.
(Conversely: <b>--inefficient-keyset-iterator</b>)</p>
<p style="margin-left:11%;"><b>--inefficient-keyset-iterator-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--inefficient-keyset-iterator</b> and disable all other
checkers (Conversely:
inefficient-keyset-iterator and disable all other checkers
(Conversely:
<b>--no-inefficient-keyset-iterator-only</b>)</p>
<p style="margin-left:11%;"><b>--jobs</b>,<b>-j</b>
@ -314,59 +325,64 @@ analysis encounters a failure (Conversely:
<p style="margin-left:11%;"><b>--no-linters</b></p>
<p style="margin-left:17%;">Deactivates: syntactic linters
<p style="margin-left:17%;">Deactivates: checker linters:
Declarative linting framework over the Clang AST.
(Conversely: <b>--linters</b>)</p>
<p style="margin-left:11%;"><b>--linters-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--linters</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable linters and
disable all other checkers (Conversely:
<b>--no-linters-only</b>)</p>
<p style="margin-left:11%;"><b>--litho-required-props</b></p>
<p style="margin-left:17%;">Activates: [EXPERIMENTAL]
Required Prop check for Litho (Conversely:
<p style="margin-left:17%;">Activates: checker
litho-required-props: Checks that all non-option
&rsquo;@Prop&rsquo;s have been specified when constructing
Litho components. (Conversely:
<b>--no-litho-required-props</b>)</p>
<p style="margin-left:11%;"><b>--litho-required-props-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--litho-required-props</b> and disable all other checkers
litho-required-props and disable all other checkers
(Conversely: <b>--no-litho-required-props-only</b>)</p>
<p style="margin-left:11%;"><b>--no-liveness</b></p>
<p style="margin-left:17%;">Deactivates: the detection of
dead stores and unused variables (Conversely:
<p style="margin-left:17%;">Deactivates: checker liveness:
Detection of dead stores and unused variables. (Conversely:
<b>--liveness</b>)</p>
<p style="margin-left:11%;"><b>--liveness-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--liveness</b> and disable all other checkers
(Conversely: <b>--no-liveness-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable liveness and
disable all other checkers (Conversely:
<b>--no-liveness-only</b>)</p>
<p style="margin-left:11%;"><b>--loop-hoisting</b></p>
<p style="margin-left:17%;">Activates: checker for
loop-hoisting (Conversely: <b>--no-loop-hoisting</b>)</p>
<p style="margin-left:17%;">Activates: checker
loop-hoisting: Detect opportunities to hoist function calls
that are invariant outside of loop bodies for efficiency.
(Conversely: <b>--no-loop-hoisting</b>)</p>
<p style="margin-left:11%;"><b>--loop-hoisting-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--loop-hoisting</b> and disable all other checkers
(Conversely: <b>--no-loop-hoisting-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable loop-hoisting
and disable all other checkers (Conversely:
<b>--no-loop-hoisting-only</b>)</p>
<p style="margin-left:11%;"><b>--perf-profiler-data-file</b>
<i>file</i></p>
<p style="margin-left:17%;">Specify the file containing
perf profiler data to read</p>
<p style="margin-left:17%;">DEPRECATED: Specify the file
containing perf profiler data to read</p>
<p style="margin-left:11%;"><b>--print-active-checkers</b></p>
@ -382,18 +398,19 @@ stdout and stderr (Conversely: <b>--no-print-logs</b>)</p>
<p style="margin-left:11%;"><b>--printf-args</b></p>
<p style="margin-left:17%;">Activates: the detection of
mismatch between the Java printf format strings and the
argument types For, example, this checker will warn about
the type error in &rsquo;printf(&quot;Hello %d&quot;,
<p style="margin-left:17%;">Activates: checker printf-args:
Detect mismatches between the Java &rsquo;printf&rsquo;
format strings and the argument types For example, this
checker will warn about the type error in
&rsquo;printf(&quot;Hello %d&quot;,
&quot;world&quot;)&rsquo; (Conversely:
<b>--no-printf-args</b>)</p>
<p style="margin-left:11%;"><b>--printf-args-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--printf-args</b> and disable all other checkers
(Conversely: <b>--no-printf-args-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable printf-args
and disable all other checkers (Conversely:
<b>--no-printf-args-only</b>)</p>
<p style="margin-left:11%;"><b>--progress-bar-style</b>
<i>{ auto | plain | multiline }</i></p>
@ -411,8 +428,9 @@ the project</p>
<p style="margin-left:11%;"><b>--pulse</b></p>
<p style="margin-left:17%;">Activates: [EXPERIMENTAL] C++
lifetime analysis (Conversely: <b>--no-pulse</b>)</p>
<p style="margin-left:17%;">Activates: checker pulse:
Memory and lifetime analysis. (Conversely:
<b>--no-pulse</b>)</p>
<p style="margin-left:11%;"><b>--pulse-cut-to-one-path-procedures-pattern</b>
@ -447,31 +465,37 @@ are method or namespace::method</p>
<p style="margin-left:11%;"><b>--pulse-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--pulse</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable pulse and
disable all other checkers (Conversely:
<b>--no-pulse-only</b>)</p>
<p style="margin-left:11%;"><b>--purity</b></p>
<p style="margin-left:17%;">Activates: [EXPERIMENTAL]
Purity analysis (Conversely: <b>--no-purity</b>)</p>
<p style="margin-left:17%;">Activates: checker purity:
Detects pure (side-effect-free) functions. A different
implementation of &quot;impurity&quot;. (Conversely:
<b>--no-purity</b>)</p>
<p style="margin-left:11%;"><b>--purity-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--purity</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable purity and
disable all other checkers (Conversely:
<b>--no-purity-only</b>)</p>
<p style="margin-left:11%;"><b>--quandary</b></p>
<p style="margin-left:17%;">Activates: the quandary taint
analysis (Conversely: <b>--no-quandary</b>)</p>
<p style="margin-left:17%;">Activates: checker quandary:
The Quandary taint analysis detects flows of values between
sources and sinks, except if the value went through a
&quot;sanitizer&quot;. In addition to some defaults, users
can specify their own sources, sinks, and sanitizers
functions. (Conversely: <b>--no-quandary</b>)</p>
<p style="margin-left:11%;"><b>--quandary-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--quandary</b> and disable all other checkers
(Conversely: <b>--no-quandary-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable quandary and
disable all other checkers (Conversely:
<b>--no-quandary-only</b>)</p>
<p style="margin-left:11%;"><b>--quiet</b>,<b>-q</b></p>
@ -481,13 +505,13 @@ anything on standard output. (Conversely: <b>--no-quiet</b>
<p style="margin-left:11%;"><b>--no-racerd</b></p>
<p style="margin-left:17%;">Deactivates: the RacerD thread
safety analysis (Conversely: <b>--racerd</b>)</p>
<p style="margin-left:17%;">Deactivates: checker racerd:
Thread safety analysis. (Conversely: <b>--racerd</b>)</p>
<p style="margin-left:11%;"><b>--racerd-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--racerd</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable racerd and
disable all other checkers (Conversely:
<b>--no-racerd-only</b>)</p>
@ -517,29 +541,31 @@ absolute path to a relative path to the root directory
<p style="margin-left:17%;">Write results and internal
files in the specified directory</p>
<p style="margin-left:11%;"><b>--no-self_in_block</b></p>
<p style="margin-left:11%;"><b>--no-self-in-block</b></p>
<p style="margin-left:17%;">Deactivates: checker to flag
incorrect uses of when Objective-C blocks capture self
(Conversely: <b>--self_in_block</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
self-in-block: An Objective-C-specific analysis to detect
when a block captures &rsquo;self&rsquo;. (Conversely:
<b>--self-in-block</b>)</p>
<p style="margin-left:11%;"><b>--self_in_block-only</b></p>
<p style="margin-left:11%;"><b>--self-in-block-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--self_in_block</b> and disable all other checkers
(Conversely: <b>--no-self_in_block-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable self-in-block
and disable all other checkers (Conversely:
<b>--no-self-in-block-only</b>)</p>
<p style="margin-left:11%;"><b>--no-siof</b></p>
<p style="margin-left:17%;">Deactivates: the Static
Initialization Order Fiasco analysis (C++ only) (Conversely:
<b>--siof</b>)</p>
<p style="margin-left:17%;">Deactivates: checker siof:
Catches Static Initialization Order Fiascos in C++, that can
lead to subtle, compiler-version-dependent errors.
(Conversely: <b>--siof</b>)</p>
<p style="margin-left:11%;"><b>--siof-only</b></p>
<p style="margin-left:17%;">Activates: Enable <b>--siof</b>
and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable siof and
disable all other checkers (Conversely:
<b>--no-siof-only</b>)</p>
<p style="margin-left:11%;"><b>--sqlite-cache-size</b>
@ -563,24 +589,40 @@ be a power of two between 512 and 65536.</p>
<p style="margin-left:11%;"><b>--no-starvation</b></p>
<p style="margin-left:17%;">Deactivates: starvation
analysis (Conversely: <b>--starvation</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
starvation: Detect various kinds of situations when no
progress is being made because of concurrency errors.
(Conversely: <b>--starvation</b>)</p>
<p style="margin-left:11%;"><b>--starvation-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--starvation</b> and disable all other checkers
(Conversely: <b>--no-starvation-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable starvation
and disable all other checkers (Conversely:
<b>--no-starvation-only</b>)</p>
<p style="margin-left:11%;"><b>--topl</b></p>
<p style="margin-left:17%;">Activates: checker topl:
Detects errors based on user-provided state machines
describing multi-object monitors. (Conversely:
<b>--no-topl</b>)</p>
<p style="margin-left:11%;"><b>--topl-only</b></p>
<p style="margin-left:17%;">Activates: Enable topl and
disable all other checkers (Conversely:
<b>--no-topl-only</b>)</p>
<p style="margin-left:11%;"><b>--no-uninit</b></p>
<p style="margin-left:17%;">Deactivates: checker for use of
uninitialized values (Conversely: <b>--uninit</b>)</p>
<p style="margin-left:17%;">Deactivates: checker uninit:
Warns when values are used before having been initialized.
(Conversely: <b>--uninit</b>)</p>
<p style="margin-left:11%;"><b>--uninit-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--uninit</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable uninit and
disable all other checkers (Conversely:
<b>--no-uninit-only</b>)</p>
<h2>BUCK OPTIONS

@ -1,5 +1,5 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed May 13 17:23:54 2020 -->
<!-- CreationDate: Thu Jun 11 11:55:07 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
@ -277,6 +277,12 @@ not Java. <b><br>
clang-based targets (C/C++/Objective-C/Objective-C++).
(Conversely: <b>--no-buck-clang</b>)</p>
<p style="margin-left:11%;"><b>--buck-combined</b></p>
<p style="margin-left:17%;">Activates: Buck integration for
clang-based and Java targets. (Conversely:
<b>--no-buck-combined</b>)</p>
<p style="margin-left:11%;"><b>--buck-compilation-database</b>
<i>{ no-deps | deps }</i></p>

@ -1,5 +1,5 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed May 13 17:23:54 2020 -->
<!-- CreationDate: Thu Jun 11 11:55:07 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>

@ -1,5 +1,5 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed May 13 17:23:54 2020 -->
<!-- CreationDate: Thu Jun 11 11:55:07 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>

@ -0,0 +1,166 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Thu Jun 11 11:55:07 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>infer-help</title>
</head>
<body>
<h1 align="center">infer-help</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#OPTIONS">OPTIONS</a><br>
<a href="#ENVIRONMENT">ENVIRONMENT</a><br>
<a href="#FILES">FILES</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">infer-help -
Show and generate documentation.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>infer help
<br>
infer help --help-checker</b> <i>checker1 ...</i>
<b>--help-checker</b> <i>checkerN</i> <b><br>
infer help --help-issue-type</b> <i>ISSUE_TYPE1 ...</i>
<b>--help-issue-type</b> <i>ISSUE_TYPEN</i> <b><br>
infer help --list-checkers <br>
infer help --list-issue-types <br>
infer help --write-website</b> <i>website_root</i></p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Without
arguments, show the Infer manual as with <b>infer
--help</b></p>
<p style="margin-left:11%; margin-top: 1em">For each
<b>-help-checker</b> or <b>--help-issue-type</b> option
passed, display information about the given checker or issue
type.</p>
<p style="margin-left:11%; margin-top: 1em">If
<b>--list-checkers</b> is passed, list all available
checkers.</p>
<p style="margin-left:11%; margin-top: 1em">If
<b>--list-issue-types</b> is passed, list all issue
types.</p>
<p style="margin-left:11%; margin-top: 1em">Use
<b>--write-website</b> to build some of the documentation
for the <i>fbinfer.com</i> website. (Used in scripts, not
meant to be used except when publishing content to
<i>fbinfer.com</i>)</p>
<h2>OPTIONS
<a name="OPTIONS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>--help</b></p>
<p style="margin-left:17%;">Show this manual</p>
<p style="margin-left:11%;"><b>--help-checker</b>
<i>+checker-id</i></p>
<p style="margin-left:17%;">Show information about a
checker, for example <i>biabduction</i>. To see the list of
all checkers, see <b>--list-checkers</b>.</p>
<p style="margin-left:11%;"><b>--help-format</b> <i>{ auto
| groff | pager | plain }</i></p>
<p style="margin-left:17%;">Show this help in the specified
format. <b>auto</b> sets the format to <b>plain</b> if the
environment variable <b>TERM</b> is &quot;dumb&quot; or
undefined, and to <b>pager</b> otherwise.</p>
<p style="margin-left:11%;"><b>--help-full</b></p>
<p style="margin-left:17%;">Show this manual with all
internal options in the INTERNAL OPTIONS section</p>
<p style="margin-left:11%;"><b>--help-issue-type</b>
<i>+UNIQUE_ID</i></p>
<p style="margin-left:17%;">Show information about an issue
type, for example <i>NULL_DEREFERENCE</i>. To see the list
of all issue types, see <b>--list-issue-types</b>.</p>
<p style="margin-left:11%;"><b>--list-checkers</b></p>
<p style="margin-left:17%;">Activates: Show the list of all
available checkers. (Conversely:
<b>--no-list-checkers</b>)</p>
<p style="margin-left:11%;"><b>--list-issue-types</b></p>
<p style="margin-left:17%;">Activates: Show the list of all
issue types that infer might report. (Conversely:
<b>--no-list-issue-types</b>)</p>
<p style="margin-left:11%;"><b>--write-website</b>
<i>path_to_website_dir</i></p>
<p style="margin-left:17%;">Use to write website files
documenting issue types and checkers under
<i>path_to_website_dir/</i>. Meant to be used within the
Infer directory to generate its website at
<i>fbinfer.com</i> at <i>website/</i>.</p>
<h2>ENVIRONMENT
<a name="ENVIRONMENT"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>INFER_ARGS</b>,
<b>INFERCONFIG</b>, <b>INFER_STRICT_MODE</b></p>
<p style="margin-left:17%;">See the ENVIRONMENT section in
the manual of <b>infer</b>(1).</p>
<h2>FILES
<a name="FILES"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>.inferconfig</b></p>
<p style="margin-left:17%;">See the FILES section in the
manual of <b>infer</b>(1).</p>
<hr>
</body>
</html>

@ -1,5 +1,5 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed May 13 17:23:54 2020 -->
<!-- CreationDate: Thu Jun 11 11:55:07 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
@ -93,6 +93,12 @@ are tested by the regex are relative to the
&rsquo;&lt;reason_string&gt;&rsquo; is a non-empty string
used to explain why the issue was filtered.</p>
<p style="margin-left:11%;"><b>--cost-issues-tests</b>
<i>file</i></p>
<p style="margin-left:17%;">Write a list of cost issues in
a format suitable for cost tests to <i>file</i></p>
<p style="margin-left:11%;"><b>--debug</b>,<b>-g</b></p>
<p style="margin-left:17%;">Activates: Debug mode (also
@ -160,13 +166,21 @@ does not make the corresponding checker not run.</p>
<p style="margin-left:11%;">Available issue types are as
follows: <br>
ANALYSIS_STOPS (disabled by default), <br>
ARRAY_OUT_OF_BOUNDS_L1 (disabled by default), <br>
ARRAY_OUT_OF_BOUNDS_L2 (disabled by default), <br>
ARRAY_OUT_OF_BOUNDS_L3 (disabled by default), <br>
ASSIGN_POINTER_WARNING (enabled by default), <br>
Abduction_case_not_implemented (enabled by default), <br>
Array_of_pointsto (enabled by default), <br>
Assert_failure (enabled by default), <br>
BAD_POINTER_COMPARISON (enabled by default), <br>
BIABDUCTION_ANALYSIS_STOPS (disabled by default), <br>
BIABD_CONDITION_ALWAYS_FALSE (disabled by default), <br>
BIABD_CONDITION_ALWAYS_TRUE (disabled by default), <br>
BIABD_REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by <br>
default), <br>
BIABD_STACK_VARIABLE_ADDRESS_ESCAPE (disabled by default),
<br>
BIABD_USE_AFTER_FREE (enabled by default), <br>
BUFFER_OVERRUN_L1 (enabled by default), <br>
BUFFER_OVERRUN_L2 (enabled by default), <br>
@ -190,7 +204,6 @@ CHECKERS_IMMUTABLE_CAST (enabled by default), <br>
CHECKERS_PRINTF_ARGS (enabled by default), <br>
CLASS_CAST_EXCEPTION (disabled by default), <br>
CLASS_LOAD (enabled by default), <br>
COMPARING_FLOAT_FOR_EQUALITY (enabled by default), <br>
COMPONENT_FACTORY_FUNCTION (enabled by default), <br>
COMPONENT_FILE_CYCLOMATIC_COMPLEXITY (enabled by default),
<br>
@ -206,14 +219,20 @@ CONDITION_ALWAYS_TRUE (disabled by default), <br>
CONSTANT_ADDRESS_DEREFERENCE (disabled by default), <br>
CREATE_INTENT_FROM_URI (enabled by default), <br>
CROSS_SITE_SCRIPTING (enabled by default), <br>
CXX_REFERENCE_CAPTURED_IN_OBJC_BLOCK (enabled by default),
<br>
Cannot_star (enabled by default), <br>
Codequery (enabled by default), <br>
DANGLING_POINTER_DEREFERENCE (disabled by default), <br>
DANGLING_POINTER_DEREFERENCE_MAYBE (disabled by default),
<br>
DEADLOCK (enabled by default), <br>
DEAD_STORE (enabled by default), <br>
DEALLOCATE_STACK_VARIABLE (enabled by default), <br>
DEALLOCATE_STATIC_MEMORY (enabled by default), <br>
DEALLOCATION_MISMATCH (enabled by default), <br>
DIRECT_ATOMIC_PROPERTY_ACCESS (enabled by default), <br>
DISCOURAGED_WEAK_PROPERTY_CUSTOM_SETTER (enabled by
default), <br>
DIVIDE_BY_ZERO (disabled by default), <br>
DO_NOT_REPORT (enabled by default), <br>
EMPTY_VECTOR_ACCESS (enabled by default), <br>
@ -248,19 +267,11 @@ ERADICATE_UNVETTED_THIRD_PARTY_IN_NULLSAFE (enabled by <br>
default), <br>
EXECUTION_TIME_COMPLEXITY_INCREASE (enabled by default),
<br>
EXECUTION_TIME_COMPLEXITY_INCREASE_COLD_START (enabled by
<br>
default), <br>
EXECUTION_TIME_COMPLEXITY_INCREASE_UI_THREAD (enabled by
<br>
default), <br>
EXECUTION_TIME_UNREACHABLE_AT_EXIT (disabled by default),
<br>
EXPENSIVE_EXECUTION_TIME (disabled by default), <br>
EXPENSIVE_EXECUTION_TIME_COLD_START (disabled by default),
<br>
EXPENSIVE_EXECUTION_TIME_UI_THREAD (disabled by default),
<br>
EXPENSIVE_LOOP_INVARIANT_CALL (enabled by default), <br>
EXPOSED_INSECURE_INTENT_HANDLING (enabled by default), <br>
Failure_exe (enabled by default), <br>
@ -289,11 +300,13 @@ INVARIANT_CALL (disabled by default), <br>
IVAR_NOT_NULL_CHECKED (enabled by default), <br>
Internal_error (enabled by default), <br>
JAVASCRIPT_INJECTION (enabled by default), <br>
LAB_RESOURCE_LEAK (enabled by default), <br>
LOCKLESS_VIOLATION (enabled by default), <br>
LOCK_CONSISTENCY_VIOLATION (enabled by default), <br>
LOGGING_PRIVATE_DATA (enabled by default), <br>
Leak_after_array_abstraction (enabled by default), <br>
Leak_in_footprint (enabled by default), <br>
Leak_unknown_origin (disabled by default), <br>
MEMORY_LEAK (enabled by default), <br>
MISSING_REQUIRED_PROP (enabled by default), <br>
MIXED_SELF_WEAKSELF (enabled by default), <br>
@ -306,6 +319,7 @@ NULL_DEREFERENCE (enabled by default), <br>
NULL_TEST_AFTER_DEREFERENCE (disabled by default), <br>
PARAMETER_NOT_NULL_CHECKED (enabled by default), <br>
POINTER_SIZE_MISMATCH (enabled by default), <br>
POINTER_TO_CONST_OBJC_CLASS (enabled by default), <br>
PRECONDITION_NOT_FOUND (enabled by default), <br>
PRECONDITION_NOT_MET (enabled by default), <br>
PREMATURE_NIL_TERMINATION_ARGUMENT (enabled by default),
@ -317,26 +331,26 @@ REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by default),
<br>
RESOURCE_LEAK (enabled by default), <br>
RETAIN_CYCLE (enabled by default), <br>
RETURN_EXPRESSION_REQUIRED (enabled by default), <br>
RETURN_STATEMENT_MISSING (enabled by default), <br>
RETURN_VALUE_IGNORED (disabled by default), <br>
SHELL_INJECTION (enabled by default), <br>
SHELL_INJECTION_RISK (enabled by default), <br>
SKIP_FUNCTION (disabled by default), <br>
SKIP_POINTER_DEREFERENCE (disabled by default), <br>
SQL_INJECTION (enabled by default), <br>
SQL_INJECTION_RISK (enabled by default), <br>
STACK_VARIABLE_ADDRESS_ESCAPE (disabled by default), <br>
STACK_VARIABLE_ADDRESS_ESCAPE (enabled by default), <br>
STARVATION (enabled by default), <br>
STATIC_INITIALIZATION_ORDER_FIASCO (enabled by default),
<br>
STRICT_MODE_VIOLATION (enabled by default), <br>
STRONG_DELEGATE_WARNING (enabled by default), <br>
STRONG_SELF_NOT_CHECKED (enabled by default), <br>
Symexec_memory_error (enabled by default), <br>
THREAD_SAFETY_VIOLATION (enabled by default), <br>
TOPL_ERROR (enabled by default), <br>
UNARY_MINUS_APPLIED_TO_UNSIGNED_EXPRESSION (disabled by <br>
default), <br>
UNAVAILABLE_API_IN_SUPPORTED_IOS_SDK (enabled by default),
<br>
UNINITIALIZED_VALUE (enabled by default), <br>
UNREACHABLE_CODE (enabled by default), <br>
UNTRUSTED_BUFFER_ACCESS (disabled by default), <br>
@ -353,7 +367,6 @@ USER_CONTROLLED_SQL_RISK (enabled by default), <br>
USE_AFTER_DELETE (enabled by default), <br>
USE_AFTER_FREE (enabled by default), <br>
USE_AFTER_LIFETIME (enabled by default), <br>
Unknown_proc (enabled by default), <br>
VECTOR_INVALIDATION (enabled by default), <br>
WEAK_SELF_IN_NO_ESCAPE_BLOCK (enabled by default), <br>
Wrong_argument_number (enabled by default). <b><br>
@ -373,6 +386,13 @@ or off.</p>
experimental and blacklisted issue types (Conversely:
<b>--filtering</b> | <b>-f</b>)</p>
<p style="margin-left:11%;"><b>--from-json-costs-report</b>
<i>costs-report.json</i></p>
<p style="margin-left:17%;">Load costs analysis results
from a costs-report file.</p>
<p style="margin-left:11%;"><b>--from-json-report</b>
<i>report.json</i></p>

@ -1,5 +1,5 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed May 13 17:23:54 2020 -->
<!-- CreationDate: Thu Jun 11 11:55:07 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>

@ -1,5 +1,5 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed May 13 17:23:54 2020 -->
<!-- CreationDate: Thu Jun 11 11:55:07 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>

@ -1,5 +1,5 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed May 13 17:23:55 2020 -->
<!-- CreationDate: Thu Jun 11 11:55:08 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
@ -48,6 +48,8 @@ analysis for Java and C/C++/Objective-C/Objective-C++</p>
analyze</b> <i>[options]</i> <b><br>
infer capture</b> <i>[options]</i> <b><br>
infer compile</b> <i>[options]</i> <b><br>
infer help</b> <i>[options]</i> <b><br>
infer explore</b> <i>[options]</i> <b><br>
infer report</b> <i>[options]</i> <b><br>
infer reportdiff</b> <i>[options]</i> <b><br>
infer run</b> <i>[options]</i> <b><br>
@ -118,12 +120,14 @@ supported options (see also <b>--help-full</b> for options
reserved for internal use). <b><br>
--annotation-reachability</b></p>
<p style="margin-left:17%;">Activates: the annotation
reachability checker. Given a pair of source and sink
annotation, e.g. @PerformanceCritical and @Expensive, this
checker will warn whenever some method annotated with
@PerformanceCritical calls, directly or indirectly, another
method annotated with @Expensive (Conversely:
<p style="margin-left:17%;">Activates: checker
annotation-reachability: Given a pair of source and sink
annotation, e.g. &rsquo;@PerformanceCritical&rsquo; and
&rsquo;@Expensive&rsquo;, this checker will warn whenever
some method annotated with
&rsquo;@PerformanceCritical&rsquo; calls, directly or
indirectly, another method annotated with
&rsquo;@Expensive&rsquo; (Conversely:
<b>--no-annotation-reachability</b>)</p>
<p style="margin-left:11%;">See also
@ -189,9 +193,8 @@ spec</p>
--annotation-reachability-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--annotation-reachability</b> and disable all other
checkers (Conversely:
<b>--no-annotation-reachability-only</b>)</p>
annotation-reachability and disable all other checkers
(Conversely: <b>--no-annotation-reachability-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -205,17 +208,18 @@ append to targets discovered by the
<b>infer-capture</b>(1). <b><br>
--no-biabduction</b></p>
<p style="margin-left:17%;">Deactivates: the separation
logic based bi-abduction analysis using the checkers
framework (Conversely: <b>--biabduction</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
biabduction: This analysis deals with a range of issues,
many linked to memory safety. (Conversely:
<b>--biabduction</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--biabduction-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--biabduction</b> and disable all other checkers
(Conversely: <b>--no-biabduction-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable biabduction
and disable all other checkers (Conversely:
<b>--no-biabduction-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -265,6 +269,14 @@ See also <b>infer-capture</b>(1) and <b>infer-run</b>(1).
clang-based targets (C/C++/Objective-C/Objective-C++).
(Conversely: <b>--no-buck-clang</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-capture</b>(1). <b><br>
--buck-combined</b></p>
<p style="margin-left:17%;">Activates: Buck integration for
clang-based and Java targets. (Conversely:
<b>--no-buck-combined</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-capture</b>(1). <b><br>
--buck-compilation-database</b> <i>{ no-deps | deps
@ -312,16 +324,17 @@ matched by the specified regular expression. Only valid for
<b>infer-capture</b>(1) and <b>infer-run</b>(1). <b><br>
--bufferoverrun</b></p>
<p style="margin-left:17%;">Activates: the buffer overrun
analysis (Conversely: <b>--no-bufferoverrun</b>)</p>
<p style="margin-left:17%;">Activates: checker
bufferoverrun: InferBO is a detector for out-of-bounds array
accesses. (Conversely: <b>--no-bufferoverrun</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--bufferoverrun-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--bufferoverrun</b> and disable all other checkers
(Conversely: <b>--no-bufferoverrun-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable bufferoverrun
and disable all other checkers (Conversely:
<b>--no-bufferoverrun-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -400,16 +413,17 @@ each analysis has to model.</p>
<b>infer-analyze</b>(1) and <b>infer-capture</b>(1). <b><br>
--class-loads</b></p>
<p style="margin-left:17%;">Activates: Java class loading
analysis (Conversely: <b>--no-class-loads</b>)</p>
<p style="margin-left:17%;">Activates: checker class-loads:
Compute set of Java classes loaded. (Conversely:
<b>--no-class-loads</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--class-loads-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--class-loads</b> and disable all other checkers
(Conversely: <b>--no-class-loads-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable class-loads
and disable all other checkers (Conversely:
<b>--no-class-loads-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -460,15 +474,25 @@ given the same before. Not compatible with
<b>infer-analyze</b>(1). <b><br>
--cost</b></p>
<p style="margin-left:17%;">Activates: checker for
performance cost analysis (Conversely: <b>--no-cost</b>)</p>
<p style="margin-left:17%;">Activates: checker cost:
Computes the time complexity of functions and methods. Can
be used to detect changes in runtime complexity with
&rsquo;infer reportdiff&rsquo;. (Conversely:
<b>--no-cost</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--cost-issues-tests</b> <i>file</i></p>
<p style="margin-left:17%;">Write a list of cost issues in
a format suitable for cost tests to <i>file</i></p>
<p style="margin-left:11%;">See also
<b>infer-report</b>(1). <b><br>
--cost-only</b></p>
<p style="margin-left:17%;">Activates: Enable <b>--cost</b>
and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable cost and
disable all other checkers (Conversely:
<b>--no-cost-only</b>)</p>
<p style="margin-left:11%;">See also
@ -585,7 +609,7 @@ infer-reportdiff</b>(1). <b><br>
<b>--biabduction</b>, <b>--fragment-retains-view</b>,
<b>--inefficient-keyset-iterator</b>, <b>--linters</b>,
<b>--liveness</b>, <b>--racerd</b>, <b>--siof</b>,
<b>--self_in_block</b>, <b>--starvation</b>, <b>--uninit</b>
<b>--self-in-block</b>, <b>--starvation</b>, <b>--uninit</b>
(Conversely: <b>--default-checkers</b>)</p>
<p style="margin-left:11%;">See also
@ -627,13 +651,21 @@ does not make the corresponding checker not run.</p>
<p style="margin-left:11%;">Available issue types are as
follows: <br>
ANALYSIS_STOPS (disabled by default), <br>
ARRAY_OUT_OF_BOUNDS_L1 (disabled by default), <br>
ARRAY_OUT_OF_BOUNDS_L2 (disabled by default), <br>
ARRAY_OUT_OF_BOUNDS_L3 (disabled by default), <br>
ASSIGN_POINTER_WARNING (enabled by default), <br>
Abduction_case_not_implemented (enabled by default), <br>
Array_of_pointsto (enabled by default), <br>
Assert_failure (enabled by default), <br>
BAD_POINTER_COMPARISON (enabled by default), <br>
BIABDUCTION_ANALYSIS_STOPS (disabled by default), <br>
BIABD_CONDITION_ALWAYS_FALSE (disabled by default), <br>
BIABD_CONDITION_ALWAYS_TRUE (disabled by default), <br>
BIABD_REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by <br>
default), <br>
BIABD_STACK_VARIABLE_ADDRESS_ESCAPE (disabled by default),
<br>
BIABD_USE_AFTER_FREE (enabled by default), <br>
BUFFER_OVERRUN_L1 (enabled by default), <br>
BUFFER_OVERRUN_L2 (enabled by default), <br>
@ -657,7 +689,6 @@ CHECKERS_IMMUTABLE_CAST (enabled by default), <br>
CHECKERS_PRINTF_ARGS (enabled by default), <br>
CLASS_CAST_EXCEPTION (disabled by default), <br>
CLASS_LOAD (enabled by default), <br>
COMPARING_FLOAT_FOR_EQUALITY (enabled by default), <br>
COMPONENT_FACTORY_FUNCTION (enabled by default), <br>
COMPONENT_FILE_CYCLOMATIC_COMPLEXITY (enabled by default),
<br>
@ -673,14 +704,20 @@ CONDITION_ALWAYS_TRUE (disabled by default), <br>
CONSTANT_ADDRESS_DEREFERENCE (disabled by default), <br>
CREATE_INTENT_FROM_URI (enabled by default), <br>
CROSS_SITE_SCRIPTING (enabled by default), <br>
CXX_REFERENCE_CAPTURED_IN_OBJC_BLOCK (enabled by default),
<br>
Cannot_star (enabled by default), <br>
Codequery (enabled by default), <br>
DANGLING_POINTER_DEREFERENCE (disabled by default), <br>
DANGLING_POINTER_DEREFERENCE_MAYBE (disabled by default),
<br>
DEADLOCK (enabled by default), <br>
DEAD_STORE (enabled by default), <br>
DEALLOCATE_STACK_VARIABLE (enabled by default), <br>
DEALLOCATE_STATIC_MEMORY (enabled by default), <br>
DEALLOCATION_MISMATCH (enabled by default), <br>
DIRECT_ATOMIC_PROPERTY_ACCESS (enabled by default), <br>
DISCOURAGED_WEAK_PROPERTY_CUSTOM_SETTER (enabled by
default), <br>
DIVIDE_BY_ZERO (disabled by default), <br>
DO_NOT_REPORT (enabled by default), <br>
EMPTY_VECTOR_ACCESS (enabled by default), <br>
@ -715,19 +752,11 @@ ERADICATE_UNVETTED_THIRD_PARTY_IN_NULLSAFE (enabled by <br>
default), <br>
EXECUTION_TIME_COMPLEXITY_INCREASE (enabled by default),
<br>
EXECUTION_TIME_COMPLEXITY_INCREASE_COLD_START (enabled by
<br>
default), <br>
EXECUTION_TIME_COMPLEXITY_INCREASE_UI_THREAD (enabled by
<br>
default), <br>
EXECUTION_TIME_UNREACHABLE_AT_EXIT (disabled by default),
<br>
EXPENSIVE_EXECUTION_TIME (disabled by default), <br>
EXPENSIVE_EXECUTION_TIME_COLD_START (disabled by default),
<br>
EXPENSIVE_EXECUTION_TIME_UI_THREAD (disabled by default),
<br>
EXPENSIVE_LOOP_INVARIANT_CALL (enabled by default), <br>
EXPOSED_INSECURE_INTENT_HANDLING (enabled by default), <br>
Failure_exe (enabled by default), <br>
@ -756,11 +785,13 @@ INVARIANT_CALL (disabled by default), <br>
IVAR_NOT_NULL_CHECKED (enabled by default), <br>
Internal_error (enabled by default), <br>
JAVASCRIPT_INJECTION (enabled by default), <br>
LAB_RESOURCE_LEAK (enabled by default), <br>
LOCKLESS_VIOLATION (enabled by default), <br>
LOCK_CONSISTENCY_VIOLATION (enabled by default), <br>
LOGGING_PRIVATE_DATA (enabled by default), <br>
Leak_after_array_abstraction (enabled by default), <br>
Leak_in_footprint (enabled by default), <br>
Leak_unknown_origin (disabled by default), <br>
MEMORY_LEAK (enabled by default), <br>
MISSING_REQUIRED_PROP (enabled by default), <br>
MIXED_SELF_WEAKSELF (enabled by default), <br>
@ -773,6 +804,7 @@ NULL_DEREFERENCE (enabled by default), <br>
NULL_TEST_AFTER_DEREFERENCE (disabled by default), <br>
PARAMETER_NOT_NULL_CHECKED (enabled by default), <br>
POINTER_SIZE_MISMATCH (enabled by default), <br>
POINTER_TO_CONST_OBJC_CLASS (enabled by default), <br>
PRECONDITION_NOT_FOUND (enabled by default), <br>
PRECONDITION_NOT_MET (enabled by default), <br>
PREMATURE_NIL_TERMINATION_ARGUMENT (enabled by default),
@ -784,26 +816,26 @@ REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by default),
<br>
RESOURCE_LEAK (enabled by default), <br>
RETAIN_CYCLE (enabled by default), <br>
RETURN_EXPRESSION_REQUIRED (enabled by default), <br>
RETURN_STATEMENT_MISSING (enabled by default), <br>
RETURN_VALUE_IGNORED (disabled by default), <br>
SHELL_INJECTION (enabled by default), <br>
SHELL_INJECTION_RISK (enabled by default), <br>
SKIP_FUNCTION (disabled by default), <br>
SKIP_POINTER_DEREFERENCE (disabled by default), <br>
SQL_INJECTION (enabled by default), <br>
SQL_INJECTION_RISK (enabled by default), <br>
STACK_VARIABLE_ADDRESS_ESCAPE (disabled by default), <br>
STACK_VARIABLE_ADDRESS_ESCAPE (enabled by default), <br>
STARVATION (enabled by default), <br>
STATIC_INITIALIZATION_ORDER_FIASCO (enabled by default),
<br>
STRICT_MODE_VIOLATION (enabled by default), <br>
STRONG_DELEGATE_WARNING (enabled by default), <br>
STRONG_SELF_NOT_CHECKED (enabled by default), <br>
Symexec_memory_error (enabled by default), <br>
THREAD_SAFETY_VIOLATION (enabled by default), <br>
TOPL_ERROR (enabled by default), <br>
UNARY_MINUS_APPLIED_TO_UNSIGNED_EXPRESSION (disabled by <br>
default), <br>
UNAVAILABLE_API_IN_SUPPORTED_IOS_SDK (enabled by default),
<br>
UNINITIALIZED_VALUE (enabled by default), <br>
UNREACHABLE_CODE (enabled by default), <br>
UNTRUSTED_BUFFER_ACCESS (disabled by default), <br>
@ -820,7 +852,6 @@ USER_CONTROLLED_SQL_RISK (enabled by default), <br>
USE_AFTER_DELETE (enabled by default), <br>
USE_AFTER_FREE (enabled by default), <br>
USE_AFTER_LIFETIME (enabled by default), <br>
Unknown_proc (enabled by default), <br>
VECTOR_INVALIDATION (enabled by default), <br>
WEAK_SELF_IN_NO_ESCAPE_BLOCK (enabled by default), <br>
Wrong_argument_number (enabled by default). <br>
@ -846,17 +877,17 @@ or off.</p>
<b>infer-report</b>(1). <b><br>
--eradicate</b></p>
<p style="margin-left:17%;">Activates: the eradicate
@Nullable checker for Java annotations (Conversely:
<b>--no-eradicate</b>)</p>
<p style="margin-left:17%;">Activates: checker eradicate:
The eradicate &rsquo;@Nullable&rsquo; checker for Java
annotations. (Conversely: <b>--no-eradicate</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--eradicate-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--eradicate</b> and disable all other checkers
(Conversely: <b>--no-eradicate-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable eradicate and
disable all other checkers (Conversely:
<b>--no-eradicate-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -917,22 +948,28 @@ values: <i>ant</i>, <i>buck</i>, <i>gradle</i>,
<b>infer-capture</b>(1) and <b>infer-run</b>(1). <b><br>
--no-fragment-retains-view</b></p>
<p style="margin-left:17%;">Deactivates: detects when
Android fragments are not explicitly nullified before
becoming unreabable (Conversely:
<b>--fragment-retains-view</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
fragment-retains-view: Detects when Android fragments are
not explicitly nullified before becoming unreachable.
(Conversely: <b>--fragment-retains-view</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--fragment-retains-view-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--fragment-retains-view</b> and disable all other
checkers (Conversely:
<b>--no-fragment-retains-view-only</b>)</p>
fragment-retains-view and disable all other checkers
(Conversely: <b>--no-fragment-retains-view-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--from-json-costs-report</b> <i>costs-report.json</i></p>
<p style="margin-left:17%;">Load costs analysis results
from a costs-report file.</p>
<p style="margin-left:11%;">See also
<b>infer-report</b>(1). <b><br>
--from-json-report</b> <i>report.json</i></p>
<p style="margin-left:17%;">Load analysis results from a
@ -971,9 +1008,17 @@ header files (Conversely: <b>--no-headers</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1), <b>infer-capture</b>(1),
<b>infer-compile</b>(1), <b><br>
infer-explore</b>(1), <b>infer-report</b>(1),
<b>infer-reportdiff</b>(1), and <b><br>
infer-run</b>(1). <b><br>
infer-explore</b>(1), <b>infer-help</b>(1),
<b>infer-report</b>(1), <b><br>
infer-reportdiff</b>(1), and <b>infer-run</b>(1). <b><br>
--help-checker</b> <i>+checker-id</i></p>
<p style="margin-left:17%;">Show information about a
checker, for example <i>biabduction</i>. To see the list of
all checkers, see <b>--list-checkers</b>.</p>
<p style="margin-left:11%;">See also <b>infer-help</b>(1).
<b><br>
--help-format</b> <i>{ auto | groff | pager | plain
}</i></p>
@ -985,9 +1030,9 @@ undefined, and to <b>pager</b> otherwise.</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1), <b>infer-capture</b>(1),
<b>infer-compile</b>(1), <b><br>
infer-explore</b>(1), <b>infer-report</b>(1),
<b>infer-reportdiff</b>(1), and <b><br>
infer-run</b>(1). <b><br>
infer-explore</b>(1), <b>infer-help</b>(1),
<b>infer-report</b>(1), <b><br>
infer-reportdiff</b>(1), and <b>infer-run</b>(1). <b><br>
--help-full</b></p>
<p style="margin-left:17%;">Show this manual with all
@ -996,9 +1041,17 @@ internal options in the INTERNAL OPTIONS section</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1), <b>infer-capture</b>(1),
<b>infer-compile</b>(1), <b><br>
infer-explore</b>(1), <b>infer-report</b>(1),
<b>infer-reportdiff</b>(1), and <b><br>
infer-run</b>(1). <b><br>
infer-explore</b>(1), <b>infer-help</b>(1),
<b>infer-report</b>(1), <b><br>
infer-reportdiff</b>(1), and <b>infer-run</b>(1). <b><br>
--help-issue-type</b> <i>+UNIQUE_ID</i></p>
<p style="margin-left:17%;">Show information about an issue
type, for example <i>NULL_DEREFERENCE</i>. To see the list
of all issue types, see <b>--list-issue-types</b>.</p>
<p style="margin-left:11%;">See also <b>infer-help</b>(1).
<b><br>
--no-hoisting-report-only-expensive</b></p>
<p style="margin-left:17%;">Deactivates: [Hoisting] Report
@ -1017,51 +1070,56 @@ report. (Conversely: <b>--no-html</b>)</p>
<b>infer-explore</b>(1). <b><br>
--immutable-cast</b></p>
<p style="margin-left:17%;">Activates: the detection of
object cast from immutable type to mutable type. For
instance, it will detect cast from ImmutableList to List,
ImmutableMap to Map, and ImmutableSet to Set. (Conversely:
<b>--no-immutable-cast</b>)</p>
<p style="margin-left:17%;">Activates: checker
immutable-cast: Detection of object cast from immutable
types to mutable types. For instance, it will detect casts
from &rsquo;ImmutableList&rsquo; to &rsquo;List&rsquo;,
&rsquo;ImmutableMap&rsquo; to &rsquo;Map&rsquo;, and
&rsquo;ImmutableSet&rsquo; to &rsquo;Set&rsquo;.
(Conversely: <b>--no-immutable-cast</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--immutable-cast-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--immutable-cast</b> and disable all other checkers
(Conversely: <b>--no-immutable-cast-only</b>)</p>
immutable-cast and disable all other checkers (Conversely:
<b>--no-immutable-cast-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--impurity</b></p>
<p style="margin-left:17%;">Activates: [EXPERIMENTAL]
Impurity analysis (Conversely: <b>--no-impurity</b>)</p>
<p style="margin-left:17%;">Activates: checker impurity:
Detects functions with potential side-effects. Same as
&quot;purity&quot;, but implemented on top of Pulse.
(Conversely: <b>--no-impurity</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--impurity-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--impurity</b> and disable all other checkers
(Conversely: <b>--no-impurity-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable impurity and
disable all other checkers (Conversely:
<b>--no-impurity-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--no-inefficient-keyset-iterator</b></p>
<p style="margin-left:17%;">Deactivates: Check for
inefficient uses of keySet iterator that access both the key
and the value. (Conversely:
<b>--inefficient-keyset-iterator</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
inefficient-keyset-iterator: Check for inefficient uses of
iterators that iterate on keys then lookup their values,
instead of iterating on key-value pairs directly.
(Conversely: <b>--inefficient-keyset-iterator</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--inefficient-keyset-iterator-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--inefficient-keyset-iterator</b> and disable all other
checkers (Conversely:
inefficient-keyset-iterator and disable all other checkers
(Conversely:
<b>--no-inefficient-keyset-iterator-only</b>)</p>
<p style="margin-left:11%;">See also
@ -1141,7 +1199,8 @@ only run this one linter. (Useful together with
<b>infer-capture</b>(1). <b><br>
--no-linters</b></p>
<p style="margin-left:17%;">Deactivates: syntactic linters
<p style="margin-left:17%;">Deactivates: checker linters:
Declarative linting framework over the Clang AST.
(Conversely: <b>--linters</b>)</p>
<p style="margin-left:11%;">See also
@ -1192,8 +1251,8 @@ files even if some compilation fails. (Conversely:
<b>infer-capture</b>(1). <b><br>
--linters-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--linters</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable linters and
disable all other checkers (Conversely:
<b>--no-linters-only</b>)</p>
<p style="margin-left:11%;">See also
@ -1206,10 +1265,28 @@ AL files, then emit possible errors in JSON format to stdout
<p style="margin-left:11%;">See also
<b>infer-capture</b>(1). <b><br>
--list-checkers</b></p>
<p style="margin-left:17%;">Activates: Show the list of all
available checkers. (Conversely:
<b>--no-list-checkers</b>)</p>
<p style="margin-left:11%;">See also <b>infer-help</b>(1).
<b><br>
--list-issue-types</b></p>
<p style="margin-left:17%;">Activates: Show the list of all
issue types that infer might report. (Conversely:
<b>--no-list-issue-types</b>)</p>
<p style="margin-left:11%;">See also <b>infer-help</b>(1).
<b><br>
--litho-required-props</b></p>
<p style="margin-left:17%;">Activates: [EXPERIMENTAL]
Required Prop check for Litho (Conversely:
<p style="margin-left:17%;">Activates: checker
litho-required-props: Checks that all non-option
&rsquo;@Prop&rsquo;s have been specified when constructing
Litho components. (Conversely:
<b>--no-litho-required-props</b>)</p>
<p style="margin-left:11%;">See also
@ -1217,15 +1294,15 @@ Required Prop check for Litho (Conversely:
--litho-required-props-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--litho-required-props</b> and disable all other checkers
litho-required-props and disable all other checkers
(Conversely: <b>--no-litho-required-props-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--no-liveness</b></p>
<p style="margin-left:17%;">Deactivates: the detection of
dead stores and unused variables (Conversely:
<p style="margin-left:17%;">Deactivates: checker liveness:
Detection of dead stores and unused variables. (Conversely:
<b>--liveness</b>)</p>
<p style="margin-left:11%;">See also
@ -1244,9 +1321,9 @@ program.</p>
<b>infer-analyze</b>(1). <b><br>
--liveness-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--liveness</b> and disable all other checkers
(Conversely: <b>--no-liveness-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable liveness and
disable all other checkers (Conversely:
<b>--no-liveness-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1260,16 +1337,18 @@ make only)</p>
<b>infer-capture</b>(1). <b><br>
--loop-hoisting</b></p>
<p style="margin-left:17%;">Activates: checker for
loop-hoisting (Conversely: <b>--no-loop-hoisting</b>)</p>
<p style="margin-left:17%;">Activates: checker
loop-hoisting: Detect opportunities to hoist function calls
that are invariant outside of loop bodies for efficiency.
(Conversely: <b>--no-loop-hoisting</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--loop-hoisting-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--loop-hoisting</b> and disable all other checkers
(Conversely: <b>--no-loop-hoisting-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable loop-hoisting
and disable all other checkers (Conversely:
<b>--no-loop-hoisting-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1300,8 +1379,8 @@ to be checked in C++:</p>
See also <b>infer-analyze</b>(1). <b><br>
--perf-profiler-data-file</b> <i>file</i></p>
<p style="margin-left:17%;">Specify the file containing
perf profiler data to read</p>
<p style="margin-left:17%;">DEPRECATED: Specify the file
containing perf profiler data to read</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1324,10 +1403,11 @@ stdout and stderr (Conversely: <b>--no-print-logs</b>)</p>
infer-run</b>(1). <b><br>
--printf-args</b></p>
<p style="margin-left:17%;">Activates: the detection of
mismatch between the Java printf format strings and the
argument types For, example, this checker will warn about
the type error in &rsquo;printf(&quot;Hello %d&quot;,
<p style="margin-left:17%;">Activates: checker printf-args:
Detect mismatches between the Java &rsquo;printf&rsquo;
format strings and the argument types For example, this
checker will warn about the type error in
&rsquo;printf(&quot;Hello %d&quot;,
&quot;world&quot;)&rsquo; (Conversely:
<b>--no-printf-args</b>)</p>
@ -1335,9 +1415,9 @@ the type error in &rsquo;printf(&quot;Hello %d&quot;,
<b>infer-analyze</b>(1). <b><br>
--printf-args-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--printf-args</b> and disable all other checkers
(Conversely: <b>--no-printf-args-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable printf-args
and disable all other checkers (Conversely:
<b>--no-printf-args-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1432,8 +1512,9 @@ the project</p>
infer-run</b>(1). <b><br>
--pulse</b></p>
<p style="margin-left:17%;">Activates: [EXPERIMENTAL] C++
lifetime analysis (Conversely: <b>--no-pulse</b>)</p>
<p style="margin-left:17%;">Activates: checker pulse:
Memory and lifetime analysis. (Conversely:
<b>--no-pulse</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1471,31 +1552,37 @@ are method or namespace::method</p>
<b>infer-analyze</b>(1). <b><br>
--pulse-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--pulse</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable pulse and
disable all other checkers (Conversely:
<b>--no-pulse-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--purity</b></p>
<p style="margin-left:17%;">Activates: [EXPERIMENTAL]
Purity analysis (Conversely: <b>--no-purity</b>)</p>
<p style="margin-left:17%;">Activates: checker purity:
Detects pure (side-effect-free) functions. A different
implementation of &quot;impurity&quot;. (Conversely:
<b>--no-purity</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--purity-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--purity</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable purity and
disable all other checkers (Conversely:
<b>--no-purity-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--quandary</b></p>
<p style="margin-left:17%;">Activates: the quandary taint
analysis (Conversely: <b>--no-quandary</b>)</p>
<p style="margin-left:17%;">Activates: checker quandary:
The Quandary taint analysis detects flows of values between
sources and sinks, except if the value went through a
&quot;sanitizer&quot;. In addition to some defaults, users
can specify their own sources, sinks, and sanitizers
functions. (Conversely: <b>--no-quandary</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1508,9 +1595,9 @@ Quandary</p>
<b>infer-analyze</b>(1). <b><br>
--quandary-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--quandary</b> and disable all other checkers
(Conversely: <b>--no-quandary-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable quandary and
disable all other checkers (Conversely:
<b>--no-quandary-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1545,8 +1632,8 @@ anything on standard output. (Conversely: <b>--no-quiet</b>
<b>infer-analyze</b>(1) and <b>infer-report</b>(1). <b><br>
--no-racerd</b></p>
<p style="margin-left:17%;">Deactivates: the RacerD thread
safety analysis (Conversely: <b>--racerd</b>)</p>
<p style="margin-left:17%;">Deactivates: checker racerd:
Thread safety analysis. (Conversely: <b>--racerd</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1560,8 +1647,8 @@ annotations with RacerD (Conversely:
<b>infer-analyze</b>(1). <b><br>
--racerd-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--racerd</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable racerd and
disable all other checkers (Conversely:
<b>--no-racerd-only</b>)</p>
<p style="margin-left:11%;">See also
@ -1675,27 +1762,29 @@ omitted, prompt for input.</p>
<p style="margin-left:11%;">See also
<b>infer-explore</b>(1). <b><br>
--no-self_in_block</b></p>
--no-self-in-block</b></p>
<p style="margin-left:17%;">Deactivates: checker to flag
incorrect uses of when Objective-C blocks capture self
(Conversely: <b>--self_in_block</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
self-in-block: An Objective-C-specific analysis to detect
when a block captures &rsquo;self&rsquo;. (Conversely:
<b>--self-in-block</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--self_in_block-only</b></p>
--self-in-block-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--self_in_block</b> and disable all other checkers
(Conversely: <b>--no-self_in_block-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable self-in-block
and disable all other checkers (Conversely:
<b>--no-self-in-block-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--no-siof</b></p>
<p style="margin-left:17%;">Deactivates: the Static
Initialization Order Fiasco analysis (C++ only) (Conversely:
<b>--siof</b>)</p>
<p style="margin-left:17%;">Deactivates: checker siof:
Catches Static Initialization Order Fiascos in C++, that can
lead to subtle, compiler-version-dependent errors.
(Conversely: <b>--siof</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1712,8 +1801,8 @@ recent libstdc++ then it is safe to turn this option on.
<b>infer-analyze</b>(1). <b><br>
--siof-only</b></p>
<p style="margin-left:17%;">Activates: Enable <b>--siof</b>
and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable siof and
disable all other checkers (Conversely:
<b>--no-siof-only</b>)</p>
<p style="margin-left:11%;">See also
@ -1849,16 +1938,18 @@ be a power of two between 512 and 65536.</p>
<b>infer-run</b>(1). <b><br>
--no-starvation</b></p>
<p style="margin-left:17%;">Deactivates: starvation
analysis (Conversely: <b>--starvation</b>)</p>
<p style="margin-left:17%;">Deactivates: checker
starvation: Detect various kinds of situations when no
progress is being made because of concurrency errors.
(Conversely: <b>--starvation</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--starvation-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--starvation</b> and disable all other checkers
(Conversely: <b>--no-starvation-only</b>)</p>
<p style="margin-left:17%;">Activates: Enable starvation
and disable all other checkers (Conversely:
<b>--no-starvation-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
@ -1867,19 +1958,37 @@ analysis (Conversely: <b>--starvation</b>)</p>
<p style="margin-left:17%;">Specify custom annotations that
should be considered aliases of @ThreadSafe</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--topl</b></p>
<p style="margin-left:17%;">Activates: checker topl:
Detects errors based on user-provided state machines
describing multi-object monitors. (Conversely:
<b>--no-topl</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--topl-only</b></p>
<p style="margin-left:17%;">Activates: Enable topl and
disable all other checkers (Conversely:
<b>--no-topl-only</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--no-uninit</b></p>
<p style="margin-left:17%;">Deactivates: checker for use of
uninitialized values (Conversely: <b>--uninit</b>)</p>
<p style="margin-left:17%;">Deactivates: checker uninit:
Warns when values are used before having been initialized.
(Conversely: <b>--uninit</b>)</p>
<p style="margin-left:11%;">See also
<b>infer-analyze</b>(1). <b><br>
--uninit-only</b></p>
<p style="margin-left:17%;">Activates: Enable
<b>--uninit</b> and disable all other checkers (Conversely:
<p style="margin-left:17%;">Activates: Enable uninit and
disable all other checkers (Conversely:
<b>--no-uninit-only</b>)</p>
<p style="margin-left:11%;">See also
@ -1906,6 +2015,16 @@ json format and exit</p>
<p style="margin-left:11%;">See also <b>infer-run</b>(1).
<b><br>
--write-website</b> <i>path_to_website_dir</i></p>
<p style="margin-left:17%;">Use to write website files
documenting issue types and checkers under
<i>path_to_website_dir/</i>. Meant to be used within the
Infer directory to generate its website at
<i>fbinfer.com</i> at <i>website/</i>.</p>
<p style="margin-left:11%;">See also <b>infer-help</b>(1).
<b><br>
--Xbuck</b> <i>+string</i></p>
<p style="margin-left:17%;">Pass values as command-line
@ -2035,8 +2154,9 @@ then its parent, etc., stopping at the first
<p style="margin-left:11%; margin-top: 1em"><b>infer-analyze</b>(1),
<b>infer-capture</b>(1), <b>infer-compile</b>(1),
<b>infer-explore</b>(1), <b>infer-report</b>(1),
<b>infer-reportdiff</b>(1), <b>infer-run</b>(1)</p>
<b>infer-explore</b>(1), <b>infer-help</b>(1),
<b>infer-report</b>(1), <b>infer-reportdiff</b>(1),
<b>infer-run</b>(1)</p>
<hr>
</body>
</html>

@ -12,6 +12,7 @@
<h2>OCaml package documentation</h2>
<ol>
<li><a href="infer/index.html">infer</a></li>
<li><a href="nonstdlib/index.html">nonstdlib</a></li>
<li><a href="ppx_trace/index.html">ppx_trace</a></li>
<li><a href="sledge/index.html">sledge</a></li>
</ol>

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CIssue (infer.ASTLanguage.CIssue)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">ASTLanguage</a> &#x00BB; CIssue</nav><h1>Module <code>ASTLanguage.CIssue</code></h1></header><dl><dt class="spec type" id="type-mode"><a href="#type-mode" class="anchor"></a><code><span class="keyword">type</span> mode</code><code> = </code><table class="variant"><tr id="type-mode.On" class="anchored"><td class="def constructor"><a href="#type-mode.On" class="anchor"></a><code>| </code><code><span class="constructor">On</span></code></td></tr><tr id="type-mode.Off" class="anchored"><td class="def constructor"><a href="#type-mode.Off" class="anchor"></a><code>| </code><code><span class="constructor">Off</span></code></td></tr></table></dt><dt class="spec type" id="type-issue_desc0"><a href="#type-issue_desc0" class="anchor"></a><code><span class="keyword">type</span> <span>'issue_type issue_desc0</span></code><code> = </code><code>{</code><table class="record"><tr id="type-issue_desc0.issue_type" class="anchored"><td class="def field"><a href="#type-issue_desc0.issue_type" class="anchor"></a><code>issue_type : <span class="type-var">'issue_type</span>;</code></td><td class="doc"><p>issue type</p></td></tr><tr id="type-issue_desc0.description" class="anchored"><td class="def field"><a href="#type-issue_desc0.description" class="anchor"></a><code>description : string;</code></td><td class="doc"><p>Description in the error message</p></td></tr><tr id="type-issue_desc0.mode" class="anchored"><td class="def field"><a href="#type-issue_desc0.mode" class="anchor"></a><code>mode : <a href="index.html#type-mode">mode</a>;</code></td></tr><tr id="type-issue_desc0.loc" class="anchored"><td class="def field"><a href="#type-issue_desc0.loc" class="anchor"></a><code>loc : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a>;</code></td><td class="doc"><p>location in the code</p></td></tr><tr id="type-issue_desc0.severity" class="anchored"><td class="def field"><a href="#type-issue_desc0.severity" class="anchor"></a><code>severity : <a href="../../IR/Exceptions/index.html#type-severity">IR.Exceptions.severity</a>;</code></td></tr><tr id="type-issue_desc0.suggestion" class="anchored"><td class="def field"><a href="#type-issue_desc0.suggestion" class="anchor"></a><code>suggestion : <span>string option</span>;</code></td><td class="doc"><p>an optional suggestion or correction</p></td></tr></table><code>}</code></dt><dt class="spec type" id="type-issue_desc"><a href="#type-issue_desc" class="anchor"></a><code><span class="keyword">type</span> issue_desc</code><code> = <span><a href="../../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a> <a href="index.html#type-issue_desc0">issue_desc0</a></span></code></dt></dl><dl><dt class="spec value" id="val-pp_issue"><a href="#val-pp_issue" class="anchor"></a><code><span class="keyword">val</span> pp_issue : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-issue_desc">issue_desc</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-should_run_check"><a href="#val-should_run_check" class="anchor"></a><code><span class="keyword">val</span> should_run_check : <a href="index.html#type-mode">mode</a> <span>&#45;&gt;</span> bool</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CIssue (infer.ASTLanguage.CIssue)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">ASTLanguage</a> &#x00BB; CIssue</nav><h1>Module <code>ASTLanguage.CIssue</code></h1></header><dl><dt class="spec type" id="type-mode"><a href="#type-mode" class="anchor"></a><code><span class="keyword">type</span> mode</code><code> = </code><table class="variant"><tr id="type-mode.On" class="anchored"><td class="def constructor"><a href="#type-mode.On" class="anchor"></a><code>| </code><code><span class="constructor">On</span></code></td></tr><tr id="type-mode.Off" class="anchored"><td class="def constructor"><a href="#type-mode.Off" class="anchor"></a><code>| </code><code><span class="constructor">Off</span></code></td></tr></table></dt></dl><dl><dt class="spec value" id="val-should_run_check"><a href="#val-should_run_check" class="anchor"></a><code><span class="keyword">val</span> should_run_check : <a href="index.html#type-mode">mode</a> <span>&#45;&gt;</span> bool</code></dt></dl><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><code>{</code><table class="record"><tr id="type-t.issue_type" class="anchored"><td class="def field"><a href="#type-t.issue_type" class="anchor"></a><code>issue_type : <a href="../../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a>;</code></td></tr><tr id="type-t.description" class="anchored"><td class="def field"><a href="#type-t.description" class="anchor"></a><code>description : string;</code></td><td class="doc"><p>Description in the error message</p></td></tr><tr id="type-t.mode" class="anchored"><td class="def field"><a href="#type-t.mode" class="anchor"></a><code>mode : <a href="index.html#type-mode">mode</a>;</code></td></tr><tr id="type-t.loc" class="anchored"><td class="def field"><a href="#type-t.loc" class="anchor"></a><code>loc : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a>;</code></td><td class="doc"><p>location in the code</p></td></tr><tr id="type-t.severity" class="anchored"><td class="def field"><a href="#type-t.severity" class="anchor"></a><code>severity : <a href="../../IBase/IssueType/index.html#type-severity">IBase.IssueType.severity</a>;</code></td></tr><tr id="type-t.suggestion" class="anchored"><td class="def field"><a href="#type-t.suggestion" class="anchor"></a><code>suggestion : <span>string option</span>;</code></td><td class="doc"><p>an optional suggestion or correction</p></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ComponentKit (infer.ASTLanguage.ComponentKit)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">ASTLanguage</a> &#x00BB; ComponentKit</nav><h1>Module <code>ASTLanguage.ComponentKit</code></h1></header><dl><dt class="spec value" id="val-contains_ck_impl"><a href="#val-contains_ck_impl" class="anchor"></a><code><span class="keyword">val</span> contains_ck_impl : <span><a href="../../ATDGenerated/Clang_ast_t/index.html#type-decl">ATDGenerated.Clang_ast_t.decl</a> list</span> <span>&#45;&gt;</span> bool</code></dt><dd><p>Returns true if the passed-in list of decls contains an ObjCImplementationDecl of a descendant of CKComponent or CKComponentController.</p><p>Does not recurse into hierarchy.</p></dd></dl><dl><dt class="spec value" id="val-mutable_local_vars_advice"><a href="#val-mutable_local_vars_advice" class="anchor"></a><code><span class="keyword">val</span> mutable_local_vars_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-issue_desc">CIssue.issue_desc</a> option</span></code></dt><dt class="spec value" id="val-component_factory_function_advice"><a href="#val-component_factory_function_advice" class="anchor"></a><code><span class="keyword">val</span> component_factory_function_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-issue_desc">CIssue.issue_desc</a> option</span></code></dt><dt class="spec value" id="val-component_with_unconventional_superclass_advice"><a href="#val-component_with_unconventional_superclass_advice" class="anchor"></a><code><span class="keyword">val</span> component_with_unconventional_superclass_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-issue_desc">CIssue.issue_desc</a> option</span></code></dt><dt class="spec value" id="val-component_with_multiple_factory_methods_advice"><a href="#val-component_with_multiple_factory_methods_advice" class="anchor"></a><code><span class="keyword">val</span> component_with_multiple_factory_methods_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-issue_desc">CIssue.issue_desc</a> list</span></code></dt><dt class="spec value" id="val-component_initializer_with_side_effects_advice"><a href="#val-component_initializer_with_side_effects_advice" class="anchor"></a><code><span class="keyword">val</span> component_initializer_with_side_effects_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-issue_desc">CIssue.issue_desc</a> option</span></code></dt><dt class="spec value" id="val-component_file_line_count_info"><a href="#val-component_file_line_count_info" class="anchor"></a><code><span class="keyword">val</span> component_file_line_count_info : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-issue_desc">CIssue.issue_desc</a> list</span></code></dt><dt class="spec value" id="val-component_file_cyclomatic_complexity_info"><a href="#val-component_file_cyclomatic_complexity_info" class="anchor"></a><code><span class="keyword">val</span> component_file_cyclomatic_complexity_info : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-issue_desc">CIssue.issue_desc</a> option</span></code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ComponentKit (infer.ASTLanguage.ComponentKit)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">ASTLanguage</a> &#x00BB; ComponentKit</nav><h1>Module <code>ASTLanguage.ComponentKit</code></h1></header><dl><dt class="spec value" id="val-contains_ck_impl"><a href="#val-contains_ck_impl" class="anchor"></a><code><span class="keyword">val</span> contains_ck_impl : <span><a href="../../ATDGenerated/Clang_ast_t/index.html#type-decl">ATDGenerated.Clang_ast_t.decl</a> list</span> <span>&#45;&gt;</span> bool</code></dt><dd><p>Returns true if the passed-in list of decls contains an ObjCImplementationDecl of a descendant of CKComponent or CKComponentController.</p><p>Does not recurse into hierarchy.</p></dd></dl><dl><dt class="spec value" id="val-mutable_local_vars_advice"><a href="#val-mutable_local_vars_advice" class="anchor"></a><code><span class="keyword">val</span> mutable_local_vars_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-t">CIssue.t</a> option</span></code></dt><dt class="spec value" id="val-component_factory_function_advice"><a href="#val-component_factory_function_advice" class="anchor"></a><code><span class="keyword">val</span> component_factory_function_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-t">CIssue.t</a> option</span></code></dt><dt class="spec value" id="val-component_with_unconventional_superclass_advice"><a href="#val-component_with_unconventional_superclass_advice" class="anchor"></a><code><span class="keyword">val</span> component_with_unconventional_superclass_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-t">CIssue.t</a> option</span></code></dt><dt class="spec value" id="val-component_with_multiple_factory_methods_advice"><a href="#val-component_with_multiple_factory_methods_advice" class="anchor"></a><code><span class="keyword">val</span> component_with_multiple_factory_methods_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-t">CIssue.t</a> list</span></code></dt><dt class="spec value" id="val-component_initializer_with_side_effects_advice"><a href="#val-component_initializer_with_side_effects_advice" class="anchor"></a><code><span class="keyword">val</span> component_initializer_with_side_effects_advice : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-t">CIssue.t</a> option</span></code></dt><dt class="spec value" id="val-component_file_line_count_info"><a href="#val-component_file_line_count_info" class="anchor"></a><code><span class="keyword">val</span> component_file_line_count_info : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-t">CIssue.t</a> list</span></code></dt><dt class="spec value" id="val-component_file_cyclomatic_complexity_info"><a href="#val-component_file_cyclomatic_complexity_info" class="anchor"></a><code><span class="keyword">val</span> component_file_cyclomatic_complexity_info : <a href="../CLintersContext/index.html#type-context">CLintersContext.context</a> <span>&#45;&gt;</span> <a href="../Ctl_parser_types/index.html#type-ast_node">Ctl_parser_types.ast_node</a> <span>&#45;&gt;</span> <span><a href="../CIssue/index.html#type-t">CIssue.t</a> option</span></code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ASTLanguage__CIssue (infer.ASTLanguage__CIssue)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; ASTLanguage__CIssue</nav><h1>Module <code>ASTLanguage__CIssue</code></h1></header><dl><dt class="spec type" id="type-mode"><a href="#type-mode" class="anchor"></a><code><span class="keyword">type</span> mode</code><code> = </code><table class="variant"><tr id="type-mode.On" class="anchored"><td class="def constructor"><a href="#type-mode.On" class="anchor"></a><code>| </code><code><span class="constructor">On</span></code></td></tr><tr id="type-mode.Off" class="anchored"><td class="def constructor"><a href="#type-mode.Off" class="anchor"></a><code>| </code><code><span class="constructor">Off</span></code></td></tr></table></dt><dt class="spec type" id="type-issue_desc0"><a href="#type-issue_desc0" class="anchor"></a><code><span class="keyword">type</span> <span>'issue_type issue_desc0</span></code><code> = </code><code>{</code><table class="record"><tr id="type-issue_desc0.issue_type" class="anchored"><td class="def field"><a href="#type-issue_desc0.issue_type" class="anchor"></a><code>issue_type : <span class="type-var">'issue_type</span>;</code></td><td class="doc"><p>issue type</p></td></tr><tr id="type-issue_desc0.description" class="anchored"><td class="def field"><a href="#type-issue_desc0.description" class="anchor"></a><code>description : string;</code></td><td class="doc"><p>Description in the error message</p></td></tr><tr id="type-issue_desc0.mode" class="anchored"><td class="def field"><a href="#type-issue_desc0.mode" class="anchor"></a><code>mode : <a href="index.html#type-mode">mode</a>;</code></td></tr><tr id="type-issue_desc0.loc" class="anchored"><td class="def field"><a href="#type-issue_desc0.loc" class="anchor"></a><code>loc : <a href="../IBase/Location/index.html#type-t">IBase.Location.t</a>;</code></td><td class="doc"><p>location in the code</p></td></tr><tr id="type-issue_desc0.severity" class="anchored"><td class="def field"><a href="#type-issue_desc0.severity" class="anchor"></a><code>severity : <a href="../IR/Exceptions/index.html#type-severity">IR.Exceptions.severity</a>;</code></td></tr><tr id="type-issue_desc0.suggestion" class="anchored"><td class="def field"><a href="#type-issue_desc0.suggestion" class="anchor"></a><code>suggestion : <span>string option</span>;</code></td><td class="doc"><p>an optional suggestion or correction</p></td></tr></table><code>}</code></dt><dt class="spec type" id="type-issue_desc"><a href="#type-issue_desc" class="anchor"></a><code><span class="keyword">type</span> issue_desc</code><code> = <span><a href="../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a> <a href="index.html#type-issue_desc0">issue_desc0</a></span></code></dt></dl><dl><dt class="spec value" id="val-pp_issue"><a href="#val-pp_issue" class="anchor"></a><code><span class="keyword">val</span> pp_issue : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-issue_desc">issue_desc</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-should_run_check"><a href="#val-should_run_check" class="anchor"></a><code><span class="keyword">val</span> should_run_check : <a href="index.html#type-mode">mode</a> <span>&#45;&gt;</span> bool</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ASTLanguage__CIssue (infer.ASTLanguage__CIssue)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; ASTLanguage__CIssue</nav><h1>Module <code>ASTLanguage__CIssue</code></h1></header><dl><dt class="spec type" id="type-mode"><a href="#type-mode" class="anchor"></a><code><span class="keyword">type</span> mode</code><code> = </code><table class="variant"><tr id="type-mode.On" class="anchored"><td class="def constructor"><a href="#type-mode.On" class="anchor"></a><code>| </code><code><span class="constructor">On</span></code></td></tr><tr id="type-mode.Off" class="anchored"><td class="def constructor"><a href="#type-mode.Off" class="anchor"></a><code>| </code><code><span class="constructor">Off</span></code></td></tr></table></dt></dl><dl><dt class="spec value" id="val-should_run_check"><a href="#val-should_run_check" class="anchor"></a><code><span class="keyword">val</span> should_run_check : <a href="index.html#type-mode">mode</a> <span>&#45;&gt;</span> bool</code></dt></dl><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><code>{</code><table class="record"><tr id="type-t.issue_type" class="anchored"><td class="def field"><a href="#type-t.issue_type" class="anchor"></a><code>issue_type : <a href="../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a>;</code></td></tr><tr id="type-t.description" class="anchored"><td class="def field"><a href="#type-t.description" class="anchor"></a><code>description : string;</code></td><td class="doc"><p>Description in the error message</p></td></tr><tr id="type-t.mode" class="anchored"><td class="def field"><a href="#type-t.mode" class="anchor"></a><code>mode : <a href="index.html#type-mode">mode</a>;</code></td></tr><tr id="type-t.loc" class="anchored"><td class="def field"><a href="#type-t.loc" class="anchor"></a><code>loc : <a href="../IBase/Location/index.html#type-t">IBase.Location.t</a>;</code></td><td class="doc"><p>location in the code</p></td></tr><tr id="type-t.severity" class="anchored"><td class="def field"><a href="#type-t.severity" class="anchor"></a><code>severity : <a href="../IBase/IssueType/index.html#type-severity">IBase.IssueType.severity</a>;</code></td></tr><tr id="type-t.suggestion" class="anchored"><td class="def field"><a href="#type-t.suggestion" class="anchor"></a><code>suggestion : <span>string option</span>;</code></td><td class="doc"><p>an optional suggestion or correction</p></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>InferCommand (infer.ATDGenerated.InferCommand)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">ATDGenerated</a> &#x00BB; InferCommand</nav><h1>Module <code>ATDGenerated.InferCommand</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><table class="variant"><tr id="type-t.Analyze" class="anchored"><td class="def constructor"><a href="#type-t.Analyze" class="anchor"></a><code>| </code><code><span class="constructor">Analyze</span></code></td><td class="doc"><p>analyze previously captured source files</p></td></tr><tr id="type-t.Capture" class="anchored"><td class="def constructor"><a href="#type-t.Capture" class="anchor"></a><code>| </code><code><span class="constructor">Capture</span></code></td><td class="doc"><p>capture compilation commands and translate source files into infer's intermediate language</p></td></tr><tr id="type-t.Compile" class="anchored"><td class="def constructor"><a href="#type-t.Compile" class="anchor"></a><code>| </code><code><span class="constructor">Compile</span></code></td><td class="doc"><p>set up the infer environment then run the compilation commands without capturing the source files</p></td></tr><tr id="type-t.Explore" class="anchored"><td class="def constructor"><a href="#type-t.Explore" class="anchor"></a><code>| </code><code><span class="constructor">Explore</span></code></td><td class="doc"><p>explore infer reports</p></td></tr><tr id="type-t.Report" class="anchored"><td class="def constructor"><a href="#type-t.Report" class="anchor"></a><code>| </code><code><span class="constructor">Report</span></code></td><td class="doc"><p>post-process infer results and reports</p></td></tr><tr id="type-t.ReportDiff" class="anchored"><td class="def constructor"><a href="#type-t.ReportDiff" class="anchor"></a><code>| </code><code><span class="constructor">ReportDiff</span></code></td><td class="doc"><p>compute the difference of two infer reports</p></td></tr><tr id="type-t.Run" class="anchored"><td class="def constructor"><a href="#type-t.Run" class="anchor"></a><code>| </code><code><span class="constructor">Run</span></code></td><td class="doc"><p>orchestrate the capture, analysis, and reporting of a compilation command</p></td></tr></table></dt><dd><p>Main modes of operation for infer</p></dd></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-of_string"><a href="#val-of_string" class="anchor"></a><code><span class="keyword">val</span> of_string : string <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-to_string"><a href="#val-to_string" class="anchor"></a><code><span class="keyword">val</span> to_string : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt><dt class="spec value" id="val-equal"><a href="#val-equal" class="anchor"></a><code><span class="keyword">val</span> equal : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-all_commands"><a href="#val-all_commands" class="anchor"></a><code><span class="keyword">val</span> all_commands : <span><a href="index.html#type-t">t</a> list</span></code></dt><dt class="spec value" id="val-infer_exe_name"><a href="#val-infer_exe_name" class="anchor"></a><code><span class="keyword">val</span> infer_exe_name : string</code></dt><dt class="spec value" id="val-to_exe_name"><a href="#val-to_exe_name" class="anchor"></a><code><span class="keyword">val</span> to_exe_name : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt><dt class="spec value" id="val-of_exe_name"><a href="#val-of_exe_name" class="anchor"></a><code><span class="keyword">val</span> of_exe_name : string <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> option</span></code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>InferCommand (infer.ATDGenerated.InferCommand)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">ATDGenerated</a> &#x00BB; InferCommand</nav><h1>Module <code>ATDGenerated.InferCommand</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><table class="variant"><tr id="type-t.Analyze" class="anchored"><td class="def constructor"><a href="#type-t.Analyze" class="anchor"></a><code>| </code><code><span class="constructor">Analyze</span></code></td><td class="doc"><p>analyze previously captured source files</p></td></tr><tr id="type-t.Capture" class="anchored"><td class="def constructor"><a href="#type-t.Capture" class="anchor"></a><code>| </code><code><span class="constructor">Capture</span></code></td><td class="doc"><p>capture compilation commands and translate source files into infer's intermediate language</p></td></tr><tr id="type-t.Compile" class="anchored"><td class="def constructor"><a href="#type-t.Compile" class="anchor"></a><code>| </code><code><span class="constructor">Compile</span></code></td><td class="doc"><p>set up the infer environment then run the compilation commands without capturing the source files</p></td></tr><tr id="type-t.Explore" class="anchored"><td class="def constructor"><a href="#type-t.Explore" class="anchor"></a><code>| </code><code><span class="constructor">Explore</span></code></td><td class="doc"><p>explore infer reports</p></td></tr><tr id="type-t.Help" class="anchored"><td class="def constructor"><a href="#type-t.Help" class="anchor"></a><code>| </code><code><span class="constructor">Help</span></code></td><td class="doc"><p>documentation about various aspects of infer</p></td></tr><tr id="type-t.Report" class="anchored"><td class="def constructor"><a href="#type-t.Report" class="anchor"></a><code>| </code><code><span class="constructor">Report</span></code></td><td class="doc"><p>post-process infer results and reports</p></td></tr><tr id="type-t.ReportDiff" class="anchored"><td class="def constructor"><a href="#type-t.ReportDiff" class="anchor"></a><code>| </code><code><span class="constructor">ReportDiff</span></code></td><td class="doc"><p>compute the difference of two infer reports</p></td></tr><tr id="type-t.Run" class="anchored"><td class="def constructor"><a href="#type-t.Run" class="anchor"></a><code>| </code><code><span class="constructor">Run</span></code></td><td class="doc"><p>orchestrate the capture, analysis, and reporting of a compilation command</p></td></tr></table></dt><dd><p>Main modes of operation for infer</p></dd></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-of_string"><a href="#val-of_string" class="anchor"></a><code><span class="keyword">val</span> of_string : string <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-to_string"><a href="#val-to_string" class="anchor"></a><code><span class="keyword">val</span> to_string : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt><dt class="spec value" id="val-equal"><a href="#val-equal" class="anchor"></a><code><span class="keyword">val</span> equal : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-all_commands"><a href="#val-all_commands" class="anchor"></a><code><span class="keyword">val</span> all_commands : <span><a href="index.html#type-t">t</a> list</span></code></dt><dt class="spec value" id="val-infer_exe_name"><a href="#val-infer_exe_name" class="anchor"></a><code><span class="keyword">val</span> infer_exe_name : string</code></dt><dt class="spec value" id="val-to_exe_name"><a href="#val-to_exe_name" class="anchor"></a><code><span class="keyword">val</span> to_exe_name : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt><dt class="spec value" id="val-of_exe_name"><a href="#val-of_exe_name" class="anchor"></a><code><span class="keyword">val</span> of_exe_name : string <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> option</span></code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Perf_profiler_t (infer.ATDGenerated.Perf_profiler_t)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">ATDGenerated</a> &#x00BB; Perf_profiler_t</nav><h1>Module <code>ATDGenerated.Perf_profiler_t</code></h1></header><dl><dt class="spec type" id="type-perf_profiler_item"><a href="#type-perf_profiler_item" class="anchor"></a><code><span class="keyword">type</span> perf_profiler_item</code><code> = </code><code>{</code><table class="record"><tr id="type-perf_profiler_item.function_name" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.function_name" class="anchor"></a><code>function_name : string;</code></td></tr><tr id="type-perf_profiler_item.approx_count_trace_id" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.approx_count_trace_id" class="anchor"></a><code>approx_count_trace_id : int;</code></td></tr><tr id="type-perf_profiler_item.sum_inclusive_cpu_time" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.sum_inclusive_cpu_time" class="anchor"></a><code>sum_inclusive_cpu_time : float;</code></td></tr><tr id="type-perf_profiler_item.avg_inclusive_cpu_time_ms" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.avg_inclusive_cpu_time_ms" class="anchor"></a><code>avg_inclusive_cpu_time_ms : float;</code></td></tr><tr id="type-perf_profiler_item.sum_exclusive_cpu_time" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.sum_exclusive_cpu_time" class="anchor"></a><code>sum_exclusive_cpu_time : float;</code></td></tr><tr id="type-perf_profiler_item.avg_exclusive_cpu_time_ms" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.avg_exclusive_cpu_time_ms" class="anchor"></a><code>avg_exclusive_cpu_time_ms : float;</code></td></tr></table><code>}</code></dt><dt class="spec type" id="type-perf_profiler"><a href="#type-perf_profiler" class="anchor"></a><code><span class="keyword">type</span> perf_profiler</code><code> = <span><a href="index.html#type-perf_profiler_item">perf_profiler_item</a> list</span></code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ATDGenerated__InferCommand (infer.ATDGenerated__InferCommand)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; ATDGenerated__InferCommand</nav><h1>Module <code>ATDGenerated__InferCommand</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><table class="variant"><tr id="type-t.Analyze" class="anchored"><td class="def constructor"><a href="#type-t.Analyze" class="anchor"></a><code>| </code><code><span class="constructor">Analyze</span></code></td><td class="doc"><p>analyze previously captured source files</p></td></tr><tr id="type-t.Capture" class="anchored"><td class="def constructor"><a href="#type-t.Capture" class="anchor"></a><code>| </code><code><span class="constructor">Capture</span></code></td><td class="doc"><p>capture compilation commands and translate source files into infer's intermediate language</p></td></tr><tr id="type-t.Compile" class="anchored"><td class="def constructor"><a href="#type-t.Compile" class="anchor"></a><code>| </code><code><span class="constructor">Compile</span></code></td><td class="doc"><p>set up the infer environment then run the compilation commands without capturing the source files</p></td></tr><tr id="type-t.Explore" class="anchored"><td class="def constructor"><a href="#type-t.Explore" class="anchor"></a><code>| </code><code><span class="constructor">Explore</span></code></td><td class="doc"><p>explore infer reports</p></td></tr><tr id="type-t.Report" class="anchored"><td class="def constructor"><a href="#type-t.Report" class="anchor"></a><code>| </code><code><span class="constructor">Report</span></code></td><td class="doc"><p>post-process infer results and reports</p></td></tr><tr id="type-t.ReportDiff" class="anchored"><td class="def constructor"><a href="#type-t.ReportDiff" class="anchor"></a><code>| </code><code><span class="constructor">ReportDiff</span></code></td><td class="doc"><p>compute the difference of two infer reports</p></td></tr><tr id="type-t.Run" class="anchored"><td class="def constructor"><a href="#type-t.Run" class="anchor"></a><code>| </code><code><span class="constructor">Run</span></code></td><td class="doc"><p>orchestrate the capture, analysis, and reporting of a compilation command</p></td></tr></table></dt><dd><p>Main modes of operation for infer</p></dd></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-of_string"><a href="#val-of_string" class="anchor"></a><code><span class="keyword">val</span> of_string : string <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-to_string"><a href="#val-to_string" class="anchor"></a><code><span class="keyword">val</span> to_string : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt><dt class="spec value" id="val-equal"><a href="#val-equal" class="anchor"></a><code><span class="keyword">val</span> equal : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-all_commands"><a href="#val-all_commands" class="anchor"></a><code><span class="keyword">val</span> all_commands : <span><a href="index.html#type-t">t</a> list</span></code></dt><dt class="spec value" id="val-infer_exe_name"><a href="#val-infer_exe_name" class="anchor"></a><code><span class="keyword">val</span> infer_exe_name : string</code></dt><dt class="spec value" id="val-to_exe_name"><a href="#val-to_exe_name" class="anchor"></a><code><span class="keyword">val</span> to_exe_name : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt><dt class="spec value" id="val-of_exe_name"><a href="#val-of_exe_name" class="anchor"></a><code><span class="keyword">val</span> of_exe_name : string <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> option</span></code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ATDGenerated__InferCommand (infer.ATDGenerated__InferCommand)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; ATDGenerated__InferCommand</nav><h1>Module <code>ATDGenerated__InferCommand</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><table class="variant"><tr id="type-t.Analyze" class="anchored"><td class="def constructor"><a href="#type-t.Analyze" class="anchor"></a><code>| </code><code><span class="constructor">Analyze</span></code></td><td class="doc"><p>analyze previously captured source files</p></td></tr><tr id="type-t.Capture" class="anchored"><td class="def constructor"><a href="#type-t.Capture" class="anchor"></a><code>| </code><code><span class="constructor">Capture</span></code></td><td class="doc"><p>capture compilation commands and translate source files into infer's intermediate language</p></td></tr><tr id="type-t.Compile" class="anchored"><td class="def constructor"><a href="#type-t.Compile" class="anchor"></a><code>| </code><code><span class="constructor">Compile</span></code></td><td class="doc"><p>set up the infer environment then run the compilation commands without capturing the source files</p></td></tr><tr id="type-t.Explore" class="anchored"><td class="def constructor"><a href="#type-t.Explore" class="anchor"></a><code>| </code><code><span class="constructor">Explore</span></code></td><td class="doc"><p>explore infer reports</p></td></tr><tr id="type-t.Help" class="anchored"><td class="def constructor"><a href="#type-t.Help" class="anchor"></a><code>| </code><code><span class="constructor">Help</span></code></td><td class="doc"><p>documentation about various aspects of infer</p></td></tr><tr id="type-t.Report" class="anchored"><td class="def constructor"><a href="#type-t.Report" class="anchor"></a><code>| </code><code><span class="constructor">Report</span></code></td><td class="doc"><p>post-process infer results and reports</p></td></tr><tr id="type-t.ReportDiff" class="anchored"><td class="def constructor"><a href="#type-t.ReportDiff" class="anchor"></a><code>| </code><code><span class="constructor">ReportDiff</span></code></td><td class="doc"><p>compute the difference of two infer reports</p></td></tr><tr id="type-t.Run" class="anchored"><td class="def constructor"><a href="#type-t.Run" class="anchor"></a><code>| </code><code><span class="constructor">Run</span></code></td><td class="doc"><p>orchestrate the capture, analysis, and reporting of a compilation command</p></td></tr></table></dt><dd><p>Main modes of operation for infer</p></dd></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-of_string"><a href="#val-of_string" class="anchor"></a><code><span class="keyword">val</span> of_string : string <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-to_string"><a href="#val-to_string" class="anchor"></a><code><span class="keyword">val</span> to_string : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt><dt class="spec value" id="val-equal"><a href="#val-equal" class="anchor"></a><code><span class="keyword">val</span> equal : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-all_commands"><a href="#val-all_commands" class="anchor"></a><code><span class="keyword">val</span> all_commands : <span><a href="index.html#type-t">t</a> list</span></code></dt><dt class="spec value" id="val-infer_exe_name"><a href="#val-infer_exe_name" class="anchor"></a><code><span class="keyword">val</span> infer_exe_name : string</code></dt><dt class="spec value" id="val-to_exe_name"><a href="#val-to_exe_name" class="anchor"></a><code><span class="keyword">val</span> to_exe_name : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt><dt class="spec value" id="val-of_exe_name"><a href="#val-of_exe_name" class="anchor"></a><code><span class="keyword">val</span> of_exe_name : string <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> option</span></code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ATDGenerated__Perf_profiler_t (infer.ATDGenerated__Perf_profiler_t)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; ATDGenerated__Perf_profiler_t</nav><h1>Module <code>ATDGenerated__Perf_profiler_t</code></h1></header><dl><dt class="spec type" id="type-perf_profiler_item"><a href="#type-perf_profiler_item" class="anchor"></a><code><span class="keyword">type</span> perf_profiler_item</code><code> = </code><code>{</code><table class="record"><tr id="type-perf_profiler_item.function_name" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.function_name" class="anchor"></a><code>function_name : string;</code></td></tr><tr id="type-perf_profiler_item.approx_count_trace_id" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.approx_count_trace_id" class="anchor"></a><code>approx_count_trace_id : int;</code></td></tr><tr id="type-perf_profiler_item.sum_inclusive_cpu_time" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.sum_inclusive_cpu_time" class="anchor"></a><code>sum_inclusive_cpu_time : float;</code></td></tr><tr id="type-perf_profiler_item.avg_inclusive_cpu_time_ms" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.avg_inclusive_cpu_time_ms" class="anchor"></a><code>avg_inclusive_cpu_time_ms : float;</code></td></tr><tr id="type-perf_profiler_item.sum_exclusive_cpu_time" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.sum_exclusive_cpu_time" class="anchor"></a><code>sum_exclusive_cpu_time : float;</code></td></tr><tr id="type-perf_profiler_item.avg_exclusive_cpu_time_ms" class="anchored"><td class="def field"><a href="#type-perf_profiler_item.avg_exclusive_cpu_time_ms" class="anchor"></a><code>avg_exclusive_cpu_time_ms : float;</code></td></tr></table><code>}</code></dt><dt class="spec type" id="type-perf_profiler"><a href="#type-perf_profiler" class="anchor"></a><code><span class="keyword">type</span> perf_profiler</code><code> = <span><a href="index.html#type-perf_profiler_item">perf_profiler_item</a> list</span></code></dt></dl></div></body></html>

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Abs (infer.Absint.AccessPath.Abs)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">infer</a> &#x00BB; <a href="../../index.html">Absint</a> &#x00BB; <a href="../index.html">AccessPath</a> &#x00BB; Abs</nav><h1>Module <code>AccessPath.Abs</code></h1></header><dl><dt class="spec type" id="type-raw"><a href="#type-raw" class="anchor"></a><code><span class="keyword">type</span> raw</code><code> = <a href="../index.html#type-t">t</a></code></dt><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><table class="variant"><tr id="type-t.Abstracted" class="anchored"><td class="def constructor"><a href="#type-t.Abstracted" class="anchor"></a><code>| </code><code><span class="constructor">Abstracted</span> <span class="keyword">of</span> <a href="index.html#type-raw">raw</a></code></td><td class="doc"><p>abstraction of heap reachable from an access path, e.g. x.f*</p></td></tr><tr id="type-t.Exact" class="anchored"><td class="def constructor"><a href="#type-t.Exact" class="anchor"></a><code>| </code><code><span class="constructor">Exact</span> <span class="keyword">of</span> <a href="index.html#type-raw">raw</a></code></td><td class="doc"><p>precise representation of an access path, e.g. x.f.g</p></td></tr></table></dt></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-equal"><a href="#val-equal" class="anchor"></a><code><span class="keyword">val</span> equal : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-to_footprint"><a href="#val-to_footprint" class="anchor"></a><code><span class="keyword">val</span> to_footprint : int <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>replace the base var with a footprint variable rooted at formal index <code>formal_index</code></p></dd></dl><dl><dt class="spec value" id="val-get_footprint_index_base"><a href="#val-get_footprint_index_base" class="anchor"></a><code><span class="keyword">val</span> get_footprint_index_base : <a href="../index.html#type-base">base</a> <span>&#45;&gt;</span> <span>int option</span></code></dt><dd><p>return the formal index associated with the base of this access path if there is one, or None otherwise</p></dd></dl><dl><dt class="spec value" id="val-with_base"><a href="#val-with_base" class="anchor"></a><code><span class="keyword">val</span> with_base : <a href="../index.html#type-base">base</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>swap base of existing access path for <code>base_var</code> (e.g., `with_base_bvar x y.f.g` produces `x.f.g`</p></dd></dl><dl><dt class="spec value" id="val-extract"><a href="#val-extract" class="anchor"></a><code><span class="keyword">val</span> extract : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-raw">raw</a></code></dt><dd><p>extract a raw access path from its wrapper</p></dd></dl><dl><dt class="spec value" id="val-is_exact"><a href="#val-is_exact" class="anchor"></a><code><span class="keyword">val</span> is_exact : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>return true if <code>t</code> is an exact representation of an access path, false if it's an abstraction</p></dd></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CallSite (infer.Absint.CallSite)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; CallSite</nav><h1>Module <code>Absint.CallSite</code></h1></header><div class="spec module" id="module-F"><a href="#module-F" class="anchor"></a><code><span class="keyword">module</span> F = Stdlib.Format</code></div><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-equal"><a href="#val-equal" class="anchor"></a><code><span class="keyword">val</span> equal : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-pname"><a href="#val-pname" class="anchor"></a><code><span class="keyword">val</span> pname : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a></code></dt><dt class="spec value" id="val-loc"><a href="#val-loc" class="anchor"></a><code><span class="keyword">val</span> loc : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a></code></dt><dt class="spec value" id="val-make"><a href="#val-make" class="anchor"></a><code><span class="keyword">val</span> make : <a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-dummy"><a href="#val-dummy" class="anchor"></a><code><span class="keyword">val</span> dummy : <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="index.html#module-F">F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl><div class="spec module" id="module-Set"><a href="#module-Set" class="anchor"></a><code><span class="keyword">module</span> Set : <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">IStdlib.PrettyPrintable.PPSet</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">PPSet</a>.elt = <a href="index.html#type-t">t</a></code></div></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>DefaultCallPrinter (infer.Absint.ExplicitTrace.DefaultCallPrinter)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">infer</a> &#x00BB; <a href="../../index.html">Absint</a> &#x00BB; <a href="../index.html">ExplicitTrace</a> &#x00BB; DefaultCallPrinter</nav><h1>Module <code>ExplicitTrace.DefaultCallPrinter</code></h1><p>Printer which outputs &quot;Method call: &lt;monospaced procname&gt;&quot;</p></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../../IR/CallSite/index.html#type-t">IR.CallSite.t</a></code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>DefaultCallPrinter (infer.Absint.ExplicitTrace.DefaultCallPrinter)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">infer</a> &#x00BB; <a href="../../index.html">Absint</a> &#x00BB; <a href="../index.html">ExplicitTrace</a> &#x00BB; DefaultCallPrinter</nav><h1>Module <code>ExplicitTrace.DefaultCallPrinter</code></h1><p>Printer which outputs &quot;Method call: &lt;monospaced procname&gt;&quot;</p></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../CallSite/index.html#type-t">CallSite.t</a></code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>2-CallPrinter (infer.Absint.ExplicitTrace.MakeTraceElem.2-CallPrinter)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">ExplicitTrace</a> &#x00BB; <a href="../index.html">MakeTraceElem</a> &#x00BB; 2-CallPrinter</nav><h1>Parameter <code>MakeTraceElem.2-CallPrinter</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../../../IR/CallSite/index.html#type-t">IR.CallSite.t</a></code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>2-CallPrinter (infer.Absint.ExplicitTrace.MakeTraceElem.2-CallPrinter)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">ExplicitTrace</a> &#x00BB; <a href="../index.html">MakeTraceElem</a> &#x00BB; 2-CallPrinter</nav><h1>Parameter <code>MakeTraceElem.2-CallPrinter</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../../CallSite/index.html#type-t">CallSite.t</a></code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>2-CallPrinter (infer.Absint.ExplicitTrace.MakeTraceElemModuloLocation.2-CallPrinter)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">ExplicitTrace</a> &#x00BB; <a href="../index.html">MakeTraceElemModuloLocation</a> &#x00BB; 2-CallPrinter</nav><h1>Parameter <code>MakeTraceElemModuloLocation.2-CallPrinter</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../../../IR/CallSite/index.html#type-t">IR.CallSite.t</a></code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>2-CallPrinter (infer.Absint.ExplicitTrace.MakeTraceElemModuloLocation.2-CallPrinter)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">ExplicitTrace</a> &#x00BB; <a href="../index.html">MakeTraceElemModuloLocation</a> &#x00BB; 2-CallPrinter</nav><h1>Parameter <code>MakeTraceElemModuloLocation.2-CallPrinter</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../../CallSite/index.html#type-t">CallSite.t</a></code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ExplicitTrace (infer.Absint.ExplicitTrace)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; ExplicitTrace</nav><h1>Module <code>Absint.ExplicitTrace</code></h1></header><dl><dt class="spec module-type" id="module-type-FiniteSet"><a href="#module-type-FiniteSet" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-FiniteSet/index.html">FiniteSet</a> = <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd><p>A powerset domain of traces, with bottom = empty and join = union</p></dd></dl><div class="spec module-type" id="module-type-Element"><a href="#module-type-Element" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-Element/index.html">Element</a> = <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module-type" id="module-type-CallPrinter"><a href="#module-type-CallPrinter" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-CallPrinter/index.html">CallPrinter</a> = <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PrintableType">IStdlib.PrettyPrintable.PrintableType</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="module-type-CallPrinter/index.html#type-t">t</a> = <a href="../../IR/CallSite/index.html#type-t">IR.CallSite.t</a></code></div><dl><dt class="spec module" id="module-DefaultCallPrinter"><a href="#module-DefaultCallPrinter" class="anchor"></a><code><span class="keyword">module</span> <a href="DefaultCallPrinter/index.html">DefaultCallPrinter</a> : <a href="index.html#module-type-CallPrinter">CallPrinter</a></code></dt><dd><p>Printer which outputs &quot;Method call: &lt;monospaced procname&gt;&quot;</p></dd></dl><div class="spec module-type" id="module-type-TraceElem"><a href="#module-type-TraceElem" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-TraceElem/index.html">TraceElem</a> = <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module" id="module-MakeTraceElem"><a href="#module-MakeTraceElem" class="anchor"></a><code><span class="keyword">module</span> <a href="MakeTraceElem/index.html">MakeTraceElem</a> : <span class="keyword">functor</span> (<a href="MakeTraceElem/argument-1-Elem/index.html">Elem</a> : <a href="index.html#module-type-Element">Element</a>) <span>&#45;&gt;</span> <span class="keyword">functor</span> (<a href="MakeTraceElem/argument-2-CallPrinter/index.html">CallPrinter</a> : <a href="index.html#module-type-CallPrinter">CallPrinter</a>) <span>&#45;&gt;</span> <a href="index.html#module-type-TraceElem">TraceElem</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="MakeTraceElem/index.html#type-elem_t">elem_t</a> = <a href="MakeTraceElem/index.html#argument-1-Elem">Elem</a>.t</code></div><div class="spec module" id="module-MakeTraceElemModuloLocation"><a href="#module-MakeTraceElemModuloLocation" class="anchor"></a><code><span class="keyword">module</span> <a href="MakeTraceElemModuloLocation/index.html">MakeTraceElemModuloLocation</a> : <span class="keyword">functor</span> (<a href="MakeTraceElemModuloLocation/argument-1-Elem/index.html">Elem</a> : <a href="index.html#module-type-Element">Element</a>) <span>&#45;&gt;</span> <span class="keyword">functor</span> (<a href="MakeTraceElemModuloLocation/argument-2-CallPrinter/index.html">CallPrinter</a> : <a href="index.html#module-type-CallPrinter">CallPrinter</a>) <span>&#45;&gt;</span> <a href="index.html#module-type-TraceElem">TraceElem</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="MakeTraceElemModuloLocation/index.html#type-elem_t">elem_t</a> = <a href="MakeTraceElemModuloLocation/index.html#argument-1-Elem">Elem</a>.t</code></div></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ExplicitTrace (infer.Absint.ExplicitTrace)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; ExplicitTrace</nav><h1>Module <code>Absint.ExplicitTrace</code></h1></header><dl><dt class="spec module-type" id="module-type-FiniteSet"><a href="#module-type-FiniteSet" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-FiniteSet/index.html">FiniteSet</a> = <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd><p>A powerset domain of traces, with bottom = empty and join = union</p></dd></dl><div class="spec module-type" id="module-type-Element"><a href="#module-type-Element" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-Element/index.html">Element</a> = <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module-type" id="module-type-CallPrinter"><a href="#module-type-CallPrinter" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-CallPrinter/index.html">CallPrinter</a> = <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PrintableType">IStdlib.PrettyPrintable.PrintableType</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="module-type-CallPrinter/index.html#type-t">t</a> = <a href="../CallSite/index.html#type-t">CallSite.t</a></code></div><dl><dt class="spec module" id="module-DefaultCallPrinter"><a href="#module-DefaultCallPrinter" class="anchor"></a><code><span class="keyword">module</span> <a href="DefaultCallPrinter/index.html">DefaultCallPrinter</a> : <a href="index.html#module-type-CallPrinter">CallPrinter</a></code></dt><dd><p>Printer which outputs &quot;Method call: &lt;monospaced procname&gt;&quot;</p></dd></dl><div class="spec module-type" id="module-type-TraceElem"><a href="#module-type-TraceElem" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-TraceElem/index.html">TraceElem</a> = <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module" id="module-MakeTraceElem"><a href="#module-MakeTraceElem" class="anchor"></a><code><span class="keyword">module</span> <a href="MakeTraceElem/index.html">MakeTraceElem</a> : <span class="keyword">functor</span> (<a href="MakeTraceElem/argument-1-Elem/index.html">Elem</a> : <a href="index.html#module-type-Element">Element</a>) <span>&#45;&gt;</span> <span class="keyword">functor</span> (<a href="MakeTraceElem/argument-2-CallPrinter/index.html">CallPrinter</a> : <a href="index.html#module-type-CallPrinter">CallPrinter</a>) <span>&#45;&gt;</span> <a href="index.html#module-type-TraceElem">TraceElem</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="MakeTraceElem/index.html#type-elem_t">elem_t</a> = <a href="MakeTraceElem/index.html#argument-1-Elem">Elem</a>.t</code></div><div class="spec module" id="module-MakeTraceElemModuloLocation"><a href="#module-MakeTraceElemModuloLocation" class="anchor"></a><code><span class="keyword">module</span> <a href="MakeTraceElemModuloLocation/index.html">MakeTraceElemModuloLocation</a> : <span class="keyword">functor</span> (<a href="MakeTraceElemModuloLocation/argument-1-Elem/index.html">Elem</a> : <a href="index.html#module-type-Element">Element</a>) <span>&#45;&gt;</span> <span class="keyword">functor</span> (<a href="MakeTraceElemModuloLocation/argument-2-CallPrinter/index.html">CallPrinter</a> : <a href="index.html#module-type-CallPrinter">CallPrinter</a>) <span>&#45;&gt;</span> <a href="index.html#module-type-TraceElem">TraceElem</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="MakeTraceElemModuloLocation/index.html#type-elem_t">elem_t</a> = <a href="MakeTraceElemModuloLocation/index.html#argument-1-Elem">Elem</a>.t</code></div></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CallPrinter (infer.Absint.ExplicitTrace.CallPrinter)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">infer</a> &#x00BB; <a href="../../index.html">Absint</a> &#x00BB; <a href="../index.html">ExplicitTrace</a> &#x00BB; CallPrinter</nav><h1>Module type <code>ExplicitTrace.CallPrinter</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../../IR/CallSite/index.html#type-t">IR.CallSite.t</a></code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CallPrinter (infer.Absint.ExplicitTrace.CallPrinter)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">infer</a> &#x00BB; <a href="../../index.html">Absint</a> &#x00BB; <a href="../index.html">ExplicitTrace</a> &#x00BB; CallPrinter</nav><h1>Module type <code>ExplicitTrace.CallPrinter</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../CallSite/index.html#type-t">CallSite.t</a></code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>FbPatternMatch (infer.Absint.FbPatternMatch)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; FbPatternMatch</nav><h1>Module <code>Absint.FbPatternMatch</code></h1></header><dl><dt class="spec value" id="val-is_subtype_of_fb_service_handler"><a href="#val-is_subtype_of_fb_service_handler" class="anchor"></a><code><span class="keyword">val</span> is_subtype_of_fb_service_handler : <a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../IR/Typ/Name/index.html#type-t">IR.Typ.Name.t</a> <span>&#45;&gt;</span> bool</code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>FormalMap (infer.Absint.FormalMap)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; FormalMap</nav><h1>Module <code>Absint.FormalMap</code></h1></header><div class="spec module" id="module-F"><a href="#module-F" class="anchor"></a><code><span class="keyword">module</span> F = Stdlib.Format</code></div><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt><dd><p>a map from a formal to its positional index</p></dd></dl><dl><dt class="spec value" id="val-make"><a href="#val-make" class="anchor"></a><code><span class="keyword">val</span> make : <a href="../../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>create a formal map for the given procdesc</p></dd></dl><dl><dt class="spec value" id="val-empty"><a href="#val-empty" class="anchor"></a><code><span class="keyword">val</span> empty : <a href="index.html#type-t">t</a></code></dt><dd><p>the empty formal map</p></dd></dl><dl><dt class="spec value" id="val-is_formal"><a href="#val-is_formal" class="anchor"></a><code><span class="keyword">val</span> is_formal : <a href="../../IR/AccessPath/index.html#type-base">IR.AccessPath.base</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>return true if the given base var is a formal according to the given formal map</p></dd></dl><dl><dt class="spec value" id="val-get_formal_index"><a href="#val-get_formal_index" class="anchor"></a><code><span class="keyword">val</span> get_formal_index : <a href="../../IR/AccessPath/index.html#type-base">IR.AccessPath.base</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span>int option</span></code></dt><dd><p>return the index for the given base var if it is a formal, or None if it is not</p></dd></dl><dl><dt class="spec value" id="val-get_formal_base"><a href="#val-get_formal_base" class="anchor"></a><code><span class="keyword">val</span> get_formal_base : int <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="../../IR/AccessPath/index.html#type-base">IR.AccessPath.base</a> option</span></code></dt><dd><p>return the base var for the given index if it exists, or None if it does not. Note: this is linear in the size of the formal map</p></dd></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="index.html#module-F">F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-cardinal"><a href="#val-cardinal" class="anchor"></a><code><span class="keyword">val</span> cardinal : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt><dt class="spec value" id="val-iter"><a href="#val-iter" class="anchor"></a><code><span class="keyword">val</span> iter : <span>(<a href="../../IR/AccessPath/index.html#type-base">IR.AccessPath.base</a> <span>&#45;&gt;</span> int <span>&#45;&gt;</span> unit)</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>FormalMap (infer.Absint.FormalMap)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; FormalMap</nav><h1>Module <code>Absint.FormalMap</code></h1></header><div class="spec module" id="module-F"><a href="#module-F" class="anchor"></a><code><span class="keyword">module</span> F = Stdlib.Format</code></div><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt><dd><p>a map from a formal to its positional index</p></dd></dl><dl><dt class="spec value" id="val-make"><a href="#val-make" class="anchor"></a><code><span class="keyword">val</span> make : <a href="../../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>create a formal map for the given procdesc</p></dd></dl><dl><dt class="spec value" id="val-empty"><a href="#val-empty" class="anchor"></a><code><span class="keyword">val</span> empty : <a href="index.html#type-t">t</a></code></dt><dd><p>the empty formal map</p></dd></dl><dl><dt class="spec value" id="val-is_formal"><a href="#val-is_formal" class="anchor"></a><code><span class="keyword">val</span> is_formal : <a href="../AccessPath/index.html#type-base">AccessPath.base</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>return true if the given base var is a formal according to the given formal map</p></dd></dl><dl><dt class="spec value" id="val-get_formal_index"><a href="#val-get_formal_index" class="anchor"></a><code><span class="keyword">val</span> get_formal_index : <a href="../AccessPath/index.html#type-base">AccessPath.base</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span>int option</span></code></dt><dd><p>return the index for the given base var if it is a formal, or None if it is not</p></dd></dl><dl><dt class="spec value" id="val-get_formal_base"><a href="#val-get_formal_base" class="anchor"></a><code><span class="keyword">val</span> get_formal_base : int <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="../AccessPath/index.html#type-base">AccessPath.base</a> option</span></code></dt><dd><p>return the base var for the given index if it exists, or None if it does not. Note: this is linear in the size of the formal map</p></dd></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="index.html#module-F">F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-cardinal"><a href="#val-cardinal" class="anchor"></a><code><span class="keyword">val</span> cardinal : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt><dt class="spec value" id="val-iter"><a href="#val-iter" class="anchor"></a><code><span class="keyword">val</span> iter : <span>(<a href="../AccessPath/index.html#type-base">AccessPath.base</a> <span>&#45;&gt;</span> int <span>&#45;&gt;</span> unit)</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Access (infer.Absint.HilExp.Access)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">infer</a> &#x00BB; <a href="../../index.html">Absint</a> &#x00BB; <a href="../index.html">HilExp</a> &#x00BB; Access</nav><h1>Module <code>HilExp.Access</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> <span>'array_index t</span></code><code> = </code><table class="variant"><tr id="type-t.FieldAccess" class="anchored"><td class="def constructor"><a href="#type-t.FieldAccess" class="anchor"></a><code>| </code><code><span class="constructor">FieldAccess</span> <span class="keyword">of</span> <a href="../../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a></code></td></tr><tr id="type-t.ArrayAccess" class="anchored"><td class="def constructor"><a href="#type-t.ArrayAccess" class="anchor"></a><code>| </code><code><span class="constructor">ArrayAccess</span> <span class="keyword">of</span> <a href="../../../IR/Typ/index.html#type-t">IR.Typ.t</a> * <span class="type-var">'array_index</span></code></td></tr><tr id="type-t.TakeAddress" class="anchored"><td class="def constructor"><a href="#type-t.TakeAddress" class="anchor"></a><code>| </code><code><span class="constructor">TakeAddress</span></code></td></tr><tr id="type-t.Dereference" class="anchored"><td class="def constructor"><a href="#type-t.Dereference" class="anchor"></a><code>| </code><code><span class="constructor">Dereference</span></code></td></tr></table></dt></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <span>(<span class="type-var">'array_index</span> <span>&#45;&gt;</span> <span class="type-var">'array_index</span> <span>&#45;&gt;</span> int)</span> <span>&#45;&gt;</span> <span><span class="type-var">'array_index</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span><span class="type-var">'array_index</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <span>(Stdlib.Format.formatter <span>&#45;&gt;</span> <span class="type-var">'array_index</span> <span>&#45;&gt;</span> unit)</span> <span>&#45;&gt;</span> Stdlib.Format.formatter <span>&#45;&gt;</span> <span><span class="type-var">'array_index</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-is_field_or_array_access"><a href="#val-is_field_or_array_access" class="anchor"></a><code><span class="keyword">val</span> is_field_or_array_access : <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> bool</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>IntraproceduralAnalysis (infer.Absint.IntraproceduralAnalysis)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; IntraproceduralAnalysis</nav><h1>Module <code>Absint.IntraproceduralAnalysis</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><code>{</code><table class="record"><tr id="type-t.proc_desc" class="anchored"><td class="def field"><a href="#type-t.proc_desc" class="anchor"></a><code>proc_desc : <a href="../../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a>;</code></td></tr><tr id="type-t.tenv" class="anchored"><td class="def field"><a href="#type-t.tenv" class="anchor"></a><code>tenv : <a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a>;</code></td></tr><tr id="type-t.err_log" class="anchored"><td class="def field"><a href="#type-t.err_log" class="anchor"></a><code>err_log : <a href="../../IR/Errlog/index.html#type-t">IR.Errlog.t</a>;</code></td></tr></table><code>}</code></dt><dd><p>a subset of <a href="../InterproceduralAnalysis/index.html#type-t"><code>InterproceduralAnalysis.t</code></a> that doesn't have any inter-procedural callbacks and cannot read summaries</p></dd></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>IntraproceduralAnalysis (infer.Absint.IntraproceduralAnalysis)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; IntraproceduralAnalysis</nav><h1>Module <code>Absint.IntraproceduralAnalysis</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><code>{</code><table class="record"><tr id="type-t.proc_desc" class="anchored"><td class="def field"><a href="#type-t.proc_desc" class="anchor"></a><code>proc_desc : <a href="../../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a>;</code></td></tr><tr id="type-t.tenv" class="anchored"><td class="def field"><a href="#type-t.tenv" class="anchor"></a><code>tenv : <a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a>;</code></td></tr><tr id="type-t.err_log" class="anchored"><td class="def field"><a href="#type-t.err_log" class="anchor"></a><code>err_log : <a href="../Errlog/index.html#type-t">Errlog.t</a>;</code></td></tr></table><code>}</code></dt><dd><p>a subset of <a href="../InterproceduralAnalysis/index.html#type-t"><code>InterproceduralAnalysis.t</code></a> that doesn't have any inter-procedural callbacks and cannot read summaries</p></dd></dl></div></body></html>

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>IssueLog (infer.Absint.IssueLog)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; IssueLog</nav><h1>Module <code>Absint.IssueLog</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt><dd><p>Module for storing issues detected outside of per-procedure analysis (and hence not serialized as a part of procedure summary).</p></dd></dl><dl><dt class="spec value" id="val-empty"><a href="#val-empty" class="anchor"></a><code><span class="keyword">val</span> empty : <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-iter"><a href="#val-iter" class="anchor"></a><code><span class="keyword">val</span> iter : <span>f:<span>(<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <a href="../Errlog/index.html#type-t">Errlog.t</a> <span>&#45;&gt;</span> unit)</span></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>iterate a function on map contents</p></dd></dl><dl><dt class="spec value" id="val-get_or_add"><a href="#val-get_or_add" class="anchor"></a><code><span class="keyword">val</span> get_or_add : <span>proc:<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> * <a href="../Errlog/index.html#type-t">Errlog.t</a></code></dt><dd><p>Get the error log for a given procname. If there is none, add an empty one to the map. Return the resulting map together with the errlog.</p></dd></dl><dl><dt class="spec value" id="val-store"><a href="#val-store" class="anchor"></a><code><span class="keyword">val</span> store : <span>entry:<a href="../../IBase/ResultsDirEntryName/index.html#type-id">IBase.ResultsDirEntryName.id</a></span> <span>&#45;&gt;</span> <span>file:<a href="../../IBase/SourceFile/index.html#type-t">IBase.SourceFile.t</a></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>If there are any issues in the log, <code>store ~entry ~file</code> stores map to <code>infer-out/entry/file</code>. Otherwise, no file is written.</p></dd></dl><dl><dt class="spec value" id="val-load"><a href="#val-load" class="anchor"></a><code><span class="keyword">val</span> load : <a href="../../IBase/ResultsDirEntryName/index.html#type-id">IBase.ResultsDirEntryName.id</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p><code>load entry</code> walks <code>infer-out/entry</code>, merging maps stored in files into one map.</p></dd></dl></div></body></html>

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>IssueToReport (infer.Absint.IssueToReport)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; IssueToReport</nav><h1>Module <code>Absint.IssueToReport</code></h1></header><div class="spec module" id="module-L"><a href="#module-L" class="anchor"></a><code><span class="keyword">module</span> L = <a href="../../IBase/index.html#module-Logging">IBase.Logging</a></code></div><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><code>{</code><table class="record"><tr id="type-t.issue_type" class="anchored"><td class="def field"><a href="#type-t.issue_type" class="anchor"></a><code>issue_type : <a href="../../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a>;</code></td></tr><tr id="type-t.description" class="anchored"><td class="def field"><a href="#type-t.description" class="anchor"></a><code>description : <a href="../Localise/index.html#type-error_desc">Localise.error_desc</a>;</code></td></tr><tr id="type-t.ocaml_pos" class="anchored"><td class="def field"><a href="#type-t.ocaml_pos" class="anchor"></a><code>ocaml_pos : <span><a href="../../IBase/Logging/index.html#type-ocaml_pos">L.ocaml_pos</a> option</span>;</code></td><td class="doc"><p>location in the infer source code</p></td></tr></table><code>}</code></dt><dd><p>An issue about to be reported to the user</p></dd></dl><dl><dt class="spec value" id="val-pp_err"><a href="#val-pp_err" class="anchor"></a><code><span class="keyword">val</span> pp_err : <span>?&#8288;severity_override:<a href="../../IBase/IssueType/index.html#type-severity">IBase.IssueType.severity</a></span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a> <span>&#45;&gt;</span> <a href="../Localise/index.html#type-error_desc">Localise.error_desc</a> <span>&#45;&gt;</span> <span><a href="../../IBase/Logging/index.html#type-ocaml_pos">IBase.Logging.ocaml_pos</a> option</span> <span>&#45;&gt;</span> Stdlib.Format.formatter <span>&#45;&gt;</span> unit <span>&#45;&gt;</span> unit</code></dt><dd><p>pretty print an error</p></dd></dl></div></body></html>

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>BucketLevel (infer.Absint.Localise.BucketLevel)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">infer</a> &#x00BB; <a href="../../index.html">Absint</a> &#x00BB; <a href="../index.html">Localise</a> &#x00BB; BucketLevel</nav><h1>Module <code>Localise.BucketLevel</code></h1></header><dl><dt class="spec value" id="val-b1"><a href="#val-b1" class="anchor"></a><code><span class="keyword">val</span> b1 : string</code></dt><dd><p>highest likelihood</p></dd></dl><dl><dt class="spec value" id="val-b2"><a href="#val-b2" class="anchor"></a><code><span class="keyword">val</span> b2 : string</code></dt><dt class="spec value" id="val-b3"><a href="#val-b3" class="anchor"></a><code><span class="keyword">val</span> b3 : string</code></dt><dt class="spec value" id="val-b4"><a href="#val-b4" class="anchor"></a><code><span class="keyword">val</span> b4 : string</code></dt><dt class="spec value" id="val-b5"><a href="#val-b5" class="anchor"></a><code><span class="keyword">val</span> b5 : string</code></dt><dd><p>lowest likelihood</p></dd></dl></div></body></html>

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Tags (infer.Absint.Localise.Tags)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">infer</a> &#x00BB; <a href="../../index.html">Absint</a> &#x00BB; <a href="../index.html">Localise</a> &#x00BB; Tags</nav><h1>Module <code>Localise.Tags</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>1-TransferFunctions (infer.Absint.LowerHil.Make.1-TransferFunctions)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">LowerHil</a> &#x00BB; <a href="../index.html">Make</a> &#x00BB; 1-TransferFunctions</nav><h1>Parameter <code>Make.1-TransferFunctions</code></h1></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../../../TransferFunctions/index.html#module-type-S">TransferFunctions.S</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../../TransferFunctions/module-type-S/index.html#type-instr">instr</a> := <a href="../../../../IR/HilInstr/index.html#type-t">IR.HilInstr.t</a></code></span></summary><div class="spec module" id="module-CFG"><a href="#module-CFG" class="anchor"></a><code><span class="keyword">module</span> <a href="CFG/index.html">CFG</a> : <a href="../../../ProcCfg/index.html#module-type-S">ProcCfg.S</a></code></div><dl><dt class="spec module" id="module-Domain"><a href="#module-Domain" class="anchor"></a><code><span class="keyword">module</span> <a href="Domain/index.html">Domain</a> : <a href="../../../AbstractDomain/index.html#module-type-S">AbstractDomain.S</a></code></dt><dd><p>abstract domain whose state we propagate</p></dd></dl><dl><dt class="spec type" id="type-analysis_data"><a href="#type-analysis_data" class="anchor"></a><code><span class="keyword">type</span> analysis_data</code></dt><dd><p>read-only extra state (results of previous analyses, globals, etc.)</p></dd></dl><dl><dt class="spec type" id="type-instr"><a href="#type-instr" class="anchor"></a><code><span class="keyword">type</span> instr</code></dt><dd><p>type of the instructions the transfer functions operate on</p></dd></dl><dl><dt class="spec value" id="val-exec_instr"><a href="#val-exec_instr" class="anchor"></a><code><span class="keyword">val</span> exec_instr : <a href="Domain/index.html#type-t">Domain.t</a> <span>&#45;&gt;</span> <a href="index.html#type-analysis_data">analysis_data</a> <span>&#45;&gt;</span> <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> <a href="index.html#type-instr">instr</a> <span>&#45;&gt;</span> <a href="Domain/index.html#type-t">Domain.t</a></code></dt><dd><p><code>exec_instr astate proc_data node instr</code> should usually return <code>astate'</code> such that <code>{astate} instr {astate'}</code> is a valid Hoare triple. In other words, <code>exec_instr</code> defines how executing an instruction from a given abstract state changes that state into a new one. This is usually called the <i>transfer function</i> in Abstract Interpretation terms. <code>node</code> is the node containing the current instruction.</p></dd></dl><dl><dt class="spec value" id="val-pp_session_name"><a href="#val-pp_session_name" class="anchor"></a><code><span class="keyword">val</span> pp_session_name : <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> Stdlib.Format.formatter <span>&#45;&gt;</span> unit</code></dt><dd><p>print session name for HTML debug</p></dd></dl></details></div></div></div></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>1-TransferFunctions (infer.Absint.LowerHil.Make.1-TransferFunctions)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">LowerHil</a> &#x00BB; <a href="../index.html">Make</a> &#x00BB; 1-TransferFunctions</nav><h1>Parameter <code>Make.1-TransferFunctions</code></h1></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../../../TransferFunctions/index.html#module-type-S">TransferFunctions.S</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../../TransferFunctions/module-type-S/index.html#type-instr">instr</a> := <a href="../../../HilInstr/index.html#type-t">HilInstr.t</a></code></span></summary><div class="spec module" id="module-CFG"><a href="#module-CFG" class="anchor"></a><code><span class="keyword">module</span> <a href="CFG/index.html">CFG</a> : <a href="../../../ProcCfg/index.html#module-type-S">ProcCfg.S</a></code></div><dl><dt class="spec module" id="module-Domain"><a href="#module-Domain" class="anchor"></a><code><span class="keyword">module</span> <a href="Domain/index.html">Domain</a> : <a href="../../../AbstractDomain/index.html#module-type-S">AbstractDomain.S</a></code></dt><dd><p>abstract domain whose state we propagate</p></dd></dl><dl><dt class="spec type" id="type-analysis_data"><a href="#type-analysis_data" class="anchor"></a><code><span class="keyword">type</span> analysis_data</code></dt><dd><p>read-only extra state (results of previous analyses, globals, etc.)</p></dd></dl><dl><dt class="spec type" id="type-instr"><a href="#type-instr" class="anchor"></a><code><span class="keyword">type</span> instr</code></dt><dd><p>type of the instructions the transfer functions operate on</p></dd></dl><dl><dt class="spec value" id="val-exec_instr"><a href="#val-exec_instr" class="anchor"></a><code><span class="keyword">val</span> exec_instr : <a href="Domain/index.html#type-t">Domain.t</a> <span>&#45;&gt;</span> <a href="index.html#type-analysis_data">analysis_data</a> <span>&#45;&gt;</span> <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> <a href="index.html#type-instr">instr</a> <span>&#45;&gt;</span> <a href="Domain/index.html#type-t">Domain.t</a></code></dt><dd><p><code>exec_instr astate proc_data node instr</code> should usually return <code>astate'</code> such that <code>{astate} instr {astate'}</code> is a valid Hoare triple. In other words, <code>exec_instr</code> defines how executing an instruction from a given abstract state changes that state into a new one. This is usually called the <i>transfer function</i> in Abstract Interpretation terms. <code>node</code> is the node containing the current instruction.</p></dd></dl><dl><dt class="spec value" id="val-pp_session_name"><a href="#val-pp_session_name" class="anchor"></a><code><span class="keyword">val</span> pp_session_name : <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> Stdlib.Format.formatter <span>&#45;&gt;</span> unit</code></dt><dd><p>print session name for HTML debug</p></dd></dl></details></div></div></div></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>1-TransferFunctions (infer.Absint.LowerHil.MakeAbstractInterpreter.1-TransferFunctions)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">LowerHil</a> &#x00BB; <a href="../index.html">MakeAbstractInterpreter</a> &#x00BB; 1-TransferFunctions</nav><h1>Parameter <code>MakeAbstractInterpreter.1-TransferFunctions</code></h1></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../../../TransferFunctions/index.html#module-type-S">TransferFunctions.S</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../../TransferFunctions/module-type-S/index.html#type-instr">instr</a> := <a href="../../../../IR/HilInstr/index.html#type-t">IR.HilInstr.t</a></code></span></summary><div class="spec module" id="module-CFG"><a href="#module-CFG" class="anchor"></a><code><span class="keyword">module</span> <a href="CFG/index.html">CFG</a> : <a href="../../../ProcCfg/index.html#module-type-S">ProcCfg.S</a></code></div><dl><dt class="spec module" id="module-Domain"><a href="#module-Domain" class="anchor"></a><code><span class="keyword">module</span> <a href="Domain/index.html">Domain</a> : <a href="../../../AbstractDomain/index.html#module-type-S">AbstractDomain.S</a></code></dt><dd><p>abstract domain whose state we propagate</p></dd></dl><dl><dt class="spec type" id="type-analysis_data"><a href="#type-analysis_data" class="anchor"></a><code><span class="keyword">type</span> analysis_data</code></dt><dd><p>read-only extra state (results of previous analyses, globals, etc.)</p></dd></dl><dl><dt class="spec type" id="type-instr"><a href="#type-instr" class="anchor"></a><code><span class="keyword">type</span> instr</code></dt><dd><p>type of the instructions the transfer functions operate on</p></dd></dl><dl><dt class="spec value" id="val-exec_instr"><a href="#val-exec_instr" class="anchor"></a><code><span class="keyword">val</span> exec_instr : <a href="Domain/index.html#type-t">Domain.t</a> <span>&#45;&gt;</span> <a href="index.html#type-analysis_data">analysis_data</a> <span>&#45;&gt;</span> <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> <a href="index.html#type-instr">instr</a> <span>&#45;&gt;</span> <a href="Domain/index.html#type-t">Domain.t</a></code></dt><dd><p><code>exec_instr astate proc_data node instr</code> should usually return <code>astate'</code> such that <code>{astate} instr {astate'}</code> is a valid Hoare triple. In other words, <code>exec_instr</code> defines how executing an instruction from a given abstract state changes that state into a new one. This is usually called the <i>transfer function</i> in Abstract Interpretation terms. <code>node</code> is the node containing the current instruction.</p></dd></dl><dl><dt class="spec value" id="val-pp_session_name"><a href="#val-pp_session_name" class="anchor"></a><code><span class="keyword">val</span> pp_session_name : <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> Stdlib.Format.formatter <span>&#45;&gt;</span> unit</code></dt><dd><p>print session name for HTML debug</p></dd></dl></details></div></div></div></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>1-TransferFunctions (infer.Absint.LowerHil.MakeAbstractInterpreter.1-TransferFunctions)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">LowerHil</a> &#x00BB; <a href="../index.html">MakeAbstractInterpreter</a> &#x00BB; 1-TransferFunctions</nav><h1>Parameter <code>MakeAbstractInterpreter.1-TransferFunctions</code></h1></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../../../TransferFunctions/index.html#module-type-S">TransferFunctions.S</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../../TransferFunctions/module-type-S/index.html#type-instr">instr</a> := <a href="../../../HilInstr/index.html#type-t">HilInstr.t</a></code></span></summary><div class="spec module" id="module-CFG"><a href="#module-CFG" class="anchor"></a><code><span class="keyword">module</span> <a href="CFG/index.html">CFG</a> : <a href="../../../ProcCfg/index.html#module-type-S">ProcCfg.S</a></code></div><dl><dt class="spec module" id="module-Domain"><a href="#module-Domain" class="anchor"></a><code><span class="keyword">module</span> <a href="Domain/index.html">Domain</a> : <a href="../../../AbstractDomain/index.html#module-type-S">AbstractDomain.S</a></code></dt><dd><p>abstract domain whose state we propagate</p></dd></dl><dl><dt class="spec type" id="type-analysis_data"><a href="#type-analysis_data" class="anchor"></a><code><span class="keyword">type</span> analysis_data</code></dt><dd><p>read-only extra state (results of previous analyses, globals, etc.)</p></dd></dl><dl><dt class="spec type" id="type-instr"><a href="#type-instr" class="anchor"></a><code><span class="keyword">type</span> instr</code></dt><dd><p>type of the instructions the transfer functions operate on</p></dd></dl><dl><dt class="spec value" id="val-exec_instr"><a href="#val-exec_instr" class="anchor"></a><code><span class="keyword">val</span> exec_instr : <a href="Domain/index.html#type-t">Domain.t</a> <span>&#45;&gt;</span> <a href="index.html#type-analysis_data">analysis_data</a> <span>&#45;&gt;</span> <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> <a href="index.html#type-instr">instr</a> <span>&#45;&gt;</span> <a href="Domain/index.html#type-t">Domain.t</a></code></dt><dd><p><code>exec_instr astate proc_data node instr</code> should usually return <code>astate'</code> such that <code>{astate} instr {astate'}</code> is a valid Hoare triple. In other words, <code>exec_instr</code> defines how executing an instruction from a given abstract state changes that state into a new one. This is usually called the <i>transfer function</i> in Abstract Interpretation terms. <code>node</code> is the node containing the current instruction.</p></dd></dl><dl><dt class="spec value" id="val-pp_session_name"><a href="#val-pp_session_name" class="anchor"></a><code><span class="keyword">val</span> pp_session_name : <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> Stdlib.Format.formatter <span>&#45;&gt;</span> unit</code></dt><dd><p>print session name for HTML debug</p></dd></dl></details></div></div></div></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>3-TransferFunctions (infer.Absint.LowerHil.MakeAbstractInterpreterWithConfig.3-TransferFunctions)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">LowerHil</a> &#x00BB; <a href="../index.html">MakeAbstractInterpreterWithConfig</a> &#x00BB; 3-TransferFunctions</nav><h1>Parameter <code>MakeAbstractInterpreterWithConfig.3-TransferFunctions</code></h1></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../../../TransferFunctions/index.html#module-type-S">TransferFunctions.S</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../../TransferFunctions/module-type-S/index.html#type-instr">instr</a> := <a href="../../../../IR/HilInstr/index.html#type-t">IR.HilInstr.t</a></code></span></summary><div class="spec module" id="module-CFG"><a href="#module-CFG" class="anchor"></a><code><span class="keyword">module</span> <a href="CFG/index.html">CFG</a> : <a href="../../../ProcCfg/index.html#module-type-S">ProcCfg.S</a></code></div><dl><dt class="spec module" id="module-Domain"><a href="#module-Domain" class="anchor"></a><code><span class="keyword">module</span> <a href="Domain/index.html">Domain</a> : <a href="../../../AbstractDomain/index.html#module-type-S">AbstractDomain.S</a></code></dt><dd><p>abstract domain whose state we propagate</p></dd></dl><dl><dt class="spec type" id="type-analysis_data"><a href="#type-analysis_data" class="anchor"></a><code><span class="keyword">type</span> analysis_data</code></dt><dd><p>read-only extra state (results of previous analyses, globals, etc.)</p></dd></dl><dl><dt class="spec type" id="type-instr"><a href="#type-instr" class="anchor"></a><code><span class="keyword">type</span> instr</code></dt><dd><p>type of the instructions the transfer functions operate on</p></dd></dl><dl><dt class="spec value" id="val-exec_instr"><a href="#val-exec_instr" class="anchor"></a><code><span class="keyword">val</span> exec_instr : <a href="Domain/index.html#type-t">Domain.t</a> <span>&#45;&gt;</span> <a href="index.html#type-analysis_data">analysis_data</a> <span>&#45;&gt;</span> <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> <a href="index.html#type-instr">instr</a> <span>&#45;&gt;</span> <a href="Domain/index.html#type-t">Domain.t</a></code></dt><dd><p><code>exec_instr astate proc_data node instr</code> should usually return <code>astate'</code> such that <code>{astate} instr {astate'}</code> is a valid Hoare triple. In other words, <code>exec_instr</code> defines how executing an instruction from a given abstract state changes that state into a new one. This is usually called the <i>transfer function</i> in Abstract Interpretation terms. <code>node</code> is the node containing the current instruction.</p></dd></dl><dl><dt class="spec value" id="val-pp_session_name"><a href="#val-pp_session_name" class="anchor"></a><code><span class="keyword">val</span> pp_session_name : <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> Stdlib.Format.formatter <span>&#45;&gt;</span> unit</code></dt><dd><p>print session name for HTML debug</p></dd></dl></details></div></div></div></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>3-TransferFunctions (infer.Absint.LowerHil.MakeAbstractInterpreterWithConfig.3-TransferFunctions)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">LowerHil</a> &#x00BB; <a href="../index.html">MakeAbstractInterpreterWithConfig</a> &#x00BB; 3-TransferFunctions</nav><h1>Parameter <code>MakeAbstractInterpreterWithConfig.3-TransferFunctions</code></h1></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../../../TransferFunctions/index.html#module-type-S">TransferFunctions.S</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../../TransferFunctions/module-type-S/index.html#type-instr">instr</a> := <a href="../../../HilInstr/index.html#type-t">HilInstr.t</a></code></span></summary><div class="spec module" id="module-CFG"><a href="#module-CFG" class="anchor"></a><code><span class="keyword">module</span> <a href="CFG/index.html">CFG</a> : <a href="../../../ProcCfg/index.html#module-type-S">ProcCfg.S</a></code></div><dl><dt class="spec module" id="module-Domain"><a href="#module-Domain" class="anchor"></a><code><span class="keyword">module</span> <a href="Domain/index.html">Domain</a> : <a href="../../../AbstractDomain/index.html#module-type-S">AbstractDomain.S</a></code></dt><dd><p>abstract domain whose state we propagate</p></dd></dl><dl><dt class="spec type" id="type-analysis_data"><a href="#type-analysis_data" class="anchor"></a><code><span class="keyword">type</span> analysis_data</code></dt><dd><p>read-only extra state (results of previous analyses, globals, etc.)</p></dd></dl><dl><dt class="spec type" id="type-instr"><a href="#type-instr" class="anchor"></a><code><span class="keyword">type</span> instr</code></dt><dd><p>type of the instructions the transfer functions operate on</p></dd></dl><dl><dt class="spec value" id="val-exec_instr"><a href="#val-exec_instr" class="anchor"></a><code><span class="keyword">val</span> exec_instr : <a href="Domain/index.html#type-t">Domain.t</a> <span>&#45;&gt;</span> <a href="index.html#type-analysis_data">analysis_data</a> <span>&#45;&gt;</span> <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> <a href="index.html#type-instr">instr</a> <span>&#45;&gt;</span> <a href="Domain/index.html#type-t">Domain.t</a></code></dt><dd><p><code>exec_instr astate proc_data node instr</code> should usually return <code>astate'</code> such that <code>{astate} instr {astate'}</code> is a valid Hoare triple. In other words, <code>exec_instr</code> defines how executing an instruction from a given abstract state changes that state into a new one. This is usually called the <i>transfer function</i> in Abstract Interpretation terms. <code>node</code> is the node containing the current instruction.</p></dd></dl><dl><dt class="spec value" id="val-pp_session_name"><a href="#val-pp_session_name" class="anchor"></a><code><span class="keyword">val</span> pp_session_name : <a href="CFG/Node/index.html#type-t">CFG.Node.t</a> <span>&#45;&gt;</span> Stdlib.Format.formatter <span>&#45;&gt;</span> unit</code></dt><dd><p>print session name for HTML debug</p></dd></dl></details></div></div></div></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>MethodMatcher (infer.Absint.MethodMatcher)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; MethodMatcher</nav><h1>Module <code>Absint.MethodMatcher</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <span><a href="../../IR/HilExp/index.html#type-t">IR.HilExp.t</a> list</span> <span>&#45;&gt;</span> bool</code></dt><dd><p>pattern matcher for Java/C++ methods NB matching is modulo template arguments in C++ classes and functions</p></dd></dl><dl><dt class="spec type" id="type-record"><a href="#type-record" class="anchor"></a><code><span class="keyword">type</span> record</code><code> = </code><code>{</code><table class="record"><tr id="type-record.search_superclasses" class="anchored"><td class="def field"><a href="#type-record.search_superclasses" class="anchor"></a><code>search_superclasses : bool;</code></td></tr><tr id="type-record.method_prefix" class="anchored"><td class="def field"><a href="#type-record.method_prefix" class="anchor"></a><code>method_prefix : bool;</code></td></tr><tr id="type-record.actuals_pred" class="anchored"><td class="def field"><a href="#type-record.actuals_pred" class="anchor"></a><code>actuals_pred : <span><a href="../../IR/HilExp/index.html#type-t">IR.HilExp.t</a> list</span> <span>&#45;&gt;</span> bool;</code></td></tr><tr id="type-record.classname" class="anchored"><td class="def field"><a href="#type-record.classname" class="anchor"></a><code>classname : string;</code></td></tr><tr id="type-record.methods" class="anchored"><td class="def field"><a href="#type-record.methods" class="anchor"></a><code>methods : <span>string list</span>;</code></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-default"><a href="#val-default" class="anchor"></a><code><span class="keyword">val</span> default : <a href="index.html#type-record">record</a></code></dt><dd><p>record encapsulating the default arguments of <code>call_matches</code>. <code>classname=&quot;&quot;</code> and <code>methods=[]</code>. Useful for <code>with</code> expressions</p></dd></dl><dl><dt class="spec value" id="val-of_record"><a href="#val-of_record" class="anchor"></a><code><span class="keyword">val</span> of_record : <a href="index.html#type-record">record</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>make a matcher out of a record; optional values use defaults</p></dd></dl><dl><dt class="spec value" id="val-of_json"><a href="#val-of_json" class="anchor"></a><code><span class="keyword">val</span> of_json : Yojson.Basic.t <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>Parse a JSon object into a matcher. The Json object must be a list of records, each corresponding to a single matcher. Each record must have a <code>&quot;classname&quot;</code> field with a <code>string</code> value, and a <code>&quot;methods&quot;</code> field with a list of strings. The record may also have boolean fields <code>&quot;search_superclasses&quot;</code> and <code>&quot;method_prefix&quot;</code>. If absent, the defaults are used. The resulting matcher matches if one of the matchers in the list does.</p></dd></dl><dl><dt class="spec value" id="val-of_list"><a href="#val-of_list" class="anchor"></a><code><span class="keyword">val</span> of_list : <span><a href="index.html#type-t">t</a> list</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>Or combinator</p></dd></dl><dl><dt class="spec value" id="val-of_records"><a href="#val-of_records" class="anchor"></a><code><span class="keyword">val</span> of_records : <span><a href="index.html#type-record">record</a> list</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>shorthand for <code>of_list (List.map ~f:of_record r)</code></p></dd></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>MethodMatcher (infer.Absint.MethodMatcher)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; MethodMatcher</nav><h1>Module <code>Absint.MethodMatcher</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <span><a href="../HilExp/index.html#type-t">HilExp.t</a> list</span> <span>&#45;&gt;</span> bool</code></dt><dd><p>pattern matcher for Java/C++ methods NB matching is modulo template arguments in C++ classes and functions</p></dd></dl><dl><dt class="spec type" id="type-record"><a href="#type-record" class="anchor"></a><code><span class="keyword">type</span> record</code><code> = </code><code>{</code><table class="record"><tr id="type-record.search_superclasses" class="anchored"><td class="def field"><a href="#type-record.search_superclasses" class="anchor"></a><code>search_superclasses : bool;</code></td></tr><tr id="type-record.method_prefix" class="anchored"><td class="def field"><a href="#type-record.method_prefix" class="anchor"></a><code>method_prefix : bool;</code></td></tr><tr id="type-record.actuals_pred" class="anchored"><td class="def field"><a href="#type-record.actuals_pred" class="anchor"></a><code>actuals_pred : <span><a href="../HilExp/index.html#type-t">HilExp.t</a> list</span> <span>&#45;&gt;</span> bool;</code></td></tr><tr id="type-record.classname" class="anchored"><td class="def field"><a href="#type-record.classname" class="anchor"></a><code>classname : string;</code></td></tr><tr id="type-record.methods" class="anchored"><td class="def field"><a href="#type-record.methods" class="anchor"></a><code>methods : <span>string list</span>;</code></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-default"><a href="#val-default" class="anchor"></a><code><span class="keyword">val</span> default : <a href="index.html#type-record">record</a></code></dt><dd><p>record encapsulating the default arguments of <code>call_matches</code>. <code>classname=&quot;&quot;</code> and <code>methods=[]</code>. Useful for <code>with</code> expressions</p></dd></dl><dl><dt class="spec value" id="val-of_record"><a href="#val-of_record" class="anchor"></a><code><span class="keyword">val</span> of_record : <a href="index.html#type-record">record</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>make a matcher out of a record; optional values use defaults</p></dd></dl><dl><dt class="spec value" id="val-of_json"><a href="#val-of_json" class="anchor"></a><code><span class="keyword">val</span> of_json : Yojson.Basic.t <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>Parse a JSon object into a matcher. The Json object must be a list of records, each corresponding to a single matcher. Each record must have a <code>&quot;classname&quot;</code> field with a <code>string</code> value, and a <code>&quot;methods&quot;</code> field with a list of strings. The record may also have boolean fields <code>&quot;search_superclasses&quot;</code> and <code>&quot;method_prefix&quot;</code>. If absent, the defaults are used. The resulting matcher matches if one of the matchers in the list does.</p></dd></dl><dl><dt class="spec value" id="val-of_list"><a href="#val-of_list" class="anchor"></a><code><span class="keyword">val</span> of_list : <span><a href="index.html#type-t">t</a> list</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>Or combinator</p></dd></dl><dl><dt class="spec value" id="val-of_records"><a href="#val-of_records" class="anchor"></a><code><span class="keyword">val</span> of_records : <span><a href="index.html#type-record">record</a> list</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>shorthand for <code>of_list (List.map ~f:of_record r)</code></p></dd></dl></div></body></html>

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Mleak_buckets (infer.Absint.Mleak_buckets)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; Mleak_buckets</nav><h1>Module <code>Absint.Mleak_buckets</code></h1></header><aside><p>This module handles buckets of memory leaks</p></aside><dl><dt class="spec value" id="val-should_raise_cpp_leak"><a href="#val-should_raise_cpp_leak" class="anchor"></a><code><span class="keyword">val</span> should_raise_cpp_leak : <span>string option</span></code></dt><dt class="spec value" id="val-should_raise_leak_unknown_origin"><a href="#val-should_raise_leak_unknown_origin" class="anchor"></a><code><span class="keyword">val</span> should_raise_leak_unknown_origin : bool</code></dt><dt class="spec value" id="val-ml_bucket_unknown_origin"><a href="#val-ml_bucket_unknown_origin" class="anchor"></a><code><span class="keyword">val</span> ml_bucket_unknown_origin : string</code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>NoReturnModels (infer.Absint.NoReturnModels)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; NoReturnModels</nav><h1>Module <code>Absint.NoReturnModels</code></h1></header><dl><dt class="spec value" id="val-no_return"><a href="#val-no_return" class="anchor"></a><code><span class="keyword">val</span> no_return : bool</code></dt><dt class="spec value" id="val-dispatch"><a href="#val-dispatch" class="anchor"></a><code><span class="keyword">val</span> dispatch : <span><span>(<a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a>, bool, unit)</span> <a href="../../IR/ProcnameDispatcher/ProcName/index.html#type-dispatcher">IR.ProcnameDispatcher.ProcName.dispatcher</a></span></code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>NoReturnModels (infer.Absint.NoReturnModels)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; NoReturnModels</nav><h1>Module <code>Absint.NoReturnModels</code></h1></header><dl><dt class="spec value" id="val-no_return"><a href="#val-no_return" class="anchor"></a><code><span class="keyword">val</span> no_return : bool</code></dt><dt class="spec value" id="val-dispatch"><a href="#val-dispatch" class="anchor"></a><code><span class="keyword">val</span> dispatch : <span><span>(<a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a>, bool, unit)</span> <a href="../ProcnameDispatcher/ProcName/index.html#type-dispatcher">ProcnameDispatcher.ProcName.dispatcher</a></span></code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Passthrough (infer.Absint.Passthrough)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; Passthrough</nav><h1>Module <code>Absint.Passthrough</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-make"><a href="#val-make" class="anchor"></a><code><span class="keyword">val</span> make : <a href="../../IR/CallSite/index.html#type-t">IR.CallSite.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-site"><a href="#val-site" class="anchor"></a><code><span class="keyword">val</span> site : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="../../IR/CallSite/index.html#type-t">IR.CallSite.t</a></code></dt></dl><div class="spec module" id="module-Set"><a href="#module-Set" class="anchor"></a><code><span class="keyword">module</span> Set : <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">IStdlib.PrettyPrintable.PPSet</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">PPSet</a>.elt = <a href="index.html#type-t">t</a></code></div></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Passthrough (infer.Absint.Passthrough)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; Passthrough</nav><h1>Module <code>Absint.Passthrough</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-make"><a href="#val-make" class="anchor"></a><code><span class="keyword">val</span> make : <a href="../CallSite/index.html#type-t">CallSite.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-site"><a href="#val-site" class="anchor"></a><code><span class="keyword">val</span> site : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="../CallSite/index.html#type-t">CallSite.t</a></code></dt></dl><div class="spec module" id="module-Set"><a href="#module-Set" class="anchor"></a><code><span class="keyword">module</span> Set : <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">IStdlib.PrettyPrintable.PPSet</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">PPSet</a>.elt = <a href="index.html#type-t">t</a></code></div></div></body></html>

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>FuncArg (infer.Absint.ProcnameDispatcher.Call.FuncArg)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">ProcnameDispatcher</a> &#x00BB; <a href="../index.html">Call</a> &#x00BB; FuncArg</nav><h1>Module <code>Call.FuncArg</code></h1><p>Little abstraction over arguments: currently actual args, we'll want formal args later</p></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> <span>'arg_payload t</span></code><code> = </code><code>{</code><table class="record"><tr id="type-t.exp" class="anchored"><td class="def field"><a href="#type-t.exp" class="anchor"></a><code>exp : <a href="../../../../IR/Exp/index.html#type-t">IR.Exp.t</a>;</code></td></tr><tr id="type-t.typ" class="anchored"><td class="def field"><a href="#type-t.typ" class="anchor"></a><code>typ : <a href="../../../../IR/Typ/index.html#type-t">IR.Typ.t</a>;</code></td></tr><tr id="type-t.arg_payload" class="anchored"><td class="def field"><a href="#type-t.arg_payload" class="anchor"></a><code>arg_payload : <span class="type-var">'arg_payload</span>;</code></td></tr></table><code>}</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ProcnameDispatcher (infer.Absint.ProcnameDispatcher)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Absint</a> &#x00BB; ProcnameDispatcher</nav><h1>Module <code>Absint.ProcnameDispatcher</code></h1></header><dl><dt class="spec type" id="type-accept_more"><a href="#type-accept_more" class="anchor"></a><code><span class="keyword">type</span> accept_more</code></dt><dd><p>To be used in 'list_constraint</p></dd></dl><dl><dt class="spec type" id="type-end_of_list"><a href="#type-end_of_list" class="anchor"></a><code><span class="keyword">and</span> end_of_list</code></dt><dt class="spec type" id="type-name_matcher"><a href="#type-name_matcher" class="anchor"></a><code><span class="keyword">type</span> <span>('context, 'f_in, 'f_out, 'arg_payload) name_matcher</span></code></dt><dt class="spec type" id="type-template_arg"><a href="#type-template_arg" class="anchor"></a><code><span class="keyword">type</span> <span>('f_in, 'f_out_in_out, 'list_constraint) template_arg</span></code></dt><dt class="spec type" id="type-templ_matcher"><a href="#type-templ_matcher" class="anchor"></a><code><span class="keyword">type</span> <span>('context, 'f_in, 'f_out, 'list_constraint, 'arg_payload) templ_matcher</span></code></dt></dl><div class="spec module-type" id="module-type-Common"><a href="#module-type-Common" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-Common/index.html">Common</a> = <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module-type" id="module-type-NameCommon"><a href="#module-type-NameCommon" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-NameCommon/index.html">NameCommon</a> = <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module" id="module-ProcName"><a href="#module-ProcName" class="anchor"></a><code><span class="keyword">module</span> <a href="ProcName/index.html">ProcName</a> : <a href="index.html#module-type-NameCommon">NameCommon</a> <span class="keyword">with</span> <span class="keyword">type</span> <span>('context, 'f, 'arg_payload) <a href="module-type-NameCommon/index.html#type-dispatcher">dispatcher</a></span> = <span class="type-var">'context</span> <span>&#45;&gt;</span> <a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <span><span class="type-var">'f</span> option</span></code></div><div class="spec module" id="module-TypName"><a href="#module-TypName" class="anchor"></a><code><span class="keyword">module</span> <a href="TypName/index.html">TypName</a> : <a href="index.html#module-type-NameCommon">NameCommon</a> <span class="keyword">with</span> <span class="keyword">type</span> <span>('context, 'f, 'arg_payload) <a href="module-type-NameCommon/index.html#type-dispatcher">dispatcher</a></span> = <span class="type-var">'context</span> <span>&#45;&gt;</span> <a href="../../IR/Typ/index.html#type-name">IR.Typ.name</a> <span>&#45;&gt;</span> <span><span class="type-var">'f</span> option</span></code></div><div class="spec module" id="module-Call"><a href="#module-Call" class="anchor"></a><code><span class="keyword">module</span> <a href="Call/index.html">Call</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>1-Kind (infer.Absint.Sink.Make.1-Kind)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">Sink</a> &#x00BB; <a href="../index.html">Make</a> &#x00BB; 1-Kind</nav><h1>Parameter <code>Make.1-Kind</code></h1></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../../../TaintTraceElem/index.html#module-type-Kind">TaintTraceElem.Kind</a></code></span></summary><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-matches"><a href="#val-matches" class="anchor"></a><code><span class="keyword">val</span> matches : <span>caller:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>callee:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> bool</code></dt><dd><p>Return true if the <code>caller</code> element kind matches the <code>callee</code> element kind. Used during trace expansion; we will only consider expanding the trace from caller into callee if this evaluates to true. This can normally just be <code>equal</code>, but something fuzzier may be required if <code>t</code> is a type that contains identifiers from the caller/callee</p></dd></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../TaintTraceElem/index.html#module-F">Absint.TaintTraceElem.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></details></div></div></div><dl><dt class="spec value" id="val-get"><a href="#val-get" class="anchor"></a><code><span class="keyword">val</span> get : <a href="../../../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <span><a href="../../../../IR/HilExp/index.html#type-t">IR.HilExp.t</a> list</span> <span>&#45;&gt;</span> <a href="../../../../IR/CallFlags/index.html#type-t">IR.CallFlags.t</a> <span>&#45;&gt;</span> <a href="../../../../IR/Tenv/index.html#type-t">IR.Tenv.t</a> <span>&#45;&gt;</span> <span><span>(<a href="index.html#type-t">t</a> * <a href="../../../../IStdlib/index.html#module-IntSet">IStdlib.IntSet</a>.t)</span> list</span></code></dt><dd><p>return Some kind if the given procname/actuals are a sink, None otherwise</p></dd></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>1-Kind (infer.Absint.Sink.Make.1-Kind)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../../index.html">infer</a> &#x00BB; <a href="../../../index.html">Absint</a> &#x00BB; <a href="../../index.html">Sink</a> &#x00BB; <a href="../index.html">Make</a> &#x00BB; 1-Kind</nav><h1>Parameter <code>Make.1-Kind</code></h1></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../../../TaintTraceElem/index.html#module-type-Kind">TaintTraceElem.Kind</a></code></span></summary><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val</span> compare : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-matches"><a href="#val-matches" class="anchor"></a><code><span class="keyword">val</span> matches : <span>caller:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>callee:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> bool</code></dt><dd><p>Return true if the <code>caller</code> element kind matches the <code>callee</code> element kind. Used during trace expansion; we will only consider expanding the trace from caller into callee if this evaluates to true. This can normally just be <code>equal</code>, but something fuzzier may be required if <code>t</code> is a type that contains identifiers from the caller/callee</p></dd></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../../TaintTraceElem/index.html#module-F">Absint.TaintTraceElem.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></details></div></div></div><dl><dt class="spec value" id="val-get"><a href="#val-get" class="anchor"></a><code><span class="keyword">val</span> get : <a href="../../../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <span><a href="../../../HilExp/index.html#type-t">HilExp.t</a> list</span> <span>&#45;&gt;</span> <a href="../../../../IR/CallFlags/index.html#type-t">IR.CallFlags.t</a> <span>&#45;&gt;</span> <a href="../../../../IR/Tenv/index.html#type-t">IR.Tenv.t</a> <span>&#45;&gt;</span> <span><span>(<a href="index.html#type-t">t</a> * <a href="../../../../IStdlib/index.html#module-IntSet">IStdlib.IntSet</a>.t)</span> list</span></code></dt><dd><p>return Some kind if the given procname/actuals are a sink, None otherwise</p></dd></dl></div></body></html>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save