[PATCH] Allow specifying a custom PathDiagnosticConsumer for use with the static analyzer.
Alexander Kornienko
alexfh at google.com
Wed Jan 15 09:10:26 PST 2014
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 --------------
A non-text attachment was scrubbed...
Name: D2556.1.patch
Type: text/x-patch
Size: 3278 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140115/6289fde5/attachment.bin>
More information about the cfe-commits
mailing list