zinovy.nis updated this revision to Diff 145059. zinovy.nis added a comment.
- Added comments on why setting `ProgramAction` explicitly. https://reviews.llvm.org/D46325 Files: clang-tidy/ClangTidy.cpp test/clang-tidy/clang-tidy-__clang_analyzer__macro.cpp Index: test/clang-tidy/clang-tidy-__clang_analyzer__macro.cpp =================================================================== --- test/clang-tidy/clang-tidy-__clang_analyzer__macro.cpp +++ test/clang-tidy/clang-tidy-__clang_analyzer__macro.cpp @@ -0,0 +1,5 @@ +// RUN: clang-tidy %s -checks=-*,modernize-use-nullptr -- | count 0 + +#if !defined(__clang_analyzer__) +#error __clang_analyzer__ is not defined +#endif Index: clang-tidy/ClangTidy.cpp =================================================================== --- clang-tidy/ClangTidy.cpp +++ clang-tidy/ClangTidy.cpp @@ -524,6 +524,18 @@ ActionFactory(ClangTidyContext &Context) : ConsumerFactory(Context) {} FrontendAction *create() override { return new Action(&ConsumerFactory); } + bool runInvocation(std::shared_ptr<CompilerInvocation> Invocation, + FileManager *Files, + std::shared_ptr<PCHContainerOperations> PCHContainerOps, + DiagnosticConsumer *DiagConsumer) override { + // Explicitly set ProgramAction to RunAnalysis to make the preprocessor + // define __clang_analyzer__ macro. The frontend analyzer action will not + // be called here. + Invocation->getFrontendOpts().ProgramAction = frontend::RunAnalysis; + return FrontendActionFactory::runInvocation( + Invocation, Files, PCHContainerOps, DiagConsumer); + } + private: class Action : public ASTFrontendAction { public:
Index: test/clang-tidy/clang-tidy-__clang_analyzer__macro.cpp =================================================================== --- test/clang-tidy/clang-tidy-__clang_analyzer__macro.cpp +++ test/clang-tidy/clang-tidy-__clang_analyzer__macro.cpp @@ -0,0 +1,5 @@ +// RUN: clang-tidy %s -checks=-*,modernize-use-nullptr -- | count 0 + +#if !defined(__clang_analyzer__) +#error __clang_analyzer__ is not defined +#endif Index: clang-tidy/ClangTidy.cpp =================================================================== --- clang-tidy/ClangTidy.cpp +++ clang-tidy/ClangTidy.cpp @@ -524,6 +524,18 @@ ActionFactory(ClangTidyContext &Context) : ConsumerFactory(Context) {} FrontendAction *create() override { return new Action(&ConsumerFactory); } + bool runInvocation(std::shared_ptr<CompilerInvocation> Invocation, + FileManager *Files, + std::shared_ptr<PCHContainerOperations> PCHContainerOps, + DiagnosticConsumer *DiagConsumer) override { + // Explicitly set ProgramAction to RunAnalysis to make the preprocessor + // define __clang_analyzer__ macro. The frontend analyzer action will not + // be called here. + Invocation->getFrontendOpts().ProgramAction = frontend::RunAnalysis; + return FrontendActionFactory::runInvocation( + Invocation, Files, PCHContainerOps, DiagConsumer); + } + private: class Action : public ASTFrontendAction { public:
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits