Added special treatment of serializing NULL pointers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43357 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ted Kremenek 2007-10-25 18:42:52 +00:00
parent 2c8ca5c415
commit 2423e03ca8
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;
}