Fix the bug that was preventing the parser from working on all bytecode
authorReid Spencer <rspencer@reidspencer.com>
Tue, 8 Jun 2004 05:54:47 +0000 (05:54 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Tue, 8 Jun 2004 05:54:47 +0000 (05:54 +0000)
files. It was reading non-initialized global vars when the flag said it was
initialized and vice versa. Causes mis-alignment since initialized and
non-initialized constants have different bytecode lengths.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14057 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bytecode/Analyzer/Parser.cpp
lib/Bytecode/Reader/Parser.cpp

index d236b64aae25c6cbb5d858973bb790ab4d097166..45f761ea677d738288a3d7f49aba240f083246a9 100644 (file)
@@ -156,7 +156,8 @@ void AbstractBytecodeParser::ParseBasicBlock(BufPtr &Buf,
 /// ParseInstructionList - Parse all of the BasicBlock's & Instruction's in the
 /// body of a function.  In post 1.0 bytecode files, we no longer emit basic
 /// block individually, in order to avoid per-basic-block overhead.
-unsigned AbstractBytecodeParser::ParseInstructionList( BufPtr &Buf, BufPtr EndBuf) {
+unsigned AbstractBytecodeParser::ParseInstructionList( BufPtr &Buf, 
+                                                       BufPtr EndBuf) {
   unsigned BlockNo = 0;
   std::vector<unsigned> Args;
 
@@ -698,12 +699,11 @@ void AbstractBytecodeParser::ParseModuleGlobalInfo(BufPtr &Buf, BufPtr End) {
     const Type *ElTy = cast<PointerType>(Ty)->getElementType();
 
     // Create the global variable...
-    if (hasInitializer)
-      handler->handleGlobalVariable( ElTy, isConstant, Linkage );
-    else {
+    if (hasInitializer) {
       unsigned initSlot = read_vbr_uint(Buf,End);
       handler->handleInitializedGV( ElTy, isConstant, Linkage, initSlot );
-    }
+    } else 
+      handler->handleGlobalVariable( ElTy, isConstant, Linkage );
 
     // Get next item
     VarType = read_vbr_uint(Buf, End);
index d236b64aae25c6cbb5d858973bb790ab4d097166..45f761ea677d738288a3d7f49aba240f083246a9 100644 (file)
@@ -156,7 +156,8 @@ void AbstractBytecodeParser::ParseBasicBlock(BufPtr &Buf,
 /// ParseInstructionList - Parse all of the BasicBlock's & Instruction's in the
 /// body of a function.  In post 1.0 bytecode files, we no longer emit basic
 /// block individually, in order to avoid per-basic-block overhead.
-unsigned AbstractBytecodeParser::ParseInstructionList( BufPtr &Buf, BufPtr EndBuf) {
+unsigned AbstractBytecodeParser::ParseInstructionList( BufPtr &Buf, 
+                                                       BufPtr EndBuf) {
   unsigned BlockNo = 0;
   std::vector<unsigned> Args;
 
@@ -698,12 +699,11 @@ void AbstractBytecodeParser::ParseModuleGlobalInfo(BufPtr &Buf, BufPtr End) {
     const Type *ElTy = cast<PointerType>(Ty)->getElementType();
 
     // Create the global variable...
-    if (hasInitializer)
-      handler->handleGlobalVariable( ElTy, isConstant, Linkage );
-    else {
+    if (hasInitializer) {
       unsigned initSlot = read_vbr_uint(Buf,End);
       handler->handleInitializedGV( ElTy, isConstant, Linkage, initSlot );
-    }
+    } else 
+      handler->handleGlobalVariable( ElTy, isConstant, Linkage );
 
     // Get next item
     VarType = read_vbr_uint(Buf, End);