]> granicus.if.org Git - llvm/commitdiff
[FuzzMutate] Bailout from injecting into empty basic blocks.
authorIgor Laevsky <igmyrj@gmail.com>
Thu, 30 Nov 2017 15:41:58 +0000 (15:41 +0000)
committerIgor Laevsky <igmyrj@gmail.com>
Thu, 30 Nov 2017 15:41:58 +0000 (15:41 +0000)
In rare cases we can receive request to inject into completelly empty basic block. In the normal case
all basic blocks contain at least terminator instruction, but it is possible that the only instruction is
catchpad instruction which is not part of the instruction iterator. This case seems rare enough to not care
about it.
Submiting without review, since it seems almost NFC. I couldn't come up with any reasonable way to test this.

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

lib/FuzzMutate/IRMutator.cpp

index 59f94716caa0a5dda67100141002b8bfa078434e..15e7f86d1cdfc45000987e83c9f8a43663ac14f5 100644 (file)
@@ -105,6 +105,8 @@ void InjectorIRStrategy::mutate(BasicBlock &BB, RandomIRBuilder &IB) {
   SmallVector<Instruction *, 32> Insts;
   for (auto I = BB.getFirstInsertionPt(), E = BB.end(); I != E; ++I)
     Insts.push_back(&*I);
+  if (Insts.size() < 1)
+    return;
 
   // Choose an insertion point for our new instruction.
   size_t IP = uniform<size_t>(IB.Rand, 0, Insts.size() - 1);