diff options
Diffstat (limited to 'clang-tools-extra/clangd/index/CanonicalIncludes.cpp')
| -rw-r--r-- | clang-tools-extra/clangd/index/CanonicalIncludes.cpp | 19 |
1 files changed, 14 insertions, 5 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) |

