[clang-tools-extra] r261738 - [clang-tidy] introduce modernize-deprecated-headers check

Kirill Bobyrev via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 9 05:28:55 PST 2016


Hi!

Sorry for a late response: I was away for a while.

Alexander, thank you for the message forwarding, I wasn’t subscribed to cfe-commits, I guess I should do it now not to miss the comments on some of my patches!

Richard, thank you for the valuable feedback!

I’ve created a patch, which changes check behaviour as you proposed.
D17990 is up for a review.

Kind regards,
Kirill Bobyrev



> On 02 Mar 2016, at 4:40 AM, Alexander Kornienko <alexfh at google.com> wrote:
> 
> Kirill, FYI.
> 
> On Thu, Feb 25, 2016 at 3:21 AM, Richard Smith <richard at metafoo.co.uk <mailto:richard at metafoo.co.uk>> wrote:
> On Wed, Feb 24, 2016 at 5:36 AM, Alexander Kornienko via cfe-commits
> <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
> > Author: alexfh
> > Date: Wed Feb 24 07:36:34 2016
> > New Revision: 261738
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=261738&view=rev <http://llvm.org/viewvc/llvm-project?rev=261738&view=rev>
> > Log:
> > [clang-tidy] introduce modernize-deprecated-headers check
> >
> > Summary:
> > This patch introduces the modernize-deprecated-headers check, which is supposed to replace deprecated C library headers with the C++ STL-ones.
> >
> > For information see documentation; for exmaples see the test cases.
> >
> > Reviewers: Eugene.Zelenko, LegalizeAdulthood, alexfh
> >
> > Subscribers: cfe-commits
> >
> > Patch by Kirill Bobyrev!
> >
> > Differential Revision: http://reviews.llvm.org/D17484 <http://reviews.llvm.org/D17484>
> >
> > Added:
> >     clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.cpp
> >     clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.h
> >     clang-tools-extra/trunk/docs/clang-tidy/checks/modernize-deprecated-headers.rst
> >     clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx03.cpp
> >     clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx11.cpp
> > Modified:
> >     clang-tools-extra/trunk/clang-tidy/modernize/CMakeLists.txt
> >     clang-tools-extra/trunk/clang-tidy/modernize/ModernizeTidyModule.cpp
> >     clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst
> >
> > Modified: clang-tools-extra/trunk/clang-tidy/modernize/CMakeLists.txt
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/CMakeLists.txt?rev=261738&r1=261737&r2=261738&view=diff <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/CMakeLists.txt?rev=261738&r1=261737&r2=261738&view=diff>
> > ==============================================================================
> > --- clang-tools-extra/trunk/clang-tidy/modernize/CMakeLists.txt (original)
> > +++ clang-tools-extra/trunk/clang-tidy/modernize/CMakeLists.txt Wed Feb 24 07:36:34 2016
> > @@ -1,6 +1,7 @@
> >  set(LLVM_LINK_COMPONENTS support)
> >
> >  add_clang_library(clangTidyModernizeModule
> > +  DeprecatedHeadersCheck.cpp
> >    LoopConvertCheck.cpp
> >    LoopConvertUtils.cpp
> >    MakeUniqueCheck.cpp
> >
> > Added: clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.cpp
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.cpp?rev=261738&view=auto <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.cpp?rev=261738&view=auto>
> > ==============================================================================
> > --- clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.cpp (added)
> > +++ clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.cpp Wed Feb 24 07:36:34 2016
> > @@ -0,0 +1,110 @@
> > +//===--- DeprecatedHeadersCheck.cpp - clang-tidy---------------------------===//
> > +//
> > +//                     The LLVM Compiler Infrastructure
> > +//
> > +// This file is distributed under the University of Illinois Open Source
> > +// License. See LICENSE.TXT for details.
> > +//
> > +//===----------------------------------------------------------------------===//
> > +
> > +#include "DeprecatedHeadersCheck.h"
> > +#include "clang/Frontend/CompilerInstance.h"
> > +#include "clang/Lex/PPCallbacks.h"
> > +#include "clang/Lex/Preprocessor.h"
> > +#include "llvm/ADT/StringMap.h"
> > +
> > +#include <vector>
> > +
> > +namespace clang {
> > +namespace tidy {
> > +namespace modernize {
> > +
> > +namespace {
> > +class IncludeModernizePPCallbacks : public PPCallbacks {
> > +public:
> > +  explicit IncludeModernizePPCallbacks(ClangTidyCheck &Check,
> > +                                       LangOptions LangOpts);
> > +
> > +  void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok,
> > +                          StringRef FileName, bool IsAngled,
> > +                          CharSourceRange FilenameRange, const FileEntry *File,
> > +                          StringRef SearchPath, StringRef RelativePath,
> > +                          const Module *Imported) override;
> > +
> > +private:
> > +  ClangTidyCheck &Check;
> > +  LangOptions LangOpts;
> > +  llvm::StringMap<std::string> CStyledHeaderToCxx;
> > +};
> > +} // namespace
> > +
> > +void DeprecatedHeadersCheck::registerPPCallbacks(CompilerInstance &Compiler) {
> > +  if (this->getLangOpts().CPlusPlus) {
> > +    Compiler.getPreprocessor().addPPCallbacks(
> > +        ::llvm::make_unique<IncludeModernizePPCallbacks>(*this,
> > +                                                         this->getLangOpts()));
> > +  }
> > +}
> > +
> > +IncludeModernizePPCallbacks::IncludeModernizePPCallbacks(ClangTidyCheck &Check,
> > +                                                         LangOptions LangOpts)
> > +    : Check(Check), LangOpts(LangOpts),
> > +      CStyledHeaderToCxx({{"assert.h", "cassert"},
> > +                          {"complex.h", "ccomplex"},
> 
> It'd be better to convert this one to <complex>, or leave it alone.
> <ccomplex> is an unnecessary wart.
> 
> (The contents of C++11's <complex.h> / <ccomplex> / <complex> (all of
> which are identical) aren't comparable to C99's <complex.h>, so if
> this was C++98 code using the C99 header, the code will be broken with
> or without this transformation.)
> 
> > +                          {"ctype.h", "cctype"},
> > +                          {"errno.h", "cerrno"},
> > +                          {"float.h", "cfloat"},
> > +                          {"inttypes.h", "cinttypes"},
> 
> > +                          {"iso646.h", "ciso646"},
> 
> Just delete #includes of this one. <ciso646> does nothing.
> 
> > +                          {"limits.h", "climits"},
> > +                          {"locale.h", "clocale"},
> > +                          {"math.h", "cmath"},
> > +                          {"setjmp.h", "csetjmp"},
> > +                          {"signal.h", "csignal"},
> > +                          {"stdarg.h", "cstdarg"},
> > +                          {"stddef.h", "cstddef"},
> > +                          {"stdint.h", "cstdint"},
> > +                          {"stdio.h", "cstdio"},
> > +                          {"stdlib.h", "cstdlib"},
> > +                          {"string.h", "cstring"},
> > +                          {"time.h", "ctime"},
> > +                          {"wchar.h", "cwchar"},
> > +                          {"wctype.h", "cwctype"}}) {
> > +  // Add C++ 11 headers.
> > +  if (LangOpts.CPlusPlus11) {
> > +    for (const auto &it : std::vector<std::pair<std::string, std::string>>(
> > +             {{"fenv.h", "cfenv"},
> 
> > +              {"stdalign.h", "cstdalign"},
> > +              {"stdbool.h", "cstdbool"},
> 
> We should just delete these two includes. These headers do nothing in C++.
> 
> > +              {"tgmath.h", "ctgmath"},
> 
> This one is pretty broken, but transitioning to <ctgmath> is better
> than nothing.
> 
> > +              {"uchar.h", "cuchar"}})) {
> > +      CStyledHeaderToCxx.insert(it);
> > +    }
> > +  }
> > +}
> > +
> > +void IncludeModernizePPCallbacks::InclusionDirective(
> > +    SourceLocation HashLoc, const Token &IncludeTok, StringRef FileName,
> > +    bool IsAngled, CharSourceRange FilenameRange, const FileEntry *File,
> > +    StringRef SearchPath, StringRef RelativePath, const Module *Imported) {
> > +  // FIXME: Take care of library symbols from the global namespace.
> > +  //
> > +  // Reasonable options for the check:
> > +  //
> > +  // 1. Insert std prefix for every such symbol occurance.
> > +  // 2. Insert `using namespace std;` to the beginning of TU.
> > +  // 3. Do nothing and let the user deal with the migration himself.
> > +  if (CStyledHeaderToCxx.count(FileName) != 0) {
> > +    std::string Replacement =
> > +        (llvm::Twine("<") + CStyledHeaderToCxx[FileName] + ">").str();
> > +    Check.diag(FilenameRange.getBegin(),
> > +               "inclusion of deprecated C++ header '%0'; consider using '%1' instead")
> > +        << FileName << CStyledHeaderToCxx[FileName]
> > +        << FixItHint::CreateReplacement(FilenameRange.getAsRange(),
> > +                                        Replacement);
> > +  }
> > +}
> > +
> > +} // namespace modernize
> > +} // namespace tidy
> > +} // namespace clang
> >
> > Added: clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.h
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.h?rev=261738&view=auto <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.h?rev=261738&view=auto>
> > ==============================================================================
> > --- clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.h (added)
> > +++ clang-tools-extra/trunk/clang-tidy/modernize/DeprecatedHeadersCheck.h Wed Feb 24 07:36:34 2016
> > @@ -0,0 +1,42 @@
> > +//===--- DeprecatedHeadersCheck.h - clang-tidy-------------------*- C++ -*-===//
> > +//
> > +//                     The LLVM Compiler Infrastructure
> > +//
> > +// This file is distributed under the University of Illinois Open Source
> > +// License. See LICENSE.TXT for details.
> > +//
> > +//===----------------------------------------------------------------------===//
> > +
> > +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_C_HEADERS_TO_CXX_H
> > +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_C_HEADERS_TO_CXX_H
> > +
> > +#include "../ClangTidy.h"
> > +
> > +namespace clang {
> > +namespace tidy {
> > +namespace modernize {
> > +
> > +/// This check replaces deprecated C library headers with their C++ STL
> > +/// alternatives.
> > +///
> > +/// Before:
> > +///   #include <header.h>
> > +/// After:
> > +///   #include <cheader>
> > +///
> > +/// Example: <stdio.h> => <cstdio>
> > +///
> > +/// For the user-facing documentation see:
> > +/// http://clang.llvm.org/extra/clang-tidy/checks/modernize-deprecated-headers.html <http://clang.llvm.org/extra/clang-tidy/checks/modernize-deprecated-headers.html>
> > +class DeprecatedHeadersCheck : public ClangTidyCheck {
> > +public:
> > +  DeprecatedHeadersCheck(StringRef Name, ClangTidyContext *Context)
> > +      : ClangTidyCheck(Name, Context) {}
> > +  void registerPPCallbacks(CompilerInstance &Compiler) override;
> > +};
> > +
> > +} // namespace modernize
> > +} // namespace tidy
> > +} // namespace clang
> > +
> > +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_C_HEADERS_TO_CXX_H
> >
> > Modified: clang-tools-extra/trunk/clang-tidy/modernize/ModernizeTidyModule.cpp
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/ModernizeTidyModule.cpp?rev=261738&r1=261737&r2=261738&view=diff <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/ModernizeTidyModule.cpp?rev=261738&r1=261737&r2=261738&view=diff>
> > ==============================================================================
> > --- clang-tools-extra/trunk/clang-tidy/modernize/ModernizeTidyModule.cpp (original)
> > +++ clang-tools-extra/trunk/clang-tidy/modernize/ModernizeTidyModule.cpp Wed Feb 24 07:36:34 2016
> > @@ -10,6 +10,7 @@
> >  #include "../ClangTidy.h"
> >  #include "../ClangTidyModule.h"
> >  #include "../ClangTidyModuleRegistry.h"
> > +#include "DeprecatedHeadersCheck.h"
> >  #include "LoopConvertCheck.h"
> >  #include "MakeUniqueCheck.h"
> >  #include "PassByValueCheck.h"
> > @@ -30,6 +31,8 @@ namespace modernize {
> >  class ModernizeModule : public ClangTidyModule {
> >  public:
> >    void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
> > +    CheckFactories.registerCheck<DeprecatedHeadersCheck>(
> > +        "modernize-deprecated-headers");
> >      CheckFactories.registerCheck<LoopConvertCheck>("modernize-loop-convert");
> >      CheckFactories.registerCheck<MakeUniqueCheck>("modernize-make-unique");
> >      CheckFactories.registerCheck<PassByValueCheck>("modernize-pass-by-value");
> >
> > Modified: clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst?rev=261738&r1=261737&r2=261738&view=diff <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst?rev=261738&r1=261737&r2=261738&view=diff>
> > ==============================================================================
> > --- clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst (original)
> > +++ clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst Wed Feb 24 07:36:34 2016
> > @@ -74,6 +74,7 @@ Clang-Tidy Checks
> >     misc-unused-parameters
> >     misc-unused-raii
> >     misc-virtual-near-miss
> > +   modernize-deprecated-headers
> >     modernize-loop-convert
> >     modernize-make-unique
> >     modernize-pass-by-value
> >
> > Added: clang-tools-extra/trunk/docs/clang-tidy/checks/modernize-deprecated-headers.rst
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/modernize-deprecated-headers.rst?rev=261738&view=auto <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/modernize-deprecated-headers.rst?rev=261738&view=auto>
> > ==============================================================================
> > --- clang-tools-extra/trunk/docs/clang-tidy/checks/modernize-deprecated-headers.rst (added)
> > +++ clang-tools-extra/trunk/docs/clang-tidy/checks/modernize-deprecated-headers.rst Wed Feb 24 07:36:34 2016
> > @@ -0,0 +1,45 @@
> > +.. title:: clang-tidy - modernize-deprecated-headers
> > +
> > +modernize-deprecated-headers
> > +==========================
> > +
> > +Some headers from C library were deprecated in C++ and are no longer welcome in
> > +C++ codebases. For more details refer to the C++ 14 Standard [depr.c.headers]
> > +section.
> > +
> > +This check replaces C standard library headers with their C++ alternatives.
> > +
> > +Improtant note: the Standard doesn't guarantee that the C++ headers declare all
> > +the same functions in the global namespace. The check in its current form can
> > +break the code that uses library symbols from the global namespace.
> > +
> > +* `<assert.h>`
> > +* `<complex.h>`
> > +* `<ctype.h>`
> > +* `<errno.h>`
> > +* `<fenv.h>`     // deprecated since C++11
> > +* `<float.h>`
> > +* `<inttypes.h>`
> > +* `<iso646.h>`
> > +* `<limits.h>`
> > +* `<locale.h>`
> > +* `<math.h>`
> > +* `<setjmp.h>`
> > +* `<signal.h>`
> > +* `<stdalign.h>` // deprecated since C++11
> > +* `<stdarg.h>`
> > +* `<stdbool.h>`  // deprecated since C++11
> > +* `<stddef.h>`
> > +* `<stdint.h>`
> > +* `<stdio.h>`
> > +* `<stdlib.h>`
> > +* `<string.h>`
> > +* `<tgmath.h>`   // deprecated since C++11
> > +* `<time.h>`
> > +* `<uchar.h>`    // deprecated since C++11
> > +* `<wchar.h>`
> > +* `<wctype.h>`
> > +
> > +If the specified standard is older than C++11 the check will only replace
> > +headers deprecated before C++11, otherwise -- every header that appeared in
> > +the list.
> >
> > Added: clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx03.cpp
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx03.cpp?rev=261738&view=auto <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx03.cpp?rev=261738&view=auto>
> > ==============================================================================
> > --- clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx03.cpp (added)
> > +++ clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx03.cpp Wed Feb 24 07:36:34 2016
> > @@ -0,0 +1,147 @@
> > +// RUN: %check_clang_tidy %s modernize-deprecated-headers %t -- -- -std=c++03 -isystem %S/Inputs/Headers
> > +
> > +#include <assert.h>
> > +#include <complex.h>
> > +#include <ctype.h>
> > +#include <errno.h>
> > +#include <float.h>
> > +#include <inttypes.h>
> > +#include <iso646.h>
> > +#include <limits.h>
> > +#include <locale.h>
> > +#include <math.h>
> > +#include <setjmp.h>
> > +#include <signal.h>
> > +#include <stdarg.h>
> > +#include <stddef.h>
> > +#include <stdint.h>
> > +#include <stdio.h>
> > +#include <stdlib.h>
> > +#include <string.h>
> > +#include <time.h>
> > +#include <wchar.h>
> > +#include <wctype.h>
> > +
> > +// Headers deprecated since C++11: expect no diagnostics.
> > +#include <fenv.h>
> > +#include <stdalign.h>
> > +#include <stdbool.h>
> > +#include <tgmath.h>
> > +#include <uchar.h>
> > +
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'assert.h'; consider using 'cassert' instead [modernize-deprecated-headers]
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'complex.h'; consider using 'ccomplex' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'ctype.h'; consider using 'cctype' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'errno.h'; consider using 'cerrno' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'float.h'; consider using 'cfloat' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'inttypes.h'; consider using 'cinttypes' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'iso646.h'; consider using 'ciso646' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'limits.h'; consider using 'climits' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'locale.h'; consider using 'clocale' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'math.h'; consider using 'cmath' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'setjmp.h'; consider using 'csetjmp' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'signal.h'; consider using 'csignal' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stdarg.h'; consider using 'cstdarg' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stddef.h'; consider using 'cstddef' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stdint.h'; consider using 'cstdint' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stdio.h'; consider using 'cstdio' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stdlib.h'; consider using 'cstdlib' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'string.h'; consider using 'cstring' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'time.h'; consider using 'ctime' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'wchar.h'; consider using 'cwchar' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'wctype.h'; consider using 'cwctype' instead
> > +
> > +// CHECK-FIXES: #include <cassert>
> > +// CHECK-FIXES: #include <ccomplex>
> > +// CHECK-FIXES: #include <cctype>
> > +// CHECK-FIXES: #include <cerrno>
> > +// CHECK-FIXES: #include <cfloat>
> > +// CHECK-FIXES: #include <cinttypes>
> > +// CHECK-FIXES: #include <ciso646>
> > +// CHECK-FIXES: #include <climits>
> > +// CHECK-FIXES: #include <clocale>
> > +// CHECK-FIXES: #include <cmath>
> > +// CHECK-FIXES: #include <csetjmp>
> > +// CHECK-FIXES: #include <csignal>
> > +// CHECK-FIXES: #include <cstdarg>
> > +// CHECK-FIXES: #include <cstddef>
> > +// CHECK-FIXES: #include <cstdint>
> > +// CHECK-FIXES: #include <cstdio>
> > +// CHECK-FIXES: #include <cstdlib>
> > +// CHECK-FIXES: #include <cstring>
> > +// CHECK-FIXES: #include <ctime>
> > +// CHECK-FIXES: #include <cwchar>
> > +// CHECK-FIXES: #include <cwctype>
> > +
> > +#include "assert.h"
> > +#include "complex.h"
> > +#include "ctype.h"
> > +#include "errno.h"
> > +#include "float.h"
> > +#include "inttypes.h"
> > +#include "iso646.h"
> > +#include "limits.h"
> > +#include "locale.h"
> > +#include "math.h"
> > +#include "setjmp.h"
> > +#include "signal.h"
> > +#include "stdarg.h"
> > +#include "stddef.h"
> > +#include "stdint.h"
> > +#include "stdio.h"
> > +#include "stdlib.h"
> > +#include "string.h"
> > +#include "time.h"
> > +#include "wchar.h"
> > +#include "wctype.h"
> > +
> > +// Headers deprecated since C++11; expect no diagnostics
> > +#include "fenv.h"
> > +#include "stdalign.h"
> > +#include "stdbool.h"
> > +#include "tgmath.h"
> > +#include "uchar.h"
> > +
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'assert.h'; consider using 'cassert' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'complex.h'; consider using 'ccomplex' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'ctype.h'; consider using 'cctype' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'errno.h'; consider using 'cerrno' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'float.h'; consider using 'cfloat' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'inttypes.h'; consider using 'cinttypes' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'iso646.h'; consider using 'ciso646' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'limits.h'; consider using 'climits' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'locale.h'; consider using 'clocale' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'math.h'; consider using 'cmath' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'setjmp.h'; consider using 'csetjmp' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'signal.h'; consider using 'csignal' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stdarg.h'; consider using 'cstdarg' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stddef.h'; consider using 'cstddef' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stdint.h'; consider using 'cstdint' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stdio.h'; consider using 'cstdio' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'stdlib.h'; consider using 'cstdlib' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'string.h'; consider using 'cstring' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'time.h'; consider using 'ctime' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'wchar.h'; consider using 'cwchar' instead
> > +// CHECK-MESSAGES: :[[@LINE-29]]:10: warning: inclusion of deprecated C++ header 'wctype.h'; consider using 'cwctype' instead
> > +
> > +// CHECK-FIXES: #include <cassert>
> > +// CHECK-FIXES: #include <ccomplex>
> > +// CHECK-FIXES: #include <cctype>
> > +// CHECK-FIXES: #include <cerrno>
> > +// CHECK-FIXES: #include <cfloat>
> > +// CHECK-FIXES: #include <cinttypes>
> > +// CHECK-FIXES: #include <ciso646>
> > +// CHECK-FIXES: #include <climits>
> > +// CHECK-FIXES: #include <clocale>
> > +// CHECK-FIXES: #include <cmath>
> > +// CHECK-FIXES: #include <csetjmp>
> > +// CHECK-FIXES: #include <csignal>
> > +// CHECK-FIXES: #include <cstdarg>
> > +// CHECK-FIXES: #include <cstddef>
> > +// CHECK-FIXES: #include <cstdint>
> > +// CHECK-FIXES: #include <cstdio>
> > +// CHECK-FIXES: #include <cstdlib>
> > +// CHECK-FIXES: #include <cstring>
> > +// CHECK-FIXES: #include <ctime>
> > +// CHECK-FIXES: #include <cwchar>
> > +// CHECK-FIXES: #include <cwctype>
> >
> > Added: clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx11.cpp
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx11.cpp?rev=261738&view=auto <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx11.cpp?rev=261738&view=auto>
> > ==============================================================================
> > --- clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx11.cpp (added)
> > +++ clang-tools-extra/trunk/test/clang-tidy/modernize-deprecated-headers-cxx11.cpp Wed Feb 24 07:36:34 2016
> > @@ -0,0 +1,163 @@
> > +// RUN: %check_clang_tidy %s modernize-deprecated-headers %t -- -- -std=c++11 -isystem %S/Inputs/Headers
> > +
> > +#include <assert.h>
> > +#include <complex.h>
> > +#include <ctype.h>
> > +#include <errno.h>
> > +#include <fenv.h>
> > +#include <float.h>
> > +#include <inttypes.h>
> > +#include <iso646.h>
> > +#include <limits.h>
> > +#include <locale.h>
> > +#include <math.h>
> > +#include <setjmp.h>
> > +#include <signal.h>
> > +#include <stdalign.h>
> > +#include <stdarg.h>
> > +#include <stdbool.h>
> > +#include <stddef.h>
> > +#include <stdint.h>
> > +#include <stdio.h>
> > +#include <stdlib.h>
> > +#include <string.h>
> > +#include <tgmath.h>
> > +#include <time.h>
> > +#include <uchar.h>
> > +#include <wchar.h>
> > +#include <wctype.h>
> > +
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'assert.h'; consider using 'cassert' instead [modernize-deprecated-headers]
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'complex.h'; consider using 'ccomplex' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'ctype.h'; consider using 'cctype' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'errno.h'; consider using 'cerrno' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'fenv.h'; consider using 'cfenv' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'float.h'; consider using 'cfloat' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'inttypes.h'; consider using 'cinttypes' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'iso646.h'; consider using 'ciso646' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'limits.h'; consider using 'climits' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'locale.h'; consider using 'clocale' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'math.h'; consider using 'cmath' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'setjmp.h'; consider using 'csetjmp' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'signal.h'; consider using 'csignal' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdalign.h'; consider using 'cstdalign' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdarg.h'; consider using 'cstdarg' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdbool.h'; consider using 'cstdbool' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stddef.h'; consider using 'cstddef' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdint.h'; consider using 'cstdint' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdio.h'; consider using 'cstdio' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdlib.h'; consider using 'cstdlib' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'string.h'; consider using 'cstring' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'tgmath.h'; consider using 'ctgmath' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'time.h'; consider using 'ctime' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'uchar.h'; consider using 'cuchar' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'wchar.h'; consider using 'cwchar' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'wctype.h'; consider using 'cwctype' instead
> > +
> > +// CHECK-FIXES: #include <cassert>
> > +// CHECK-FIXES: #include <ccomplex>
> > +// CHECK-FIXES: #include <cctype>
> > +// CHECK-FIXES: #include <cerrno>
> > +// CHECK-FIXES: #include <cfenv>
> > +// CHECK-FIXES: #include <cfloat>
> > +// CHECK-FIXES: #include <cinttypes>
> > +// CHECK-FIXES: #include <ciso646>
> > +// CHECK-FIXES: #include <climits>
> > +// CHECK-FIXES: #include <clocale>
> > +// CHECK-FIXES: #include <cmath>
> > +// CHECK-FIXES: #include <csetjmp>
> > +// CHECK-FIXES: #include <csignal>
> > +// CHECK-FIXES: #include <cstdalign>
> > +// CHECK-FIXES: #include <cstdarg>
> > +// CHECK-FIXES: #include <cstdbool>
> > +// CHECK-FIXES: #include <cstddef>
> > +// CHECK-FIXES: #include <cstdint>
> > +// CHECK-FIXES: #include <cstdio>
> > +// CHECK-FIXES: #include <cstdlib>
> > +// CHECK-FIXES: #include <cstring>
> > +// CHECK-FIXES: #include <ctgmath>
> > +// CHECK-FIXES: #include <ctime>
> > +// CHECK-FIXES: #include <cuchar>
> > +// CHECK-FIXES: #include <cwchar>
> > +// CHECK-FIXES: #include <cwctype>
> > +
> > +#include "assert.h"
> > +#include "complex.h"
> > +#include "ctype.h"
> > +#include "errno.h"
> > +#include "fenv.h"
> > +#include "float.h"
> > +#include "inttypes.h"
> > +#include "iso646.h"
> > +#include "limits.h"
> > +#include "locale.h"
> > +#include "math.h"
> > +#include "setjmp.h"
> > +#include "signal.h"
> > +#include "stdalign.h"
> > +#include "stdarg.h"
> > +#include "stdbool.h"
> > +#include "stddef.h"
> > +#include "stdint.h"
> > +#include "stdio.h"
> > +#include "stdlib.h"
> > +#include "string.h"
> > +#include "tgmath.h"
> > +#include "time.h"
> > +#include "uchar.h"
> > +#include "wchar.h"
> > +#include "wctype.h"
> > +
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'assert.h'; consider using 'cassert' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'complex.h'; consider using 'ccomplex' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'ctype.h'; consider using 'cctype' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'errno.h'; consider using 'cerrno' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'fenv.h'; consider using 'cfenv' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'float.h'; consider using 'cfloat' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'inttypes.h'; consider using 'cinttypes' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'iso646.h'; consider using 'ciso646' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'limits.h'; consider using 'climits' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'locale.h'; consider using 'clocale' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'math.h'; consider using 'cmath' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'setjmp.h'; consider using 'csetjmp' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'signal.h'; consider using 'csignal' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdalign.h'; consider using 'cstdalign' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdarg.h'; consider using 'cstdarg' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdbool.h'; consider using 'cstdbool' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stddef.h'; consider using 'cstddef' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdint.h'; consider using 'cstdint' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdio.h'; consider using 'cstdio' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'stdlib.h'; consider using 'cstdlib' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'string.h'; consider using 'cstring' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'tgmath.h'; consider using 'ctgmath' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'time.h'; consider using 'ctime' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'uchar.h'; consider using 'cuchar' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'wchar.h'; consider using 'cwchar' instead
> > +// CHECK-MESSAGES: :[[@LINE-27]]:10: warning: inclusion of deprecated C++ header 'wctype.h'; consider using 'cwctype' instead
> > +
> > +// CHECK-FIXES: #include <cassert>
> > +// CHECK-FIXES: #include <ccomplex>
> > +// CHECK-FIXES: #include <cctype>
> > +// CHECK-FIXES: #include <cerrno>
> > +// CHECK-FIXES: #include <cfenv>
> > +// CHECK-FIXES: #include <cfloat>
> > +// CHECK-FIXES: #include <cinttypes>
> > +// CHECK-FIXES: #include <ciso646>
> > +// CHECK-FIXES: #include <climits>
> > +// CHECK-FIXES: #include <clocale>
> > +// CHECK-FIXES: #include <cmath>
> > +// CHECK-FIXES: #include <csetjmp>
> > +// CHECK-FIXES: #include <csignal>
> > +// CHECK-FIXES: #include <cstdalign>
> > +// CHECK-FIXES: #include <cstdarg>
> > +// CHECK-FIXES: #include <cstdbool>
> > +// CHECK-FIXES: #include <cstddef>
> > +// CHECK-FIXES: #include <cstdint>
> > +// CHECK-FIXES: #include <cstdio>
> > +// CHECK-FIXES: #include <cstdlib>
> > +// CHECK-FIXES: #include <cstring>
> > +// CHECK-FIXES: #include <ctgmath>
> > +// CHECK-FIXES: #include <ctime>
> > +// CHECK-FIXES: #include <cuchar>
> > +// CHECK-FIXES: #include <cwchar>
> > +// CHECK-FIXES: #include <cwctype>
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits <http://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/20160309/4ef8decf/attachment-0001.html>


More information about the cfe-commits mailing list