[clang] ea66410 - Revert "Revert "Revert "Revert "[analyzer] NFC: Move path diagnostic consumer implementations to libAnalysis.""""
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 11 00:51:35 PST 2020
Hi Artem,
Looks like this patch has some layer violations, I tried to fix that but
there is a main issue not easy to fix -- the issue is that there is a cycle
dependency:
1. PlistPathDiagnosticConsumer.cpp (now being moved to clangAnalysis
target), and this file calls a method from clang::ASTUnit, so
*clangAnalysis* should depend on *clangFrontend* (this is not listed in the
CMake file).
2. *clangFrontend* depends on *clangSema*
3. *clangSema* depends on *clangAnalysis*
I'm going to revert this patch (to unblock our integration, sorry), feel
free to land it again if you fix the issue. Thanks!
On Thu, Dec 10, 2020 at 8:03 PM Artem Dergachev via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
>
> Author: Artem Dergachev
> Date: 2020-12-10T11:02:54-08:00
> New Revision: ea6641085d025ca0a5cef940465ef14d0ccace02
>
> URL:
> https://github.com/llvm/llvm-project/commit/ea6641085d025ca0a5cef940465ef14d0ccace02
> DIFF:
> https://github.com/llvm/llvm-project/commit/ea6641085d025ca0a5cef940465ef14d0ccace02.diff
>
> LOG: Revert "Revert "Revert "Revert "[analyzer] NFC: Move path diagnostic
> consumer implementations to libAnalysis.""""
>
> This reverts commit 6a89cb8136f3435bd977b419b683dc0acc98e61e.
>
> Added:
> clang/include/clang/Analysis/PathDiagnosticConsumers.def
> clang/include/clang/Analysis/PathDiagnosticConsumers.h
> clang/lib/Analysis/HTMLPathDiagnosticConsumer.cpp
> clang/lib/Analysis/PlistHTMLPathDiagnosticConsumer.cpp
> clang/lib/Analysis/PlistPathDiagnosticConsumer.cpp
> clang/lib/Analysis/SarifPathDiagnosticConsumer.cpp
> clang/lib/Analysis/TextPathDiagnosticConsumer.cpp
>
> Modified:
> clang/include/clang/StaticAnalyzer/Core/Analyses.def
> clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
> clang/include/clang/module.modulemap
> clang/lib/Analysis/CMakeLists.txt
> clang/lib/Frontend/CompilerInvocation.cpp
> clang/lib/StaticAnalyzer/Core/CMakeLists.txt
> clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
>
> Removed:
> clang/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h
> clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
> clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
> clang/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp
> clang/lib/StaticAnalyzer/Core/TextDiagnostics.cpp
>
>
>
> ################################################################################
> diff --git a/clang/include/clang/Analysis/PathDiagnosticConsumers.def
> b/clang/include/clang/Analysis/PathDiagnosticConsumers.def
> new file mode 100644
> index 000000000000..33d2072fcf31
> --- /dev/null
> +++ b/clang/include/clang/Analysis/PathDiagnosticConsumers.def
> @@ -0,0 +1,50 @@
> +//===-- PathDiagnosticConsumers.def - Visualizing warnings ------*- C++
> -*-===//
> +//
> +// Part of the LLVM Project, under the Apache License v2.0 with LLVM
> Exceptions.
> +// See https://llvm.org/LICENSE.txt for license information.
> +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
> +//
>
> +//===----------------------------------------------------------------------===//
> +//
> +// This file defines the set of path diagnostic consumers - objects that
> +// implement
> diff erent representations of static analysis results.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef ANALYSIS_DIAGNOSTICS
> +#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATEFN)
> +#endif
> +
> +ANALYSIS_DIAGNOSTICS(HTML, "html", "Output analysis results using HTML",
> + createHTMLDiagnosticConsumer)
> +
> +ANALYSIS_DIAGNOSTICS(
> + HTML_SINGLE_FILE, "html-single-file",
> + "Output analysis results using HTML (not allowing for multi-file
> bugs)",
> + createHTMLSingleFileDiagnosticConsumer)
> +
> +ANALYSIS_DIAGNOSTICS(PLIST, "plist", "Output analysis results using
> Plists",
> + createPlistDiagnosticConsumer)
> +
> +ANALYSIS_DIAGNOSTICS(
> + PLIST_MULTI_FILE, "plist-multi-file",
> + "Output analysis results using Plists (allowing for multi-file bugs)",
> + createPlistMultiFileDiagnosticConsumer)
> +
> +ANALYSIS_DIAGNOSTICS(PLIST_HTML, "plist-html",
> + "Output analysis results using HTML wrapped with
> Plists",
> + createPlistHTMLDiagnosticConsumer)
> +
> +ANALYSIS_DIAGNOSTICS(SARIF, "sarif", "Output analysis results in a SARIF
> file",
> + createSarifDiagnosticConsumer)
> +
> +ANALYSIS_DIAGNOSTICS(TEXT, "text", "Text output of analysis results to
> stderr",
> + createTextPathDiagnosticConsumer)
> +
> +ANALYSIS_DIAGNOSTICS(TEXT_MINIMAL, "text-minimal",
> + "Emits minimal diagnostics to stderr, stating only
> the "
> + "warning message and the associated notes. Usually "
> + "used in addition to other analysis types",
> + createTextMinimalPathDiagnosticConsumer)
> +
> +#undef ANALYSIS_DIAGNOSTICS
>
> diff --git
> a/clang/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h
> b/clang/include/clang/Analysis/PathDiagnosticConsumers.h
> similarity index 89%
> rename from
> clang/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h
> rename to clang/include/clang/Analysis/PathDiagnosticConsumers.h
> index f40f88eb32ff..9f23bea1b4c1 100644
> --- a/clang/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h
> +++ b/clang/include/clang/Analysis/PathDiagnosticConsumers.h
> @@ -18,6 +18,8 @@
> #include <string>
> #include <vector>
>
> +#include "clang/Analysis/PathDiagnostic.h"
> +
> namespace clang {
>
> class AnalyzerOptions;
> @@ -29,14 +31,14 @@ class CrossTranslationUnitContext;
> namespace ento {
>
> class PathDiagnosticConsumer;
> -typedef std::vector<PathDiagnosticConsumer*> PathDiagnosticConsumers;
> +typedef std::vector<PathDiagnosticConsumer *> PathDiagnosticConsumers;
>
> #define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATEFN)
> \
> void CREATEFN(PathDiagnosticConsumerOptions Diagopts,
> \
> PathDiagnosticConsumers &C, const std::string &Prefix,
> \
> const Preprocessor &PP,
> \
> const cross_tu::CrossTranslationUnitContext &CTU);
> -#include "clang/StaticAnalyzer/Core/Analyses.def"
> +#include "clang/Analysis/PathDiagnosticConsumers.def"
>
> } // end 'ento' namespace
> } // end 'clang' namespace
>
> diff --git a/clang/include/clang/StaticAnalyzer/Core/Analyses.def
> b/clang/include/clang/StaticAnalyzer/Core/Analyses.def
> index c4e5f5be6fd7..2e98cbba4c9e 100644
> --- a/clang/include/clang/StaticAnalyzer/Core/Analyses.def
> +++ b/clang/include/clang/StaticAnalyzer/Core/Analyses.def
> @@ -28,42 +28,6 @@ ANALYSIS_CONSTRAINTS(RangeConstraints, "range",
> ANALYSIS_CONSTRAINTS(Z3Constraints, "z3", "Use Z3 contraint solver",
> CreateZ3ConstraintManager)
>
> -#ifndef ANALYSIS_DIAGNOSTICS
> -#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATEFN)
> -#endif
> -
> -ANALYSIS_DIAGNOSTICS(HTML, "html", "Output analysis results using HTML",
> - createHTMLDiagnosticConsumer)
> -
> -ANALYSIS_DIAGNOSTICS(
> - HTML_SINGLE_FILE, "html-single-file",
> - "Output analysis results using HTML (not allowing for multi-file
> bugs)",
> - createHTMLSingleFileDiagnosticConsumer)
> -
> -ANALYSIS_DIAGNOSTICS(PLIST, "plist", "Output analysis results using
> Plists",
> - createPlistDiagnosticConsumer)
> -
> -ANALYSIS_DIAGNOSTICS(
> - PLIST_MULTI_FILE, "plist-multi-file",
> - "Output analysis results using Plists (allowing for multi-file bugs)",
> - createPlistMultiFileDiagnosticConsumer)
> -
> -ANALYSIS_DIAGNOSTICS(PLIST_HTML, "plist-html",
> - "Output analysis results using HTML wrapped with
> Plists",
> - createPlistHTMLDiagnosticConsumer)
> -
> -ANALYSIS_DIAGNOSTICS(SARIF, "sarif", "Output analysis results in a SARIF
> file",
> - createSarifDiagnosticConsumer)
> -
> -ANALYSIS_DIAGNOSTICS(TEXT, "text", "Text output of analysis results to
> stderr",
> - createTextPathDiagnosticConsumer)
> -
> -ANALYSIS_DIAGNOSTICS(TEXT_MINIMAL, "text-minimal",
> - "Emits minimal diagnostics to stderr, stating only
> the "
> - "warning message and the associated notes. Usually "
> - "used in addition to other analysis types",
> - createTextMinimalPathDiagnosticConsumer)
> -
> #ifndef ANALYSIS_PURGE
> #define ANALYSIS_PURGE(NAME, CMDFLAG, DESC)
> #endif
> @@ -91,7 +55,6 @@ ANALYSIS_INLINING_MODE(
>
> #undef ANALYSIS_STORE
> #undef ANALYSIS_CONSTRAINTS
> -#undef ANALYSIS_DIAGNOSTICS
> #undef ANALYSIS_PURGE
> #undef ANALYSIS_INLINING_MODE
> #undef ANALYSIS_IPA
>
> diff --git a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> index e1093772e02c..aa334fed41fb 100644
> --- a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> +++ b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> @@ -58,7 +58,7 @@ NumConstraints
> /// analysis results.
> enum AnalysisDiagClients {
> #define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN) PD_##NAME,
> -#include "clang/StaticAnalyzer/Core/Analyses.def"
> +#include "clang/Analysis/PathDiagnosticConsumers.def"
> PD_NONE,
> NUM_ANALYSIS_DIAG_CLIENTS
> };
>
> diff --git
> a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
> b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
> index c76e9c0326af..7e8b9de3a942 100644
> ---
> a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
> +++
> b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
> @@ -16,10 +16,10 @@
>
> #include "clang/Analysis/AnalysisDeclContext.h"
> #include "clang/Analysis/PathDiagnostic.h"
> +#include "clang/Analysis/PathDiagnosticConsumers.h"
> #include "clang/Lex/Preprocessor.h"
> #include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
> #include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
> -#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h"
>
> namespace clang {
>
>
> diff --git a/clang/include/clang/module.modulemap
> b/clang/include/clang/module.modulemap
> index 332e533f0347..ec396e1532e0 100644
> --- a/clang/include/clang/module.modulemap
> +++ b/clang/include/clang/module.modulemap
> @@ -3,6 +3,7 @@ module Clang_Analysis {
> umbrella "Analysis"
>
> textual header "Analysis/Analyses/ThreadSafetyOps.def"
> + textual header "Analysis/PathDiagnosticConsumers.def"
>
> module * { export * }
>
>
> diff --git a/clang/lib/Analysis/CMakeLists.txt
> b/clang/lib/Analysis/CMakeLists.txt
> index 6cad671a8a4d..a06e68835bc0 100644
> --- a/clang/lib/Analysis/CMakeLists.txt
> +++ b/clang/lib/Analysis/CMakeLists.txt
> @@ -17,14 +17,19 @@ add_clang_library(clangAnalysis
> CodeInjector.cpp
> Dominators.cpp
> ExprMutationAnalyzer.cpp
> + HTMLPathDiagnosticConsumer.cpp
> IssueHash.cpp
> LiveVariables.cpp
> ObjCNoReturn.cpp
> PathDiagnostic.cpp
> + PlistPathDiagnosticConsumer.cpp
> + PlistHTMLPathDiagnosticConsumer.cpp
> PostOrderCFGView.cpp
> ProgramPoint.cpp
> ReachableCode.cpp
> RetainSummaryManager.cpp
> + SarifPathDiagnosticConsumer.cpp
> + TextPathDiagnosticConsumer.cpp
> ThreadSafety.cpp
> ThreadSafetyCommon.cpp
> ThreadSafetyLogical.cpp
> @@ -36,6 +41,8 @@ add_clang_library(clangAnalysis
> clangASTMatchers
> clangBasic
> clangLex
> + clangRewrite
> + clangToolingCore
>
> DEPENDS
> omp_gen
>
> diff --git a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
> b/clang/lib/Analysis/HTMLPathDiagnosticConsumer.cpp
> similarity index 91%
> rename from clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
> rename to clang/lib/Analysis/HTMLPathDiagnosticConsumer.cpp
> index 149459cf986a..de1a96ed283f 100644
> --- a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
> +++ b/clang/lib/Analysis/HTMLPathDiagnosticConsumer.cpp
> @@ -1,4 +1,4 @@
> -//===- HTMLDiagnostics.cpp - HTML Diagnostics for Paths
> -------------------===//
> +//===- HTMLPathDiagnosticConsumer.cpp - HTML Diagnostics for Paths
> --------===//
> //
> // Part of the LLVM Project, under the Apache License v2.0 with LLVM
> Exceptions.
> // See https://llvm.org/LICENSE.txt for license information.
> @@ -6,12 +6,13 @@
> //
>
> //===----------------------------------------------------------------------===//
> //
> -// This file defines the HTMLDiagnostics object.
> +// This file defines the HTMLPathDiagnosticConsumer object.
> //
>
> //===----------------------------------------------------------------------===//
>
> #include "clang/Analysis/IssueHash.h"
> #include "clang/Analysis/PathDiagnostic.h"
> +#include "clang/Analysis/PathDiagnosticConsumers.h"
> #include "clang/AST/Decl.h"
> #include "clang/AST/DeclBase.h"
> #include "clang/AST/Stmt.h"
> @@ -24,7 +25,6 @@
> #include "clang/Lex/Token.h"
> #include "clang/Rewrite/Core/HTMLRewrite.h"
> #include "clang/Rewrite/Core/Rewriter.h"
> -#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h"
> #include "llvm/ADT/ArrayRef.h"
> #include "llvm/ADT/SmallString.h"
> #include "llvm/ADT/StringRef.h"
> @@ -56,7 +56,7 @@ using namespace ento;
>
> namespace {
>
> -class HTMLDiagnostics : public PathDiagnosticConsumer {
> +class HTMLPathDiagnosticConsumer : public PathDiagnosticConsumer {
> PathDiagnosticConsumerOptions DiagOpts;
> std::string Directory;
> bool createdDir = false;
> @@ -65,20 +65,18 @@ class HTMLDiagnostics : public PathDiagnosticConsumer {
> const bool SupportsCrossFileDiagnostics;
>
> public:
> - HTMLDiagnostics(PathDiagnosticConsumerOptions DiagOpts,
> - const std::string &OutputDir, const Preprocessor &pp,
> - bool supportsMultipleFiles)
> - : DiagOpts(std::move(DiagOpts)), Directory(OutputDir), PP(pp),
> - SupportsCrossFileDiagnostics(supportsMultipleFiles) {}
> + HTMLPathDiagnosticConsumer(PathDiagnosticConsumerOptions DiagOpts,
> + const std::string &OutputDir,
> + const Preprocessor &PP, bool
> SupportsMultipleFiles)
> + : DiagOpts(std::move(DiagOpts)), Directory(OutputDir), PP(PP),
> + SupportsCrossFileDiagnostics(SupportsMultipleFiles) {}
>
> - ~HTMLDiagnostics() override { FlushDiagnostics(nullptr); }
> + ~HTMLPathDiagnosticConsumer() override { FlushDiagnostics(nullptr); }
>
> void FlushDiagnosticsImpl(std::vector<const PathDiagnostic *> &Diags,
> FilesMade *filesMade) override;
>
> - StringRef getName() const override {
> - return "HTMLDiagnostics";
> - }
> + StringRef getName() const override { return
> "HTMLPathDiagnosticConsumer"; }
>
> bool supportsCrossFileDiagnostics() const override {
> return SupportsCrossFileDiagnostics;
> @@ -148,7 +146,8 @@ void ento::createHTMLDiagnosticConsumer(
> if (OutputDir.empty())
> return;
>
> - C.push_back(new HTMLDiagnostics(std::move(DiagOpts), OutputDir, PP,
> true));
> + C.push_back(
> + new HTMLPathDiagnosticConsumer(std::move(DiagOpts), OutputDir, PP,
> true));
> }
>
> void ento::createHTMLSingleFileDiagnosticConsumer(
> @@ -161,34 +160,22 @@ void ento::createHTMLSingleFileDiagnosticConsumer(
> if (OutputDir.empty())
> return;
>
> - C.push_back(new HTMLDiagnostics(std::move(DiagOpts), OutputDir, PP,
> false));
> -}
> -
> -void ento::createPlistHTMLDiagnosticConsumer(
> - PathDiagnosticConsumerOptions DiagOpts, PathDiagnosticConsumers &C,
> - const std::string &prefix, const Preprocessor &PP,
> - const cross_tu::CrossTranslationUnitContext &CTU) {
> - createHTMLDiagnosticConsumer(
> - DiagOpts, C, std::string(llvm::sys::path::parent_path(prefix)), PP,
> - CTU);
> - createPlistMultiFileDiagnosticConsumer(DiagOpts, C, prefix, PP, CTU);
> - createTextMinimalPathDiagnosticConsumer(std::move(DiagOpts), C, prefix,
> PP,
> - CTU);
> + C.push_back(new HTMLPathDiagnosticConsumer(std::move(DiagOpts),
> OutputDir, PP,
> + false));
> }
>
>
> //===----------------------------------------------------------------------===//
> // Report processing.
>
> //===----------------------------------------------------------------------===//
>
> -void HTMLDiagnostics::FlushDiagnosticsImpl(
> - std::vector<const PathDiagnostic *> &Diags,
> - FilesMade *filesMade) {
> +void HTMLPathDiagnosticConsumer::FlushDiagnosticsImpl(
> + std::vector<const PathDiagnostic *> &Diags, FilesMade *filesMade) {
> for (const auto Diag : Diags)
> ReportDiag(*Diag, filesMade);
> }
>
> -void HTMLDiagnostics::ReportDiag(const PathDiagnostic& D,
> - FilesMade *filesMade) {
> +void HTMLPathDiagnosticConsumer::ReportDiag(const PathDiagnostic &D,
> + FilesMade *filesMade) {
> // Create the HTML directory if it is missing.
> if (!createdDir) {
> createdDir = true;
> @@ -296,8 +283,11 @@ void HTMLDiagnostics::ReportDiag(const
> PathDiagnostic& D,
> os << report;
> }
>
> -std::string HTMLDiagnostics::GenerateHTML(const PathDiagnostic& D,
> Rewriter &R,
> - const SourceManager& SMgr, const PathPieces& path, const char
> *declName) {
> +std::string HTMLPathDiagnosticConsumer::GenerateHTML(const PathDiagnostic
> &D,
> + Rewriter &R,
> + const SourceManager
> &SMgr,
> + const PathPieces
> &path,
> + const char
> *declName) {
> // Rewrite source files as HTML for every new file the path crosses
> std::vector<FileID> FileIDs;
> for (auto I : path) {
> @@ -369,9 +359,8 @@ std::string HTMLDiagnostics::GenerateHTML(const
> PathDiagnostic& D, Rewriter &R,
> return os.str();
> }
>
> -void HTMLDiagnostics::dumpCoverageData(
> - const PathDiagnostic &D,
> - const PathPieces &path,
> +void HTMLPathDiagnosticConsumer::dumpCoverageData(
> + const PathDiagnostic &D, const PathPieces &path,
> llvm::raw_string_ostream &os) {
>
> const FilesToLineNumsMap &ExecutedLines = D.getExecutedLines();
> @@ -395,8 +384,8 @@ void HTMLDiagnostics::dumpCoverageData(
> os << "};";
> }
>
> -std::string HTMLDiagnostics::showRelevantLinesJavascript(
> - const PathDiagnostic &D, const PathPieces &path) {
> +std::string HTMLPathDiagnosticConsumer::showRelevantLinesJavascript(
> + const PathDiagnostic &D, const PathPieces &path) {
> std::string s;
> llvm::raw_string_ostream os(s);
> os << "<script type='text/javascript'>\n";
> @@ -460,9 +449,10 @@ document.addEventListener("DOMContentLoaded",
> function() {
> return os.str();
> }
>
> -void HTMLDiagnostics::FinalizeHTML(const PathDiagnostic& D, Rewriter &R,
> - const SourceManager& SMgr, const PathPieces& path, FileID FID,
> - const FileEntry *Entry, const char *declName) {
> +void HTMLPathDiagnosticConsumer::FinalizeHTML(
> + const PathDiagnostic &D, Rewriter &R, const SourceManager &SMgr,
> + const PathPieces &path, FileID FID, const FileEntry *Entry,
> + const char *declName) {
> // This is a cludge; basically we want to append either the full
> // working directory if we have no directory information. This is
> // a work in progress.
> @@ -607,7 +597,7 @@ void HTMLDiagnostics::FinalizeHTML(const
> PathDiagnostic& D, Rewriter &R,
> html::AddHeaderFooterInternalBuiltinCSS(R, FID, Entry->getName());
> }
>
> -StringRef HTMLDiagnostics::showHelpJavascript() {
> +StringRef HTMLPathDiagnosticConsumer::showHelpJavascript() {
> return R"<<<(
> <script type='text/javascript'>
>
> @@ -690,8 +680,9 @@ static void HandlePopUpPieceEndTag(Rewriter &R,
> }
> }
>
> -void HTMLDiagnostics::RewriteFile(Rewriter &R,
> - const PathPieces& path, FileID FID) {
> +void HTMLPathDiagnosticConsumer::RewriteFile(Rewriter &R,
> + const PathPieces &path,
> + FileID FID) {
> // Process the path.
> // Maintain the counts of extra note pieces separately.
> unsigned TotalPieces = path.size();
> @@ -769,10 +760,9 @@ void HTMLDiagnostics::RewriteFile(Rewriter &R,
> html::HighlightMacros(R, FID, PP);
> }
>
> -void HTMLDiagnostics::HandlePiece(Rewriter &R, FileID BugFileID,
> - const PathDiagnosticPiece &P,
> - const std::vector<SourceRange>
> &PopUpRanges,
> - unsigned num, unsigned max) {
> +void HTMLPathDiagnosticConsumer::HandlePiece(
> + Rewriter &R, FileID BugFileID, const PathDiagnosticPiece &P,
> + const std::vector<SourceRange> &PopUpRanges, unsigned num, unsigned
> max) {
> // For now, just draw a box above the line in question, and emit the
> // warning.
> FullSourceLoc Pos = P.getLocation().asLocation();
> @@ -1004,9 +994,8 @@ static void EmitAlphaCounter(raw_ostream &os,
> unsigned n) {
> os << char('a' + x);
> }
>
> -unsigned HTMLDiagnostics::ProcessMacroPiece(raw_ostream &os,
> - const
> PathDiagnosticMacroPiece& P,
> - unsigned num) {
> +unsigned HTMLPathDiagnosticConsumer::ProcessMacroPiece(
> + raw_ostream &os, const PathDiagnosticMacroPiece &P, unsigned num) {
> for (const auto &subPiece : P.subPieces) {
> if (const auto *MP =
> dyn_cast<PathDiagnosticMacroPiece>(subPiece.get())) {
> num = ProcessMacroPiece(os, *MP, num);
> @@ -1028,10 +1017,10 @@ unsigned
> HTMLDiagnostics::ProcessMacroPiece(raw_ostream &os,
> return num;
> }
>
> -void HTMLDiagnostics::HighlightRange(Rewriter& R, FileID BugFileID,
> - SourceRange Range,
> - const char *HighlightStart,
> - const char *HighlightEnd) {
> +void HTMLPathDiagnosticConsumer::HighlightRange(Rewriter &R, FileID
> BugFileID,
> + SourceRange Range,
> + const char
> *HighlightStart,
> + const char *HighlightEnd)
> {
> SourceManager &SM = R.getSourceMgr();
> const LangOptions &LangOpts = R.getLangOpts();
>
> @@ -1066,7 +1055,7 @@ void HTMLDiagnostics::HighlightRange(Rewriter& R,
> FileID BugFileID,
> html::HighlightRange(R, InstantiationStart, E, HighlightStart,
> HighlightEnd);
> }
>
> -StringRef HTMLDiagnostics::generateKeyboardNavigationJavascript() {
> +StringRef
> HTMLPathDiagnosticConsumer::generateKeyboardNavigationJavascript() {
> return R"<<<(
> <script type='text/javascript'>
> var digitMatcher = new RegExp("[0-9]+");
>
> diff --git a/clang/lib/Analysis/PlistHTMLPathDiagnosticConsumer.cpp
> b/clang/lib/Analysis/PlistHTMLPathDiagnosticConsumer.cpp
> new file mode 100644
> index 000000000000..60be1077f9de
> --- /dev/null
> +++ b/clang/lib/Analysis/PlistHTMLPathDiagnosticConsumer.cpp
> @@ -0,0 +1,31 @@
> +//===--- PlistHTMLDiagnostics.cpp - The Plist-HTML Diagnostic Consumer.
> ---===//
> +//
> +// Part of the LLVM Project, under the Apache License v2.0 with LLVM
> Exceptions.
> +// See https://llvm.org/LICENSE.txt for license information.
> +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
> +//
>
> +//===----------------------------------------------------------------------===//
> +//
> +// This diagnostic consumer produces both the HTML output and the Plist
> output.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#include "clang/Analysis/PathDiagnostic.h"
> +#include "clang/Analysis/PathDiagnosticConsumers.h"
> +#include "clang/Basic/SourceManager.h"
> +#include "clang/CrossTU/CrossTranslationUnit.h"
> +#include "clang/Lex/Preprocessor.h"
> +
> +using namespace clang;
> +using namespace ento;
> +
> +void ento::createPlistHTMLDiagnosticConsumer(
> + PathDiagnosticConsumerOptions DiagOpts, PathDiagnosticConsumers &C,
> + const std::string &Prefix, const Preprocessor &PP,
> + const cross_tu::CrossTranslationUnitContext &CTU) {
> + createHTMLDiagnosticConsumer(
> + DiagOpts, C, std::string(llvm::sys::path::parent_path(Prefix)), PP,
> CTU);
> + createPlistMultiFileDiagnosticConsumer(DiagOpts, C, Prefix, PP, CTU);
> + createTextMinimalPathDiagnosticConsumer(std::move(DiagOpts), C, Prefix,
> PP,
> + CTU);
> +}
>
> diff --git a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
> b/clang/lib/Analysis/PlistPathDiagnosticConsumer.cpp
> similarity index 97%
> rename from clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
> rename to clang/lib/Analysis/PlistPathDiagnosticConsumer.cpp
> index 35e320c7755f..4863b645254d 100644
> --- a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
> +++ b/clang/lib/Analysis/PlistPathDiagnosticConsumer.cpp
> @@ -1,4 +1,4 @@
> -//===--- PlistDiagnostics.cpp - Plist Diagnostics for Paths -----*- C++
> -*-===//
> +//===--- PlistPathDiagnosticConsumer.cpp - Plist Diagnostics ----*- C++
> -*-===//
> //
> // Part of the LLVM Project, under the Apache License v2.0 with LLVM
> Exceptions.
> // See https://llvm.org/LICENSE.txt for license information.
> @@ -6,12 +6,13 @@
> //
>
> //===----------------------------------------------------------------------===//
> //
> -// This file defines the PlistDiagnostics object.
> +// This file defines the PlistPathDiagnosticConsumer object.
> //
>
> //===----------------------------------------------------------------------===//
>
> #include "clang/Analysis/IssueHash.h"
> #include "clang/Analysis/PathDiagnostic.h"
> +#include "clang/Analysis/PathDiagnosticConsumers.h"
> #include "clang/Basic/FileManager.h"
> #include "clang/Basic/PlistSupport.h"
> #include "clang/Basic/SourceManager.h"
> @@ -21,7 +22,6 @@
> #include "clang/Lex/Preprocessor.h"
> #include "clang/Lex/TokenConcatenation.h"
> #include "clang/Rewrite/Core/HTMLRewrite.h"
> -#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h"
> #include "llvm/ADT/SmallPtrSet.h"
> #include "llvm/ADT/SmallVector.h"
> #include "llvm/ADT/Statistic.h"
> @@ -38,7 +38,7 @@ using namespace markup;
>
> //===----------------------------------------------------------------------===//
>
> namespace {
> - class PlistDiagnostics : public PathDiagnosticConsumer {
> + class PlistPathDiagnosticConsumer : public PathDiagnosticConsumer {
> PathDiagnosticConsumerOptions DiagOpts;
> const std::string OutputFile;
> const Preprocessor &PP;
> @@ -49,18 +49,18 @@ namespace {
> const PathPieces &Path);
>
> public:
> - PlistDiagnostics(PathDiagnosticConsumerOptions DiagOpts,
> + PlistPathDiagnosticConsumer(PathDiagnosticConsumerOptions DiagOpts,
> const std::string &OutputFile, const Preprocessor
> &PP,
> const cross_tu::CrossTranslationUnitContext &CTU,
> bool supportsMultipleFiles);
>
> - ~PlistDiagnostics() override {}
> + ~PlistPathDiagnosticConsumer() override {}
>
> void FlushDiagnosticsImpl(std::vector<const PathDiagnostic *> &Diags,
> FilesMade *filesMade) override;
>
> StringRef getName() const override {
> - return "PlistDiagnostics";
> + return "PlistPathDiagnosticConsumer";
> }
>
> PathGenerationScheme getGenerationScheme() const override {
> @@ -516,10 +516,10 @@ static void printCoverage(const PathDiagnostic *D,
> }
>
>
> //===----------------------------------------------------------------------===//
> -// Methods of PlistDiagnostics.
> +// Methods of PlistPathDiagnosticConsumer.
>
> //===----------------------------------------------------------------------===//
>
> -PlistDiagnostics::PlistDiagnostics(
> +PlistPathDiagnosticConsumer::PlistPathDiagnosticConsumer(
> PathDiagnosticConsumerOptions DiagOpts, const std::string &output,
> const Preprocessor &PP, const cross_tu::CrossTranslationUnitContext
> &CTU,
> bool supportsMultipleFiles)
> @@ -538,8 +538,8 @@ void ento::createPlistDiagnosticConsumer(
> if (OutputFile.empty())
> return;
>
> - C.push_back(new PlistDiagnostics(DiagOpts, OutputFile, PP, CTU,
> - /*supportsMultipleFiles=*/false));
> + C.push_back(new PlistPathDiagnosticConsumer(DiagOpts, OutputFile, PP,
> CTU,
> +
> /*supportsMultipleFiles=*/false));
> createTextMinimalPathDiagnosticConsumer(std::move(DiagOpts), C,
> OutputFile,
> PP, CTU);
> }
> @@ -553,14 +553,15 @@ void ento::createPlistMultiFileDiagnosticConsumer(
> if (OutputFile.empty())
> return;
>
> - C.push_back(new PlistDiagnostics(DiagOpts, OutputFile, PP, CTU,
> - /*supportsMultipleFiles=*/true));
> + C.push_back(new PlistPathDiagnosticConsumer(DiagOpts, OutputFile, PP,
> CTU,
> +
> /*supportsMultipleFiles=*/true));
> createTextMinimalPathDiagnosticConsumer(std::move(DiagOpts), C,
> OutputFile,
> PP, CTU);
> }
>
> -void PlistDiagnostics::printBugPath(llvm::raw_ostream &o, const FIDMap
> &FM,
> - const PathPieces &Path) {
> +void PlistPathDiagnosticConsumer::printBugPath(llvm::raw_ostream &o,
> + const FIDMap &FM,
> + const PathPieces &Path) {
> PlistPrinter Printer(FM, PP, CTU);
> assert(std::is_partitioned(Path.begin(), Path.end(),
> [](const PathDiagnosticPieceRef &E) {
> @@ -603,9 +604,8 @@ void PlistDiagnostics::printBugPath(llvm::raw_ostream
> &o, const FIDMap &FM,
> o << " </array>\n";
> }
>
> -void PlistDiagnostics::FlushDiagnosticsImpl(
> - std::vector<const PathDiagnostic *>
> &Diags,
> - FilesMade *filesMade) {
> +void PlistPathDiagnosticConsumer::FlushDiagnosticsImpl(
> + std::vector<const PathDiagnostic *> &Diags, FilesMade *filesMade) {
> // Build up a set of FIDs that we use by scanning the locations and
> // ranges of the diagnostics.
> FIDMap FM;
>
> diff --git a/clang/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp
> b/clang/lib/Analysis/SarifPathDiagnosticConsumer.cpp
> similarity index 93%
> rename from clang/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp
> rename to clang/lib/Analysis/SarifPathDiagnosticConsumer.cpp
> index f93d04ccd61a..9d85aad5d258 100644
> --- a/clang/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp
> +++ b/clang/lib/Analysis/SarifPathDiagnosticConsumer.cpp
> @@ -1,4 +1,4 @@
> -//===--- SarifDiagnostics.cpp - Sarif Diagnostics for Paths -----*- C++
> -*-===//
> +//===--- SarifPathDiagnosticConsumer.cpp - Sarif Diagnostics ---*- C++
> -*-===//
> //
> // Part of the LLVM Project, under the Apache License v2.0 with LLVM
> Exceptions.
> // See https://llvm.org/LICENSE.txt for license information.
> @@ -6,15 +6,15 @@
> //
>
> //===----------------------------------------------------------------------===//
> //
> -// This file defines the SarifDiagnostics object.
> +// This file defines the SarifPathDiagnosticConsumer object.
> //
>
> //===----------------------------------------------------------------------===//
>
> #include "clang/Analysis/PathDiagnostic.h"
> +#include "clang/Analysis/PathDiagnosticConsumers.h"
> #include "clang/Basic/FileManager.h"
> #include "clang/Basic/Version.h"
> #include "clang/Lex/Preprocessor.h"
> -#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h"
> #include "llvm/ADT/STLExtras.h"
> #include "llvm/ADT/StringMap.h"
> #include "llvm/Support/ConvertUTF.h"
> @@ -26,19 +26,19 @@ using namespace clang;
> using namespace ento;
>
> namespace {
> -class SarifDiagnostics : public PathDiagnosticConsumer {
> +class SarifPathDiagnosticConsumer : public PathDiagnosticConsumer {
> std::string OutputFile;
> const LangOptions &LO;
>
> public:
> - SarifDiagnostics(const std::string &Output, const LangOptions &LO)
> + SarifPathDiagnosticConsumer(const std::string &Output, const
> LangOptions &LO)
> : OutputFile(Output), LO(LO) {}
> - ~SarifDiagnostics() override = default;
> + ~SarifPathDiagnosticConsumer() override = default;
>
> void FlushDiagnosticsImpl(std::vector<const PathDiagnostic *> &Diags,
> FilesMade *FM) override;
>
> - StringRef getName() const override { return "SarifDiagnostics"; }
> + StringRef getName() const override { return
> "SarifPathDiagnosticConsumer"; }
> PathGenerationScheme getGenerationScheme() const override { return
> Minimal; }
> bool supportsLogicalOpControlFlow() const override { return true; }
> bool supportsCrossFileDiagnostics() const override { return true; }
> @@ -54,7 +54,7 @@ void ento::createSarifDiagnosticConsumer(
> if (Output.empty())
> return;
>
> - C.push_back(new SarifDiagnostics(Output, PP.getLangOpts()));
> + C.push_back(new SarifPathDiagnosticConsumer(Output, PP.getLangOpts()));
> createTextMinimalPathDiagnosticConsumer(std::move(DiagOpts), C, Output,
> PP,
> CTU);
> }
> @@ -299,6 +299,9 @@ static json::Object createResult(const LangOptions &LO,
> }
>
> static StringRef getRuleDescription(StringRef CheckName) {
> + // FIXME: This is a layering violation; it only works for the particular
> + // use-case of clang static analyzer. This info should be provided
> + // as part of PathDiagnostic itself.
> return llvm::StringSwitch<StringRef>(CheckName)
> #define GET_CHECKERS
> #define CHECKER(FULLNAME, CLASS, HELPTEXT, DOC_URI, IS_HIDDEN)
> \
> @@ -310,6 +313,9 @@ static StringRef getRuleDescription(StringRef
> CheckName) {
> }
>
> static StringRef getRuleHelpURIStr(StringRef CheckName) {
> + // FIXME: This is a layering violation; it only works for the particular
> + // use-case of clang static analyzer. This info should be provided
> + // as part of PathDiagnostic itself.
> return llvm::StringSwitch<StringRef>(CheckName)
> #define GET_CHECKERS
> #define CHECKER(FULLNAME, CLASS, HELPTEXT, DOC_URI, IS_HIDDEN)
> \
> @@ -377,7 +383,7 @@ static json::Object createRun(const LangOptions &LO,
> {"columnKind", "unicodeCodePoints"}};
> }
>
> -void SarifDiagnostics::FlushDiagnosticsImpl(
> +void SarifPathDiagnosticConsumer::FlushDiagnosticsImpl(
> std::vector<const PathDiagnostic *> &Diags, FilesMade *) {
> // We currently overwrite the file if it already exists. However, it
> may be
> // useful to add a feature someday that allows the user to append a run
> to an
>
> diff --git a/clang/lib/StaticAnalyzer/Core/TextDiagnostics.cpp
> b/clang/lib/Analysis/TextPathDiagnosticConsumer.cpp
> similarity index 83%
> rename from clang/lib/StaticAnalyzer/Core/TextDiagnostics.cpp
> rename to clang/lib/Analysis/TextPathDiagnosticConsumer.cpp
> index ae2bad7ee77c..21e89548636e 100644
> --- a/clang/lib/StaticAnalyzer/Core/TextDiagnostics.cpp
> +++ b/clang/lib/Analysis/TextPathDiagnosticConsumer.cpp
> @@ -1,4 +1,4 @@
> -//===--- TextDiagnostics.cpp - Text Diagnostics for Paths -------*- C++
> -*-===//
> +//===--- TextPathDiagnosticConsumer.cpp - Text Diagnostics ------*- C++
> -*-===//
> //
> // Part of the LLVM Project, under the Apache License v2.0 with LLVM
> Exceptions.
> // See https://llvm.org/LICENSE.txt for license information.
> @@ -6,19 +6,18 @@
> //
>
> //===----------------------------------------------------------------------===//
> //
> -// This file defines the TextDiagnostics object.
> +// This file defines the TextPathDiagnosticConsumer object.
> //
>
> //===----------------------------------------------------------------------===//
>
> #include "clang/Analysis/PathDiagnostic.h"
> +#include "clang/Analysis/PathDiagnosticConsumers.h"
> #include "clang/Basic/SourceManager.h"
> #include "clang/Basic/Version.h"
> #include "clang/CrossTU/CrossTranslationUnit.h"
> #include "clang/Frontend/ASTUnit.h"
> #include "clang/Lex/Preprocessor.h"
> #include "clang/Rewrite/Core/Rewriter.h"
> -#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
> -#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h"
> #include "clang/Tooling/Core/Replacement.h"
> #include "clang/Tooling/Tooling.h"
> #include "llvm/ADT/SmallPtrSet.h"
> @@ -33,21 +32,21 @@ namespace {
> /// Emitsd minimal diagnostics (report message + notes) for the 'none'
> output
> /// type to the standard error, or to to compliment many others. Emits
> detailed
> /// diagnostics in textual format for the 'text' output type.
> -class TextDiagnostics : public PathDiagnosticConsumer {
> +class TextPathDiagnosticConsumer : public PathDiagnosticConsumer {
> PathDiagnosticConsumerOptions DiagOpts;
> DiagnosticsEngine &DiagEng;
> const LangOptions &LO;
> bool ShouldDisplayPathNotes;
>
> public:
> - TextDiagnostics(PathDiagnosticConsumerOptions DiagOpts,
> - DiagnosticsEngine &DiagEng, const LangOptions &LO,
> - bool ShouldDisplayPathNotes)
> + TextPathDiagnosticConsumer(PathDiagnosticConsumerOptions DiagOpts,
> + DiagnosticsEngine &DiagEng, const
> LangOptions &LO,
> + bool ShouldDisplayPathNotes)
> : DiagOpts(std::move(DiagOpts)), DiagEng(DiagEng), LO(LO),
> ShouldDisplayPathNotes(ShouldDisplayPathNotes) {}
> - ~TextDiagnostics() override {}
> + ~TextPathDiagnosticConsumer() override {}
>
> - StringRef getName() const override { return "TextDiagnostics"; }
> + StringRef getName() const override { return
> "TextPathDiagnosticConsumer"; }
>
> bool supportsLogicalOpControlFlow() const override { return true; }
> bool supportsCrossFileDiagnostics() const override { return true; }
> @@ -140,16 +139,16 @@ void ento::createTextPathDiagnosticConsumer(
> PathDiagnosticConsumerOptions DiagOpts, PathDiagnosticConsumers &C,
> const std::string &Prefix, const clang::Preprocessor &PP,
> const cross_tu::CrossTranslationUnitContext &CTU) {
> - C.emplace_back(new TextDiagnostics(std::move(DiagOpts),
> PP.getDiagnostics(),
> - PP.getLangOpts(),
> - /*ShouldDisplayPathNotes=*/true));
> + C.emplace_back(new TextPathDiagnosticConsumer(
> + std::move(DiagOpts), PP.getDiagnostics(), PP.getLangOpts(),
> + /*ShouldDisplayPathNotes=*/true));
> }
>
> void ento::createTextMinimalPathDiagnosticConsumer(
> PathDiagnosticConsumerOptions DiagOpts, PathDiagnosticConsumers &C,
> const std::string &Prefix, const clang::Preprocessor &PP,
> const cross_tu::CrossTranslationUnitContext &CTU) {
> - C.emplace_back(new TextDiagnostics(std::move(DiagOpts),
> PP.getDiagnostics(),
> - PP.getLangOpts(),
> - /*ShouldDisplayPathNotes=*/false));
> + C.emplace_back(new TextPathDiagnosticConsumer(
> + std::move(DiagOpts), PP.getDiagnostics(), PP.getLangOpts(),
> + /*ShouldDisplayPathNotes=*/false));
> }
>
> diff --git a/clang/lib/Frontend/CompilerInvocation.cpp
> b/clang/lib/Frontend/CompilerInvocation.cpp
> index be5a64464bf1..6e3bf603b190 100644
> --- a/clang/lib/Frontend/CompilerInvocation.cpp
> +++ b/clang/lib/Frontend/CompilerInvocation.cpp
> @@ -444,7 +444,7 @@ static bool ParseAnalyzerArgs(AnalyzerOptions &Opts,
> ArgList &Args,
> AnalysisDiagClients Value =
> llvm::StringSwitch<AnalysisDiagClients>(Name)
> #define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN) \
> .Case(CMDFLAG, PD_##NAME)
> -#include "clang/StaticAnalyzer/Core/Analyses.def"
> +#include "clang/Analysis/PathDiagnosticConsumers.def"
> .Default(NUM_ANALYSIS_DIAG_CLIENTS);
> if (Value == NUM_ANALYSIS_DIAG_CLIENTS) {
> Diags.Report(diag::err_drv_invalid_value)
>
> diff --git a/clang/lib/StaticAnalyzer/Core/CMakeLists.txt
> b/clang/lib/StaticAnalyzer/Core/CMakeLists.txt
> index d947d415ad6e..b1f527ed75d5 100644
> --- a/clang/lib/StaticAnalyzer/Core/CMakeLists.txt
> +++ b/clang/lib/StaticAnalyzer/Core/CMakeLists.txt
> @@ -30,16 +30,13 @@ add_clang_library(clangStaticAnalyzerCore
> ExprEngineCallAndReturn.cpp
> ExprEngineObjC.cpp
> FunctionSummary.cpp
> - HTMLDiagnostics.cpp
> LoopUnrolling.cpp
> LoopWidening.cpp
> MemRegion.cpp
> - PlistDiagnostics.cpp
> ProgramState.cpp
> RangeConstraintManager.cpp
> RangedConstraintManager.cpp
> RegionStore.cpp
> - SarifDiagnostics.cpp
> SimpleConstraintManager.cpp
> SimpleSValBuilder.cpp
> SMTConstraintManager.cpp
> @@ -47,7 +44,6 @@ add_clang_library(clangStaticAnalyzerCore
> SValBuilder.cpp
> SVals.cpp
> SymbolManager.cpp
> - TextDiagnostics.cpp
> WorkList.cpp
>
> LINK_LIBS
>
> diff --git a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
> b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
> index f2a19b2ccc90..1e94950ca097 100644
> --- a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
> +++ b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
> @@ -21,6 +21,7 @@
> #include "clang/Analysis/CallGraph.h"
> #include "clang/Analysis/CodeInjector.h"
> #include "clang/Analysis/PathDiagnostic.h"
> +#include "clang/Analysis/PathDiagnosticConsumers.h"
> #include "clang/Basic/SourceManager.h"
> #include "clang/CrossTU/CrossTranslationUnit.h"
> #include "clang/Frontend/CompilerInstance.h"
> @@ -30,7 +31,6 @@
> #include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
> #include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
> #include "clang/StaticAnalyzer/Core/CheckerManager.h"
> -#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h"
> #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
> #include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
> #include "llvm/ADT/PostOrderIterator.h"
> @@ -152,7 +152,7 @@ class AnalysisConsumer : public AnalysisASTConsumer,
> case PD_##NAME:
> \
> CREATEFN(Opts->getDiagOpts(), PathConsumers, OutDir, PP, CTU);
> \
> break;
> -#include "clang/StaticAnalyzer/Core/Analyses.def"
> +#include "clang/Analysis/PathDiagnosticConsumers.def"
> default:
> llvm_unreachable("Unknown analyzer output type!");
> }
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201211/a7eddce8/attachment-0001.html>
More information about the cfe-commits
mailing list