[clang-tools-extra] [clang-tidy][NFC] Do less unnecessary work in `modernize-deprecated-headers` (PR #160967)
Victor Chernyakin via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 8 21:14:00 PDT 2025
https://github.com/localspook updated https://github.com/llvm/llvm-project/pull/160967
>From f774e44b06106660f511ca9ad2c8120ffdfce056 Mon Sep 17 00:00:00 2001
From: Victor Chernyakin <chernyakin.victor.j at outlook.com>
Date: Fri, 26 Sep 2025 16:35:02 -0700
Subject: [PATCH 1/2] [clang-tidy][NFC] Do less unnecessary work in
`modernize-deprecated-headers`
---
.../modernize/DeprecatedHeadersCheck.cpp | 76 ++++++++-----------
.../modernize/DeprecatedHeadersCheck.h | 2 +-
2 files changed, 34 insertions(+), 44 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.cpp b/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.cpp
index 9f4c215614287..01aa9feb27e57 100644
--- a/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.cpp
@@ -24,8 +24,9 @@ namespace {
class IncludeModernizePPCallbacks : public PPCallbacks {
public:
explicit IncludeModernizePPCallbacks(
- std::vector<IncludeMarker> &IncludesToBeProcessed, LangOptions LangOpts,
- const SourceManager &SM, bool CheckHeaderFile);
+ std::vector<IncludeMarker> &IncludesToBeProcessed,
+ const LangOptions &LangOpts, const SourceManager &SM,
+ bool CheckHeaderFile);
void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok,
StringRef FileName, bool IsAngled,
@@ -37,8 +38,7 @@ class IncludeModernizePPCallbacks : public PPCallbacks {
private:
std::vector<IncludeMarker> &IncludesToBeProcessed;
- LangOptions LangOpts;
- llvm::StringMap<std::string> CStyledHeaderToCxx;
+ llvm::StringMap<StringRef> CStyledHeaderToCxx;
llvm::StringSet<> DeleteHeaders;
const SourceManager &SM;
bool CheckHeaderFile;
@@ -131,48 +131,38 @@ void DeprecatedHeadersCheck::check(
}
IncludeModernizePPCallbacks::IncludeModernizePPCallbacks(
- std::vector<IncludeMarker> &IncludesToBeProcessed, LangOptions LangOpts,
- const SourceManager &SM, bool CheckHeaderFile)
- : IncludesToBeProcessed(IncludesToBeProcessed), LangOpts(LangOpts), SM(SM),
+ std::vector<IncludeMarker> &IncludesToBeProcessed,
+ const LangOptions &LangOpts, const SourceManager &SM, bool CheckHeaderFile)
+ : IncludesToBeProcessed(IncludesToBeProcessed), SM(SM),
CheckHeaderFile(CheckHeaderFile) {
- for (const auto &KeyValue :
- std::vector<std::pair<llvm::StringRef, std::string>>(
- {{"assert.h", "cassert"},
- {"complex.h", "complex"},
- {"ctype.h", "cctype"},
- {"errno.h", "cerrno"},
- {"float.h", "cfloat"},
- {"limits.h", "climits"},
- {"locale.h", "clocale"},
- {"math.h", "cmath"},
- {"setjmp.h", "csetjmp"},
- {"signal.h", "csignal"},
- {"stdarg.h", "cstdarg"},
- {"stddef.h", "cstddef"},
- {"stdio.h", "cstdio"},
- {"stdlib.h", "cstdlib"},
- {"string.h", "cstring"},
- {"time.h", "ctime"},
- {"wchar.h", "cwchar"},
- {"wctype.h", "cwctype"}})) {
+
+ static constexpr std::pair<StringRef, StringRef> CXX98Headers[] = {
+ {"assert.h", "cassert"}, {"complex.h", "complex"},
+ {"ctype.h", "cctype"}, {"errno.h", "cerrno"},
+ {"float.h", "cfloat"}, {"limits.h", "climits"},
+ {"locale.h", "clocale"}, {"math.h", "cmath"},
+ {"setjmp.h", "csetjmp"}, {"signal.h", "csignal"},
+ {"stdarg.h", "cstdarg"}, {"stddef.h", "cstddef"},
+ {"stdio.h", "cstdio"}, {"stdlib.h", "cstdlib"},
+ {"string.h", "cstring"}, {"time.h", "ctime"},
+ {"wchar.h", "cwchar"}, {"wctype.h", "cwctype"},
+ };
+ for (const auto &KeyValue : CXX98Headers)
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"},
- {"stdint.h", "cstdint"},
- {"inttypes.h", "cinttypes"},
- {"tgmath.h", "ctgmath"},
- {"uchar.h", "cuchar"}})) {
+
+ static constexpr std::pair<StringRef, StringRef> CXX11Headers[] = {
+ {"fenv.h", "cfenv"}, {"stdint.h", "cstdint"},
+ {"inttypes.h", "cinttypes"}, {"tgmath.h", "ctgmath"},
+ {"uchar.h", "cuchar"},
+ };
+ if (LangOpts.CPlusPlus11)
+ for (const auto &KeyValue : CXX11Headers)
CStyledHeaderToCxx.insert(KeyValue);
- }
- }
- for (const auto &Key :
- std::vector<std::string>({"stdalign.h", "stdbool.h", "iso646.h"})) {
+
+ static constexpr StringRef HeadersToDelete[] = {"stdalign.h", "stdbool.h",
+ "iso646.h"};
+ for (const auto &Key : HeadersToDelete)
DeleteHeaders.insert(Key);
- }
}
void IncludeModernizePPCallbacks::InclusionDirective(
@@ -205,7 +195,7 @@ void IncludeModernizePPCallbacks::InclusionDirective(
} else if (DeleteHeaders.contains(FileName)) {
IncludesToBeProcessed.emplace_back(
// NOLINTNEXTLINE(modernize-use-emplace) - false-positive
- IncludeMarker{std::string{}, FileName,
+ IncludeMarker{StringRef{}, FileName,
SourceRange{HashLoc, FilenameRange.getEnd()}, DiagLoc});
}
}
diff --git a/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.h b/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.h
index c9409cb641c54..03cf433aa2809 100644
--- a/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.h
@@ -44,7 +44,7 @@ class DeprecatedHeadersCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
struct IncludeMarker {
- std::string Replacement;
+ StringRef Replacement;
StringRef FileName;
SourceRange ReplacementRange;
SourceLocation DiagLoc;
>From 844c5a6ae656f257c8e976660acf56810cf58b0b Mon Sep 17 00:00:00 2001
From: Victor Chernyakin <chernyakin.victor.j at outlook.com>
Date: Thu, 9 Oct 2025 04:13:20 +0000
Subject: [PATCH 2/2] Prefer insert functions over raw loops
---
.../clang-tidy/modernize/DeprecatedHeadersCheck.cpp | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.cpp b/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.cpp
index 01aa9feb27e57..1de9e136c5719 100644
--- a/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/DeprecatedHeadersCheck.cpp
@@ -147,8 +147,7 @@ IncludeModernizePPCallbacks::IncludeModernizePPCallbacks(
{"string.h", "cstring"}, {"time.h", "ctime"},
{"wchar.h", "cwchar"}, {"wctype.h", "cwctype"},
};
- for (const auto &KeyValue : CXX98Headers)
- CStyledHeaderToCxx.insert(KeyValue);
+ CStyledHeaderToCxx.insert(std::begin(CXX98Headers), std::end(CXX98Headers));
static constexpr std::pair<StringRef, StringRef> CXX11Headers[] = {
{"fenv.h", "cfenv"}, {"stdint.h", "cstdint"},
@@ -156,13 +155,11 @@ IncludeModernizePPCallbacks::IncludeModernizePPCallbacks(
{"uchar.h", "cuchar"},
};
if (LangOpts.CPlusPlus11)
- for (const auto &KeyValue : CXX11Headers)
- CStyledHeaderToCxx.insert(KeyValue);
+ CStyledHeaderToCxx.insert(std::begin(CXX11Headers), std::end(CXX11Headers));
static constexpr StringRef HeadersToDelete[] = {"stdalign.h", "stdbool.h",
"iso646.h"};
- for (const auto &Key : HeadersToDelete)
- DeleteHeaders.insert(Key);
+ DeleteHeaders.insert_range(HeadersToDelete);
}
void IncludeModernizePPCallbacks::InclusionDirective(
More information about the cfe-commits
mailing list