diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java index 64cd7c282a809eefd776fd6db315b89cd30e0e0d..c73b655541d814f074f7c73a539c3a64cc57cce3 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java @@ -339,7 +339,7 @@ public class BlockSplitter extends AbstractVisitor { Set toRemove = new LinkedHashSet<>(); for (BlockNode block : mth.getBasicBlocks()) { if (block.getPredecessors().isEmpty() && block != mth.getEnterBlock()) { - collectSuccessors(block, toRemove); + collectSuccessors(block, mth.getEnterBlock(), toRemove); } } if (toRemove.isEmpty()) { @@ -390,7 +390,7 @@ public class BlockSplitter extends AbstractVisitor { && !block.contains(AFlag.MTH_ENTER_BLOCK); } - private static void collectSuccessors(BlockNode startBlock, Set toRemove) { + private static void collectSuccessors(BlockNode startBlock, BlockNode methodEnterBlock, Set toRemove) { Deque stack = new ArrayDeque<>(); stack.add(startBlock); while (!stack.isEmpty()) { @@ -398,7 +398,7 @@ public class BlockSplitter extends AbstractVisitor { if (!toRemove.contains(block)) { toRemove.add(block); for (BlockNode successor : block.getSuccessors()) { - if (toRemove.containsAll(successor.getPredecessors())) { + if (successor != methodEnterBlock && toRemove.containsAll(successor.getPredecessors())) { stack.push(successor); } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestDeadBlockReferencesStart.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestDeadBlockReferencesStart.java new file mode 100644 index 0000000000000000000000000000000000000000..891dbd3e9055073bfc29dc74347841523dc48c17 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestDeadBlockReferencesStart.java @@ -0,0 +1,16 @@ +package jadx.tests.integration.others; + +import org.junit.jupiter.api.Test; + +import jadx.tests.api.SmaliTest; + +import static jadx.tests.api.utils.JadxMatchers.countString; +import static org.hamcrest.MatcherAssert.assertThat; + +public class TestDeadBlockReferencesStart extends SmaliTest { + @Test + public void test() { + String code = getClassNodeFromSmali().getCode().getCodeStr(); + assertThat(code, countString(0, "throw")); + } +} diff --git a/jadx-core/src/test/smali/others/TestDeadBlockReferencesStart.smali b/jadx-core/src/test/smali/others/TestDeadBlockReferencesStart.smali new file mode 100644 index 0000000000000000000000000000000000000000..0c93538b8ab61bdca8750ec005195c1dc1fb0a06 --- /dev/null +++ b/jadx-core/src/test/smali/others/TestDeadBlockReferencesStart.smali @@ -0,0 +1,11 @@ +.class Lothers/TestDeadBlockReferencesStart; +.super Ljava/lang/Object; + +.method public test()V + .registers 6 + + :start + return-void + + goto :start +.end method