Ted, Jordan, could you review this patch as well? Thanks! On 21 Jan 2014 20:08, "Alexander Kornienko" <[email protected]> wrote:
> Jordan, could you take a look at this patch? > On 15 Jan 2014 18:09, "Alexander Kornienko" <[email protected]> wrote: > >> Hi jordan_rose, krememek, >> >> Make objects returned by CreateAnalysisConsumer expose an interface, >> that allows providing a custom PathDiagnosticConsumer, so that users can >> have >> raw data in a form easily usable from the code (unlike plist/HTML in a >> file). >> >> http://llvm-reviews.chandlerc.com/D2556 >> >> Files: >> include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h >> lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp >> >> Index: include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h >> =================================================================== >> --- include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h >> +++ include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h >> @@ -15,26 +15,32 @@ >> #ifndef LLVM_CLANG_GR_ANALYSISCONSUMER_H >> #define LLVM_CLANG_GR_ANALYSISCONSUMER_H >> >> +#include "clang/AST/ASTConsumer.h" >> #include "clang/Basic/LLVM.h" >> #include "clang/StaticAnalyzer/Core/AnalyzerOptions.h" >> +#include "clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h" >> #include <string> >> >> namespace clang { >> >> -class ASTConsumer; >> class Preprocessor; >> class DiagnosticsEngine; >> >> namespace ento { >> class CheckerManager; >> >> +class AnalysisASTConsumer : public ASTConsumer { >> +public: >> + virtual void ReplaceDiagnosticConsumer(PathDiagnosticConsumer >> *Consumer) = 0; >> +}; >> + >> /// CreateAnalysisConsumer - Creates an ASTConsumer to run various code >> /// analysis passes. (The set of analyses run is controlled by >> command-line >> /// options.) >> -ASTConsumer* CreateAnalysisConsumer(const Preprocessor &pp, >> - const std::string &output, >> - AnalyzerOptionsRef opts, >> - ArrayRef<std::string> plugins); >> +AnalysisASTConsumer *CreateAnalysisConsumer(const Preprocessor &pp, >> + const std::string &output, >> + AnalyzerOptionsRef opts, >> + ArrayRef<std::string> >> plugins); >> >> } // end GR namespace >> >> Index: lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp >> =================================================================== >> --- lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp >> +++ lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp >> @@ -145,7 +145,7 @@ >> >> namespace { >> >> -class AnalysisConsumer : public ASTConsumer, >> +class AnalysisConsumer : public AnalysisASTConsumer, >> public >> DataRecursiveASTVisitor<AnalysisConsumer> { >> enum { >> AM_None = 0, >> @@ -377,6 +377,16 @@ >> return true; >> } >> >> + virtual void >> + ReplaceDiagnosticConsumer(PathDiagnosticConsumer *Consumer) >> LLVM_OVERRIDE { >> + for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), >> + E = PathConsumers.end(); >> + I != E; ++I) >> + delete *I; >> + PathConsumers.clear(); >> + PathConsumers.push_back(Consumer); >> + } >> + >> private: >> void storeTopLevelDecls(DeclGroupRef DG); >> >> @@ -687,10 +697,10 @@ >> // AnalysisConsumer creation. >> >> >> //===----------------------------------------------------------------------===// >> >> -ASTConsumer* ento::CreateAnalysisConsumer(const Preprocessor& pp, >> - const std::string& outDir, >> - AnalyzerOptionsRef opts, >> - ArrayRef<std::string> plugins) >> { >> +AnalysisASTConsumer * >> +ento::CreateAnalysisConsumer(const Preprocessor &pp, const std::string >> &outDir, >> + AnalyzerOptionsRef opts, >> + ArrayRef<std::string> plugins) { >> // Disable the effects of '-Werror' when using the AnalysisConsumer. >> pp.getDiagnostics().setWarningsAsErrors(false); >> >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
