<div dir="ltr">Committed in r230414</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 24, 2015 at 5:09 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">REPOSITORY<br>
  rL LLVM<br>
<br>
<a href="http://reviews.llvm.org/D7655" target="_blank">http://reviews.llvm.org/D7655</a><br>
<br>
Files:<br>
  llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp<br>
  llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp<br>
<br>
Index: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp<br>
===================================================================<br>
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp<br>
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp<br>
@@ -1871,6 +1871,7 @@<br>
<span class="">       if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))  // ptr<br>
         AbbrevToUse = FUNCTION_INST_LOAD_ABBREV;<br>
     }<br>
+    Vals.push_back(VE.getTypeID(I.getType()));<br>
     Vals.push_back(Log2_32(cast<LoadInst>(I).getAlignment())+1);<br>
     Vals.push_back(cast<LoadInst>(I).isVolatile());<br>
     if (cast<LoadInst>(I).isAtomic()) {<br>
</span>@@ -2223,6 +2224,8 @@<br>
<span class="">     BitCodeAbbrev *Abbv = new BitCodeAbbrev();<br>
     Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_LOAD));<br>
     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Ptr<br>
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,    // dest ty<br>
</span>+                              VE.computeBitsRequiredForTypeIndicies()));<br>
<span class="">     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 4)); // Align<br>
     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // volatile<br>
     if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,<br>
</span>Index: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp<br>
===================================================================<br>
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp<br>
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp<br>
@@ -3574,23 +3574,36 @@<br>
<span class="">       unsigned OpNum = 0;<br>
       Value *Op;<br>
       if (getValueTypePair(Record, OpNum, NextValueNo, Op) ||<br>
-          OpNum+2 != Record.size())<br>
+          (OpNum + 2 != Record.size() && OpNum + 3 != Record.size()))<br>
         return Error("Invalid record");<br>
+<br>
+      Type *Ty = nullptr;<br>
+      if (OpNum + 3 == Record.size())<br>
+        Ty = getTypeByID(Record[OpNum++]);<br>
+<br>
</span><span class="">       unsigned Align;<br>
       if (std::error_code EC = parseAlignmentValue(Record[OpNum], Align))<br>
         return EC;<br>
       I = new LoadInst(Op, "", Record[OpNum+1], Align);<br>
+<br>
+      assert((!Ty || Ty == I->getType()) &&<br>
+             "Explicit type doesn't match pointee type of the first operand");<br>
</span><span class="">+<br>
       InstructionList.push_back(I);<br>
       break;<br>
     }<br>
     case bitc::FUNC_CODE_INST_LOADATOMIC: {<br>
        // LOADATOMIC: [opty, op, align, vol, ordering, synchscope]<br>
       unsigned OpNum = 0;<br>
       Value *Op;<br>
       if (getValueTypePair(Record, OpNum, NextValueNo, Op) ||<br>
-          OpNum+4 != Record.size())<br>
+          (OpNum + 4 != Record.size() && OpNum + 5 != Record.size()))<br>
         return Error("Invalid record");<br>
<br>
+      Type *Ty = nullptr;<br>
+      if (OpNum + 5 == Record.size())<br>
+        Ty = getTypeByID(Record[OpNum++]);<br>
+<br>
       AtomicOrdering Ordering = GetDecodedOrdering(Record[OpNum+2]);<br>
       if (Ordering == NotAtomic || Ordering == Release ||<br>
           Ordering == AcquireRelease)<br>
</span><span class="">@@ -3603,6 +3616,10 @@<br>
       if (std::error_code EC = parseAlignmentValue(Record[OpNum], Align))<br>
         return EC;<br>
       I = new LoadInst(Op, "", Record[OpNum+1], Align, Ordering, SynchScope);<br>
+<br>
+      assert((!Ty || Ty == I->getType()) &&<br>
+             "Explicit type doesn't match pointee type of the first operand");<br>
+<br>
       InstructionList.push_back(I);<br>
       break;<br>
     }<br>
<br>
</span>EMAIL PREFERENCES<br>
  <a href="http://reviews.llvm.org/settings/panel/emailpreferences/" target="_blank">http://reviews.llvm.org/settings/panel/emailpreferences/</a><br>
<br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>