<div dir="ltr">Is this covered by existing tests? (if I replaced the if/continue with assert (!= end) would it fire on the existing regression suite?)<br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 16, 2015 at 8:41 AM, Petr Pavlu via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: petr.pavlu<br>
Date: Mon Nov 16 10:41:13 2015<br>
New Revision: 253222<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=253222&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=253222&view=rev</a><br>
Log:<br>
[ARM] Prevent use of a value pointed by end() iterator when placing a jump table<br>
<br>
Function ARMConstantIslands::doInitialJumpTablePlacement() iterates over all<br>
basic blocks in a machine function. It calls `MI = MBB.getLastNonDebugInstr()`<br>
to get the last instruction in each block and then uses MI->getOpcode() to<br>
decide what to do. If getLastNonDebugInstr() returns MBB.end() (for example,<br>
when the block does not contain any instructions) then calling getOpcode() on<br>
this value is incorrect. Avoid this problem by checking the result of<br>
getLastNonDebugInstr().<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D14694" rel="noreferrer" target="_blank">http://reviews.llvm.org/D14694</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp?rev=253222&r1=253221&r2=253222&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp?rev=253222&r1=253221&r2=253222&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp Mon Nov 16 10:41:13 2015<br>
@@ -589,6 +589,8 @@ void ARMConstantIslands::doInitialJumpTa<br>
   MachineBasicBlock *LastCorrectlyNumberedBB = nullptr;<br>
   for (MachineBasicBlock &MBB : *MF) {<br>
     auto MI = MBB.getLastNonDebugInstr();<br>
+    if (MI == MBB.end())<br>
+      continue;<br>
<br>
     unsigned JTOpcode;<br>
     switch (MI->getOpcode()) {<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>