[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 cfe-commits@lists.llvm.org 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 cfe-commits@lists.llvm.org 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