From: Daniel Dunbar Date: Thu, 5 Nov 2009 02:41:58 +0000 (+0000) Subject: Convert CreateAnalysisConsumer and friends to just take a const Preprocessor&, and... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=efceabd2380f49306bc0229583458e93b062094b;p=clang Convert CreateAnalysisConsumer and friends to just take a const Preprocessor&, and simplify. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86112 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Frontend/AnalysisConsumer.h b/include/clang/Frontend/AnalysisConsumer.h index 3c676ce1de..34054a7aa0 100644 --- a/include/clang/Frontend/AnalysisConsumer.h +++ b/include/clang/Frontend/AnalysisConsumer.h @@ -68,8 +68,7 @@ struct AnalyzerOptions { /// CreateAnalysisConsumer - Creates an ASTConsumer to run various code /// analysis passes. (The set of analyses run is controlled by command-line /// options.) -ASTConsumer* CreateAnalysisConsumer(Diagnostic &diags, Preprocessor *pp, - const LangOptions &lopts, +ASTConsumer* CreateAnalysisConsumer(const Preprocessor &pp, const std::string &output, const AnalyzerOptions& Opts); diff --git a/include/clang/Frontend/PathDiagnosticClients.h b/include/clang/Frontend/PathDiagnosticClients.h index 11c660c3dc..98831ba37f 100644 --- a/include/clang/Frontend/PathDiagnosticClients.h +++ b/include/clang/Frontend/PathDiagnosticClients.h @@ -24,10 +24,10 @@ class PathDiagnosticClient; class Preprocessor; PathDiagnosticClient* -CreateHTMLDiagnosticClient(const std::string& prefix, Preprocessor* PP = 0); +CreateHTMLDiagnosticClient(const std::string& prefix, const Preprocessor &PP); PathDiagnosticClient* -CreatePlistDiagnosticClient(const std::string& prefix, Preprocessor* PP, +CreatePlistDiagnosticClient(const std::string& prefix, const Preprocessor &PP, PathDiagnosticClient *SubPD = 0); } // end clang namespace diff --git a/lib/Frontend/AnalysisConsumer.cpp b/lib/Frontend/AnalysisConsumer.cpp index 64a6926da3..d2831fae56 100644 --- a/lib/Frontend/AnalysisConsumer.cpp +++ b/lib/Frontend/AnalysisConsumer.cpp @@ -12,23 +12,24 @@ //===----------------------------------------------------------------------===// #include "clang/Frontend/AnalysisConsumer.h" -#include "clang/Frontend/PathDiagnosticClients.h" -#include "clang/Frontend/ManagerRegistry.h" #include "clang/AST/ASTConsumer.h" #include "clang/AST/Decl.h" #include "clang/AST/DeclObjC.h" -#include "clang/Analysis/CFG.h" +#include "clang/AST/ParentMap.h" +#include "clang/Analysis/Analyses/LiveVariables.h" #include "clang/Analysis/Analyses/LiveVariables.h" +#include "clang/Analysis/CFG.h" +#include "clang/Analysis/LocalCheckers.h" #include "clang/Analysis/PathDiagnostic.h" -#include "clang/Basic/SourceManager.h" -#include "clang/Basic/FileManager.h" -#include "clang/AST/ParentMap.h" #include "clang/Analysis/PathSensitive/AnalysisManager.h" #include "clang/Analysis/PathSensitive/BugReporter.h" -#include "clang/Analysis/Analyses/LiveVariables.h" -#include "clang/Analysis/LocalCheckers.h" -#include "clang/Analysis/PathSensitive/GRTransferFuncs.h" #include "clang/Analysis/PathSensitive/GRExprEngine.h" +#include "clang/Analysis/PathSensitive/GRTransferFuncs.h" +#include "clang/Basic/FileManager.h" +#include "clang/Basic/SourceManager.h" +#include "clang/Frontend/ManagerRegistry.h" +#include "clang/Frontend/PathDiagnosticClients.h" +#include "clang/Lex/Preprocessor.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/raw_ostream.h" #include "llvm/System/Path.h" @@ -52,7 +53,8 @@ namespace { //===----------------------------------------------------------------------===// static PathDiagnosticClient* -CreatePlistHTMLDiagnosticClient(const std::string& prefix, Preprocessor* PP) { +CreatePlistHTMLDiagnosticClient(const std::string& prefix, + const Preprocessor &PP) { llvm::sys::Path F(prefix); PathDiagnosticClient *PD = CreateHTMLDiagnosticClient(F.getDirname(), PP); return CreatePlistDiagnosticClient(prefix, PP, PD); @@ -72,10 +74,8 @@ namespace { Actions TranslationUnitActions; public: - const LangOptions& LOpts; - Diagnostic &Diags; ASTContext* Ctx; - Preprocessor* PP; + const Preprocessor &PP; const std::string OutDir; AnalyzerOptions Opts; @@ -88,11 +88,10 @@ namespace { llvm::OwningPtr Mgr; - AnalysisConsumer(Diagnostic &diags, Preprocessor* pp, - const LangOptions& lopts, + AnalysisConsumer(const Preprocessor& pp, const std::string& outdir, const AnalyzerOptions& opts) - : LOpts(lopts), Diags(diags), Ctx(0), PP(pp), OutDir(outdir), + : Ctx(0), PP(pp), OutDir(outdir), Opts(opts), PD(0) { DigestAnalyzerOptions(); } @@ -150,7 +149,8 @@ namespace { virtual void Initialize(ASTContext &Context) { Ctx = &Context; - Mgr.reset(new AnalysisManager(*Ctx, Diags, LOpts, PD, + Mgr.reset(new AnalysisManager(*Ctx, PP.getDiagnostics(), + PP.getLangOptions(), PD, CreateStoreMgr, CreateConstraintMgr, Opts.AnalyzerDisplayProgress, Opts.VisualizeEGDot, Opts.VisualizeEGUbi, @@ -258,7 +258,7 @@ void AnalysisConsumer::HandleTranslationUnit(ASTContext &C) { void AnalysisConsumer::HandleCode(Decl *D, Stmt* Body, Actions& actions) { // Don't run the actions if an error has occured with parsing the file. - if (Diags.hasErrorOccurred()) + if (PP.getDiagnostics().hasErrorOccurred()) return; // Don't run the actions on declarations in header files unless @@ -438,14 +438,10 @@ static void ActionInlineCall(AnalysisManager &mgr, Decl *D) { // AnalysisConsumer creation. //===----------------------------------------------------------------------===// -ASTConsumer* clang::CreateAnalysisConsumer(Diagnostic &diags, Preprocessor* pp, - const LangOptions& lopts, +ASTConsumer* clang::CreateAnalysisConsumer(const Preprocessor& pp, const std::string& OutDir, const AnalyzerOptions& Opts) { - - llvm::OwningPtr C(new AnalysisConsumer(diags, pp, - lopts, OutDir, - Opts)); + llvm::OwningPtr C(new AnalysisConsumer(pp, OutDir, Opts)); for (unsigned i = 0; i < Opts.AnalysisList.size(); ++i) switch (Opts.AnalysisList[i]) { @@ -458,7 +454,7 @@ ASTConsumer* clang::CreateAnalysisConsumer(Diagnostic &diags, Preprocessor* pp, } // Last, disable the effects of '-Werror' when using the AnalysisConsumer. - diags.setWarningsAsErrors(false); + pp.getDiagnostics().setWarningsAsErrors(false); return C.take(); } diff --git a/lib/Frontend/HTMLDiagnostics.cpp b/lib/Frontend/HTMLDiagnostics.cpp index ffb71cf383..145d53f3fc 100644 --- a/lib/Frontend/HTMLDiagnostics.cpp +++ b/lib/Frontend/HTMLDiagnostics.cpp @@ -37,10 +37,10 @@ namespace { class VISIBILITY_HIDDEN HTMLDiagnostics : public PathDiagnosticClient { llvm::sys::Path Directory, FilePrefix; bool createdDir, noDir; - Preprocessor* PP; + const Preprocessor &PP; std::vector BatchedDiags; public: - HTMLDiagnostics(const std::string& prefix, Preprocessor* pp); + HTMLDiagnostics(const std::string& prefix, const Preprocessor &pp); virtual ~HTMLDiagnostics() { FlushDiagnostics(NULL); } @@ -69,7 +69,8 @@ public: } // end anonymous namespace -HTMLDiagnostics::HTMLDiagnostics(const std::string& prefix, Preprocessor* pp) +HTMLDiagnostics::HTMLDiagnostics(const std::string& prefix, + const Preprocessor &pp) : Directory(prefix), FilePrefix(prefix), createdDir(false), noDir(false), PP(pp) { // All html files begin with "report" @@ -77,7 +78,8 @@ HTMLDiagnostics::HTMLDiagnostics(const std::string& prefix, Preprocessor* pp) } PathDiagnosticClient* -clang::CreateHTMLDiagnosticClient(const std::string& prefix, Preprocessor* PP) { +clang::CreateHTMLDiagnosticClient(const std::string& prefix, + const Preprocessor &PP) { return new HTMLDiagnostics(prefix, PP); } @@ -163,7 +165,7 @@ void HTMLDiagnostics::ReportDiag(const PathDiagnostic& D, return; // FIXME: Emit a warning? // Create a new rewriter to generate HTML. - Rewriter R(const_cast(SMgr), PP->getLangOptions()); + Rewriter R(const_cast(SMgr), PP.getLangOptions()); // Process the path. unsigned n = D.size(); @@ -183,8 +185,8 @@ void HTMLDiagnostics::ReportDiag(const PathDiagnostic& D, // We might not have a preprocessor if we come from a deserialized AST file, // for example. - if (PP) html::SyntaxHighlight(R, FID, *PP); - if (PP) html::HighlightMacros(R, FID, *PP); + html::SyntaxHighlight(R, FID, PP); + html::HighlightMacros(R, FID, PP); // Get the full directory name of the analyzed file. @@ -438,7 +440,7 @@ void HTMLDiagnostics::HandlePiece(Rewriter& R, FileID BugFileID, assert(L.isFileID()); std::pair BufferInfo = L.getBufferData(); const char* MacroName = L.getDecomposedLoc().second + BufferInfo.first; - Lexer rawLexer(L, PP->getLangOptions(), BufferInfo.first, + Lexer rawLexer(L, PP.getLangOptions(), BufferInfo.first, MacroName, BufferInfo.second); Token TheTok; diff --git a/lib/Frontend/PlistDiagnostics.cpp b/lib/Frontend/PlistDiagnostics.cpp index 1579badc72..1be9ea8b8c 100644 --- a/lib/Frontend/PlistDiagnostics.cpp +++ b/lib/Frontend/PlistDiagnostics.cpp @@ -64,9 +64,9 @@ PlistDiagnostics::PlistDiagnostics(const std::string& output, : OutputFile(output), LangOpts(LO), SubPD(subPD) {} PathDiagnosticClient* -clang::CreatePlistDiagnosticClient(const std::string& s, Preprocessor *PP, +clang::CreatePlistDiagnosticClient(const std::string& s, const Preprocessor &PP, PathDiagnosticClient *subPD) { - return new PlistDiagnostics(s, PP->getLangOptions(), subPD); + return new PlistDiagnostics(s, PP.getLangOptions(), subPD); } PathDiagnosticClient::PathGenerationScheme diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index 2244e918f5..06ae4edf0e 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/tools/clang-cc/clang-cc.cpp @@ -1729,8 +1729,7 @@ static void ProcessInputFile(Preprocessor &PP, const std::string &InFile, break; case RunAnalysis: - Consumer.reset(CreateAnalysisConsumer(PP.getDiagnostics(), &PP, - PP.getLangOptions(), OutputFile, + Consumer.reset(CreateAnalysisConsumer(PP, OutputFile, ReadAnalyzerOptions())); break;