aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Bitcode/Deserialize.h23
1 files changed, 13 insertions, 10 deletions
diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h
index 5f8e137..48f78bf 100644
--- a/include/llvm/Bitcode/Deserialize.h
+++ b/include/llvm/Bitcode/Deserialize.h
@@ -168,17 +168,20 @@ public:
}
template <typename T>
- void BatchReadOwnedPtrs(unsigned NumPtrs, T** Ptrs) {
- llvm::SmallVector<unsigned,20> PtrIDs;
- PtrIDs.reserve(NumPtrs);
-
- for (unsigned i = 0; i < NumPtrs; ++i)
- PtrIDs.push_back(ReadInt());
-
+ void BatchReadOwnedPtrs(unsigned NumPtrs, T** Ptrs, bool AutoRegister=true) {
for (unsigned i = 0; i < NumPtrs; ++i)
- Ptrs[i] = PtrIDs[i] ? SerializeTrait<T>::Materialize(*this) : NULL;
- }
-
+ reinterpret_cast<uintptr_t&>(Ptrs[i]) = ReadInt();
+
+ for (unsigned i = 0; i < NumPtrs; ++i) {
+ unsigned PtrID = reinterpret_cast<uintptr_t>(Ptrs[i]);
+ T* p = PtrID ? SerializeTrait<T>::Materialize(*this) : NULL;
+
+ if (PtrID && AutoRegister)
+ RegisterPtr(PtrID,p);
+
+ Ptrs[i] = p;
+ }
+ }
template <typename T>
void ReadPtr(T*& PtrRef, bool AllowBackpatch = true) {