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