1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

Added special treatment of serializing NULL pointers.

llvm-svn: 43357
This commit is contained in:
Ted Kremenek 2007-10-25 18:42:52 +00:00
parent c25c4276a6
commit d29fe31fcd
4 changed files with 14 additions and 2 deletions

View File

@ -86,6 +86,10 @@ public:
template <typename T>
inline T* ReadOwnedPtr() {
unsigned PtrId = ReadInt();
if (PtrId == 0)
return NULL;
T* x = SerializeTrait<T>::Materialize(*this);
RegisterPtr(PtrId,x);
return x;

View File

@ -47,7 +47,7 @@ public:
template <typename T>
void EmitOwnedPtr(T* ptr) {
EmitPtr(ptr);
SerializeTrait<T>::Emit(*this,*ptr);
if (ptr) SerializeTrait<T>::Emit(*this,*ptr);
}
void Flush() { if (inRecord()) EmitRecord(); }

View File

@ -103,6 +103,11 @@ void Deserializer::RegisterPtr(unsigned PtrId,void* Ptr) {
void Deserializer::ReadPtr(void*& PtrRef) {
unsigned PtrId = ReadInt();
if (PtrId == 0) {
PtrRef = NULL;
return;
}
BPatchEntry& E = BPatchMap[PtrId];
if (E.Ptr == NULL) {

View File

@ -58,10 +58,13 @@ void Serializer::EmitCStr(const char* s) {
}
unsigned Serializer::getPtrId(void* ptr) {
if (!ptr)
return 0;
MapTy::iterator I = PtrMap.find(ptr);
if (I == PtrMap.end()) {
unsigned id = PtrMap.size();
unsigned id = PtrMap.size()+1;
PtrMap[ptr] = id;
return id;
}