These are the modules used by infer that are not packaged into sub-libraries.
The entry point of this library is the module: InferModules.
The modules are split into several directories in the source tree of infer.
Code + utilities for the Infer.AI abstract interpretation framework. Start at InferModules.AbstractInterpreter.
The backend is responsible for the analysis of a project starting from an intermediate representation stored in the results directory, typically infer-out
.
The entry point for the analysis is the module InferModules.InferAnalyze.
The module InferModules.InferPrint is used to export the analysis results.
Transfer functions, abstract domains, and checker configuration.
This is the frontend for the clang compiler. The main entry point is InferModules.ClangWrapper.
ASTExporter
clang plugin to the relevant commands and run it.SIL
via InferModules.CFrontend.
The OCaml data type is defined in atd
format. The clang_ast_t.atd
file is generated from the comments in the ASTExporter.h
file.
For more information, refer to the relevant documentation in facebook-clang-plugins
:
.atd
fileexample.cpp
) source file with construct that needs to be exported. The smaller the better.libtooling/ASTExporter.h
. For more information, refer to the ATD_GUIDELINES
.facebook-clang-plugins
. Running make
from top level of Infer repository will do that. Sometimes there may be compilation errors due to .atd
file changes - they need to be fixed.Tips & Tricks:
.bdump
file: infer -g -- clang -c example.cpp && sh example.cpp.ast.sh
. Then open example.cpp.ast.bdump
.clang -c example.cpp -Xclang -ast-dump
. It doesn't include all the information that Infer sees, but it's pretty concisebdump
is failing (it happens on huge sources sometimes), there is a way to view it in "Yojson" format. To do that, replace all occurrences of BiniouASTExporter
with YojsonASTExporter
in the .ast.sh
script.
Eradicate @Nullable
Checker
Eradicate is a type checker for @Nullable
annotations for Java. The goal is to eradicate null pointer exceptions. See the online docs at http://fbinfer.com/docs/eradicate.html.
The main entry point is module InferModules.Eradicate.
Java Frontend; this is the frontend for Java compilers.
The main entry point is InferModules.JMain.
You'll find the infer binary in infer.ml. It is not part of this library.