diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index 9cc24b3..16b4ee0 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -66,10 +66,17 @@
   throw std::string("Illegal type reference!");
 }
 
+static inline bool hasImplicitNull(unsigned TyID, bool EncodesPrimitiveZeros) {
+  if (!EncodesPrimitiveZeros)
+    return TyID != Type::LabelTyID && TyID != Type::TypeTyID &&
+           TyID != Type::VoidTyID;
+  return TyID >= Type::FirstDerivedTyID;
+}
+
 unsigned BytecodeParser::insertValue(Value *Val, unsigned type,
                                      ValueTable &ValueTab) {
-  assert((!isa<Constant>(Val) || Val->getType()->isPrimitiveType() ||
-          !cast<Constant>(Val)->isNullValue()) &&
+  assert((!isa<Constant>(Val) || !cast<Constant>(Val)->isNullValue()) ||
+          !hasImplicitNull(type, hasExplicitPrimitiveZeros) &&
          "Cannot read null values from bytecode!");
   assert(type != Type::TypeTyID && "Types should never be insertValue'd!");
 
@@ -88,13 +95,12 @@
   return ValueTab[type]->size()-1 + HasOffset;
 }
 
-
 Value *BytecodeParser::getValue(unsigned type, unsigned oNum, bool Create) {
   assert(type != Type::TypeTyID && "getValue() cannot get types!");
   assert(type != Type::LabelTyID && "getValue() cannot get blocks!");
   unsigned Num = oNum;
 
-  if (type >= FirstDerivedTyID) {
+  if (hasImplicitNull(type, hasExplicitPrimitiveZeros)) {
     if (Num == 0)
       return Constant::getNullValue(getType(type));
     --Num;
@@ -536,6 +542,7 @@
   hasOldStyleVarargs = false;
   hasVarArgCallPadding = false;
   hasInconsistentModuleGlobalInfo = false;
+  hasExplicitPrimitiveZeros = false;
   FirstDerivedTyID = 14;
 
   switch (RevisionNum) {
@@ -545,16 +552,15 @@
     hasExtendedLinkageSpecs = false;
     hasOldStyleVarargs = true;
     hasVarArgCallPadding = true;
-    hasInconsistentModuleGlobalInfo = true;
-
-    break;
+    // FALL THROUGH
   case 0:               //  LLVM 1.0, 1.1 release version
     // Compared to rev #2, we added support for weak linkage, a more dense
     // encoding, and better varargs support.
 
     // Base LLVM 1.0 bytecode format.
     hasInconsistentModuleGlobalInfo = true;
-    break;
+    hasExplicitPrimitiveZeros = true;
+    // FALL THROUGH
   case 1:               // LLVM 1.2 release version
     // LLVM 1.2 added explicit support for emitting strings efficiently.
 
diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h
index d6a934d..4c0b310 100644
--- a/lib/Bytecode/Reader/ReaderInternals.h
+++ b/lib/Bytecode/Reader/ReaderInternals.h
@@ -97,10 +97,16 @@
 
   bool usesOldStyleVarargs;         // Does this module USE old style varargs?
 
-  // LLVM 1.0 & 1.1 had an explicit alignment of data only for the
-  // ModuleGlobalInfo block.  This was fixed to be like all other blocks in 1.2
+  // Flags to distinguish LLVM 1.0 & 1.1 bytecode formats (revision #0)
+
+  // Revision #0 had an explicit alignment of data only for the ModuleGlobalInfo
+  // block.  This was fixed to be like all other blocks in 1.2
   bool hasInconsistentModuleGlobalInfo;
 
+  // Revision #0 also explicitly encoded zero values for primitive types like
+  // int/sbyte/etc.
+  bool hasExplicitPrimitiveZeros;
+
   typedef std::vector<ValueList*> ValueTable;
   ValueTable Values;
   ValueTable ModuleValues;
diff --git a/lib/Bytecode/Writer/SlotCalculator.cpp b/lib/Bytecode/Writer/SlotCalculator.cpp
index 766b000..2c6dd5e 100644
--- a/lib/Bytecode/Writer/SlotCalculator.cpp
+++ b/lib/Bytecode/Writer/SlotCalculator.cpp
@@ -406,6 +406,10 @@
   return doInsertValue(D);
 }
 
+static inline bool hasNullValue(unsigned TyID) {
+  return TyID != Type::LabelTyID && TyID != Type::TypeTyID &&
+         TyID != Type::VoidTyID;
+}
 
 // doInsertValue - This is a small helper function to be called only
 // be insertValue.
@@ -435,7 +439,7 @@
 
   // If this is the first value to get inserted into the type plane, make sure
   // to insert the implicit null value...
-  if (Table[Ty].empty() && Ty >= Type::FirstDerivedTyID && BuildBytecodeInfo) {
+  if (Table[Ty].empty() && BuildBytecodeInfo && hasNullValue(Ty)) {
     Value *ZeroInitializer = Constant::getNullValue(Typ);
 
     // If we are pushing zeroinit, it will be handled below.
diff --git a/lib/Bytecode/Writer/Writer.cpp b/lib/Bytecode/Writer/Writer.cpp
index 6467921..ff9e8a9 100644
--- a/lib/Bytecode/Writer/Writer.cpp
+++ b/lib/Bytecode/Writer/Writer.cpp
@@ -161,6 +161,11 @@
   }
 }
 
+static inline bool hasNullValue(unsigned TyID) {
+  return TyID != Type::LabelTyID && TyID != Type::TypeTyID &&
+         TyID != Type::VoidTyID;
+}
+
 void BytecodeWriter::outputConstants(bool isFunction) {
   ConstantTotalBytes -= Out.size();
   if (isFunction) FunctionConstantTotalBytes -= Out.size();
@@ -190,7 +195,7 @@
         if (isFunction)                  // Don't re-emit module constants
           ValNo += Table.getModuleLevel(pno);
         
-        if (pno >= Type::FirstDerivedTyID) {
+        if (hasNullValue(pno)) {
           // Skip zero initializer
           if (ValNo == 0)
             ValNo = 1;
