[cfe-dev] [Static Analyzer] Performing analysis on the specified functions
Jordan Rose
jordan_rose at apple.com
Thu Dec 5 09:26:14 PST 2013
checkPreCall wouldn't work for this, because there's no CallEvent for the entry point, because there's no call expression or argument values. It's definitely a flaw that we don't have a checkInitialConditons or something for this, though...we've needed it several times.
If you're interested, patches welcome. In theory it shouldn't be too difficult; the current equivalent is the hardcoded ExprEngine::getInitialState.
Jordan
On Dec 4, 2013, at 2:16 , Gabor Kozar <kozargabor at gmail.com> wrote:
> Ah, that changes things. I just did some tests, and indeed, when there is just a class definition in a translation unit, the class' ctor is indeed treated as an entry point.
>
> Unfortunately, as far as I can tell, checkPreCall is NOT called on it - when it calls other functions, I get a checkPreCall for them, but not for the entry point itself.
>
> We're using Clang 3.3. Is this by design? Is there a way I can get notified of this?
>
> Thanks!
>
> --
> Gábor 'ShdNx' Kozár
> kozargabor at gmail.com
>
>
>
> On Mon, Dec 2, 2013, at 20:47, Jordan Rose wrote:
>> 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.
>>
>> Jordan
>>
>>
>> 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.)
>>
>> Thanks!
>>
>> --
>> Gábor 'ShdNx' Kozár
>> kozargabor at gmail.com
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131205/72ab7bb6/attachment.html>
More information about the cfe-dev
mailing list