You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Dulma Churchill d8765d1d44
[linters] Include only base name of ObjC methods in the linters bug hash
7 years ago
..
ALVar.ml [al] precompute regexps 7 years ago
ALVar.mli [al] precompute regexps 7 years ago
CLintersContext.ml [AL] Compute a witness child node when computing formulas to be used for more precise bug hashing 7 years ago
CLintersContext.mli [AL] Compute a witness child node when computing formulas to be used for more precise bug hashing 7 years ago
CProcname.ml [linters] Include only base name of ObjC methods in the linters bug hash 7 years ago
CProcname.mli [linters] Include only base name of ObjC methods in the linters bug hash 7 years ago
CTLExceptions.ml [AL] add `--linters-validate-syntax-only` to check whether there are any syntax errors in AL files 7 years ago
CTLExceptions.mli [AL] add `--linters-validate-syntax-only` to check whether there are any syntax errors in AL files 7 years ago
CTLParserHelper.ml [AL] add `--linters-validate-syntax-only` to check whether there are any syntax errors in AL files 7 years ago
CTLParserHelper.mli [AL] add `--linters-validate-syntax-only` to check whether there are any syntax errors in AL files 7 years ago
CType.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
CType.mli [clang frontend] Pass type qualifiers through frontend 8 years ago
CType_decl.ml Fixing crash that happened when reporting a lint issue in a templated method. 7 years ago
CType_decl.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
Capture.ml [log] better exception reraising 7 years ago
Capture.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
CiOSVersionNumbers.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
CiOSVersionNumbers.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
ClangCommand.ml Remove unsupported `index-store-path` argument from clang commands 7 years ago
ClangCommand.mli [format] Attach docstrings to be warning 50 clean, other doc fixes 8 years ago
ClangPointers.ml [log] die more appropriately 7 years ago
ClangPointers.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
ClangWrapper.ml [log] die more appropriately 7 years ago
ClangWrapper.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
ComponentKit.ml [AL] Compute a witness child node when computing formulas to be used for more precise bug hashing 7 years ago
ComponentKit.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
README.md [docs] Extend src/clang/README.md with info about AST 7 years ago
ast_expressions.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
ast_expressions.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cArithmetic_trans.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
cArithmetic_trans.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cAst_utils.ml [linters] Fix the computing of the successors of method declarations 7 years ago
cAst_utils.mli [AL] Compute a witness child node when computing formulas to be used for more precise bug hashing 7 years ago
cContext.ml [destructors] Add scope management to clang frontend 7 years ago
cContext.mli [destructors] Add scope management to clang frontend 7 years ago
cEnum_decl.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
cEnum_decl.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cField_decl.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
cField_decl.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cFrontend.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
cFrontend.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cFrontend_checkers.ml [linters] Use the sdk version by path in the error message of unavailable api check 7 years ago
cFrontend_checkers.mli [linters] Use the sdk version by path in the error message of unavailable api check 7 years ago
cFrontend_checkers_main.ml [log] better exception reraising 7 years ago
cFrontend_checkers_main.mli Open Core.Std by default, still use Caml Hashtbl, Map, Set 8 years ago
cFrontend_config.ml Upgrading Infer to Clang 5.0 7 years ago
cFrontend_config.mli Upgrading Infer to Clang 5.0 7 years ago
cFrontend_decl.ml [clang] partial translation of vector instructions 7 years ago
cFrontend_decl.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cFrontend_errors.ml [linters] Include only base name of ObjC methods in the linters bug hash 7 years ago
cFrontend_errors.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cGeneral_utils.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
cGeneral_utils.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cIssue.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
cIssue.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cLocation.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
cLocation.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cMethod_signature.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
cMethod_signature.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cMethod_trans.ml [frontend] Additional information for the backend to distinguish between pass-by-val args and pass-by-ref args 7 years ago
cMethod_trans.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cModule_type.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
cPredicates.ml [log] die more appropriately 7 years ago
cPredicates.mli [linters] Use the sdk version by path in the error message of unavailable api check 7 years ago
cTL.ml Remove ETX operator from AL 7 years ago
cTL.mli Remove ETX operator from AL 7 years ago
cTrans.ml [destructors] Destroy fields after continue. 7 years ago
cTrans.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cTrans_models.ml Upgrading Infer to Clang 5.0 7 years ago
cTrans_models.mli Upgrading Infer to Clang 5.0 7 years ago
cTrans_utils.ml [destructors] Destroy fields after continue. 7 years ago
cTrans_utils.mli [clang] partial translation of vector instructions 7 years ago
cType_to_sil_type.ml [log] die more appropriately 7 years ago
cType_to_sil_type.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
cVar_decl.ml [clang] translate vars captured by lambda 7 years ago
cVar_decl.mli [clang] translate vars captured by lambda 7 years ago
clang_ast_extend.ml [log] die more appropriately 7 years ago
ctl_lexer.mll Remove ETX operator from AL 7 years ago
ctl_parser.mly Remove ETX operator from AL 7 years ago
ctl_parser_types.ml [linters] Fix the computing of the successors of method declarations 7 years ago
ctl_parser_types.mli [AL] Compute a witness child node when computing formulas to be used for more precise bug hashing 7 years ago
objcCategory_decl.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
objcCategory_decl.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
objcInterface_decl.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
objcInterface_decl.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
objcProperty_decl.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
objcProperty_decl.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
objcProtocol_decl.ml Convert Reason to OCaml, and auto-format OCaml 8 years ago
objcProtocol_decl.mli Convert Reason to OCaml, and auto-format OCaml 8 years ago
types_lexer.mll [linters] Support reference types in the linters type parser 7 years ago
types_parser.mly [AL] New exception ALFileException with source-location info 7 years ago

README.md

Clang Front-End

This is the front-end for the clang compiler.

The main entry point is ClangWrapper.

General structure

  1. Given a compilation command from the build system, sanitize it, attach ASTExporter clang plugin to the relevant commands and run it.
  2. Parse the AST from Biniou format to OCaml data structure.
  3. (optional) Invoke translation to SIL via CFrontend.
  4. (optional) Invoke linters via CFrontend_checkers_main. More on linters

Format of the AST

OCaml data structure is defined in atd format. The clang_ast_t.atd file is generated from comments in ASTExporter.h file.

For more information, refer to the relevant documentation in facebook-clang-plugins:

Hacking on .atd file

  1. Create a simple example (example.cpp) source file with construct that needs to be exported. The smaller the better.
  2. Export extra information by changing code in libtooling/ASTExporter.h. For more information, refer to the ATD_GUIDELINES.
  3. Compile Infer with the new version of facebook-clang-plugins. Running make all 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.
  4. Use newly exported information information in the frontend.

Tips & Tricks:

  • To view the AST in a human readable version, Infer can generate .bdump file: infer -g -- clang -c example.cpp && sh example.cpp.ast.sh. Then open example.cpp.ast.bdump
  • To inspect ast dump visually: clang -c example.cpp -Xclang -ast-dump. It doesn't include all the information that Infer sees, but it's pretty concise
  • If running bdump 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 .ast.sh script.