[cfe-dev] Clang Static Analyzer supporting Cross Translation Unit
Artem Dergachev via cfe-dev
cfe-dev at lists.llvm.org
Thu Feb 15 10:50:39 PST 2018
The current CTU effort erases the boundaries we have between a single
translation unit and the whole program, but it isn't going to be
powerful enough to be described as a "whole-program" analysis, similarly
to how our existing inter-procedural analysis isn't quite "whole
translation unit" analysis.
With out static symbolic execution-based approach, we do not ever
attempt to understand any significant module of the program "as a
whole". Instead, we try to model specific individual functions, and
sometimes, occasionally, depending on numerous unobvious circumstances,
when we encounter calls of other functions during such modeling, we
allow ourselves to descend into the callee function to explore
consequences of the function call in the current context. It opens up
execution paths that traverse multiple functions, but we always keep in
mind that we're still analyzing the program by focusing on a very small
part of the code at a time, conducting multiple independent analyses
even within a single translation unit, and never assuming understanding
the program as a whole.
CTU allows us, sometimes, occasionally, depending on numerous unobvious
circumstances, to do the same when we encounter calls of functions that
have their bodies defined in a different translation unit, therefore
erasing the boundaries and allowing us to focus on more promising
execution paths. The current effort is for now focused at that first
step for now - erasing the boundaries. As far as i know, not much effort
has been done to tweak our heuristics to determine the promising
execution paths, but the existing heuristics work pretty well in the new
circumstances, and a significant improvement of the bugs-per-second
metric is observed, together with a considerable skew from finding
deeper bugs within the current translation unit towards finding
shallower bugs that require understanding of multiple translation units.
But still, and probably even more so, CTU is not whole-program analysis
- it's only an effort to erase the artificial boundaries of translation
unit, but our static symbolic execution approach would never scale
enough to understanding the program as a whole. Even if at all possible,
it requires a way more significant effort and advanced techniques.
So the real question here is - what kind of analysis do you want to
perform? Is symbolic execution the right tool for your work? Like, for
~1/2 of problems, symbolic execution is not even the right tool: if, for
instance, you're trying to find a problem that can be identified by an
invariant that holds on all paths (dead code, expression always has the
same value, various check-after-use), then the analyzer wouldn't be of
much help, because it never guarantees to explore all paths through the
program; it's only good for finding specific paths on which a certain
invariant is violated (use-after-failed-check, null dereference, memory
leak). And also symbolic execution of the whole program's source code
doesn't scale, but another analysis method may scale well.
On 15/02/2018 1:41 AM, Aleksei Sidorin via cfe-dev wrote:
> Hi Yingtong,
>
> The work on integration of CTU into Clang Static Analyzer upstream is
> still ongoing. There were some experimental prototypes and now, as I
> know, Ericsson CodeChecker contains the most production-close version
> of CTU.
> You should note that it is still experimental and has a number of
> known bugs and non-implemented functionality; however, we're working
> on fixing them.
>
> (+ Gabor).
>
>
> 15.02.2018 03:31, Yingtong Liu via cfe-dev пишет:
>> Hi all,
>>
>> As far as I know, Clang static analyzer suported interprocedural
>> analysis in one translation unit very well but not very good for the
>> whole program interprocedural analysis.
>>
>> I got some primilary information about cross translation unit
>> analysis online like this one:
>> http://lists.llvm.org/pipermail/cfe-dev/2017-March/053366.html. But
>> it seems like it's still an exprimental work, and no more meterials
>> are available.
>>
>> My work cares about interprocedural analysis a lot. I am kind of
>> struggling on choosing tools to write checkers between clang analyzer
>> and llvm pass. LLVM pass supports interprocedural analysis very well
>> but they don't have a lot of checkers available like clang analyzer.
>> I wonder will cross translation unit analysis in clang analyzer be
>> supported very solidly in the furture? Is it a promising project that
>> you might be interested putting effort on?
>>
>> I know it might be very expensive to support both path-sensitive and
>> interprocedural analysis, especially for large systems. They may run
>> out of memory. So I am curious if anyone is working on cross
>> translation unit.
>>
>> Thank you.
>>
>> Best,
>> Ying
>>
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
> --
> Best regards,
> Aleksei Sidorin,
> SRR, Samsung Electronics
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list