{"record":{"id":"4c414eb4c6d7d63d","repo":"oracle/graal","slug":"unsupported-opcode-d-s-bci-d","errorCode":null,"errorMessage":"Unsupported opcode %d (%s) [bci=%d]","messagePattern":"Unsupported opcode (.+?) \\((.+?)\\) \\[bci=(.+?)\\]","errorType":"exception","errorClass":"PermanentBailoutException","httpStatus":null,"severity":"error","filePath":"compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/java/BytecodeParser.java","lineNumber":5976,"sourceCode":"            case INVOKESTATIC   : cpi = stream.readCPI(); genInvokeStatic(cpi, opcode); break;\n            case INVOKEINTERFACE: cpi = stream.readCPI(); genInvokeInterface(cpi, opcode); break;\n            case INVOKEDYNAMIC  : cpi = stream.readCPI4(); genInvokeDynamic(cpi, opcode); break;\n            case NEW            : genNewInstance(stream.readCPI()); break;\n            case NEWARRAY       : genNewPrimitiveArray(stream.readLocalIndex()); break;\n            case ANEWARRAY      : genNewObjectArray(stream.readCPI()); break;\n            case ARRAYLENGTH    : genArrayLength(); break;\n            case ATHROW         : genThrow(); break;\n            case CHECKCAST      : genCheckCast(stream.readCPI()); break;\n            case INSTANCEOF     : genInstanceOf(stream.readCPI()); break;\n            case MONITORENTER   : genMonitorEnter(frameState.pop(JavaKind.Object), stream.nextBCI()); break;\n            case MONITOREXIT    : genMonitorExit(frameState.pop(JavaKind.Object), null, stream.nextBCI(), false, true); break;\n            case MULTIANEWARRAY : genNewMultiArray(stream.readCPI()); break;\n            case IFNULL         : genIfNull(Condition.EQ); break;\n            case IFNONNULL      : genIfNull(Condition.NE); break;\n            case GOTO_W         : genGoto(); break;\n            case JSR_W          : genJsr(stream.readBranchDest()); break;\n            case BREAKPOINT     : throw new PermanentBailoutException(\"concurrent setting of breakpoint\");\n            default             : throw new PermanentBailoutException(\"Unsupported opcode %d (%s) [bci=%d]\", opcode, nameOf(opcode), bci);\n        }\n        // @formatter:on\n        // Checkstyle: resume\n    }\n\n    private void genArrayLength() {\n        ValueNode array = frameState.pop(JavaKind.Object);\n        frameState.push(JavaKind.Int, append(genArrayLength(array)));\n    }\n\n    @Override\n    public ResolvedJavaMethod getMethod() {\n        return method;\n    }\n\n    @Override\n    public Bytecode getCode() {\n        return code;","sourceCodeStart":5958,"sourceCodeEnd":5994,"githubUrl":"https://github.com/oracle/graal/blob/a66e9ccd1d7bf2552883939aa0788dfd0e294aab/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/java/BytecodeParser.java#L5958-L5994","documentation":"BytecodeParser's default dispatch case: the opcode being parsed is not one of the handled JVM bytecodes. Graal's frontend implements the JVM instruction set exhaustively; reaching the default branch means the stream contains an opcode the parser genuinely does not support (not a breakpoint — that is a separate case), so it permanently bails out with the opcode number, mnemonic, and bci.","triggerScenarios":"processBytecode hitting an opcode with no case in the switch — e.g. IMPDEP1/IMPDEP2 (0xfe/0xff, historically used by debuggers/JVMTI), or any value the parser has no handler for, at the reported bci.","commonSituations":"Debugger/agent-instrumented bytecode using implementation-specific opcodes; malformed class files with garbage opcodes; experimental or non-standard bytecode emitted by a custom language compiler targeting the JVM.","solutions":["Inspect the class file at the reported bci (javap -c) to identify the offending opcode and its origin.","Remove the instrumentation/agent that injected the non-standard opcode and recompile the class.","Regenerate the bytecode with a standard compiler so only defined JVM instructions appear."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// scan the method's bytecode for non-standard opcodes before deployment\n// (javap -c or a ClassReader walk rejecting opcodes not in the JVM spec)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate generated/obfuscated class files with a strict verifier in CI.","Never emit implementation-specific opcodes (0xfe/0xff) in shipped bytecode."],"tags":["graalvm","bytecode-parsing","unsupported-opcode","bailout"],"backgroundTag":null,"analyzedSha":"a66e9ccd1d7bf2552883939aa0788dfd0e294aab","analyzedAt":"2026-08-14T13:58:47.161Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}