revert r156383: removal of TYPE_CODE_FUNCTION_OLD
authorNuno Lopes <nunoplopes@sapo.pt>
Wed, 23 May 2012 15:19:39 +0000 (15:19 +0000)
committerNuno Lopes <nunoplopes@sapo.pt>
Wed, 23 May 2012 15:19:39 +0000 (15:19 +0000)
Apparently LLVM only stopped emitting this after LLVM 3.0

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

include/llvm/Bitcode/LLVMBitCodes.h
lib/Bitcode/Reader/BitcodeReader.cpp

index 56090ead8b9d9d1223f10a910c6c52e3a258b643..a8c34cb82995c06a0252ed25016c4205ec81be30 100644 (file)
@@ -90,6 +90,9 @@ namespace bitc {
     TYPE_CODE_OPAQUE   =  6,    // OPAQUE
     TYPE_CODE_INTEGER  =  7,    // INTEGER: [width]
     TYPE_CODE_POINTER  =  8,    // POINTER: [pointee type]
+
+    TYPE_CODE_FUNCTION_OLD = 9, // FUNCTION: [vararg, attrid, retty,
+                                //            paramty x N]
     
     TYPE_CODE_HALF     =  10,   // HALF
     
index 4387f09997595facc7b672217de29cc837721d02..ca935d22458785a42328390cad5efc08bcbc3c39 100644 (file)
@@ -594,6 +594,26 @@ bool BitcodeReader::ParseTypeTableBody() {
       ResultTy = PointerType::get(ResultTy, AddressSpace);
       break;
     }
+    case bitc::TYPE_CODE_FUNCTION_OLD: {
+      // FIXME: attrid is dead, remove it in LLVM 4.0
+      // FUNCTION: [vararg, attrid, retty, paramty x N]
+      if (Record.size() < 3)
+        return Error("Invalid FUNCTION type record");
+      SmallVector<Type*, 8> ArgTys;
+      for (unsigned i = 3, e = Record.size(); i != e; ++i) {
+        if (Type *T = getTypeByID(Record[i]))
+          ArgTys.push_back(T);
+        else
+          break;
+      }
+      
+      ResultTy = getTypeByID(Record[2]);
+      if (ResultTy == 0 || ArgTys.size() < Record.size()-3)
+        return Error("invalid type in function type");
+
+      ResultTy = FunctionType::get(ResultTy, ArgTys, Record[0]);
+      break;
+    }
     case bitc::TYPE_CODE_FUNCTION: {
       // FUNCTION: [vararg, retty, paramty x N]
       if (Record.size() < 2)