omtcyf0 created this revision.
omtcyf0 added reviewers: alexfh, rsmith, LegalizeAdulthood.
omtcyf0 added a subscriber: cfe-commits.

This patch introduces a minor list of changes as proposed by Richard Smith in 
the mailing list.

See original comments with an impact on the future check state below:

[comments.begin

> +                          {"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.)

> +                          {"iso646.h", "ciso646"},

Just delete #includes of this one. <ciso646> does nothing.

> +              {"stdalign.h", "cstdalign"},
> +              {"stdbool.h", "cstdbool"},

We should just delete these two includes. These headers do nothing in C++.

comments.end]

http://reviews.llvm.org/D17990

Files:
  clang-tidy/modernize/DeprecatedHeadersCheck.cpp
  docs/clang-tidy/checks/modernize-deprecated-headers.rst
  test/clang-tidy/modernize-deprecated-headers-cxx03.cpp
  test/clang-tidy/modernize-deprecated-headers-cxx11.cpp

Index: test/clang-tidy/modernize-deprecated-headers-cxx11.cpp
===================================================================
--- test/clang-tidy/modernize-deprecated-headers-cxx11.cpp
+++ test/clang-tidy/modernize-deprecated-headers-cxx11.cpp
@@ -28,21 +28,21 @@
 #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 'complex.h'; consider using 'complex' 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
@@ -55,21 +55,18 @@
 // 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 <complex>
 // 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>
@@ -109,21 +106,21 @@
 #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 'complex.h'; consider using 'complex' 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
@@ -136,21 +133,18 @@
 // 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 <complex>
 // 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>
Index: test/clang-tidy/modernize-deprecated-headers-cxx03.cpp
===================================================================
--- test/clang-tidy/modernize-deprecated-headers-cxx03.cpp
+++ test/clang-tidy/modernize-deprecated-headers-cxx03.cpp
@@ -30,12 +30,12 @@
 #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 'complex.h'; consider using 'complex' 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
@@ -52,12 +52,11 @@
 // 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 <complex>
 // 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>
@@ -103,12 +102,12 @@
 #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 'complex.h'; consider using 'complex' 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
@@ -125,12 +124,11 @@
 // 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 <complex>
 // 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>
Index: docs/clang-tidy/checks/modernize-deprecated-headers.rst
===================================================================
--- docs/clang-tidy/checks/modernize-deprecated-headers.rst
+++ docs/clang-tidy/checks/modernize-deprecated-headers.rst
@@ -7,38 +7,40 @@
 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.
+This check replaces most of the 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>`
+The following list contains all replacements the check aims to perform.
+
+* `<assert.h>` -> `<cassert>`
+* `<complex.h>` -> `<complex>`
+* `<ctype.h>` -> `<cctype>`
+* `<errno.h>` -> `<cerrno>`
+* `<fenv.h>` -> `<cfenv>`         // deprecated since C++11
+* `<float.h>` -> `<cfloat>`
+* `<inttypes.h>` -> `<cinttypes>`
+* `<limits.h>` -> `<climits>`
+* `<locale.h>` -> `<clocale>`
+* `<math.h>` -> `<cmath>`
+* `<setjmp.h>` -> `<csetjmp>`
+* `<signal.h>` -> `<csignal>`
+* `<stdalign.h>` -> `<cstdalign>` // deprecated since C++11
+* `<stdarg.h>` -> `<cstdarg>`
+* `<stdbool.h>` -> `<cstdbool>`   // deprecated since C++11
+* `<stddef.h>` -> `<cstddef>`
+* `<stdint.h>` -> `<cstdint>
+* `<stdio.h>` -> `<cstdio>`
+* `<stdlib.h>` -> `<cstdlib>`
+* `<string.h>` -> `<cstring>`
+* `<tgmath.h>` -> `<ctgmath>`     // deprecated since C++11
+* `<time.h>` -> `<ctime>`
+* `<uchar.h>` -> `<cuchar>`       // deprecated since C++11
+* `<wchar.h>` -> `<cwchar>`
+* `<wctype.h>` -> `<cwtype>`
 
 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
Index: clang-tidy/modernize/DeprecatedHeadersCheck.cpp
===================================================================
--- clang-tidy/modernize/DeprecatedHeadersCheck.cpp
+++ clang-tidy/modernize/DeprecatedHeadersCheck.cpp
@@ -51,26 +51,33 @@
     : Check(Check), LangOpts(LangOpts) {
   for (const auto &KeyValue :
        std::vector<std::pair<llvm::StringRef, std::string>>(
-           {{"assert.h", "cassert"}, {"complex.h", "ccomplex"},
-            {"ctype.h", "cctype"},   {"errno.h", "cerrno"},
-            {"float.h", "cfloat"},   {"inttypes.h", "cinttypes"},
-            {"iso646.h", "ciso646"}, {"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"},
+           {{"assert.h", "cassert"},
+            {"complex.h", "complex"},
+            {"ctype.h", "cctype"},
+            {"errno.h", "cerrno"},
+            {"float.h", "cfloat"},
+            {"inttypes.h", "cinttypes"},
+            {"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"}})) {
     CStyledHeaderToCxx.insert(KeyValue);
   }
   // Add C++ 11 headers.
   if (LangOpts.CPlusPlus11) {
     for (const auto &KeyValue :
          std::vector<std::pair<llvm::StringRef, std::string>>(
              {{"fenv.h", "cfenv"},
-              {"stdalign.h", "cstdalign"},
-              {"stdbool.h", "cstdbool"},
               {"tgmath.h", "ctgmath"},
               {"uchar.h", "cuchar"}})) {
       CStyledHeaderToCxx.insert(KeyValue);
@@ -92,8 +99,9 @@
   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")
+    Check.diag(
+        FilenameRange.getBegin(),
+        "inclusion of deprecated C++ header '%0'; consider using '%1' instead")
         << FileName << CStyledHeaderToCxx[FileName]
         << FixItHint::CreateReplacement(FilenameRange.getAsRange(),
                                         Replacement);
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to