Fix PR73
authorChris Lattner <sabre@nondot.org>
Thu, 15 Jan 2004 17:55:01 +0000 (17:55 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 15 Jan 2004 17:55:01 +0000 (17:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10875 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bytecode/Reader/Reader.cpp
lib/Bytecode/Reader/ReaderInternals.h

index 508fb7730a9627ce5b055beab881c97f905b8e26..bc84135a96fa99966d0318c1ae98e842f317f222 100644 (file)
@@ -499,7 +499,8 @@ void BytecodeParser::ParseModuleGlobalInfo(const unsigned char *&Buf,
     BCR_TRACE(2, "Function of type: " << Ty << "\n");
   }
 
-  align32(Buf, End);
+  if (hasInconsistentModuleGlobalInfo)
+    align32(Buf, End);
 
   // Now that the function signature list is set up, reverse it so that we can 
   // remove elements efficiently from the back of the vector.
@@ -530,6 +531,7 @@ void BytecodeParser::ParseVersionInfo(const unsigned char *&Buf,
   hasExtendedLinkageSpecs = true;
   hasOldStyleVarargs = false;
   hasVarArgCallPadding = false;
+  hasInconsistentModuleGlobalInfo = false;
   FirstDerivedTyID = 14;
 
   switch (RevisionNum) {
@@ -539,15 +541,22 @@ void BytecodeParser::ParseVersionInfo(const unsigned char *&Buf,
     hasExtendedLinkageSpecs = false;
     hasOldStyleVarargs = true;
     hasVarArgCallPadding = true;
+    hasInconsistentModuleGlobalInfo = true;
+
     break;
   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;
   case 1:               // LLVM 1.2 release version
     // LLVM 1.2 added explicit support for emitting strings efficiently.
+
+    // Also, it fixed the problem where the size of the ModuleGlobalInfo block
+    // included the size for the alignment at the end, where the rest of the
+    // blocks did not.
     break;
 
   default:
index deb120672a1438591b61adbcea134a0c51ba40fb..d6a934da077b687bddce54c7d8bfd9f9bd06c1a5 100644 (file)
@@ -97,6 +97,10 @@ private:
 
   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
+  bool hasInconsistentModuleGlobalInfo;
+
   typedef std::vector<ValueList*> ValueTable;
   ValueTable Values;
   ValueTable ModuleValues;