diff options
-rw-r--r-- | include/llvm/Bitcode/Deserialize.h | 24 | ||||
-rw-r--r-- | lib/Bitcode/Reader/Deserialize.cpp | 10 |
2 files changed, 27 insertions, 7 deletions
diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h index d8e3b38f4e..f69bdffad2 100644 --- a/include/llvm/Bitcode/Deserialize.h +++ b/include/llvm/Bitcode/Deserialize.h @@ -240,10 +240,28 @@ public: ReadPtr(const_cast<T*&>(PtrRef), AllowBackpatch); } + + template <typename T> + void ReadPtr(T*& PtrRef, const SerializedPtrID& PtrID, bool AllowBackpatch = true) { + ReadUIntPtr(reinterpret_cast<uintptr_t&>(PtrRef), PtrID, AllowBackpatch); + } + + template <typename T> + void ReadPtr(const T*& PtrRef, const SerializedPtrID& PtrID, + bool AllowBackpatch = true) { + + ReadPtr(const_cast<T*&>(PtrRef), PtrID, AllowBackpatch); + } + template <typename T> T* ReadPtr() { T* x; ReadPtr<T>(x,false); return x; } - void ReadUIntPtr(uintptr_t& PtrRef, bool AllowBackpatch = true); + void ReadUIntPtr(uintptr_t& PtrRef, const SerializedPtrID& PtrID, + bool AllowBackpatch = true); + + void ReadUIntPtr(uintptr_t& PtrRef, bool AllowBackpatch = true) { + ReadUIntPtr(PtrRef,ReadPtrID(),AllowBackpatch); + } template <typename T> T& ReadRef() { @@ -251,7 +269,7 @@ public: return *p; } - void RegisterPtr(SerializedPtrID PtrId, const void* Ptr); + void RegisterPtr(const SerializedPtrID& PtrID, const void* Ptr); void RegisterPtr(const void* Ptr) { RegisterPtr(ReadPtrID(),Ptr); @@ -263,7 +281,7 @@ public: } template<typename T> - void RegisterRef(SerializedPtrID PtrID, const T& x) { + void RegisterRef(const SerializedPtrID& PtrID, const T& x) { RegisterPtr(PtrID,&x); } diff --git a/lib/Bitcode/Reader/Deserialize.cpp b/lib/Bitcode/Reader/Deserialize.cpp index 2e8b4ef08c..ea6b27a62e 100644 --- a/lib/Bitcode/Reader/Deserialize.cpp +++ b/lib/Bitcode/Reader/Deserialize.cpp @@ -324,7 +324,9 @@ void Deserializer::ReadCStr(std::vector<char>& buff, bool isNullTerm) { buff.push_back('\0'); } -void Deserializer::RegisterPtr(SerializedPtrID PtrId, const void* Ptr) { +void Deserializer::RegisterPtr(const SerializedPtrID& PtrId, + const void* Ptr) { + MapTy::value_type& E = BPatchMap.FindAndConstruct(BPKey(PtrId)); assert (!HasFinalPtr(E) && "Pointer already registered."); @@ -336,9 +338,9 @@ void Deserializer::RegisterPtr(SerializedPtrID PtrId, const void* Ptr) { SetPtr(E,Ptr); } -void Deserializer::ReadUIntPtr(uintptr_t& PtrRef, bool AllowBackpatch) { - SerializedPtrID PtrId = ReadPtrID(); - +void Deserializer::ReadUIntPtr(uintptr_t& PtrRef, + const SerializedPtrID& PtrId, + bool AllowBackpatch) { if (PtrId == 0) { PtrRef = 0; return; |