diff options
author | Chuanqi Xu <yedeng.yd@linux.alibaba.com> | 2024-08-28 15:45:02 +0800 |
---|---|---|
committer | Chuanqi Xu <yedeng.yd@linux.alibaba.com> | 2024-08-28 15:45:02 +0800 |
commit | 89a8d1bfc0c40a2afe5276858b4a2961c62c5e4e (patch) | |
tree | f8f6b9bd304a4aaf5a3508b44428f0baf5b4f7e8 | |
parent | 88c9d8c05b97ad0c7cc1521ff9ba171504da1531 (diff) | |
download | llvm-users/ChuanqiXu9/D41416_on_disk_hash_table_polishing.zip llvm-users/ChuanqiXu9/D41416_on_disk_hash_table_polishing.tar.gz llvm-users/ChuanqiXu9/D41416_on_disk_hash_table_polishing.tar.bz2 |
Do not omit data from imported modules with same keyusers/ChuanqiXu9/D41416_on_disk_hash_table_polishing
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Serialization/MultiOnDiskHashTable.h | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 0b0c555..e07cc26 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -4245,7 +4245,11 @@ void ASTWriter::GenerateSpecializationInfoLookupTable( auto *Lookups = Chain ? Chain->getLoadedSpecializationsLookupTables(D) : nullptr; - Generator.emit(LookupTable, Trait, Lookups ? &Lookups->Table : nullptr); + // We can't OmitDataWithSameKeyInBase since the lazy load specialization + // mechanism assumes that different specializations can share the same + // hash key. + Generator.emit(LookupTable, Trait, Lookups ? &Lookups->Table : nullptr, + /*OmitDataWithSameKeyInBase=*/false); } uint64_t ASTWriter::WriteSpecializationInfoLookupTable( diff --git a/clang/lib/Serialization/MultiOnDiskHashTable.h b/clang/lib/Serialization/MultiOnDiskHashTable.h index a0d75ec..76910f4 100644 --- a/clang/lib/Serialization/MultiOnDiskHashTable.h +++ b/clang/lib/Serialization/MultiOnDiskHashTable.h @@ -306,7 +306,7 @@ public: } void emit(llvm::SmallVectorImpl<char> &Out, WriterInfo &Info, - const BaseTable *Base) { + const BaseTable *Base, bool OmitDataWithSameKeyInBase = true) { using namespace llvm::support; llvm::raw_svector_ostream OutStream(Out); @@ -326,7 +326,7 @@ public: // Add all merged entries from Base to the generator. for (auto &KV : Merged->Data) { - if (!Gen.contains(KV.first, Info)) + if (!OmitDataWithSameKeyInBase || !Gen.contains(KV.first, Info)) Gen.insert(KV.first, Info.ImportData(KV.second), Info); } } else { |