forked from OSchip/llvm-project
[CrossTU] Added CTU argument to diagnostic consumer create fn.
Summary: The PListDiagnosticConsumer needs a new CTU parameter that is passed through the create functions. Reviewers: NoQ, Szelethus, xazax.hun, martong Reviewed By: Szelethus Subscribers: rnkovacs, dkrupp, Szelethus, gamesh411, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D64635 llvm-svn: 366782
This commit is contained in:
parent
2d654df763
commit
32f220c5fb
|
@ -20,17 +20,19 @@ namespace clang {
|
|||
|
||||
class AnalyzerOptions;
|
||||
class Preprocessor;
|
||||
namespace cross_tu {
|
||||
class CrossTranslationUnitContext;
|
||||
}
|
||||
|
||||
namespace ento {
|
||||
|
||||
class PathDiagnosticConsumer;
|
||||
typedef std::vector<PathDiagnosticConsumer*> PathDiagnosticConsumers;
|
||||
|
||||
#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATEFN)\
|
||||
void CREATEFN(AnalyzerOptions &AnalyzerOpts,\
|
||||
PathDiagnosticConsumers &C,\
|
||||
const std::string &Prefix,\
|
||||
const Preprocessor &PP);
|
||||
#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATEFN) \
|
||||
void CREATEFN(AnalyzerOptions &AnalyzerOpts, PathDiagnosticConsumers &C, \
|
||||
const std::string &Prefix, const Preprocessor &PP, \
|
||||
const cross_tu::CrossTranslationUnitContext &CTU);
|
||||
#include "clang/StaticAnalyzer/Core/Analyses.def"
|
||||
|
||||
} // end 'ento' namespace
|
||||
|
|
|
@ -134,17 +134,17 @@ private:
|
|||
|
||||
} // namespace
|
||||
|
||||
void ento::createHTMLDiagnosticConsumer(AnalyzerOptions &AnalyzerOpts,
|
||||
PathDiagnosticConsumers &C,
|
||||
const std::string& prefix,
|
||||
const Preprocessor &PP) {
|
||||
void ento::createHTMLDiagnosticConsumer(
|
||||
AnalyzerOptions &AnalyzerOpts, PathDiagnosticConsumers &C,
|
||||
const std::string &prefix, const Preprocessor &PP,
|
||||
const cross_tu::CrossTranslationUnitContext &) {
|
||||
C.push_back(new HTMLDiagnostics(AnalyzerOpts, prefix, PP, true));
|
||||
}
|
||||
|
||||
void ento::createHTMLSingleFileDiagnosticConsumer(AnalyzerOptions &AnalyzerOpts,
|
||||
PathDiagnosticConsumers &C,
|
||||
const std::string& prefix,
|
||||
const Preprocessor &PP) {
|
||||
void ento::createHTMLSingleFileDiagnosticConsumer(
|
||||
AnalyzerOptions &AnalyzerOpts, PathDiagnosticConsumers &C,
|
||||
const std::string &prefix, const Preprocessor &PP,
|
||||
const cross_tu::CrossTranslationUnitContext &) {
|
||||
C.push_back(new HTMLDiagnostics(AnalyzerOpts, prefix, PP, false));
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "clang/Basic/PlistSupport.h"
|
||||
#include "clang/Basic/SourceManager.h"
|
||||
#include "clang/Basic/Version.h"
|
||||
#include "clang/CrossTU/CrossTranslationUnit.h"
|
||||
#include "clang/Lex/Preprocessor.h"
|
||||
#include "clang/Lex/TokenConcatenation.h"
|
||||
#include "clang/Rewrite/Core/HTMLRewrite.h"
|
||||
|
@ -21,9 +22,9 @@
|
|||
#include "clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h"
|
||||
#include "clang/StaticAnalyzer/Core/IssueHash.h"
|
||||
#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
|
||||
using namespace clang;
|
||||
|
@ -39,12 +40,13 @@ namespace {
|
|||
class PlistDiagnostics : public PathDiagnosticConsumer {
|
||||
const std::string OutputFile;
|
||||
const Preprocessor &PP;
|
||||
const cross_tu::CrossTranslationUnitContext &CTU;
|
||||
AnalyzerOptions &AnOpts;
|
||||
const bool SupportsCrossFileDiagnostics;
|
||||
public:
|
||||
PlistDiagnostics(AnalyzerOptions &AnalyzerOpts,
|
||||
const std::string& prefix,
|
||||
PlistDiagnostics(AnalyzerOptions &AnalyzerOpts, const std::string &prefix,
|
||||
const Preprocessor &PP,
|
||||
const cross_tu::CrossTranslationUnitContext &CTU,
|
||||
bool supportsMultipleFiles);
|
||||
|
||||
~PlistDiagnostics() override {}
|
||||
|
@ -518,26 +520,29 @@ static void printBugPath(llvm::raw_ostream &o, const FIDMap& FM,
|
|||
// Methods of PlistDiagnostics.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
PlistDiagnostics::PlistDiagnostics(AnalyzerOptions &AnalyzerOpts,
|
||||
const std::string& output,
|
||||
const Preprocessor &PP,
|
||||
bool supportsMultipleFiles)
|
||||
: OutputFile(output), PP(PP), AnOpts(AnalyzerOpts),
|
||||
SupportsCrossFileDiagnostics(supportsMultipleFiles) {}
|
||||
PlistDiagnostics::PlistDiagnostics(
|
||||
AnalyzerOptions &AnalyzerOpts, const std::string &output,
|
||||
const Preprocessor &PP, const cross_tu::CrossTranslationUnitContext &CTU,
|
||||
bool supportsMultipleFiles)
|
||||
: OutputFile(output), PP(PP), CTU(CTU), AnOpts(AnalyzerOpts),
|
||||
SupportsCrossFileDiagnostics(supportsMultipleFiles) {
|
||||
// FIXME: Will be used by a later planned change.
|
||||
(void)CTU;
|
||||
}
|
||||
|
||||
void ento::createPlistDiagnosticConsumer(AnalyzerOptions &AnalyzerOpts,
|
||||
PathDiagnosticConsumers &C,
|
||||
const std::string& s,
|
||||
const Preprocessor &PP) {
|
||||
C.push_back(new PlistDiagnostics(AnalyzerOpts, s, PP,
|
||||
void ento::createPlistDiagnosticConsumer(
|
||||
AnalyzerOptions &AnalyzerOpts, PathDiagnosticConsumers &C,
|
||||
const std::string &s, const Preprocessor &PP,
|
||||
const cross_tu::CrossTranslationUnitContext &CTU) {
|
||||
C.push_back(new PlistDiagnostics(AnalyzerOpts, s, PP, CTU,
|
||||
/*supportsMultipleFiles*/ false));
|
||||
}
|
||||
|
||||
void ento::createPlistMultiFileDiagnosticConsumer(AnalyzerOptions &AnalyzerOpts,
|
||||
PathDiagnosticConsumers &C,
|
||||
const std::string &s,
|
||||
const Preprocessor &PP) {
|
||||
C.push_back(new PlistDiagnostics(AnalyzerOpts, s, PP,
|
||||
void ento::createPlistMultiFileDiagnosticConsumer(
|
||||
AnalyzerOptions &AnalyzerOpts, PathDiagnosticConsumers &C,
|
||||
const std::string &s, const Preprocessor &PP,
|
||||
const cross_tu::CrossTranslationUnitContext &CTU) {
|
||||
C.push_back(new PlistDiagnostics(AnalyzerOpts, s, PP, CTU,
|
||||
/*supportsMultipleFiles*/ true));
|
||||
}
|
||||
void PlistDiagnostics::FlushDiagnosticsImpl(
|
||||
|
|
|
@ -43,10 +43,10 @@ public:
|
|||
};
|
||||
} // end anonymous namespace
|
||||
|
||||
void ento::createSarifDiagnosticConsumer(AnalyzerOptions &AnalyzerOpts,
|
||||
PathDiagnosticConsumers &C,
|
||||
const std::string &Output,
|
||||
const Preprocessor &) {
|
||||
void ento::createSarifDiagnosticConsumer(
|
||||
AnalyzerOptions &AnalyzerOpts, PathDiagnosticConsumers &C,
|
||||
const std::string &Output, const Preprocessor &,
|
||||
const cross_tu::CrossTranslationUnitContext &) {
|
||||
C.push_back(new SarifDiagnostics(AnalyzerOpts, Output));
|
||||
}
|
||||
|
||||
|
|
|
@ -64,19 +64,19 @@ STATISTIC(MaxCFGSize, "The maximum number of basic blocks in a function.");
|
|||
// Special PathDiagnosticConsumers.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void ento::createPlistHTMLDiagnosticConsumer(AnalyzerOptions &AnalyzerOpts,
|
||||
PathDiagnosticConsumers &C,
|
||||
const std::string &prefix,
|
||||
const Preprocessor &PP) {
|
||||
void ento::createPlistHTMLDiagnosticConsumer(
|
||||
AnalyzerOptions &AnalyzerOpts, PathDiagnosticConsumers &C,
|
||||
const std::string &prefix, const Preprocessor &PP,
|
||||
const cross_tu::CrossTranslationUnitContext &CTU) {
|
||||
createHTMLDiagnosticConsumer(AnalyzerOpts, C,
|
||||
llvm::sys::path::parent_path(prefix), PP);
|
||||
createPlistMultiFileDiagnosticConsumer(AnalyzerOpts, C, prefix, PP);
|
||||
llvm::sys::path::parent_path(prefix), PP, CTU);
|
||||
createPlistMultiFileDiagnosticConsumer(AnalyzerOpts, C, prefix, PP, CTU);
|
||||
}
|
||||
|
||||
void ento::createTextPathDiagnosticConsumer(AnalyzerOptions &AnalyzerOpts,
|
||||
PathDiagnosticConsumers &C,
|
||||
const std::string &Prefix,
|
||||
const clang::Preprocessor &PP) {
|
||||
void ento::createTextPathDiagnosticConsumer(
|
||||
AnalyzerOptions &AnalyzerOpts, PathDiagnosticConsumers &C,
|
||||
const std::string &Prefix, const clang::Preprocessor &PP,
|
||||
const cross_tu::CrossTranslationUnitContext &CTU) {
|
||||
llvm_unreachable("'text' consumer should be enabled on ClangDiags");
|
||||
}
|
||||
|
||||
|
@ -249,7 +249,7 @@ public:
|
|||
default:
|
||||
#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATEFN) \
|
||||
case PD_##NAME: \
|
||||
CREATEFN(*Opts.get(), PathConsumers, OutDir, PP); \
|
||||
CREATEFN(*Opts.get(), PathConsumers, OutDir, PP, CTU); \
|
||||
break;
|
||||
#include "clang/StaticAnalyzer/Core/Analyses.def"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue