diff options
Diffstat (limited to 'clang-tools-extra/clangd/index')
| -rw-r--r-- | clang-tools-extra/clangd/index/CanonicalIncludes.cpp | 19 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/index/CanonicalIncludes.h | 3 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/index/IndexAction.cpp | 2 |
3 files changed, 17 insertions, 7 deletions
diff --git a/clang-tools-extra/clangd/index/CanonicalIncludes.cpp b/clang-tools-extra/clangd/index/CanonicalIncludes.cpp index 017547ce057..55df267c4fa 100644 --- a/clang-tools-extra/clangd/index/CanonicalIncludes.cpp +++ b/clang-tools-extra/clangd/index/CanonicalIncludes.cpp @@ -86,16 +86,25 @@ collectIWYUHeaderMaps(CanonicalIncludes *Includes) { return llvm::make_unique<PragmaCommentHandler>(Includes); } -void addSystemHeadersMapping(CanonicalIncludes *Includes) { +void addSystemHeadersMapping(CanonicalIncludes *Includes, + const LangOptions &Language) { static const std::vector<std::pair<const char *, const char *>> SymbolMap = { #define SYMBOL(Name, NameSpace, Header) { #NameSpace#Name, #Header }, #include "StdSymbolMap.inc" #undef SYMBOL }; - - for (const auto &Pair : SymbolMap) - Includes->addSymbolMapping(Pair.first, Pair.second); - + static const std::vector<std::pair<const char *, const char *>> CSymbolMap = { +#define SYMBOL(Name, NameSpace, Header) { #Name, #Header }, + #include "CSymbolMap.inc" +#undef SYMBOL + }; + if (Language.CPlusPlus) { + for (const auto &Pair : SymbolMap) + Includes->addSymbolMapping(Pair.first, Pair.second); + } else if (Language.C11) { + for (const auto &Pair : CSymbolMap) + Includes->addSymbolMapping(Pair.first, Pair.second); + } // FIXME: remove the std header mapping once we support ambiguous symbols, now // it serves as a fallback to disambiguate: // - symbols with mulitiple headers (e.g. std::move) diff --git a/clang-tools-extra/clangd/index/CanonicalIncludes.h b/clang-tools-extra/clangd/index/CanonicalIncludes.h index f85b76bf2a1..4d1b8517e9a 100644 --- a/clang-tools-extra/clangd/index/CanonicalIncludes.h +++ b/clang-tools-extra/clangd/index/CanonicalIncludes.h @@ -84,7 +84,8 @@ collectIWYUHeaderMaps(CanonicalIncludes *Includes); /// - Compiler extensions, e.g. include/avx512bwintrin.h$ -> <immintrin.h> /// The mapping is hardcoded and hand-maintained, so it might not cover all /// headers. -void addSystemHeadersMapping(CanonicalIncludes *Includes); +void addSystemHeadersMapping(CanonicalIncludes *Includes, + const LangOptions &Language); } // namespace clangd } // namespace clang diff --git a/clang-tools-extra/clangd/index/IndexAction.cpp b/clang-tools-extra/clangd/index/IndexAction.cpp index d3bb8ef818a..8de0e75ab29 100644 --- a/clang-tools-extra/clangd/index/IndexAction.cpp +++ b/clang-tools-extra/clangd/index/IndexAction.cpp @@ -128,6 +128,7 @@ public: std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, llvm::StringRef InFile) override { CI.getPreprocessor().addCommentHandler(PragmaHandler.get()); + addSystemHeadersMapping(Includes.get(), CI.getLangOpts()); if (IncludeGraphCallback != nullptr) CI.getPreprocessor().addPPCallbacks( llvm::make_unique<IncludeGraphCollector>(CI.getSourceManager(), IG)); @@ -200,7 +201,6 @@ std::unique_ptr<FrontendAction> createStaticIndexingAction( Opts.RefsInHeaders = true; } auto Includes = llvm::make_unique<CanonicalIncludes>(); - addSystemHeadersMapping(Includes.get()); Opts.Includes = Includes.get(); return llvm::make_unique<IndexAction>( std::make_shared<SymbolCollector>(std::move(Opts)), std::move(Includes), |

