[PATCH] D13666: Add an (optional) identification block in the bitcode

Chandler Carruth via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 14 13:49:27 PDT 2015


chandlerc added a comment.

Most of my comments are pretty high-level. I'd imagine Duncan is in a much better position to check the actual bitcode side of it. =]


================
Comment at: include/llvm/Bitcode/LLVMBitCodes.h:37-39
@@ -36,3 +36,5 @@
 
-    UNUSED_ID1,
+    // Block intended to contains a single string identifying the bitcode
+    // producer. Can be used to debug error while parsing the bitcode.
+    IDENTIFICATION_BLOCK_ID,
 
----------------
Stale comment?

Also "Can be used to provide better error messages when we fail to parse a bitcode file." maybe?

================
Comment at: include/llvm/Bitcode/LLVMBitCodes.h:55-60
@@ -52,1 +54,8 @@
 
+  // Idenfitication block contains a string that describes the producer details,
+  // and an epoch that defines the auto-upgrade capability.
+  enum IdentificationCodes {
+    IDENTIFICATION_CODE_STRING = 1,    // IDENTIFICATION:      [strchr x N]
+    IDENTIFICATION_CODE_EPOCH  = 2,    // EPOCH:               [epoch#]
+  };
+
----------------
Is there a better name here than "identification"? I'm not coming up with one... Any ideas Duncan?

================
Comment at: include/llvm/Bitcode/LLVMBitCodes.h:62-67
@@ -53,1 +61,8 @@
+
+// The epoch that defines the auto-upgrade compatibility for the bitcode.
+//
+// The reader accepts only bitcode with the same epoch, except for the X.0
+// release which accepts as well N-1.
+// FIXME: where to put this define?
+#define BITCODE_CURRENT_EPOCH 1
 
----------------
I would start at 0 and define missing == 0. I would also document that property.

I think we should also spell out in a bit more detail that this is rev-ed with the major version of LLVM.

Nits:
Maybe "... which also accepts N-1."?
Use an anonymous enum rather than a macro?

================
Comment at: lib/Bitcode/Reader/BitcodeReader.cpp:278-280
@@ -275,1 +277,5 @@
 private:
+  /// Parse the "IDENTIFICATION_BLOCK_ID" block and populate the
+  /// ProducerIdentification data member.
+  std::error_code parseBitcodeVersion();
+
----------------
It also does basic Epoch enforcement...

================
Comment at: lib/Bitcode/Reader/BitcodeReader.cpp:3115
@@ +3114,3 @@
+        if (epoch != BITCODE_CURRENT_EPOCH) {
+          return error("Incompatible epoch");
+        }
----------------
Can we provide a bit more detail here, much like you do above?


http://reviews.llvm.org/D13666





More information about the llvm-commits mailing list