pxb1988/dex2jar · error · RuntimeException

Fail on Op

Error message

Fail on Op 

What it means

Internal converter failure during dfs instruction translation in Dex2IRConverter: the dex opcode being processed fell into an unhandled case of the per-op switch, so the opcode has no IR translation implemented. The message appends the Op. It indicates either an unsupported/obsolete dalvik opcode or a version mismatch between the dex reader and the translator, not bad user input per se.

Solutions

  1. Note the Op printed in the message and report it to the dex2jar issue tracker with the input dex
  2. Upgrade to the latest dex2jar/d2j-dex2jar release, which may have added translation for that opcode
  3. As a workaround, exclude the offending class or method from translation
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at dex-translator/src/main/java/com/googlecode/d2j/converter/Dex2IRConverter.java:427 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of pxb1988/dex2jar@b5bda4fb49 (2026-09-08). Data as JSON: /api/errors/1faf6abcdd24541d. Report an issue: GitHub.

Appendix: source

Thrown at dex-translator/src/main/java/com/googlecode/d2j/converter/Dex2IRConverter.java:427

                        case GOTO_16:
                        case GOTO_32:
                            emit(nGoto(getLabel(((JumpStmtNode) p).label)));
                            break;
                        case NOP:
                            emit(nNop());
                            break;
                        case BAD_OP:
                            emit(nThrow(nInvokeNew(new Value[]{nString("bad dex opcode")}, new String[]{
                                            "Ljava/lang/String;"},
                                    "Ljava/lang/VerifyError;")));
                            break;
                        default:
                            tmp.execute(p, interpreter);
                            break;
                    }
                }
            } catch (Exception exception) {
                throw new RuntimeException("Fail on Op " + p.op + " index " + index, exception);
            }


            if (p.op != null) {
                Op op = p.op;
                if (op.canBranch()) {
                    JumpStmtNode jump = (JumpStmtNode) p;
                    int targetIndex = indexOf(jump.label);
                    stack.push(insnList.get(targetIndex));
                    merge(tmp, targetIndex);
                }
                if (op.canSwitch()) {
                    BaseSwitchStmtNode switchStmtNode = (BaseSwitchStmtNode) p;
                    for (DexLabel label : switchStmtNode.labels) {
                        int targetIndex = indexOf(label);
                        stack.push(insnList.get(targetIndex));
                        merge(tmp, targetIndex);
                    }

View on GitHub (pinned to b5bda4fb49)