Proguard fails to inline method if method stack contains values except return one
Java class file shrinker, optimizer, obfuscator, and preverifier
Brought to you by:
guardsquare
Proguard fails to inline method if method stack contains values except return one:
Unexpected error while performing partial evaluation:
Class = [StackKt]
Method = [main([Ljava/lang/String;)V]
Exception = [java.lang.IllegalArgumentException] (Stacks have different current sizes [1] and [2])
Error: Stacks have different current sizes [1] and [2]
Bytecode
public final class StackKt {
// access flags 0x19
public final static concat(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
@Lorg/jetbrains/annotations/NotNull;() // invisible
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 1
L0
ALOAD 0
LDC "s"
INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull (Ljava/lang/Object;Ljava/lang/String;)V
ALOAD 1
LDC "z"
INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull (Ljava/lang/Object;Ljava/lang/String;)V
L1
LINENUMBER 3 L1
NEW java/lang/StringBuilder
DUP
INVOKESPECIAL java/lang/StringBuilder.<init> ()V
ALOAD 0
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
ALOAD 1
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
ARETURN
L2
LOCALVARIABLE s Ljava/lang/String; L0 L2 0
LOCALVARIABLE z Ljava/lang/String; L0 L2 1
MAXSTACK = 2
MAXLOCALS = 2
// access flags 0x1A
private final static doWork(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
L0
LINENUMBER 7 L0
ALOAD 0
ALOAD 1
IFNONNULL L1
LDC ""
ARETURN //Additional value on stack except return one!!!!!!!!!!!!!
L2
L1
ALOAD 1
L3
INVOKESTATIC StackKt.concat (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
ARETURN
L4
LOCALVARIABLE $receiver Ljava/lang/String; L0 L4 0
LOCALVARIABLE other Ljava/lang/String; L0 L4 1
MAXSTACK = 2
MAXLOCALS = 2
// access flags 0x19
public final static main([Ljava/lang/String;)V
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
L0
ALOAD 0
LDC "args"
INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull (Ljava/lang/Object;Ljava/lang/String;)V
L1
LINENUMBER 11 L1
ALOAD 0
ICONST_0
AALOAD
DUP
IFNONNULL L2
INVOKESTATIC kotlin/jvm/internal/Intrinsics.throwNpe ()V
L2
ALOAD 0
ICONST_1
AALOAD
INVOKESTATIC StackKt.doWork (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
POP
L3
LINENUMBER 12 L3
RETURN
L4
LOCALVARIABLE args [Ljava/lang/String; L0 L4 0
MAXSTACK = 3
MAXLOCALS = 1
// compiled from: stack.kt
}
Thanks. This problem has now been fixed (backported from DexGuard actually) for the upcoming ProGuard 5.3.
Where can i find builded proguard 5.3 beta package? (There is no 5.3 in beta files)