[clang-tools-extra] [include-cleaner] Respect langopts when analyzing macro names (PR #123634)
https://github.com/kadircet closed https://github.com/llvm/llvm-project/pull/123634 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] Respect langopts when analyzing macro names (PR #123634)
https://github.com/hokein approved this pull request. https://github.com/llvm/llvm-project/pull/123634 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] Respect langopts when analyzing macro names (PR #123634)
llvmbot wrote:
@llvm/pr-subscribers-clangd
Author: kadir çetinkaya (kadircet)
Changes
Fixes https://github.com/llvm/llvm-project/issues/113926.
Fixes https://github.com/llvm/llvm-project/issues/63976.
---
Full diff: https://github.com/llvm/llvm-project/pull/123634.diff
11 Files Affected:
- (modified) clang-tools-extra/clangd/Hover.cpp (+3-2)
- (modified) clang-tools-extra/clangd/index/SymbolCollector.cpp (+1-1)
- (modified)
clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
(+1-1)
- (modified) clang-tools-extra/include-cleaner/lib/Analysis.cpp (+2-2)
- (modified) clang-tools-extra/include-cleaner/lib/AnalysisInternal.h (+5-2)
- (modified) clang-tools-extra/include-cleaner/lib/FindHeaders.cpp (+4-2)
- (modified) clang-tools-extra/include-cleaner/lib/HTMLReport.cpp (+10-8)
- (modified) clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp (+8-4)
- (modified) clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp (+3-4)
- (modified) clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp
(+29-6)
- (modified) clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp
(+11-8)
``diff
diff --git a/clang-tools-extra/clangd/Hover.cpp
b/clang-tools-extra/clangd/Hover.cpp
index 5e136d0e76ece7..3ab3d890305204 100644
--- a/clang-tools-extra/clangd/Hover.cpp
+++ b/clang-tools-extra/clangd/Hover.cpp
@@ -1193,12 +1193,13 @@ void maybeAddSymbolProviders(ParsedAST &AST, HoverInfo
&HI,
include_cleaner::Symbol Sym) {
trace::Span Tracer("Hover::maybeAddSymbolProviders");
- const SourceManager &SM = AST.getSourceManager();
llvm::SmallVector RankedProviders =
- include_cleaner::headersForSymbol(Sym, SM, &AST.getPragmaIncludes());
+ include_cleaner::headersForSymbol(Sym, AST.getPreprocessor(),
+&AST.getPragmaIncludes());
if (RankedProviders.empty())
return;
+ const SourceManager &SM = AST.getSourceManager();
std::string Result;
include_cleaner::Includes ConvertedIncludes = convertIncludes(AST);
for (const auto &P : RankedProviders) {
diff --git a/clang-tools-extra/clangd/index/SymbolCollector.cpp
b/clang-tools-extra/clangd/index/SymbolCollector.cpp
index 6d0af20e31260c..1de7faf81746ee 100644
--- a/clang-tools-extra/clangd/index/SymbolCollector.cpp
+++ b/clang-tools-extra/clangd/index/SymbolCollector.cpp
@@ -888,7 +888,7 @@ void SymbolCollector::setIncludeLocation(const Symbol &S,
SourceLocation DefLoc,
// might run while parsing, rather than at the end of a translation unit.
// Hence we see more and more redecls over time.
SymbolProviders[S.ID] =
- include_cleaner::headersForSymbol(Sym, SM, Opts.PragmaIncludes);
+ include_cleaner::headersForSymbol(Sym, *PP, Opts.PragmaIncludes);
}
llvm::StringRef getStdHeader(const Symbol *S, const LangOptions &LangOpts) {
diff --git
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
index 46ca3c9d080740..c3241763237d14 100644
--- a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
+++ b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
@@ -90,7 +90,7 @@ std::string fixIncludes(const AnalysisResults &Results,
/// Returned headers are sorted by relevance, first element is the most
/// likely provider for the symbol.
llvm::SmallVector headersForSymbol(const Symbol &S,
- const SourceManager &SM,
+ const Preprocessor &PP,
const PragmaIncludes *PI);
} // namespace include_cleaner
} // namespace clang
diff --git a/clang-tools-extra/include-cleaner/lib/Analysis.cpp
b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
index e3a4834cb19aeb..a1781f4e24f2e8 100644
--- a/clang-tools-extra/include-cleaner/lib/Analysis.cpp
+++ b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
@@ -64,7 +64,7 @@ void walkUsed(llvm::ArrayRef ASTRoots,
// FIXME: Most of the work done here is repetitive. It might be useful to
// have a cache/batching.
SymbolReference SymRef{ND, Loc, RT};
- return CB(SymRef, headersForSymbol(ND, SM, PI));
+ return CB(SymRef, headersForSymbol(ND, PP, PI));
});
}
for (const SymbolReference &MacroRef : MacroRefs) {
@@ -72,7 +72,7 @@ void walkUsed(llvm::ArrayRef ASTRoots,
if (!SM.isWrittenInMainFile(SM.getSpellingLoc(MacroRef.RefLocation)) ||
shouldIgnoreMacroReference(PP, MacroRef.Target.macro()))
continue;
-CB(MacroRef, headersForSymbol(MacroRef.Target, SM, PI));
+CB(MacroRef, headersForSymbol(MacroRef.Target, PP, PI));
}
}
diff --git a/clang-tools-extra/include-cleaner/lib/AnalysisInternal.h
b/clang-tools-extra/include-cleaner/lib/AnalysisInternal.h
index cd796c2da7b805..7d170fd15014d2 100644
--- a/clang-tools-extra/include-
[clang-tools-extra] [include-cleaner] Respect langopts when analyzing macro names (PR #123634)
https://github.com/kadircet created
https://github.com/llvm/llvm-project/pull/123634
Fixes https://github.com/llvm/llvm-project/issues/113926.
Fixes https://github.com/llvm/llvm-project/issues/63976.
From 6d363897befee25fe498da24c00420777eb5958d Mon Sep 17 00:00:00 2001
From: Kadir Cetinkaya
Date: Mon, 20 Jan 2025 16:42:40 +0100
Subject: [PATCH] [include-cleaner] Respect langopts when analyzing macro names
Fixes https://github.com/llvm/llvm-project/issues/113926.
Fixes https://github.com/llvm/llvm-project/issues/63976.
---
clang-tools-extra/clangd/Hover.cpp| 5 +--
.../clangd/index/SymbolCollector.cpp | 2 +-
.../include/clang-include-cleaner/Analysis.h | 2 +-
.../include-cleaner/lib/Analysis.cpp | 4 +--
.../include-cleaner/lib/AnalysisInternal.h| 7 ++--
.../include-cleaner/lib/FindHeaders.cpp | 6 ++--
.../include-cleaner/lib/HTMLReport.cpp| 18 +-
.../include-cleaner/lib/LocateSymbol.cpp | 12 ---
.../include-cleaner/tool/IncludeCleaner.cpp | 7 ++--
.../unittests/FindHeadersTest.cpp | 35 +++
.../unittests/LocateSymbolTest.cpp| 19 +-
11 files changed, 77 insertions(+), 40 deletions(-)
diff --git a/clang-tools-extra/clangd/Hover.cpp
b/clang-tools-extra/clangd/Hover.cpp
index 5e136d0e76ece7..3ab3d890305204 100644
--- a/clang-tools-extra/clangd/Hover.cpp
+++ b/clang-tools-extra/clangd/Hover.cpp
@@ -1193,12 +1193,13 @@ void maybeAddSymbolProviders(ParsedAST &AST, HoverInfo
&HI,
include_cleaner::Symbol Sym) {
trace::Span Tracer("Hover::maybeAddSymbolProviders");
- const SourceManager &SM = AST.getSourceManager();
llvm::SmallVector RankedProviders =
- include_cleaner::headersForSymbol(Sym, SM, &AST.getPragmaIncludes());
+ include_cleaner::headersForSymbol(Sym, AST.getPreprocessor(),
+&AST.getPragmaIncludes());
if (RankedProviders.empty())
return;
+ const SourceManager &SM = AST.getSourceManager();
std::string Result;
include_cleaner::Includes ConvertedIncludes = convertIncludes(AST);
for (const auto &P : RankedProviders) {
diff --git a/clang-tools-extra/clangd/index/SymbolCollector.cpp
b/clang-tools-extra/clangd/index/SymbolCollector.cpp
index 6d0af20e31260c..1de7faf81746ee 100644
--- a/clang-tools-extra/clangd/index/SymbolCollector.cpp
+++ b/clang-tools-extra/clangd/index/SymbolCollector.cpp
@@ -888,7 +888,7 @@ void SymbolCollector::setIncludeLocation(const Symbol &S,
SourceLocation DefLoc,
// might run while parsing, rather than at the end of a translation unit.
// Hence we see more and more redecls over time.
SymbolProviders[S.ID] =
- include_cleaner::headersForSymbol(Sym, SM, Opts.PragmaIncludes);
+ include_cleaner::headersForSymbol(Sym, *PP, Opts.PragmaIncludes);
}
llvm::StringRef getStdHeader(const Symbol *S, const LangOptions &LangOpts) {
diff --git
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
index 46ca3c9d080740..c3241763237d14 100644
--- a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
+++ b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
@@ -90,7 +90,7 @@ std::string fixIncludes(const AnalysisResults &Results,
/// Returned headers are sorted by relevance, first element is the most
/// likely provider for the symbol.
llvm::SmallVector headersForSymbol(const Symbol &S,
- const SourceManager &SM,
+ const Preprocessor &PP,
const PragmaIncludes *PI);
} // namespace include_cleaner
} // namespace clang
diff --git a/clang-tools-extra/include-cleaner/lib/Analysis.cpp
b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
index e3a4834cb19aeb..a1781f4e24f2e8 100644
--- a/clang-tools-extra/include-cleaner/lib/Analysis.cpp
+++ b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
@@ -64,7 +64,7 @@ void walkUsed(llvm::ArrayRef ASTRoots,
// FIXME: Most of the work done here is repetitive. It might be useful to
// have a cache/batching.
SymbolReference SymRef{ND, Loc, RT};
- return CB(SymRef, headersForSymbol(ND, SM, PI));
+ return CB(SymRef, headersForSymbol(ND, PP, PI));
});
}
for (const SymbolReference &MacroRef : MacroRefs) {
@@ -72,7 +72,7 @@ void walkUsed(llvm::ArrayRef ASTRoots,
if (!SM.isWrittenInMainFile(SM.getSpellingLoc(MacroRef.RefLocation)) ||
shouldIgnoreMacroReference(PP, MacroRef.Target.macro()))
continue;
-CB(MacroRef, headersForSymbol(MacroRef.Target, SM, PI));
+CB(MacroRef, headersForSymbol(MacroRef.Target, PP, PI));
}
}
diff --git a/clang-tools-extra/include-cleaner/lib/AnalysisInternal.h
b/clang-tools-extra/include-cleaner/lib/AnalysisInternal.h
index cd796
