private void removeBlockAndSpecialSuccessors(int idx) {
    int minLabel = getMinimumUnreservedLabel();
    BasicBlock block = result.get(idx);
    IntList successors = block.getSuccessors();
    int sz = successors.size();

    result.remove(idx);
    resultSubroutines.remove(idx);

    for (int i = 0; i < sz; i++) {
      int label = successors.get(i);
      if (label >= minLabel) {
        idx = labelToResultIndex(label);
        if (idx < 0) {
          throw new RuntimeException("Invalid label " + Hex.u2(label));
        }
        removeBlockAndSpecialSuccessors(idx);
      }
    }
  }
Helper for {@link #addOrReplaceBlock} which recursively removes the given block and all blocks
that are (direct and indirect) successors of it whose labels indicate that they are not in the
normally-translated range.

@param idx {@code non-null;} block to remove (etc.)
android/android_framework/dex-maker/src/main/java/com/android/dx/cf/code/Ropper.java