Skip to content

[core] ERROR - Failed to decode insn: 0x0002: MOVE_MULTI #2755

@Ninja3047

Description

@Ninja3047

Issue details

The included java file produces this error when compiled using javac 21.0.9 from MacOS

Relevant log output or stacktrace

INFO  - progress: 0 of 1 (0%)
ERROR - Failed to decode insn: 0x0002: MOVE_MULTI in method: Minimal.setValue(long):long, file: Minimal.class
java.lang.ArrayIndexOutOfBoundsException: arraycopy: source index -1 out of bounds for object array[6]
	at java.base/java.lang.System.arraycopy(Native Method)
	at jadx.plugins.input.java.data.code.StackState.insert(StackState.java:52)
	at jadx.plugins.input.java.data.code.CodeDecodeState.insert(CodeDecodeState.java:137)
	at jadx.plugins.input.java.data.code.JavaInsnsRegister.dup2x1(JavaInsnsRegister.java:313)
	at jadx.plugins.input.java.data.code.JavaInsnData.decode(JavaInsnData.java:46)
	at jadx.core.dex.instructions.InsnDecoder.lambda$process$0(InsnDecoder.java:50)
	at jadx.plugins.input.java.data.code.JavaCodeReader.visitInstructions(JavaCodeReader.java:85)
	at jadx.core.dex.instructions.InsnDecoder.process(InsnDecoder.java:46)
	at jadx.core.dex.nodes.MethodNode.load(MethodNode.java:164)
	at jadx.core.dex.nodes.ClassNode.load(ClassNode.java:462)
	at jadx.core.ProcessClass.process(ProcessClass.java:77)
	at jadx.core.ProcessClass.generateCode(ProcessClass.java:126)
	at jadx.core.dex.nodes.ClassNode.generateClassCode(ClassNode.java:405)
	at jadx.core.dex.nodes.ClassNode.decompile(ClassNode.java:393)
	at jadx.core.dex.nodes.ClassNode.getCode(ClassNode.java:343)
	at jadx.api.JadxDecompiler.lambda$appendSourcesSave$1(JadxDecompiler.java:407)
	at jadx.core.utils.tasks.TaskExecutor.wrapTask(TaskExecutor.java:198)
	at jadx.core.utils.tasks.TaskExecutor.runStages(TaskExecutor.java:173)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
ERROR - Failed to decode insn: 0x0002: MOVE_MULTI in method: Minimal.setValue(long):long, file: Minimal.class
java.lang.ArrayIndexOutOfBoundsException: arraycopy: source index -1 out of bounds for object array[6]
	at java.base/java.lang.System.arraycopy(Native Method)
	at jadx.plugins.input.java.data.code.StackState.insert(StackState.java:52)
	at jadx.plugins.input.java.data.code.CodeDecodeState.insert(CodeDecodeState.java:137)
	at jadx.plugins.input.java.data.code.JavaInsnsRegister.dup2x1(JavaInsnsRegister.java:313)
	at jadx.plugins.input.java.data.code.JavaInsnData.decode(JavaInsnData.java:46)
	at jadx.core.dex.instructions.InsnDecoder.lambda$process$0(InsnDecoder.java:50)
	at jadx.plugins.input.java.data.code.JavaCodeReader.visitInstructions(JavaCodeReader.java:85)
	at jadx.core.dex.instructions.InsnDecoder.process(InsnDecoder.java:46)
	at jadx.core.dex.nodes.MethodNode.load(MethodNode.java:164)
	at jadx.core.codegen.MethodGen.addFallbackMethodCode(MethodGen.java:410)
	at jadx.core.codegen.MethodGen.dumpInstructions(MethodGen.java:376)
	at jadx.core.codegen.MethodGen.addInstructions(MethodGen.java:282)
	at jadx.core.codegen.ClassGen.addMethodCode(ClassGen.java:412)
	at jadx.core.codegen.ClassGen.addMethod(ClassGen.java:337)
	at jadx.core.codegen.ClassGen.lambda$addInnerClsAndMethods$3(ClassGen.java:303)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395)
	at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:261)
	at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:261)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at jadx.core.codegen.ClassGen.addInnerClsAndMethods(ClassGen.java:299)
	at jadx.core.codegen.ClassGen.addClassBody(ClassGen.java:288)
	at jadx.core.codegen.ClassGen.addClassBody(ClassGen.java:272)
	at jadx.core.codegen.ClassGen.addClassCode(ClassGen.java:159)
	at jadx.core.codegen.ClassGen.makeClass(ClassGen.java:103)
	at jadx.core.codegen.CodeGen.wrapCodeGen(CodeGen.java:45)
	at jadx.core.codegen.CodeGen.generateJavaCode(CodeGen.java:34)
	at jadx.core.codegen.CodeGen.generate(CodeGen.java:22)
	at jadx.core.ProcessClass.process(ProcessClass.java:88)
	at jadx.core.ProcessClass.generateCode(ProcessClass.java:126)
	at jadx.core.dex.nodes.ClassNode.generateClassCode(ClassNode.java:405)
	at jadx.core.dex.nodes.ClassNode.decompile(ClassNode.java:393)
	at jadx.core.dex.nodes.ClassNode.getCode(ClassNode.java:343)
	at jadx.api.JadxDecompiler.lambda$appendSourcesSave$1(JadxDecompiler.java:407)
	at jadx.core.utils.tasks.TaskExecutor.wrapTask(TaskExecutor.java:198)
	at jadx.core.utils.tasks.TaskExecutor.runStages(TaskExecutor.java:173)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
                                                             
ERROR - 2 errors occurred in following nodes:
ERROR -   Method: Minimal.setValue(long):long
ERROR - finished with errors, count: 2

Provide sample and class/method full name

public class Minimal {
    private long value;

    public long setValue(long v) {
        return this.value = v;
    }
}
public class Minimal
  minor version: 0
  major version: 65
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #8                          // Minimal
  super_class: #2                         // java/lang/Object
  interfaces: 0, fields: 1, methods: 2, attributes: 1
Constant pool:
   #1 = Methodref          #2.#3          // java/lang/Object."<init>":()V
   #2 = Class              #4             // java/lang/Object
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               java/lang/Object
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Fieldref           #8.#9          // Minimal.value:J
   #8 = Class              #10            // Minimal
   #9 = NameAndType        #11:#12        // value:J
  #10 = Utf8               Minimal
  #11 = Utf8               value
  #12 = Utf8               J
  #13 = Utf8               Code
  #14 = Utf8               LineNumberTable
  #15 = Utf8               setValue
  #16 = Utf8               (J)J
  #17 = Utf8               SourceFile
  #18 = Utf8               Minimal.java
{
  private long value;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  public Minimal();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 3: 0

  public long setValue(long);
    descriptor: (J)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=2
         0: aload_0
         1: lload_1
         2: dup2_x1
         3: putfield      #7                  // Field value:J
         6: lreturn
      LineNumberTable:
        line 8: 0
}
SourceFile: "Minimal.java"

OS: MacOS 26.2

$ javac --version
javac 21.0.9
$ javac Minimal.java
$ jadx --log-level ERROR Minimal.class

Jadx version

ad267e1

Metadata

Metadata

Assignees

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions