[PATCH] Allow specifying a custom PathDiagnosticConsumer for use with the static analyzer.
Alexander Kornienko
alexfh at google.com
Tue Jan 21 11:08:26 PST 2014
Jordan, could you take a look at this patch?
On 15 Jan 2014 18:09, "Alexander Kornienko" <alexfh at google.com> 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);
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140121/d1d72b06/attachment.html>
More information about the cfe-commits
mailing list