[cfe-commits] [PATCH] Additional output for AnalyzerStatsChecker
Anna Zaks
ganna at apple.com
Thu Feb 23 14:26:44 PST 2012
On Feb 23, 2012, at 1:50 PM, Tom Care wrote:
> The reason I added a Stmt* was because the LocationContext of the node (which starts out as a PostStmt) can be overwritten to become a BlockEdge. The Stmt* pointer is lost in that case, and it becomes difficult to guess where the original Stmt was. Since we only add aborted blocks/nodes when a Stmt was unsupported, I thought that it was important to keep the original pointer to find out why we stopped.
>
Tom, you must be talking about ProgramPoint/Location, not LocationContext, correct? Can you investigate where it gets overwritten? As far as I understand, it should never change, in fact, it's declared as const. We are only adding predecessors and successors to the ExplodedNodes; they should stay unchanged otherwise.
class ExplodedNode : public llvm::FoldingSetNode {
....
/// Location - The program location (within a function body) associated
/// with this node.
const ProgramPoint Location;
> Example of the new output:
>
> /Users/tcare/Projects/llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp:218:5: warning: The analyzer stopped at this point due to an unsupported statement of type CXXBindTemporaryExpr
> S.Diag(Attr.getLoc(), diag::err_attribute_too_few_arguments) << Num;
> ^
>
> /Users/tcare/Projects/llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp:308:28: warning: The analyzer stopped because this block was visited too many times
> for(unsigned Idx = Sidx; Idx < Attr.getNumArgs(); ++Idx) {
> ^
>
> /Users/tcare/Projects/llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp:934:11: warning: The analyzer stoppedat this point due to visitation limits
> if (T->isAnyPointerType() || T->isBlockPointerType())
> ^
>
> (need to add a space in the last one)
>
> I'm testing over all of LLVM/Clang right now as I am collecting data.
>
> Tom
>
> On 23/02/2012, at 6:04 PM, Anna Zaks wrote:
>
>> On Feb 23, 2012, at 7:27 AM, Ted Kremenek wrote:
>>
>>> Looks good to me. Do you have an example of the new output?
>>>
>>> On Feb 23, 2012, at 7:08 AM, Tom Care <tom.care at uqconnect.edu.au> wrote:
>>>
>>>> I made some changes to AnalyzerStatsChecker to make it a bit more useful. Changelog:
>>>>
>>>> Improved the information output by AnalyzerStatsChecker. In addition to the analysis stats for Decls, AnalyzerStatsChecker now also outputs:
>>>> - Exhausted blocks and sinks, including their approximate location
>>>> - Aborted blocks and their statement locations
>>>> - When and where the analyzer reaches the max block limit
>>>> Some supporting infrastructure changes:
>>>> - CoreEngine now stores Stmt* with the ExplodedNode* in the aborted block data, since the node can change between generation and VisitEndAnalysis
>>
>> My understanding is that, here, we add a bit of overhead on every analyzes run to make stats more precise.
>> Could you elaborate/investigate a bit more on why it is absolutely necessary in this case? Is the ExplodedNode you are storing here deleted by the time you reach VisitEndAnalysis? (How is the node changed?)
>>
>>>> - Exposed 'block limit exceeded' tag to allow AnalyzerStatsChecker to detect a sink caused by exceeding the max visits for a block
>>>>
>>>> Regarding test cases, any test case made for this checker would break quite frequently as the analyzer is changed. I can't think of a good way to solve this.
>>>>
>>
>> Would be great if you could (manually) test this with -analyzer-inline-call.
>>
>>>> Been a while since my last commit, so a review is much appreciated :)
>>>>
>>>> Tom
>>>> <AnalyzerStatsChecker.patch>_______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120223/3ae8f9a2/attachment.html>
More information about the cfe-commits
mailing list