forked from OSchip/llvm-project
[clang-tidy] Define __clang_analyzer__ macro for clang-tidy for compatibility with clang static analyzer
This macro is widely used in many well-known projects, ex. Chromium. But it's not set for clang-tidy, so for ex. DCHECK in Chromium is not considered as [[no-return]], and a lot of false-positive warnings about nullptr dereferenced are emitted. Differential Revision: https://reviews.llvm.org/D46325 llvm-svn: 331474
This commit is contained in:
parent
0720c8d90e
commit
beca76823b
|
@ -524,6 +524,18 @@ void runClangTidy(clang::tidy::ClangTidyContext &Context,
|
|||
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:
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
// RUN: clang-tidy %s -checks=-*,modernize-use-nullptr -- | count 0
|
||||
|
||||
#if !defined(__clang_analyzer__)
|
||||
#error __clang_analyzer__ is not defined
|
||||
#endif
|
||||
// RUN: clang-tidy %s -checks=-*,modernize-use-nullptr -- | count 0
|
||||
|
||||
#if !defined(__clang_analyzer__)
|
||||
#error __clang_analyzer__ is not defined
|
||||
#endif
|
Loading…
Reference in New Issue