From: Ted Kremenek Date: Thu, 25 Oct 2007 18:42:52 +0000 (+0000) Subject: Added special treatment of serializing NULL pointers. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=2423e03ca804e64998df1b65f58e62b867283c92;p=oota-llvm.git Added special treatment of serializing NULL pointers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43357 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h index f5adcffe25c..164c70a9af6 100644 --- a/include/llvm/Bitcode/Deserialize.h +++ b/include/llvm/Bitcode/Deserialize.h @@ -86,6 +86,10 @@ public: template inline T* ReadOwnedPtr() { unsigned PtrId = ReadInt(); + + if (PtrId == 0) + return NULL; + T* x = SerializeTrait::Materialize(*this); RegisterPtr(PtrId,x); return x; diff --git a/include/llvm/Bitcode/Serialize.h b/include/llvm/Bitcode/Serialize.h index dc1fe646f22..72aac9d0ba4 100644 --- a/include/llvm/Bitcode/Serialize.h +++ b/include/llvm/Bitcode/Serialize.h @@ -47,7 +47,7 @@ public: template void EmitOwnedPtr(T* ptr) { EmitPtr(ptr); - SerializeTrait::Emit(*this,*ptr); + if (ptr) SerializeTrait::Emit(*this,*ptr); } void Flush() { if (inRecord()) EmitRecord(); } diff --git a/lib/Bitcode/Reader/Deserialize.cpp b/lib/Bitcode/Reader/Deserialize.cpp index febb2d7cafc..d1d6ef098f7 100644 --- a/lib/Bitcode/Reader/Deserialize.cpp +++ b/lib/Bitcode/Reader/Deserialize.cpp @@ -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) { diff --git a/lib/Bitcode/Writer/Serialize.cpp b/lib/Bitcode/Writer/Serialize.cpp index fbe1d1007c9..a1d732047a6 100644 --- a/lib/Bitcode/Writer/Serialize.cpp +++ b/lib/Bitcode/Writer/Serialize.cpp @@ -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; }