[cfe-dev] [Static Analyzer] Performing analysis on the specified functions
jordan_rose at apple.com
Mon Dec 2 11:47:31 PST 2013
By default, the static analyzer treats all functions declared in the main source file as possible entry points, then removes those that get called from another function being analyzed. That should include constructors and other member functions. There's a scan-build option (whose name escapes me right now) to also analyze functions declared in header files, and there's a secret (-cc1) option -analyze-function=NAME that only analyzes decls with a matching name. (I'm not sure if that works for constructors.)
To Philip's point, being able to specify explicit entry points does seem reasonable; a patch to specify this in scan-build and thread it through to AnalysisConsumer would probably be accepted. Specifically, check out getModeForDecl.
On Dec 2, 2013, at 8:31, Gabor Kozar <kozargabor at gmail.com> wrote:
> We have a Clang Static Analyzer plugin that exposes several custom checkers. Currently I'm working on a checker that aims to enforce the practice that it is the responsibility of the class ctors to initialize all member variables.
> Unfortunately, this requires the Static Analyzer to analyze the constructor, which does not happen without having the ctor called from a global function, which the SA treats as entry points.
> This, however, leads to a problem: in production code, the definition of the class members and the user of the class are usually in different TUs, i.e. the SA won't be able to analyze the ctor call.
> Therefore, I'd like to make the SA treat constructors as entry points. More generally, how can I control which functions are analyzed (i.e. treated as entry points)? If this is not really something that can be done externally (i.e. outside Clang itself), where should I look inside the Clang source for this logic? (We can then create a patch, and ship a custom-patched version of Clang alongside with our checker library.)
> Gábor 'ShdNx' Kozár
> kozargabor at gmail.com
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
More information about the cfe-dev