[llvm-commits] CVS: llvm/lib/Bytecode/Writer/Writer.cpp

Chris Lattner lattner at cs.uiuc.edu
Thu May 22 13:37:01 PDT 2003


Changes in directory llvm/lib/Bytecode/Writer:

Writer.cpp updated: 1.33 -> 1.34

---
Log message:

Fix bug: Assembler/2003-05-03-BytecodeReaderProblem.llx
by emitting the type planes before any constants (which could be constant
expressions involving undefined types!)


---
Diffs of the changes:

Index: llvm/lib/Bytecode/Writer/Writer.cpp
diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.33 llvm/lib/Bytecode/Writer/Writer.cpp:1.34
--- llvm/lib/Bytecode/Writer/Writer.cpp:1.33	Tue Apr 22 13:15:10 2003
+++ llvm/lib/Bytecode/Writer/Writer.cpp	Thu May 22 13:35:38 2003
@@ -125,25 +125,34 @@
   BytecodeBlock CPool(BytecodeFormat::ConstantPool, Out);
 
   unsigned NumPlanes = Table.getNumPlanes();
-  
-  for (unsigned pno = 0; pno != NumPlanes; pno++) {
-    const std::vector<const Value*> &Plane = Table.getPlane(pno);
-    if (!Plane.empty()) {              // Skip empty type planes...
-      unsigned ValNo = 0;
-      if (isFunction)                 // Don't reemit module constants
-        ValNo += Table.getModuleLevel(pno);
-      else if (pno == Type::TypeTyID) // If type plane wasn't written out above
-        continue;
-
-      if (pno >= Type::FirstDerivedTyID) {
-        // Skip zero initializer
-        if (ValNo == 0)
-          ValNo = 1;
-      }
 
-      outputConstantsInPlane(Plane, ValNo); // Write out constants in the plane
+  // Output the type plane before any constants!
+  if (isFunction && NumPlanes > Type::TypeTyID) {
+    const std::vector<const Value*> &Plane = Table.getPlane(Type::TypeTyID);
+    if (!Plane.empty()) {              // Skip empty type planes...
+      unsigned ValNo = Table.getModuleLevel(Type::TypeTyID);
+      outputConstantsInPlane(Plane, ValNo);
     }
   }
+  
+  for (unsigned pno = 0; pno != NumPlanes; pno++)
+    if (pno != Type::TypeTyID) {         // Type plane handled above.
+      const std::vector<const Value*> &Plane = Table.getPlane(pno);
+      if (!Plane.empty()) {              // Skip empty type planes...
+        unsigned ValNo = 0;
+        if (isFunction)                  // Don't reemit module constants
+          ValNo += Table.getModuleLevel(pno);
+        
+        if (pno >= Type::FirstDerivedTyID) {
+          // Skip zero initializer
+          if (ValNo == 0)
+            ValNo = 1;
+        }
+        
+        // Write out constants in the plane
+        outputConstantsInPlane(Plane, ValNo);
+      }
+    }
 }
 
 void BytecodeWriter::outputModuleInfoBlock(const Module *M) {





More information about the llvm-commits mailing list