From 48967c6e5504c7bcb3f7a55fc3894760c62cef53 Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Tue, 13 Jun 2023 13:42:36 +0200 Subject: [PATCH] [include-cleaner] Don't apply the PreferredHeader hint for standard headers. Fixes https://github.com/llvm/llvm-project/issues/62635 Differential Revision: https://reviews.llvm.org/D152801 --- clang-tools-extra/include-cleaner/lib/FindHeaders.cpp | 4 ++++ .../include-cleaner/unittests/FindHeadersTest.cpp | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/clang-tools-extra/include-cleaner/lib/FindHeaders.cpp b/clang-tools-extra/include-cleaner/lib/FindHeaders.cpp index 1b705e1..1eff19c 100644 --- a/clang-tools-extra/include-cleaner/lib/FindHeaders.cpp +++ b/clang-tools-extra/include-cleaner/lib/FindHeaders.cpp @@ -248,6 +248,10 @@ llvm::SmallVector
headersForSymbol(const Symbol &S, // Add name match hints to deduplicated providers. llvm::StringRef SymbolName = symbolName(S); for (auto &H : Headers) { + // Don't apply name match hints to standard headers as the standard headers + // are already ranked in the stdlib mapping. + if (H.kind() == Header::Standard) + continue; if (nameMatch(SymbolName, H)) H.Hint |= Hints::PreferredHeader; } diff --git a/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp b/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp index 2efdc7e..964f4c6c 100644 --- a/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp +++ b/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp @@ -486,5 +486,16 @@ TEST_F(HeadersForSymbolTest, AmbiguousStdSymbols) { } } +TEST_F(HeadersForSymbolTest, StandardHeaders) { + Inputs.Code = "void assert();"; + buildAST(); + EXPECT_THAT( + headersFor("assert"), + // Respect the ordering from the stdlib mapping. + UnorderedElementsAre(tooling::stdlib::Header::named(""), + tooling::stdlib::Header::named(""))); +} + + } // namespace } // namespace clang::include_cleaner -- 2.7.4