Index: clang-tidy/ClangTidy.h =================================================================== --- clang-tidy/ClangTidy.h +++ clang-tidy/ClangTidy.h @@ -158,6 +158,8 @@ OptionsView Options; /// \brief Returns the main file name of the current translation unit. StringRef getCurrentMainFile() const { return Context->getCurrentFile(); } + /// \brief Returns the language options from the context. + LangOptions getLangOpts() const { return Context->getLangOpts(); } }; class ClangTidyCheckFactories; Index: clang-tidy/ClangTidyDiagnosticConsumer.h =================================================================== --- clang-tidy/ClangTidyDiagnosticConsumer.h +++ clang-tidy/ClangTidyDiagnosticConsumer.h @@ -149,6 +149,9 @@ /// \brief Sets ASTContext for the current translation unit. void setASTContext(ASTContext *Context); + /// \brief Gets the language options from the AST context + LangOptions getLangOpts() const { return LangOpts; } + /// \brief Returns the name of the clang-tidy check which produced this /// diagnostic ID. StringRef getCheckName(unsigned DiagnosticID) const; @@ -198,6 +201,8 @@ ClangTidyOptions CurrentOptions; std::unique_ptr CheckFilter; + LangOptions LangOpts; + ClangTidyStats Stats; llvm::DenseMap CheckNamesByDiagnosticID; Index: clang-tidy/ClangTidyDiagnosticConsumer.cpp =================================================================== --- clang-tidy/ClangTidyDiagnosticConsumer.cpp +++ clang-tidy/ClangTidyDiagnosticConsumer.cpp @@ -212,6 +212,7 @@ void ClangTidyContext::setASTContext(ASTContext *Context) { DiagEngine->SetArgToStringFn(&FormatASTNodeDiagnosticArgument, Context); + LangOpts = Context->getLangOpts(); } const ClangTidyGlobalOptions &ClangTidyContext::getGlobalOptions() const { Index: clang-tidy/modernize/UseNullptrCheck.cpp =================================================================== --- clang-tidy/modernize/UseNullptrCheck.cpp +++ clang-tidy/modernize/UseNullptrCheck.cpp @@ -453,7 +453,9 @@ } void UseNullptrCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher(makeCastSequenceMatcher(), this); + // Only register the matcher for C++11. + if (getLangOpts().CPlusPlus11) + Finder->addMatcher(makeCastSequenceMatcher(), this); } void UseNullptrCheck::check(const MatchFinder::MatchResult &Result) { Index: test/clang-tidy/modernize-use-nullptr.c =================================================================== --- test/clang-tidy/modernize-use-nullptr.c +++ test/clang-tidy/modernize-use-nullptr.c @@ -0,0 +1,10 @@ +// RUN: clang-tidy %s -checks=-*,modernize-use-nullptr -- | count 0 + +// Note: this test expects no diagnostics, but FileCheck cannot handle that, +// hence the use of | count 0. + +#define NULL 0 +void f(void) { + char *str = NULL; // ok + (void)str; +}