From: Justin Bogner Date: Fri, 18 Apr 2014 19:57:06 +0000 (+0000) Subject: Remove OnDiskHashTable.h, since it's been moved to llvm X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=87be603c1b19f691bcb8579d74f9812ff8797026;p=clang Remove OnDiskHashTable.h, since it's been moved to llvm git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206637 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/OnDiskHashTable.h b/include/clang/Basic/OnDiskHashTable.h deleted file mode 100644 index 1a9a96abe8..0000000000 --- a/include/clang/Basic/OnDiskHashTable.h +++ /dev/null @@ -1,455 +0,0 @@ -//===--- OnDiskHashTable.h - On-Disk Hash Table Implementation --*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -/// -/// \file -/// \brief Defines facilities for reading and writing on-disk hash tables. -/// -//===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_BASIC_ON_DISK_HASH_TABLE_H -#define LLVM_CLANG_BASIC_ON_DISK_HASH_TABLE_H - -#include "clang/Basic/LLVM.h" -#include "llvm/Support/Allocator.h" -#include "llvm/Support/DataTypes.h" -#include "llvm/Support/EndianStream.h" -#include "llvm/Support/Host.h" -#include "llvm/Support/MathExtras.h" -#include "llvm/Support/raw_ostream.h" -#include -#include - -namespace clang { - -namespace io { - -typedef uint32_t Offset; - -inline void Pad(raw_ostream& Out, unsigned A) { - using namespace llvm::support; - Offset off = (Offset) Out.tell(); - for (uint32_t n = llvm::OffsetToAlignment(off, A); n; --n) - endian::Writer(Out).write(0); -} - -} // end namespace io - -template -class OnDiskChainedHashTableGenerator { - unsigned NumBuckets; - unsigned NumEntries; - llvm::BumpPtrAllocator BA; - - class Item { - public: - typename Info::key_type key; - typename Info::data_type data; - Item *next; - const uint32_t hash; - - Item(typename Info::key_type_ref k, typename Info::data_type_ref d, - Info &InfoObj) - : key(k), data(d), next(0), hash(InfoObj.ComputeHash(k)) {} - }; - - class Bucket { - public: - io::Offset off; - Item* head; - unsigned length; - - Bucket() {} - }; - - Bucket* Buckets; - -private: - void insert(Bucket* b, size_t size, Item* E) { - unsigned idx = E->hash & (size - 1); - Bucket& B = b[idx]; - E->next = B.head; - ++B.length; - B.head = E; - } - - void resize(size_t newsize) { - Bucket* newBuckets = (Bucket*) std::calloc(newsize, sizeof(Bucket)); - // Populate newBuckets with the old entries. - for (unsigned i = 0; i < NumBuckets; ++i) - for (Item* E = Buckets[i].head; E ; ) { - Item* N = E->next; - E->next = 0; - insert(newBuckets, newsize, E); - E = N; - } - - free(Buckets); - NumBuckets = newsize; - Buckets = newBuckets; - } - -public: - - void insert(typename Info::key_type_ref key, - typename Info::data_type_ref data) { - Info InfoObj; - insert(key, data, InfoObj); - } - - void insert(typename Info::key_type_ref key, - typename Info::data_type_ref data, Info &InfoObj) { - - ++NumEntries; - if (4*NumEntries >= 3*NumBuckets) resize(NumBuckets*2); - insert(Buckets, NumBuckets, new (BA.Allocate()) Item(key, data, - InfoObj)); - } - - io::Offset Emit(raw_ostream &out) { - Info InfoObj; - return Emit(out, InfoObj); - } - - io::Offset Emit(raw_ostream &out, Info &InfoObj) { - using namespace llvm::support; - endian::Writer LE(out); - - // Emit the payload of the table. - for (unsigned i = 0; i < NumBuckets; ++i) { - Bucket& B = Buckets[i]; - if (!B.head) continue; - - // Store the offset for the data of this bucket. - B.off = out.tell(); - assert(B.off && "Cannot write a bucket at offset 0. Please add padding."); - - // Write out the number of items in the bucket. - LE.write(B.length); - assert(B.length != 0 && "Bucket has a head but zero length?"); - - // Write out the entries in the bucket. - for (Item *I = B.head; I ; I = I->next) { - LE.write(I->hash); - const std::pair& Len = - InfoObj.EmitKeyDataLength(out, I->key, I->data); - InfoObj.EmitKey(out, I->key, Len.first); - InfoObj.EmitData(out, I->key, I->data, Len.second); - } - } - - // Emit the hashtable itself. - io::Pad(out, 4); - io::Offset TableOff = out.tell(); - LE.write(NumBuckets); - LE.write(NumEntries); - for (unsigned i = 0; i < NumBuckets; ++i) - LE.write(Buckets[i].off); - - return TableOff; - } - - OnDiskChainedHashTableGenerator() { - NumEntries = 0; - NumBuckets = 64; - // Note that we do not need to run the constructors of the individual - // Bucket objects since 'calloc' returns bytes that are all 0. - Buckets = (Bucket*) std::calloc(NumBuckets, sizeof(Bucket)); - } - - ~OnDiskChainedHashTableGenerator() { - std::free(Buckets); - } -}; - -template class OnDiskChainedHashTable { - const unsigned NumBuckets; - const unsigned NumEntries; - const unsigned char *const Buckets; - const unsigned char *const Base; - Info InfoObj; - -public: - typedef typename Info::internal_key_type internal_key_type; - typedef typename Info::external_key_type external_key_type; - typedef typename Info::data_type data_type; - - OnDiskChainedHashTable(unsigned NumBuckets, unsigned NumEntries, - const unsigned char *Buckets, - const unsigned char *Base, - const Info &InfoObj = Info()) - : NumBuckets(NumBuckets), NumEntries(NumEntries), Buckets(Buckets), - Base(Base), InfoObj(InfoObj) { - assert((reinterpret_cast(Buckets) & 0x3) == 0 && - "'buckets' must have a 4-byte alignment"); - } - - unsigned getNumBuckets() const { return NumBuckets; } - unsigned getNumEntries() const { return NumEntries; } - const unsigned char *getBase() const { return Base; } - const unsigned char *getBuckets() const { return Buckets; } - - bool isEmpty() const { return NumEntries == 0; } - - class iterator { - internal_key_type Key; - const unsigned char *const Data; - const unsigned Len; - Info *InfoObj; - - public: - iterator() : Data(0), Len(0) {} - iterator(const internal_key_type K, const unsigned char *D, unsigned L, - Info *InfoObj) - : Key(K), Data(D), Len(L), InfoObj(InfoObj) {} - - data_type operator*() const { return InfoObj->ReadData(Key, Data, Len); } - bool operator==(const iterator &X) const { return X.Data == Data; } - bool operator!=(const iterator &X) const { return X.Data != Data; } - }; - - iterator find(const external_key_type &EKey, Info *InfoPtr = 0) { - if (!InfoPtr) - InfoPtr = &InfoObj; - - using namespace llvm::support; - const internal_key_type &IKey = InfoObj.GetInternalKey(EKey); - unsigned KeyHash = InfoObj.ComputeHash(IKey); - - // Each bucket is just a 32-bit offset into the hash table file. - unsigned Idx = KeyHash & (NumBuckets - 1); - const unsigned char *Bucket = Buckets + sizeof(uint32_t) * Idx; - - unsigned Offset = endian::readNext(Bucket); - if (Offset == 0) - return iterator(); // Empty bucket. - const unsigned char *Items = Base + Offset; - - // 'Items' starts with a 16-bit unsigned integer representing the - // number of items in this bucket. - unsigned Len = endian::readNext(Items); - - for (unsigned i = 0; i < Len; ++i) { - // Read the hash. - uint32_t ItemHash = endian::readNext(Items); - - // Determine the length of the key and the data. - const std::pair &L = Info::ReadKeyDataLength(Items); - unsigned ItemLen = L.first + L.second; - - // Compare the hashes. If they are not the same, skip the entry entirely. - if (ItemHash != KeyHash) { - Items += ItemLen; - continue; - } - - // Read the key. - const internal_key_type &X = - InfoPtr->ReadKey((const unsigned char *const)Items, L.first); - - // If the key doesn't match just skip reading the value. - if (!InfoPtr->EqualKey(X, IKey)) { - Items += ItemLen; - continue; - } - - // The key matches! - return iterator(X, Items + L.first, L.second, InfoPtr); - } - - return iterator(); - } - - iterator end() const { return iterator(); } - - Info &getInfoObj() { return InfoObj; } - - static OnDiskChainedHashTable* Create(const unsigned char* Buckets, - const unsigned char* const Base, - const Info &InfoObj = Info()) { - using namespace llvm::support; - assert(Buckets > Base); - assert((reinterpret_cast(Buckets) & 0x3) == 0 && - "buckets should be 4-byte aligned."); - - unsigned NumBuckets = endian::readNext(Buckets); - unsigned NumEntries = endian::readNext(Buckets); - return new OnDiskChainedHashTable(NumBuckets, NumEntries, Buckets, - Base, InfoObj); - } -}; - -template -class OnDiskIterableChainedHashTable : public OnDiskChainedHashTable { - const unsigned char *Payload; - -public: - typedef OnDiskChainedHashTable base_type; - typedef typename base_type::internal_key_type internal_key_type; - typedef typename base_type::external_key_type external_key_type; - typedef typename base_type::data_type data_type; - - OnDiskIterableChainedHashTable(unsigned NumBuckets, unsigned NumEntries, - const unsigned char *Buckets, - const unsigned char *Payload, - const unsigned char *Base, - const Info &InfoObj = Info()) - : base_type(NumBuckets, NumEntries, Buckets, Base, InfoObj), - Payload(Payload) {} - - /// \brief Iterates over all of the keys in the table. - class key_iterator { - const unsigned char *Ptr; - unsigned NumItemsInBucketLeft; - unsigned NumEntriesLeft; - Info *InfoObj; - - public: - typedef external_key_type value_type; - - key_iterator(const unsigned char *const Ptr, unsigned NumEntries, - Info *InfoObj) - : Ptr(Ptr), NumItemsInBucketLeft(0), NumEntriesLeft(NumEntries), - InfoObj(InfoObj) {} - key_iterator() - : Ptr(0), NumItemsInBucketLeft(0), NumEntriesLeft(0), InfoObj(0) {} - - friend bool operator==(const key_iterator &X, const key_iterator &Y) { - return X.NumEntriesLeft == Y.NumEntriesLeft; - } - friend bool operator!=(const key_iterator &X, const key_iterator &Y) { - return X.NumEntriesLeft != Y.NumEntriesLeft; - } - - key_iterator &operator++() { // Preincrement - using namespace llvm::support; - if (!NumItemsInBucketLeft) { - // 'Items' starts with a 16-bit unsigned integer representing the - // number of items in this bucket. - NumItemsInBucketLeft = - endian::readNext(Ptr); - } - Ptr += 4; // Skip the hash. - // Determine the length of the key and the data. - const std::pair &L = Info::ReadKeyDataLength(Ptr); - Ptr += L.first + L.second; - assert(NumItemsInBucketLeft); - --NumItemsInBucketLeft; - assert(NumEntriesLeft); - --NumEntriesLeft; - return *this; - } - key_iterator operator++(int) { // Postincrement - key_iterator tmp = *this; ++*this; return tmp; - } - - value_type operator*() const { - const unsigned char *LocalPtr = Ptr; - if (!NumItemsInBucketLeft) - LocalPtr += 2; // number of items in bucket - LocalPtr += 4; // Skip the hash. - - // Determine the length of the key and the data. - const std::pair &L = - Info::ReadKeyDataLength(LocalPtr); - - // Read the key. - const internal_key_type &Key = InfoObj->ReadKey(LocalPtr, L.first); - return InfoObj->GetExternalKey(Key); - } - }; - - key_iterator key_begin() { - return key_iterator(Payload, this->getNumEntries(), &this->getInfoObj()); - } - key_iterator key_end() { return key_iterator(); } - - /// \brief Iterates over all the entries in the table, returning the data. - class data_iterator { - const unsigned char *Ptr; - unsigned NumItemsInBucketLeft; - unsigned NumEntriesLeft; - Info *InfoObj; - - public: - typedef data_type value_type; - - data_iterator(const unsigned char *const Ptr, unsigned NumEntries, - Info *InfoObj) - : Ptr(Ptr), NumItemsInBucketLeft(0), NumEntriesLeft(NumEntries), - InfoObj(InfoObj) {} - data_iterator() - : Ptr(0), NumItemsInBucketLeft(0), NumEntriesLeft(0), InfoObj(0) {} - - bool operator==(const data_iterator &X) const { - return X.NumEntriesLeft == NumEntriesLeft; - } - bool operator!=(const data_iterator &X) const { - return X.NumEntriesLeft != NumEntriesLeft; - } - - data_iterator &operator++() { // Preincrement - using namespace llvm::support; - if (!NumItemsInBucketLeft) { - // 'Items' starts with a 16-bit unsigned integer representing the - // number of items in this bucket. - NumItemsInBucketLeft = - endian::readNext(Ptr); - } - Ptr += 4; // Skip the hash. - // Determine the length of the key and the data. - const std::pair &L = Info::ReadKeyDataLength(Ptr); - Ptr += L.first + L.second; - assert(NumItemsInBucketLeft); - --NumItemsInBucketLeft; - assert(NumEntriesLeft); - --NumEntriesLeft; - return *this; - } - data_iterator operator++(int) { // Postincrement - data_iterator tmp = *this; ++*this; return tmp; - } - - value_type operator*() const { - const unsigned char *LocalPtr = Ptr; - if (!NumItemsInBucketLeft) - LocalPtr += 2; // number of items in bucket - LocalPtr += 4; // Skip the hash. - - // Determine the length of the key and the data. - const std::pair &L = - Info::ReadKeyDataLength(LocalPtr); - - // Read the key. - const internal_key_type &Key = InfoObj->ReadKey(LocalPtr, L.first); - return InfoObj->ReadData(Key, LocalPtr + L.first, L.second); - } - }; - - data_iterator data_begin() { - return data_iterator(Payload, this->getNumEntries(), &this->getInfoObj()); - } - data_iterator data_end() { return data_iterator(); } - - static OnDiskIterableChainedHashTable * - Create(const unsigned char *Buckets, const unsigned char *const Payload, - const unsigned char *const Base, const Info &InfoObj = Info()) { - using namespace llvm::support; - assert(Buckets > Base); - assert((reinterpret_cast(Buckets) & 0x3) == 0 && - "buckets should be 4-byte aligned."); - - unsigned NumBuckets = endian::readNext(Buckets); - unsigned NumEntries = endian::readNext(Buckets); - return new OnDiskIterableChainedHashTable( - NumBuckets, NumEntries, Buckets, Payload, Base, InfoObj); - } -}; - -} // end namespace clang - -#endif diff --git a/include/clang/Serialization/ASTReader.h b/include/clang/Serialization/ASTReader.h index ffd7275255..13d3ff2317 100644 --- a/include/clang/Serialization/ASTReader.h +++ b/include/clang/Serialization/ASTReader.h @@ -259,7 +259,7 @@ class ReadMethodPoolVisitor; namespace reader { class ASTIdentifierLookupTrait; /// \brief The on-disk hash table used for the DeclContext's Name lookup table. - typedef OnDiskIterableChainedHashTable + typedef llvm::OnDiskIterableChainedHashTable ASTDeclContextNameLookupTable; } diff --git a/include/clang/Serialization/Module.h b/include/clang/Serialization/Module.h index 0c551b7f4b..4952039055 100644 --- a/include/clang/Serialization/Module.h +++ b/include/clang/Serialization/Module.h @@ -23,13 +23,16 @@ #include #include +namespace llvm { +template class OnDiskChainedHashTable; +template class OnDiskIterableChainedHashTable; +} + namespace clang { class FileEntry; class DeclContext; class Module; -template class OnDiskChainedHashTable; -template class OnDiskIterableChainedHashTable; namespace serialization { @@ -50,7 +53,7 @@ struct DeclContextInfo { DeclContextInfo() : NameLookupTableData(), LexicalDecls(), NumLexicalDecls() {} - OnDiskIterableChainedHashTable + llvm::OnDiskIterableChainedHashTable *NameLookupTableData; // an ASTDeclContextNameLookupTable. const KindDeclIDPair *LexicalDecls; unsigned NumLexicalDecls; diff --git a/lib/Frontend/CacheTokens.cpp b/lib/Frontend/CacheTokens.cpp index 2cb65826ad..0d4d1c4710 100644 --- a/lib/Frontend/CacheTokens.cpp +++ b/lib/Frontend/CacheTokens.cpp @@ -17,7 +17,6 @@ #include "clang/Basic/FileManager.h" #include "clang/Basic/FileSystemStatCache.h" #include "clang/Basic/IdentifierTable.h" -#include "clang/Basic/OnDiskHashTable.h" #include "clang/Basic/SourceManager.h" #include "clang/Lex/Lexer.h" #include "clang/Lex/Preprocessor.h" @@ -26,6 +25,7 @@ #include "llvm/Support/EndianStream.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/OnDiskHashTable.h" #include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" @@ -35,12 +35,13 @@ #endif using namespace clang; -using namespace clang::io; //===----------------------------------------------------------------------===// // PTH-specific stuff. //===----------------------------------------------------------------------===// +typedef uint32_t Offset; + namespace { class PTHEntry { Offset TokenData, PPCondData; @@ -171,7 +172,7 @@ public: }; } // end anonymous namespace -typedef OnDiskChainedHashTableGenerator PTHMap; +typedef llvm::OnDiskChainedHashTableGenerator PTHMap; namespace { class PTHWriter { @@ -287,8 +288,11 @@ void PTHWriter::EmitToken(const Token& T) { PTHEntry PTHWriter::LexTokens(Lexer& L) { // Pad 0's so that we emit tokens to a 4-byte alignment. // This speed up reading them back in. - Pad(Out, 4); - Offset TokenOff = (Offset) Out.tell(); + using namespace llvm::support; + endian::Writer LE(Out); + uint32_t TokenOff = Out.tell(); + for (uint64_t N = llvm::OffsetToAlignment(TokenOff, 4); N; --N, ++TokenOff) + LE.write(0); // Keep track of matching '#if' ... '#endif'. typedef std::vector > PPCondTable; @@ -636,7 +640,7 @@ std::pair PTHWriter::EmitIdentifierTable() { PTHIdKey *IIDMap = (PTHIdKey*)calloc(idcount, sizeof(PTHIdKey)); // Create the hashtable. - OnDiskChainedHashTableGenerator IIOffMap; + llvm::OnDiskChainedHashTableGenerator IIOffMap; // Generate mapping from persistent IDs -> IdentifierInfo*. for (IDMap::iterator I = IM.begin(), E = IM.end(); I != E; ++I) { diff --git a/lib/Lex/PTHLexer.cpp b/lib/Lex/PTHLexer.cpp index 1ca16d39b4..f30e12157f 100644 --- a/lib/Lex/PTHLexer.cpp +++ b/lib/Lex/PTHLexer.cpp @@ -15,7 +15,6 @@ #include "clang/Basic/FileManager.h" #include "clang/Basic/FileSystemStatCache.h" #include "clang/Basic/IdentifierTable.h" -#include "clang/Basic/OnDiskHashTable.h" #include "clang/Basic/TokenKinds.h" #include "clang/Lex/LexDiagnostic.h" #include "clang/Lex/PTHManager.h" @@ -25,10 +24,10 @@ #include "llvm/ADT/StringMap.h" #include "llvm/Support/EndianStream.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/OnDiskHashTable.h" #include "llvm/Support/system_error.h" #include using namespace clang; -using namespace clang::io; #define DISK_TOKEN_SIZE (1+1+2+4+4) @@ -409,8 +408,8 @@ public: } // end anonymous namespace -typedef OnDiskChainedHashTable PTHFileLookup; -typedef OnDiskChainedHashTable PTHStringIdLookup; +typedef llvm::OnDiskChainedHashTable PTHFileLookup; +typedef llvm::OnDiskChainedHashTable PTHStringIdLookup; //===----------------------------------------------------------------------===// // PTHManager methods. @@ -693,7 +692,7 @@ public: }; class PTHStatCache : public FileSystemStatCache { - typedef OnDiskChainedHashTable CacheTy; + typedef llvm::OnDiskChainedHashTable CacheTy; CacheTy Cache; public: diff --git a/lib/Serialization/ASTReaderInternals.h b/lib/Serialization/ASTReaderInternals.h index fd328926eb..7f0201b916 100644 --- a/lib/Serialization/ASTReaderInternals.h +++ b/lib/Serialization/ASTReaderInternals.h @@ -14,9 +14,9 @@ #define LLVM_CLANG_SERIALIZATION_ASTREADER_INTERNALS_H #include "clang/AST/DeclarationName.h" -#include "clang/Basic/OnDiskHashTable.h" #include "clang/Serialization/ASTBitCodes.h" #include "llvm/Support/Endian.h" +#include "llvm/Support/OnDiskHashTable.h" #include #include @@ -140,7 +140,7 @@ public: /// \brief The on-disk hash table used to contain information about /// all of the identifiers in the program. -typedef OnDiskIterableChainedHashTable +typedef llvm::OnDiskIterableChainedHashTable ASTIdentifierLookupTable; /// \brief Class that performs lookup for a selector's entries in the global @@ -182,7 +182,7 @@ public: }; /// \brief The on-disk hash table used for the global method pool. -typedef OnDiskChainedHashTable +typedef llvm::OnDiskChainedHashTable ASTSelectorLookupTable; /// \brief Trait class used to search the on-disk hash table containing all of @@ -229,7 +229,7 @@ public: }; /// \brief The on-disk hash table used for known header files. -typedef OnDiskChainedHashTable +typedef llvm::OnDiskChainedHashTable HeaderFileInfoLookupTable; } // end namespace clang::serialization::reader diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp index 4e2c2e665b..cb25fe6f88 100644 --- a/lib/Serialization/ASTWriter.cpp +++ b/lib/Serialization/ASTWriter.cpp @@ -25,7 +25,6 @@ #include "clang/AST/TypeLocVisitor.h" #include "clang/Basic/FileManager.h" #include "clang/Basic/FileSystemStatCache.h" -#include "clang/Basic/OnDiskHashTable.h" #include "clang/Basic/SourceManager.h" #include "clang/Basic/SourceManagerInternals.h" #include "clang/Basic/TargetInfo.h" @@ -49,6 +48,7 @@ #include "llvm/Support/EndianStream.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/OnDiskHashTable.h" #include "llvm/Support/Path.h" #include #include @@ -1575,7 +1575,7 @@ void ASTWriter::WriteHeaderSearch(const HeaderSearch &HS, StringRef isysroot) { FilesByUID.resize(HS.header_file_size()); HeaderFileInfoTrait GeneratorTrait(*this, HS); - OnDiskChainedHashTableGenerator Generator; + llvm::OnDiskChainedHashTableGenerator Generator; SmallVector SavedStrings; unsigned NumHeaderSearchEntries = 0; for (unsigned UID = 0, LastUID = FilesByUID.size(); UID != LastUID; ++UID) { @@ -1948,7 +1948,7 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) { llvm::array_pod_sort(MacroDirectives.begin(), MacroDirectives.end(), &compareMacroDirectives); - OnDiskChainedHashTableGenerator Generator; + llvm::OnDiskChainedHashTableGenerator Generator; // Emit the macro directives as a list and associate the offset with the // identifier they belong to. @@ -2834,7 +2834,7 @@ void ASTWriter::WriteSelectors(Sema &SemaRef) { unsigned NumTableEntries = 0; // Create and write out the blob that contains selectors and the method pool. { - OnDiskChainedHashTableGenerator Generator; + llvm::OnDiskChainedHashTableGenerator Generator; ASTMethodPoolTrait Trait(*this); // Create the on-disk hash table representation. We walk through every @@ -3260,7 +3260,7 @@ void ASTWriter::WriteIdentifierTable(Preprocessor &PP, // Create and write out the blob that contains the identifier // strings. { - OnDiskChainedHashTableGenerator Generator; + llvm::OnDiskChainedHashTableGenerator Generator; ASTIdentifierTableTrait Trait(*this, PP, IdResolver, IsModule); // Look for any identifiers that were named while processing the @@ -3464,7 +3464,8 @@ ASTWriter::GenerateNameLookupTable(const DeclContext *DC, assert(!DC->LookupPtr.getInt() && "must call buildLookups first"); assert(DC == DC->getPrimaryContext() && "only primary DC has lookup table"); - OnDiskChainedHashTableGenerator Generator; + llvm::OnDiskChainedHashTableGenerator + Generator; ASTDeclContextNameLookupTrait Trait(*this); // Create the on-disk hash table representation. diff --git a/lib/Serialization/GlobalModuleIndex.cpp b/lib/Serialization/GlobalModuleIndex.cpp index 631683d92f..1649476342 100644 --- a/lib/Serialization/GlobalModuleIndex.cpp +++ b/lib/Serialization/GlobalModuleIndex.cpp @@ -13,7 +13,6 @@ #include "ASTReaderInternals.h" #include "clang/Basic/FileManager.h" -#include "clang/Basic/OnDiskHashTable.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Serialization/ASTBitCodes.h" #include "clang/Serialization/GlobalModuleIndex.h" @@ -27,6 +26,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/LockFileManager.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/OnDiskHashTable.h" #include "llvm/Support/Path.h" #include using namespace clang; @@ -115,7 +115,7 @@ public: } }; -typedef OnDiskIterableChainedHashTable +typedef llvm::OnDiskIterableChainedHashTable IdentifierIndexTable; } @@ -611,9 +611,8 @@ bool GlobalModuleIndexBuilder::loadModuleFile(const FileEntry *File) { // Handle the identifier table if (State == ASTBlock && Code == IDENTIFIER_TABLE && Record[0] > 0) { - typedef - OnDiskIterableChainedHashTable - InterestingIdentifierTable; + typedef llvm::OnDiskIterableChainedHashTable< + InterestingASTIdentifierLookupTrait> InterestingIdentifierTable; std::unique_ptr Table( InterestingIdentifierTable::Create( (const unsigned char *)Blob.data() + Record[0], @@ -718,7 +717,7 @@ void GlobalModuleIndexBuilder::writeIndex(llvm::BitstreamWriter &Stream) { // Write the identifier -> module file mapping. { - OnDiskChainedHashTableGenerator Generator; + llvm::OnDiskChainedHashTableGenerator Generator; IdentifierIndexWriterTrait Trait; // Populate the hash table.