running analysis across translation units


Is there a way to analyze multiple translation units / files using clang? I’m trying to implement a simple analysis to match up each function call to its potential FunctionDecls, where the decls might be defined in multiple files.


Hi Aaron,

According to my investigation, you can enable CTU analysis with experimental-enable-naive-ctu-analysis=true and ctu-dir parameters when executing clang.
And before your analysis, you should create the external definition mapping file with clang-extdef-mapping or clang-func-mapping (depending on your clang’s version, see clang/tools/).
With the mapping file, CTU analysis can find the desired FunctionDecls outside current TU when CTU analysis is enabled.

An example of invoking clang with CTU analysis enabled:

$ clang++ -cc1 -analyze -analyzer-checker=YOUR_REQUIRED_CHECKERS -o OUTPUT_DIRECTORY/ -analyzer-config experimental-enable-naive-ctu-analysis=true -analyzer-config ctu-dir=PATH_TO_FIND_MAPPING_FILE/ FILE_TO_BE_ANALYZED.cpp

The latest version of CTU analysis is now under merging, hope there will be some official documents someday.

Hope this helps.


AAA C via cfe-dev <> 于2019年5月26日周日 下午2:36写道:

Hi Aaron,

The CTU functionality is kind of there but we lack good support for driver scripts to actually drive the analysis. The scan-build-py has some support but is poorly maintained at the point. The most mature solution is in CodeChecker 1. Most of the problems with CTU analysis coming from the ASTImporter. Ericsson also has some ASTImporter patches downstream that are being upstreamed gradually. So if you want the best possible result, you could try their fork 2. It should work reasonably well for most projects (last time I checked it was able to analyze more than 99% of LLVM and Clang sources with CTU enabled).