[cfe-dev] Clang Static Analyzer - BugReporter::EmitBasicReport with Stmt

Jordan Rose jordan_rose at apple.com
Wed May 8 09:11:41 PDT 2013


Hm, no, you're right there—"code body" refers to a function or method body. checkASTDecl would do every declaration, but you still can't get an AnalysisDeclContext for globals.

I guess when all else fails you just go for the "minimal" form of a PathDiagnosticLocation: the constructor that takes a SourceLocation and a SourceManager.

Jordan


On May 8, 2013, at 1:24 , Gábor Kozár <kozargabor at gmail.com> wrote:

> Hi Jordan,
> 
> Okay, so that Decl I need to specify is the parent for the Stmt I want to report? That makes sense.
> The reason I'm running my matchers in checkEndOfTranslationUnit, is because a lot of matches are not actually inside function bodies, but are for example data members of classes. I was under the impression that checkASTCodeBody would only be called for functions (although I can't quite remember why). Is that not the case?
> 
> Thanks!
> 
> Gabor
> 
> 
> 2013/5/8 Jordan Rose <jordan_rose at apple.com>
> Hi, Gábor. The LocationContext/AnalysisDeclContext is used to find an appropriate location for the statement, which may be in an enclosing expression. You need a Decl for this because we don't want to build a parent map for the entire ASTContext.
> 
> May I suggest running your matcher in checkASTCodeBody instead of checkEndOfTranslationUnit?
> 
> Jordan
> 
> 
> On May 7, 2013, at 9:32 , Gábor Kozár <kozargabor at gmail.com> wrote:
> 
> > Hi,
> >
> > In a Static Analyzer checker, using AST matchers, I located an IntegerLiteral that I want to report. I'm trying to do this with BugReporter::EmitBasicReport, which requires a PathDiagnosticLocation.
> >
> > There is PathDiagnosticLocation::createBegin that I've used before with previous checkers - unfortunately, the overload that accepts an Stmt* (as an IntegerLiteral is not a Decl, but it is an Stmt) also requires a mysterious third parameter, a LocationOrAnalysisDeclContext. I tried looking through the documentation, but apparently anything that returns a LocationDeclContext or AnalysisDeclContext either require a CheckerContext (which I don't have, because I'm in checkEndOfTranslationUnit: all I have is the TranslationUnitDecl, the AnalysisManager and the BugReporter), or a Decl*.
> >
> > Any clues on how could I do this? I'm using Clang 3.2.
> >
> > Note: I'm aware that the Clang Static Analyzer by default is not linked to libASTMatchers, but I solved that, that is NOT the issue here.
> >
> > Thanks!
> >
> > Gabor
> > _______________________________________________
> > 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/20130508/ddcce005/attachment.html>


More information about the cfe-dev mailing list