hokein created this revision. hokein added a reviewer: kadircet. Herald added subscribers: arphaman, mgrang. Herald added a project: All. hokein requested review of this revision. Herald added subscribers: MaskRay, ilya-biryukov. Herald added a project: clang-tools-extra.
Replace them with the library APIs. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D143274 Files: clang-tools-extra/clangd/index/CanonicalIncludes.cpp clang-tools-extra/clangd/index/StdLib.cpp
Index: clang-tools-extra/clangd/index/StdLib.cpp =================================================================== --- clang-tools-extra/clangd/index/StdLib.cpp +++ clang-tools-extra/clangd/index/StdLib.cpp @@ -22,6 +22,7 @@ #include "clang/Basic/LangOptions.h" #include "clang/Frontend/CompilerInvocation.h" #include "clang/Lex/PreprocessorOptions.h" +#include "clang/Tooling/Inclusions/StandardLibrary.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/MemoryBuffer.h" @@ -67,7 +68,7 @@ } std::string buildUmbrella(llvm::StringLiteral Mandatory, - std::vector<llvm::StringLiteral> Headers) { + llvm::ArrayRef<tooling::stdlib::Header> Headers) { std::string Result; llvm::raw_string_ostream OS(Result); @@ -80,13 +81,11 @@ "#endif\n", Mandatory); - llvm::sort(Headers); - auto Last = std::unique(Headers.begin(), Headers.end()); - for (auto Header = Headers.begin(); Header != Last; ++Header) { + for (auto Header : Headers) { OS << llvm::formatv("#if __has_include({0})\n" "#include {0}\n" "#endif\n", - *Header); + Header); } OS.flush(); return Result; @@ -102,20 +101,14 @@ Lang L = langFromOpts(LO); switch (L) { case CXX: - static std::string *UmbrellaCXX = - new std::string(buildUmbrella(mandatoryHeader(L), { -#define SYMBOL(Name, NameSpace, Header) #Header, -#include "clang/Tooling/Inclusions/StdSymbolMap.inc" -#undef SYMBOL - })); + static std::string *UmbrellaCXX = new std::string(buildUmbrella( + mandatoryHeader(L), + tooling::stdlib::Header::all(tooling::stdlib::Lang::CXX))); return *UmbrellaCXX; case C: - static std::string *UmbrellaC = - new std::string(buildUmbrella(mandatoryHeader(L), { -#define SYMBOL(Name, NameSpace, Header) #Header, -#include "clang/Tooling/Inclusions/CSymbolMap.inc" -#undef SYMBOL - })); + static std::string *UmbrellaC = new std::string( + buildUmbrella(mandatoryHeader(L), + tooling::stdlib::Header::all(tooling::stdlib::Lang::C))); return *UmbrellaC; } llvm_unreachable("invalid Lang in langFromOpts"); @@ -141,13 +134,10 @@ static auto &StandardHeaders = *[] { auto *Set = new llvm::DenseSet<llvm::StringRef>(); - for (llvm::StringRef Header : { -#define SYMBOL(Name, NameSpace, Header) #Header, -#include "clang/Tooling/Inclusions/CSymbolMap.inc" -#include "clang/Tooling/Inclusions/StdSymbolMap.inc" -#undef SYMBOL - }) - Set->insert(Header); + for (auto Header : tooling::stdlib::Header::all(tooling::stdlib::Lang::CXX)) + Set->insert(Header.name()); + for (auto Header : tooling::stdlib::Header::all(tooling::stdlib::Lang::C)) + Set->insert(Header.name()); return Set; }(); Index: clang-tools-extra/clangd/index/CanonicalIncludes.cpp =================================================================== --- clang-tools-extra/clangd/index/CanonicalIncludes.cpp +++ clang-tools-extra/clangd/index/CanonicalIncludes.cpp @@ -10,6 +10,7 @@ #include "Headers.h" #include "clang/Basic/FileEntry.h" #include "clang/Tooling/Inclusions/HeaderAnalysis.h" +#include "clang/Tooling/Inclusions/StandardLibrary.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/FileSystem/UniqueID.h" #include "llvm/Support/Path.h" @@ -733,24 +734,24 @@ void CanonicalIncludes::addSystemHeadersMapping(const LangOptions &Language) { if (Language.CPlusPlus) { - static const auto *Symbols = new llvm::StringMap<llvm::StringRef>({ -#define SYMBOL(Name, NameSpace, Header) {#NameSpace #Name, #Header}, -#include "clang/Tooling/Inclusions/StdSymbolMap.inc" - // There are two std::move()s, this is by far the most common. - SYMBOL(move, std::, <utility>) - // There are multiple headers for size_t, pick one. - SYMBOL(size_t, std::, <cstddef>) -#undef SYMBOL - }); + static const auto *Symbols = []() { + auto *Result = new llvm::StringMap<llvm::StringRef>( + {// There are two std::move()s, this is by far the most common. + {"std::move", "<utility>"}, + // There are multiple headers for size_t, pick one. + {"std::size_t", "<cstddef>"}}); + for (auto Sym : tooling::stdlib::Symbol::all(tooling::stdlib::Lang::CXX)) + Result->try_emplace(Sym.qualified_name(), Sym.header().name()); + return Result; + }(); StdSymbolMapping = Symbols; } else if (Language.C11) { - static const auto *CSymbols = new llvm::StringMap<llvm::StringRef>({ -#define SYMBOL(Name, NameSpace, Header) {#Name, #Header}, -#include "clang/Tooling/Inclusions/CSymbolMap.inc" - // There are multiple headers for size_t, pick one. - SYMBOL(size_t, None, <stddef.h>) -#undef SYMBOL - }); + static const auto *CSymbols = []() { + auto *Result = new llvm::StringMap<llvm::StringRef>(); + for (auto Sym : tooling::stdlib::Symbol::all(tooling::stdlib::Lang::C)) + Result->try_emplace(Sym.qualified_name(), Sym.header().name()); + return Result; + }(); StdSymbolMapping = CSymbols; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits